diff options
| author | Keith Packard <keithp@keithp.com> | 2012-07-11 13:53:30 -0700 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2012-07-11 13:53:30 -0700 | 
| commit | 846a6298e4a8bfbe87bb24d7b0802c0bf6f233be (patch) | |
| tree | 246ac4909f2317dbee456a3b17ae47b9220fab50 | |
| parent | cf44ea354c2d1780cee343132c6058e11e9eefa3 (diff) | |
Report RSSI values in monitor idle UI (trac #44)
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>
| -rw-r--r-- | altosui/AltosIdleMonitorUI.java | 46 | ||||
| -rw-r--r-- | src/core/ao_packet.h | 2 | ||||
| -rw-r--r-- | src/drivers/ao_packet.c | 11 | ||||
| -rw-r--r-- | src/drivers/ao_packet_master.c | 7 | 
4 files changed, 47 insertions, 19 deletions
diff --git a/altosui/AltosIdleMonitorUI.java b/altosui/AltosIdleMonitorUI.java index 949e3926..eb6ec5e7 100644 --- a/altosui/AltosIdleMonitorUI.java +++ b/altosui/AltosIdleMonitorUI.java @@ -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; diff --git a/src/core/ao_packet.h b/src/core/ao_packet.h index 618ccda4..f232a878 100644 --- a/src/core/ao_packet.h +++ b/src/core/ao_packet.h @@ -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 diff --git a/src/drivers/ao_packet.c b/src/drivers/ao_packet.c index e020c003..d813b25f 100644 --- a/src/drivers/ao_packet.c +++ b/src/drivers/ao_packet.c @@ -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) diff --git a/src/drivers/ao_packet_master.c b/src/drivers/ao_packet_master.c index 66f94288..e97a6648 100644 --- a/src/drivers/ao_packet_master.c +++ b/src/drivers/ao_packet_master.c @@ -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 },  };  | 
