diff options
| author | Bdale Garbee <bdale@gag.com> | 2014-09-09 23:28:39 -0600 | 
|---|---|---|
| committer | Bdale Garbee <bdale@gag.com> | 2014-09-09 23:28:39 -0600 | 
| commit | 16405fd3eb6f82ef3a709e3ed30fc48faef7b547 (patch) | |
| tree | c111819b3ba0c9357af41c81b798326b9df7adad /src/kernel/ao_telemetry.c | |
| parent | 5a2f6ed6210844f7284fbf9f7ecba68c8a14fa52 (diff) | |
| parent | 28bd5057252e61bc5b1a35a00bc1f9fdfde097f7 (diff) | |
Merge branch 'branch-1.5' into debian
Conflicts:
	ChangeLog
	Releasing
	altosui/Instdrv/NSIS/Includes/java.nsh
	altosui/altos-windows.nsi.in
	configure.ac
	doc/Makefile
	doc/altusmetrum.xsl
	micropeak/micropeak-windows.nsi.in
	telegps/telegps-windows.nsi.in
Diffstat (limited to 'src/kernel/ao_telemetry.c')
| -rw-r--r-- | src/kernel/ao_telemetry.c | 40 | 
1 files changed, 33 insertions, 7 deletions
| diff --git a/src/kernel/ao_telemetry.c b/src/kernel/ao_telemetry.c index 9f778b09..56bd715e 100644 --- a/src/kernel/ao_telemetry.c +++ b/src/kernel/ao_telemetry.c @@ -1,5 +1,5 @@  /* - * Copyright © 2011 Keith Packard <keithp@keithp.com> + * Copyright © 2011 Keth Packard <keithp@keithp.com>   *   * This program is free software; you can redistribute it and/or modify   * it under the terms of the GNU General Public License as published by @@ -25,6 +25,10 @@  static __pdata uint16_t ao_telemetry_interval; +#if HAS_RADIO_RATE +static __xdata uint16_t ao_telemetry_desired_interval; +#endif +  #if HAS_RDF  static __pdata uint8_t ao_rdf = 0;  static __pdata uint16_t ao_rdf_time; @@ -64,7 +68,7 @@ static void  ao_send_sensor(void)  {  	__xdata	struct ao_data *packet = (__xdata struct ao_data *) &ao_data_ring[ao_data_ring_prev(ao_sample_data)]; -			 +  	telemetry.generic.tick = packet->tick;  	telemetry.generic.type = AO_TELEMETRY_SENSOR; @@ -106,12 +110,13 @@ ao_send_sensor(void)  #ifdef AO_SEND_MEGA +  /* Send mega sensor packet */  static void  ao_send_mega_sensor(void)  {  	__xdata	struct ao_data *packet = (__xdata struct ao_data *) &ao_data_ring[ao_data_ring_prev(ao_sample_data)]; -			 +  	telemetry.generic.tick = packet->tick;  	telemetry.generic.type = AO_TELEMETRY_MEGA_SENSOR; @@ -240,7 +245,7 @@ static void  ao_send_mini(void)  {  	__xdata	struct ao_data *packet = (__xdata struct ao_data *) &ao_data_ring[ao_data_ring_prev(ao_sample_data)]; -			 +  	telemetry.generic.tick = packet->tick;  	telemetry.generic.type = AO_TELEMETRY_MINI; @@ -339,7 +344,7 @@ ao_send_location(void)  		ao_mutex_get(&ao_gps_mutex);  		ao_xmemcpy(&telemetry.location.flags,  		       &ao_gps_data.flags, -		       26); +		       27);  		telemetry.location.tick = ao_gps_tick;  		ao_mutex_put(&ao_gps_mutex);  		ao_radio_send(&telemetry, sizeof (telemetry)); @@ -490,12 +495,33 @@ ao_telemetry(void)  	}  } +#if HAS_RADIO_RATE +void +ao_telemetry_reset_interval(void) +{ +	ao_telemetry_set_interval(ao_telemetry_desired_interval); +} +#endif +  void  ao_telemetry_set_interval(uint16_t interval)  {  	int8_t	cur = 0; + +#if HAS_RADIO_RATE +	/* Limit max telemetry rate based on available radio bandwidth. +	 */ +	static __xdata const uint16_t min_interval[] = { +		/* [AO_RADIO_RATE_38400] = */ AO_MS_TO_TICKS(100), +		/* [AO_RADIO_RATE_9600] = */ AO_MS_TO_TICKS(500), +		/* [AO_RADIO_RATE_2400] = */ AO_MS_TO_TICKS(1000) +	}; + +	ao_telemetry_desired_interval = interval; +	if (interval < min_interval[ao_config.radio_rate]) +		interval = min_interval[ao_config.radio_rate]; +#endif  	ao_telemetry_interval = interval; -	  #if AO_SEND_MEGA  	if (interval > 1)  		ao_telemetry_mega_data_max = 1; @@ -521,7 +547,7 @@ ao_telemetry_set_interval(uint16_t interval)  	ao_telemetry_companion_cur = cur;  #endif -	ao_telemetry_config_max = AO_SEC_TO_TICKS(1) / interval; +	ao_telemetry_config_max = AO_SEC_TO_TICKS(5) / interval;  #if HAS_COMPANION  	if (ao_telemetry_config_max > cur)  		cur++; | 
