Report RSSI values in monitor idle UI (trac #44)
authorKeith Packard <keithp@keithp.com>
Wed, 11 Jul 2012 20:53:30 +0000 (13:53 -0700)
committerKeith Packard <keithp@keithp.com>
Wed, 11 Jul 2012 20:53:30 +0000 (13:53 -0700)
This adds a new 's' command to TeleDongle to report RSSI value from last
received packet, and then has AltosUI request that value when closing
the remote link.

Signed-off-by: Keith Packard <keithp@keithp.com>
altosui/AltosIdleMonitorUI.java
src/core/ao_packet.h
src/drivers/ao_packet.c
src/drivers/ao_packet_master.c

index 949e392675b352b9a08a79afbc22f40f9b4e1197..eb6ec5e7da1eb70133b9f8afbc5c1b162bc64ad0 100644 (file)
@@ -178,8 +178,23 @@ class AltosIdleMonitor extends Thread {
        AltosADC                adc;
        AltosGPS                gps;
 
+       int AltosRSSI() throws TimeoutException, InterruptedException {
+               serial.printf("s\n");
+               String line = serial.get_reply_no_dialog(5000);
+               if (line == null)
+                       throw new TimeoutException();
+               String[] items = line.split("\\s+");
+               if (items.length < 2)
+                       return 0;
+               if (!items[0].equals("RSSI:"))
+                       return 0;
+               int rssi = Integer.parseInt(items[1]);
+               return rssi;
+       }
+
        void update_state() throws InterruptedException, TimeoutException {
-               AltosRecord     record = new AltosRecord();
+               AltosRecordTM   record = new AltosRecordTM();
+               int             rssi;
 
                try {
                        if (remote) {
@@ -191,31 +206,34 @@ class AltosIdleMonitor extends Thread {
                        adc = new AltosADC(serial);
                        gps = new AltosGPSQuery(serial, config_data);
                } finally {
-                       if (remote)
+                       if (remote) {
                                serial.stop_remote();
+                               rssi = AltosRSSI();
+                       } else
+                               rssi = 0;
                }
 
                record.version = 0;
                record.callsign = config_data.callsign;
                record.serial = config_data.serial;
                record.flight = config_data.log_available() > 0 ? 255 : 0;
-               record.rssi = 0;
+               record.rssi = rssi;
                record.status = 0;
                record.state = Altos.ao_flight_idle;
 
                record.tick = adc.tick;
 
-//             record.accel = adc.accel;
-//             record.pres = adc.pres;
-//             record.batt = adc.batt;
-//             record.temp = adc.temp;
-//             record.drogue = adc.drogue;
-//             record.main = adc.main;
-
-//             record.ground_accel = record.accel;
-//             record.ground_pres = record.pres;
-//             record.accel_plus_g = config_data.accel_cal_plus;
-//             record.accel_minus_g = config_data.accel_cal_minus;
+               record.accel = adc.accel;
+               record.pres = adc.pres;
+               record.batt = adc.batt;
+               record.temp = adc.temp;
+               record.drogue = adc.drogue;
+               record.main = adc.main;
+
+               record.ground_accel = record.accel;
+               record.ground_pres = record.pres;
+               record.accel_plus_g = config_data.accel_cal_plus;
+               record.accel_minus_g = config_data.accel_cal_minus;
                record.acceleration = 0;
                record.speed = 0;
                record.height = 0;
index 618ccda40bb66b2c89da4f68f40bce8e0aa458fc..f232a87826dfbcfd6a21f2511c32e0a03d160a25 100644 (file)
@@ -67,6 +67,8 @@ ao_packet_pollchar(void) __critical;
 #if PACKET_HAS_MASTER
 /* ao_packet_master.c */
 
+extern __xdata uint8_t ao_packet_last_rssi;
+
 void
 ao_packet_master_init(void);
 #endif
index e020c0030ce0dffd6e8ef4da383a40397f50ed77..d813b25f27448c43c3707dc0f46d689b4024f94b 100644 (file)
@@ -27,7 +27,11 @@ static __pdata uint8_t rx_seq;
 
 __xdata struct ao_task ao_packet_task;
 __xdata uint8_t ao_packet_enable;
+
+#if PACKET_HAS_MASTER
 __xdata uint8_t ao_packet_master_sleeping;
+__xdata uint8_t ao_packet_last_rssi;
+#endif
 
 void
 ao_packet_send(void)
@@ -80,6 +84,9 @@ ao_packet_recv(void)
        if (!(ao_rx_packet.status & AO_RADIO_STATUS_CRC_OK))
                return 0;
 
+#if PACKET_HAS_MASTER
+       ao_packet_last_rssi = ao_rx_packet.rssi;
+#endif
        /* Accept packets with matching call signs, or any packet if
         * our callsign hasn't been configured
         */
@@ -130,10 +137,6 @@ ao_packet_recv(void)
        return 1;
 }
 
-#ifndef PACKET_HAS_MASTER
-#define PACKET_HAS_MASTER 1
-#endif
-
 #if PACKET_HAS_MASTER
 void
 ao_packet_flush(void)
index 66f94288fabd5cd6a0888907344f6a58c2ca1bf2..e97a66488ce11116f9f11694d38b68ca359abc47 100644 (file)
@@ -137,10 +137,15 @@ ao_packet_forward(void) __reentrant
 #endif
 }
 
-
+static void
+ao_packet_signal(void)
+{
+       printf ("RSSI: %d\n", AO_RSSI_FROM_RADIO(ao_packet_last_rssi));
+}
 
 __code struct ao_cmds ao_packet_master_cmds[] = {
        { ao_packet_forward,    "p\0Remote packet link." },
+       { ao_packet_signal,     "s\0Report signal strength." },
        { 0,    NULL },
 };