]> www.fi.muni.cz Git - openparking.git/blobdiff - firmware/firmware.c
Maximum distances as modbus registers
[openparking.git] / firmware / firmware.c
index c9c4317db1de3d1571498dde1ee45f975488aca4..f890c15c9608429926a555adf0709d9bf2134090 100644 (file)
@@ -5,8 +5,8 @@
 #include "clock.h"
 #include "modbus.h"
 
-#define ECHO_TIMEOUT           (CLOCK_HZ/20)   // 50 ms
-#define MEASUREMENT_WAIT       (4*ECHO_TIMEOUT)
+#define ECHO_TIMEOUT           (CLOCK_HZ/10)   // 100 ms
+#define MEASUREMENT_WAIT       (2*ECHO_TIMEOUT)
 #define MEASUREMENT_SHIFT      2               // running avg (1 << M_SHIFT)
 
 #define N_TRIGGERS 3
@@ -24,6 +24,7 @@
 #define distances      (hold_regs+MB_N_HOLD_REGS_EEPROM+1)
 #define free_bitmap    (hold_regs[MB_N_HOLD_REGS_EEPROM+13])
 #define err_bitmap     (hold_regs[MB_N_HOLD_REGS_EEPROM+14])
+#define max_distances  (hold_regs+MB_N_HOLD_REGS_EEPROM+21)
 
 static void pull_trigger(uint8_t trig)
 {
@@ -78,6 +79,9 @@ static void do_measurement(unsigned char trig)
                                new_d = now - starttimes[i];
                                old_d = distances[idx];
 
+                               if (new_d > max_distances[idx])
+                                       max_distances[idx] = new_d;
+
                                if (old_d == 0
                                        || old_d == -1) {
                                        distances[idx] = new_d;