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>
AltosADC adc;
AltosGPS gps;
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 {
void update_state() throws InterruptedException, TimeoutException {
- AltosRecord record = new AltosRecord();
+ AltosRecordTM record = new AltosRecordTM();
+ int rssi;
adc = new AltosADC(serial);
gps = new AltosGPSQuery(serial, config_data);
} finally {
adc = new AltosADC(serial);
gps = new AltosGPSQuery(serial, config_data);
} finally {
+ 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.version = 0;
record.callsign = config_data.callsign;
record.serial = config_data.serial;
record.flight = config_data.log_available() > 0 ? 255 : 0;
record.status = 0;
record.state = Altos.ao_flight_idle;
record.tick = adc.tick;
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;
record.acceleration = 0;
record.speed = 0;
record.height = 0;
#if PACKET_HAS_MASTER
/* ao_packet_master.c */
#if PACKET_HAS_MASTER
/* ao_packet_master.c */
+extern __xdata uint8_t ao_packet_last_rssi;
+
void
ao_packet_master_init(void);
#endif
void
ao_packet_master_init(void);
#endif
__xdata struct ao_task ao_packet_task;
__xdata uint8_t ao_packet_enable;
__xdata struct ao_task ao_packet_task;
__xdata uint8_t ao_packet_enable;
__xdata uint8_t ao_packet_master_sleeping;
__xdata uint8_t ao_packet_master_sleeping;
+__xdata uint8_t ao_packet_last_rssi;
+#endif
void
ao_packet_send(void)
void
ao_packet_send(void)
if (!(ao_rx_packet.status & AO_RADIO_STATUS_CRC_OK))
return 0;
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
*/
/* Accept packets with matching call signs, or any packet if
* our callsign hasn't been configured
*/
-#ifndef PACKET_HAS_MASTER
-#define PACKET_HAS_MASTER 1
-#endif
-
#if PACKET_HAS_MASTER
void
ao_packet_flush(void)
#if PACKET_HAS_MASTER
void
ao_packet_flush(void)
+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." },
__code struct ao_cmds ao_packet_master_cmds[] = {
{ ao_packet_forward, "p\0Remote packet link." },
+ { ao_packet_signal, "s\0Report signal strength." },