+static void eval_bitmaps()
+{
+ uint16_t free_b = 0, err_b = 0, mask;
+ uint8_t i;
+
+ for (i = 0; i < N_SENSORS; i++) {
+ mask = 1 << i;
+
+ if (thresholds[i]) {
+ if (distances[i] == -1 || distances[i] == 0) {
+ err_b |= mask;
+ } else if (distances[i] > thresholds[i]) {
+ free_b |= mask;
+ }
+ }
+ }
+
+ free_bitmap = free_b;
+ err_bitmap = err_b;
+
+ if (led1_sensors) {
+ if (led1_sensors & free_bitmap) {
+ led_set(0, 1);
+ } else {
+ led_set(0, 0);
+ }
+ }
+
+ if (led2_sensors) {
+ if (led2_sensors & free_bitmap) {
+ led_set(1, 1);
+ } else {
+ led_set(1, 0);
+ }
+ }
+}
+
+uint8_t hold_reg_is_valid(uint16_t reg, uint16_t val)
+{
+ if (reg == MB_HOLD_REGS_BASE)
+ return val > 0 && val <= 247;
+
+ return 1;
+}
+