X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Ftelelco-v2.0%2Fao_lco_v2.c;h=5f7352d7d69aea4984aa768828259439d9470517;hb=ffaee646efded39c3cdb07948823822ce8df8c4e;hp=78849bc9b43bc00f551a70133aef6fbdcd66327a;hpb=026ab589d0ade3dd59d26888fffd8699ef534671;p=fw%2Faltos diff --git a/src/telelco-v2.0/ao_lco_v2.c b/src/telelco-v2.0/ao_lco_v2.c index 78849bc9..5f7352d7 100644 --- a/src/telelco-v2.0/ao_lco_v2.c +++ b/src/telelco-v2.0/ao_lco_v2.c @@ -42,7 +42,7 @@ static uint8_t ao_lco_event_debug; static uint8_t ao_lco_display_mutex; void -ao_lco_show_pad(uint8_t pad) +ao_lco_show_pad(int8_t pad) { ao_mutex_get(&ao_lco_display_mutex); ao_seven_segment_set(AO_LCO_PAD_DIGIT, (uint8_t) (pad | (ao_lco_drag_race << 4))); @@ -67,7 +67,7 @@ ao_lco_show_pad(uint8_t pad) (0 << 6)) void -ao_lco_show_box(uint16_t box) +ao_lco_show_box(int16_t box) { ao_mutex_get(&ao_lco_display_mutex); ao_seven_segment_set(AO_LCO_BOX_DIGIT_1, (uint8_t) (box % 10 | (ao_lco_drag_race << 4))); @@ -76,38 +76,69 @@ ao_lco_show_box(uint16_t box) } static void -ao_lco_show_voltage(uint16_t decivolts) +ao_lco_show_value(uint16_t value, uint8_t point) { - uint8_t tens, ones, tenths; - - PRINTD("voltage %d\n", decivolts); - tenths = (uint8_t) (decivolts % 10); - ones = (uint8_t) ((decivolts / 10) % 10); - tens = (uint8_t) ((decivolts / 100) % 10); + uint8_t hundreds, tens, ones; + + PRINTD("value %d\n", value); + ones = (uint8_t) (value % 10); + tens = (uint8_t) ((value / 10) % 10); + hundreds = (uint8_t) ((value / 100) % 10); + switch (point) { + case 2: + hundreds |= 0x10; + break; + case 1: + tens |= 0x10; + break; + case 0: + ones |= 0x10; + break; + default: + break; + } ao_mutex_get(&ao_lco_display_mutex); - 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); + ao_seven_segment_set(AO_LCO_PAD_DIGIT, ones); + ao_seven_segment_set(AO_LCO_BOX_DIGIT_1, tens); + ao_seven_segment_set(AO_LCO_BOX_DIGIT_10, hundreds); ao_mutex_put(&ao_lco_display_mutex); } -void -ao_lco_show(void) +static void +ao_lco_show_lco_voltage(void) { - if (ao_lco_pad == AO_LCO_PAD_VOLTAGE) { - ao_lco_show_voltage(ao_pad_query.battery); - } else { - ao_lco_show_pad(ao_lco_pad); - ao_lco_show_box(ao_lco_box); - } + struct ao_adc packet; + int16_t decivolt; + + ao_adc_single_get(&packet); + decivolt = ao_battery_decivolt(packet.v_batt); + ao_lco_show_value((uint16_t) decivolt, 1); } -uint8_t -ao_lco_box_present(uint16_t box) +void +ao_lco_show(void) { - if (box >= AO_PAD_MAX_BOXES) - return 0; - return (ao_lco_box_mask[AO_LCO_MASK_ID(box)] >> AO_LCO_MASK_SHIFT(box)) & 1; + switch (ao_lco_box) { + case AO_LCO_LCO_VOLTAGE: + ao_lco_show_lco_voltage(); + break; + default: + switch (ao_lco_pad) { + case AO_LCO_PAD_VOLTAGE: + ao_lco_show_value(ao_pad_query.battery, 1); + break; + case AO_LCO_PAD_RSSI: + if (!(ao_lco_valid[ao_lco_box] & AO_LCO_VALID_LAST)) + ao_lco_show_value(888, 0); + else + ao_lco_show_value((uint16_t) (-ao_radio_cmac_rssi), 0); + break; + default: + ao_lco_show_pad(ao_lco_pad); + ao_lco_show_box(ao_lco_box); + break; + } + } } static void @@ -132,23 +163,6 @@ ao_lco_set_select(void) } } -static void -ao_lco_step_box(int8_t dir) -{ - int32_t new_box = (int32_t) ao_lco_box; - - do { - new_box += dir; - if (new_box > ao_lco_max_box) - new_box = ao_lco_min_box; - else if (new_box < ao_lco_min_box) - new_box = ao_lco_max_box; - if (new_box == ao_lco_box) - break; - } while (!ao_lco_box_present((uint16_t) new_box)); - ao_lco_set_box((uint16_t) new_box); -} - static struct ao_task ao_lco_drag_task; static void @@ -254,12 +268,7 @@ ao_lco_display_test(void) static void ao_lco_batt_voltage(void) { - struct ao_adc packet; - int16_t decivolt; - - ao_adc_single_get(&packet); - decivolt = ao_battery_decivolt(packet.v_batt); - ao_lco_show_voltage((uint16_t) decivolt); + ao_lco_show_lco_voltage(); ao_delay(AO_MS_TO_TICKS(1000)); }