diff options
Diffstat (limited to 'src/ao_telemetry.c')
| -rw-r--r-- | src/ao_telemetry.c | 20 | 
1 files changed, 20 insertions, 0 deletions
diff --git a/src/ao_telemetry.c b/src/ao_telemetry.c index 9f57f3a9..7eefee3c 100644 --- a/src/ao_telemetry.c +++ b/src/ao_telemetry.c @@ -18,6 +18,10 @@  #include "ao.h"  __xdata uint16_t ao_telemetry_interval = 0; +__xdata uint8_t ao_rdf = 0; +__xdata uint16_t ao_rdf_time; + +#define AO_RDF_INTERVAL	AO_SEC_TO_TICKS(3)  void  ao_telemetry(void) @@ -27,6 +31,7 @@ ao_telemetry(void)  	ao_config_get();  	memcpy(telemetry.callsign, ao_config.callsign, AO_MAX_CALLSIGN);  	telemetry.addr = ao_serial_number; +	ao_rdf_time = ao_time();  	for (;;) {  		while (ao_telemetry_interval == 0)  			ao_sleep(&ao_telemetry_interval); @@ -43,6 +48,13 @@ ao_telemetry(void)  		ao_mutex_put(&ao_gps_mutex);  		ao_radio_send(&telemetry);  		ao_delay(ao_telemetry_interval); +		if (ao_rdf && +		    (int16_t) (ao_time() - ao_rdf_time) >= 0) +		{ +			ao_rdf_time = ao_time() + AO_RDF_INTERVAL; +			ao_radio_rdf(); +			ao_delay(ao_telemetry_interval); +		}  	}  } @@ -53,6 +65,14 @@ ao_telemetry_set_interval(uint16_t interval)  	ao_wakeup(&ao_telemetry_interval);  } +void +ao_rdf_set(uint8_t rdf) +{ +	ao_rdf = rdf; +	if (rdf == 0) +		ao_radio_rdf_abort(); +} +  __xdata struct ao_task	ao_telemetry_task;  void  | 
