summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
a54aac3)
When the firing button is pressed while unarmed, show the telefire
battery voltage in the display.
Signed-off-by: Keith Packard <keithp@keithp.com>
static uint8_t ao_lco_valid;
static uint8_t ao_lco_got_channels;
static uint16_t ao_lco_tick_offset;
static uint8_t ao_lco_valid;
static uint8_t ao_lco_got_channels;
static uint16_t ao_lco_tick_offset;
+static uint8_t ao_lco_show_voltage;
static struct ao_pad_query ao_pad_query;
static struct ao_pad_query ao_pad_query;
ao_seven_segment_set(AO_LCO_BOX_DIGIT_10, box / 10);
}
ao_seven_segment_set(AO_LCO_BOX_DIGIT_10, box / 10);
}
+static void
+ao_lco_set_voltage(uint16_t decivolts)
+{
+ uint8_t tens, ones, tenths;
+
+ tenths = decivolts % 10;
+ ones = (decivolts / 10) % 10;
+ tens = (decivolts / 100) % 10;
+ ao_seven_segment_set(AO_LCO_PAD_DIGIT, tenths);
+ ao_seven_segment_set(AO_LCO_BOX_DIGIT_1, ones | 0x10);
+ ao_seven_segment_set(AO_LCO_BOX_DIGIT_10, tens);
+}
+
#define MASK_SIZE(n) (((n) + 7) >> 3)
#define MASK_ID(n) ((n) >> 3)
#define MASK_SHIFT(n) ((n) & 7)
#define MASK_SIZE(n) (((n) + 7) >> 3)
#define MASK_ID(n) ((n) >> 3)
#define MASK_SHIFT(n) ((n) & 7)
} while (!ao_lco_pad_present(new_pad));
if (new_pad != ao_lco_pad) {
ao_lco_pad = new_pad;
} while (!ao_lco_pad_present(new_pad));
if (new_pad != ao_lco_pad) {
ao_lco_pad = new_pad;
+ ao_lco_set_box(ao_lco_box);
ao_lco_set_pad(ao_lco_pad);
}
}
ao_lco_set_pad(ao_lco_pad);
}
}
ao_lco_box = new_box;
ao_lco_got_channels = 0;
ao_lco_set_box(ao_lco_box);
ao_lco_box = new_box;
ao_lco_got_channels = 0;
ao_lco_set_box(ao_lco_box);
+ ao_lco_set_pad(ao_lco_pad);
case AO_BUTTON_FIRE:
if (ao_lco_armed) {
ao_lco_firing = event.value;
case AO_BUTTON_FIRE:
if (ao_lco_armed) {
ao_lco_firing = event.value;
+ ao_lco_show_voltage = 0;
PRINTD("Firing %d\n", ao_lco_firing);
ao_wakeup(&ao_lco_armed);
PRINTD("Firing %d\n", ao_lco_firing);
ao_wakeup(&ao_lco_armed);
+ } else {
+ if (event.value) {
+ if (ao_lco_got_channels)
+ ao_lco_set_voltage(ao_pad_query.battery);
+ } else {
+ ao_lco_set_box(ao_lco_box);
+ ao_lco_set_pad(ao_lco_pad);
+ }
+ ao_lco_show_voltage = event.value;
ao_lco_valid = 1;
if (!c) {
ao_lco_pad = ao_lco_pad_first();
ao_lco_valid = 1;
if (!c) {
ao_lco_pad = ao_lco_pad_first();
- ao_lco_set_pad(ao_lco_pad);
+ if (!ao_lco_show_voltage)
+ ao_lco_set_pad(ao_lco_pad);
+ if (ao_lco_show_voltage)
+ ao_lco_set_voltage(ao_pad_query.battery);
query.igniter_status[2],
query.igniter_status[3]);
#endif
query.igniter_status[2],
query.igniter_status[3]);
#endif
+ PRINTD("ao_lco_update valid %d\n", ao_lco_valid);
ao_wakeup(&ao_pad_query);
}
ao_wakeup(&ao_pad_query);
}
int8_t r;
int8_t try;
uint8_t box;
int8_t r;
int8_t try;
uint8_t box;
ao_lco_box_reset_present();
ao_lco_box_reset_present();
for (box = 0; box < AO_PAD_MAX_BOXES; box++) {
if ((box % 10) == 0)
ao_lco_set_box(box);
for (box = 0; box < AO_PAD_MAX_BOXES; box++) {
if ((box % 10) == 0)
ao_lco_set_box(box);
r = ao_lco_query(box, &ao_pad_query, &tick_offset);
PRINTD("box %d result %d\n", box, r);
if (r == AO_RADIO_CMAC_OK) {
r = ao_lco_query(box, &ao_pad_query, &tick_offset);
PRINTD("box %d result %d\n", box, r);
if (r == AO_RADIO_CMAC_OK) {
ao_lco_box_set_present(box);
ao_lco_box_set_present(box);
+ ao_lco_set_pad((boxes % 10) - 1);
ao_delay(AO_MS_TO_TICKS(30));
break;
}
ao_delay(AO_MS_TO_TICKS(30));
break;
}
for (;;) {
ao_sleep(&ao_pad_query);
for (;;) {
ao_sleep(&ao_pad_query);
+ PRINTD("RSSI %d VALID %d\n", ao_radio_cmac_rssi, ao_lco_valid);
if (!ao_lco_valid) {
ao_led_on(AO_LED_RED);
ao_led_off(AO_LED_GREEN|AO_LED_AMBER);
continue;
}
if (!ao_lco_valid) {
ao_led_on(AO_LED_RED);
ao_led_off(AO_LED_GREEN|AO_LED_AMBER);
continue;
}
- PRINTD("RSSI %d\n", ao_radio_cmac_rssi);
if (ao_radio_cmac_rssi < -90) {
ao_led_on(AO_LED_AMBER);
ao_led_off(AO_LED_RED|AO_LED_GREEN);
if (ao_radio_cmac_rssi < -90) {
ao_led_on(AO_LED_AMBER);
ao_led_off(AO_LED_RED|AO_LED_GREEN);
if (!ao_lco_valid)
ao_lco_update();
ao_lco_arm(ao_lco_box, 1 << ao_lco_pad, ao_lco_tick_offset);
if (!ao_lco_valid)
ao_lco_update();
ao_lco_arm(ao_lco_box, 1 << ao_lco_pad, ao_lco_tick_offset);
+ ao_delay(AO_MS_TO_TICKS(30));
ao_lco_update();
} else {
ao_lco_update();
ao_lco_update();
} else {
ao_lco_update();