diff options
| author | Keith Packard <keithp@keithp.com> | 2014-07-05 00:09:25 -0700 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2014-07-05 00:38:09 -0700 | 
| commit | ea5887027e7a39da2b7d84a142d74950b7a24703 (patch) | |
| tree | 1ec137c8f668861d1e53cbe9d5fbf18afeb9656e /src | |
| parent | 214a38eb2b084baec526aa42016eddb954038639 (diff) | |
altos: Call ao_telemetry_reset_interval when telemetry rate changes
This lets the radio code adjust the telemetry packet sending pattern
when the data rate changes.
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src')
| -rw-r--r-- | src/cc1111/ao_pins.h | 15 | ||||
| -rw-r--r-- | src/kernel/ao.h | 5 | ||||
| -rw-r--r-- | src/kernel/ao_config.c | 7 | ||||
| -rw-r--r-- | src/kernel/ao_telemetry.c | 34 | ||||
| -rw-r--r-- | src/telebt-v1.0/ao_pins.h | 1 | ||||
| -rw-r--r-- | src/telefire-v0.1/ao_pins.h | 3 | ||||
| -rw-r--r-- | src/telefire-v0.2/ao_pins.h | 3 | ||||
| -rw-r--r-- | src/telemini-v2.0/ao_pins.h | 1 | ||||
| -rw-r--r-- | src/teleshield-v0.1/ao_pins.h | 1 | ||||
| -rw-r--r-- | src/teleterra-v0.2/ao_pins.h | 2 | 
10 files changed, 62 insertions, 10 deletions
diff --git a/src/cc1111/ao_pins.h b/src/cc1111/ao_pins.h index 2b19f1f6..b40acbbd 100644 --- a/src/cc1111/ao_pins.h +++ b/src/cc1111/ao_pins.h @@ -56,6 +56,7 @@  	#define HAS_ACCEL		1  	#define HAS_IGNITE		1  	#define HAS_MONITOR		0 +	#define HAS_TELEMETRY		1  #endif  #if defined(TELEMETRUM_V_1_1) @@ -96,6 +97,7 @@  	#define HAS_ACCEL		1  	#define HAS_IGNITE		1  	#define HAS_MONITOR		0 +	#define HAS_TELEMETRY		1  #endif  #if defined(TELEMETRUM_V_1_2) @@ -136,6 +138,7 @@  	#define HAS_ACCEL		1  	#define HAS_IGNITE		1  	#define HAS_MONITOR		0 +	#define HAS_TELEMETRY		1  #endif  #if defined(TELEDONGLE_V_0_2) @@ -164,6 +167,7 @@  	#define LEGACY_MONITOR		1  	#define HAS_RSSI		1  	#define HAS_AES			0 +	#define HAS_TELEMETRY		0  #endif  #if defined(TELEMINI_V_1_0) @@ -193,6 +197,8 @@  	#define HAS_ACCEL		0  	#define HAS_IGNITE		1  	#define HAS_MONITOR		0 +	#define HAS_TELEMETRY		1 +	#define HAS_RADIO_RATE		0	/* not enough space for this */  #endif  #if defined(TELENANO_V_0_1) @@ -220,6 +226,8 @@  	#define HAS_ACCEL		0  	#define HAS_IGNITE		0  	#define HAS_MONITOR		0 +	#define HAS_TELEMETRY		1 +	#define HAS_RADIO_RATE		0	/* not enough space for this */  #endif  #if defined(TELEMETRUM_V_0_1) @@ -252,6 +260,8 @@  	#define HAS_ACCEL		1  	#define HAS_IGNITE		1  	#define HAS_MONITOR		0 +	#define HAS_TELEMETRY		1 +	#define HAS_RADIO_RATE		0	/* not enough space for this */  	#define AO_CONFIG_DEFAULT_FLIGHT_LOG_MAX	((uint32_t) 127 * (uint32_t) 1024)  #endif @@ -283,6 +293,7 @@  	#define LEGACY_MONITOR		1  	#define HAS_RSSI		1  	#define HAS_AES			0 +	#define HAS_TELEMETRY		0  #endif  #if defined(TIDONGLE) @@ -312,6 +323,7 @@  	#define LEGACY_MONITOR		1  	#define HAS_RSSI		1  	#define HAS_AES			0 +	#define HAS_TELEMETRY		0  #endif  #if defined(TELEBT_V_0_0) @@ -350,6 +362,7 @@  	#define LEGACY_MONITOR		1  	#define HAS_RSSI		0  	#define HAS_AES			0 +	#define HAS_TELEMETRY		0  #endif  #if defined(TELEBT_V_0_1) @@ -396,6 +409,7 @@  	#define LEGACY_MONITOR		1  	#define HAS_RSSI		0  	#define HAS_AES			0 +	#define HAS_TELEMETRY		0  #endif  #if defined(TELELAUNCH_V_0_1) @@ -428,6 +442,7 @@  	#define HAS_IGNITE		1  	#define HAS_MONITOR		0  	#define HAS_AES			1 +	#define HAS_TELEMETRY		0  #endif  #if DBG_ON_P1 diff --git a/src/kernel/ao.h b/src/kernel/ao.h index 6c6abd36..c11aa028 100644 --- a/src/kernel/ao.h +++ b/src/kernel/ao.h @@ -521,9 +521,8 @@ struct ao_telemetry_raw_recv {  #define AO_TELEMETRY_INTERVAL_RECOVER	AO_MS_TO_TICKS(1000)  #endif -#define AO_RADIO_RATE_38400	0 -#define AO_RADIO_RATE_9600	1 -#define AO_RADIO_RATE_2400	2 +void +ao_telemetry_reset_interval(void);  void  ao_telemetry_set_interval(uint16_t interval); diff --git a/src/kernel/ao_config.c b/src/kernel/ao_config.c index 52c0c4f6..32a0967c 100644 --- a/src/kernel/ao_config.c +++ b/src/kernel/ao_config.c @@ -492,6 +492,10 @@ ao_config_radio_cal_set(void) __reentrant  #endif  #if HAS_RADIO_RATE +#ifndef HAS_TELEMETRY +#error Please define HAS_TELEMETRY +#endif +  void  ao_config_radio_rate_show(void) __reentrant  { @@ -510,6 +514,9 @@ ao_config_radio_rate_set(void) __reentrant  	}  	_ao_config_edit_start();  	ao_config.radio_rate = ao_cmd_lex_i; +#if HAS_TELEMETRY +	ao_telemetry_reset_interval(); +#endif  	_ao_config_edit_finish();  }  #endif diff --git a/src/kernel/ao_telemetry.c b/src/kernel/ao_telemetry.c index 6fb30069..f4fcf400 100644 --- a/src/kernel/ao_telemetry.c +++ b/src/kernel/ao_telemetry.c @@ -25,6 +25,10 @@  static __pdata uint16_t ao_telemetry_interval; +#if HAS_RADIO_RATE +static __pdata 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; @@ -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 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; diff --git a/src/telebt-v1.0/ao_pins.h b/src/telebt-v1.0/ao_pins.h index 9e47f3b8..b5562573 100644 --- a/src/telebt-v1.0/ao_pins.h +++ b/src/telebt-v1.0/ao_pins.h @@ -48,6 +48,7 @@  #define BT_LINK_PIN		P1_7  #define HAS_MONITOR		1  #define LEGACY_MONITOR		0 +#define HAS_TELEMETRY		0  #define HAS_ADC			1  #define AO_PAD_ADC_BATT		0 diff --git a/src/telefire-v0.1/ao_pins.h b/src/telefire-v0.1/ao_pins.h index f7a3ff2c..47ae663f 100644 --- a/src/telefire-v0.1/ao_pins.h +++ b/src/telefire-v0.1/ao_pins.h @@ -18,7 +18,8 @@  #ifndef _AO_PINS_H_  #define _AO_PINS_H_ -#define HAS_RADIO	1 +#define HAS_RADIO		1 +#define HAS_TELEMETRY		0  #define HAS_FLIGHT		0  #define HAS_USB			1 diff --git a/src/telefire-v0.2/ao_pins.h b/src/telefire-v0.2/ao_pins.h index 96e6b066..9e6631ce 100644 --- a/src/telefire-v0.2/ao_pins.h +++ b/src/telefire-v0.2/ao_pins.h @@ -18,7 +18,8 @@  #ifndef _AO_PINS_H_  #define _AO_PINS_H_ -#define HAS_RADIO	1 +#define HAS_RADIO		1 +#define HAS_TELEMETRY		0  #define HAS_FLIGHT		0  #define HAS_USB			1 diff --git a/src/telemini-v2.0/ao_pins.h b/src/telemini-v2.0/ao_pins.h index f202ccd1..c9f9de62 100644 --- a/src/telemini-v2.0/ao_pins.h +++ b/src/telemini-v2.0/ao_pins.h @@ -39,6 +39,7 @@  #define USE_INTERNAL_FLASH	0  #define HAS_DBG			0  #define PACKET_HAS_SLAVE	1 +#define HAS_RADIO_RATE		0	/* not enough space for this */  #define AO_LED_RED		2  #define LEDS_AVAILABLE		AO_LED_RED diff --git a/src/teleshield-v0.1/ao_pins.h b/src/teleshield-v0.1/ao_pins.h index 30239afc..68bb44ee 100644 --- a/src/teleshield-v0.1/ao_pins.h +++ b/src/teleshield-v0.1/ao_pins.h @@ -62,6 +62,7 @@  	#define HAS_RSSI		0  	#define HAS_AES			0  	#define HAS_RADIO		1 +	#define HAS_TELEMETRY		0  #endif  #if DBG_ON_P1 diff --git a/src/teleterra-v0.2/ao_pins.h b/src/teleterra-v0.2/ao_pins.h index 1c12c437..60d627ad 100644 --- a/src/teleterra-v0.2/ao_pins.h +++ b/src/teleterra-v0.2/ao_pins.h @@ -71,7 +71,7 @@  	#define HAS_P2_ISR		1  	#define BATTERY_PIN		5 -	 +	#define HAS_TELEMETRY		0  #endif  #if DBG_ON_P1  | 
