altos/telelco: Add RSSI display to older devices
authorKeith Packard <keithp@keithp.com>
Sun, 28 Jan 2024 07:59:43 +0000 (23:59 -0800)
committerKeith Packard <keithp@keithp.com>
Thu, 1 Feb 2024 01:50:19 +0000 (17:50 -0800)
Show RSSI value on TeleLCO v2.0

Signed-off-by: Keith Packard <keithp@keithp.com>
src/drivers/ao_lco.c
src/drivers/ao_lco.h
src/drivers/ao_lco_bits.c
src/drivers/ao_lco_two.c
src/telelco-v2.0/ao_lco_v2.c

index c0a52b69e6cac3e43708c256cb6bb9ceb4c5b546..f6bd630d186fa852be3aa450f0637e53e0654083 100644 (file)
@@ -41,7 +41,7 @@ static uint8_t        ao_lco_fire_down;
 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)));
@@ -101,7 +101,7 @@ ao_lco_show(void)
                ao_lco_show_voltage(ao_pad_query.battery);
        } else {
                if (ao_lco_box == AO_LCO_BOX_DRAG)
-                       ao_lco_show_pad(ao_lco_drag_race);
+                       ao_lco_show_pad((int8_t) ao_lco_drag_race);
                else
                        ao_lco_show_pad(ao_lco_pad);
                ao_lco_show_box(ao_lco_box);
index c9fc1230a5732e311253c7ea07510c3614931dd1..176f83837898e48366f28ce19f66e18f2af7880b 100644 (file)
@@ -209,7 +209,7 @@ ao_lco_arm_warn(void);
  */
 
 void
-ao_lco_show_pad(uint8_t pad);
+ao_lco_show_pad(int8_t pad);
 
 void
 ao_lco_show_box(int16_t box);
index 06fc929fd6c50cc151e3c38c111acc8db5d165ac..80140ec9f7440de0c8f58e9465b674cad60e0696 100644 (file)
@@ -413,7 +413,7 @@ ao_lco_search(void)
 #ifdef AO_LCO_SEARCH_API
                                ao_lco_search_box_present(box);
 #else
-                               ao_lco_show_pad((uint8_t) (boxes % 10));
+                               ao_lco_show_pad((int8_t) (boxes % 10));
 #endif
                                ao_delay(AO_MS_TO_TICKS(30));
                                break;
index 583aa9ffe7f4df3e27f3e32dc9b7666c4557f55b..57c006b78eba4571933901c9582d30609bfd4a5b 100644 (file)
@@ -46,7 +46,7 @@ ao_lco_wakeup(void)
 }
 
 void
-ao_lco_show_pad(uint8_t pad)
+ao_lco_show_pad(int8_t pad)
 {
        (void) pad;
 }
index d1e66d05450fa67d4f24cbc5bf1be7d4081ba5f9..5f7352d7d69aea4984aa768828259439d9470517 100644 (file)
@@ -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)));
@@ -76,18 +76,31 @@ ao_lco_show_box(int16_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;
+       uint8_t hundreds, tens, ones;
 
-       PRINTD("voltage %d\n", decivolts);
-       tenths = (uint8_t) (decivolts % 10);
-       ones = (uint8_t) ((decivolts / 10) % 10);
-       tens = (uint8_t) ((decivolts / 100) % 10);
+       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);
 }
 
@@ -99,19 +112,32 @@ ao_lco_show_lco_voltage(void)
 
        ao_adc_single_get(&packet);
        decivolt = ao_battery_decivolt(packet.v_batt);
-       ao_lco_show_voltage((uint16_t) decivolt);
+       ao_lco_show_value((uint16_t) decivolt, 1);
 }
 
 void
 ao_lco_show(void)
 {
-       if (ao_lco_box == AO_LCO_LCO_VOLTAGE) {
+       switch (ao_lco_box) {
+       case AO_LCO_LCO_VOLTAGE:
                ao_lco_show_lco_voltage();
-       } else 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);
+               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;
+               }
        }
 }