X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=firmware%2Ffirmware.c;h=7fbcdf18601b65f661edfb46b9cced58d937a72a;hb=74ebbcd6ab77d57804b3548e1efa2ff86228e4be;hp=3554dcc768e38e6deda7bdd7fe5fb8459e52a2c2;hpb=b6aa72c62905573d4558d11973b5180e112f44d8;p=openparking.git diff --git a/firmware/firmware.c b/firmware/firmware.c index 3554dcc..7fbcdf1 100644 --- a/firmware/firmware.c +++ b/firmware/firmware.c @@ -19,11 +19,14 @@ #define thresholds (hold_regs+1) #define led1_sensors (hold_regs[13]) #define led2_sensors (hold_regs[14]) +#define long_as_free (hold_regs[15]) +#define long_thr (hold_regs[16]) #define led_bitmap (hold_regs[MB_N_HOLD_REGS_EEPROM]) #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 long_bitmap (hold_regs[MB_N_HOLD_REGS_EEPROM+15]) #define max_distances (hold_regs+MB_N_HOLD_REGS_EEPROM+21) #define err_counts (hold_regs+MB_N_HOLD_REGS_EEPROM+41) @@ -126,7 +129,8 @@ static void do_measurement(unsigned char trig) } /* * If the echo pulse is too long, do not treat it - * as error, just count it as maximum length. + * as error, just count it as maximum length + * and notify the state in the bitmap. */ distances[off] = now - starttimes[i]; } @@ -195,7 +199,7 @@ static void leds_update() static void eval_bitmaps() { - uint16_t free_b = 0, err_b = 0, mask; + uint16_t free_b = 0, err_b = 0, long_b = 0, mask; uint8_t i; for (i = 0; i < N_SENSORS; i++) { @@ -205,13 +209,21 @@ static void eval_bitmaps() if (distances[i] == -1) { err_b |= mask; } else if (distances[i] > thresholds[i]) { - free_b |= mask; + if (long_thr && distances[i] > long_thr) { + long_b |= mask; + if (long_as_free & mask) { + free_b |= mask; + } + } else { + free_b |= mask; + } } } } free_bitmap = free_b; err_bitmap = err_b; + long_bitmap = long_b; if (led1_sensors) { if (led1_sensors & err_bitmap) {