diff options
| author | Keith Packard <keithp@keithp.com> | 2011-08-03 23:07:53 -0700 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2011-08-08 12:13:28 -0700 | 
| commit | ba5dc35388d28c5769eaabc970c4d4b8c2c2ff9c (patch) | |
| tree | e67bf949ec03307df435c99ae9927367156b9b47 /src | |
| parent | e1e5c9b3e24670e9f58c6f7389eafb3338efdb40 (diff) | |
altos: Add ability to set arbitrary radio frequency
This adds a separate config parameter to control the raw radio
frequency setting, allowing the user to select an arbitrary frequency
instead of being forced to choose one of the 10 pre-defined 'channels'.
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src')
| -rw-r--r-- | src/ao.h | 1 | ||||
| -rw-r--r-- | src/ao_config.c | 28 | ||||
| -rw-r--r-- | src/ao_radio.c | 6 | 
3 files changed, 31 insertions, 4 deletions
| @@ -1373,6 +1373,7 @@ struct ao_config {  	uint32_t	flight_log_max;		/* minor version 4 */  	uint8_t		ignite_mode;		/* minor version 5 */  	uint8_t		pad_orientation;	/* minor version 6 */ +	uint32_t	radio_setting;		/* minor version 7 */  };  #define AO_IGNITE_MODE_DUAL		0 diff --git a/src/ao_config.c b/src/ao_config.c index 5e80d55d..a5796b03 100644 --- a/src/ao_config.c +++ b/src/ao_config.c @@ -84,6 +84,7 @@ _ao_config_get(void)  		ao_config.flight_log_max = AO_CONFIG_DEFAULT_FLIGHT_LOG_MAX;  		ao_config.ignite_mode = AO_CONFIG_DEFAULT_IGNITE_MODE;  		ao_config.pad_orientation = AO_CONFIG_DEFAULT_PAD_ORIENTATION; +		ao_config.radio_setting = ao_radio_cal;  		ao_config_dirty = 1;  	}  	if (ao_config.minor < AO_CONFIG_MINOR) { @@ -106,6 +107,8 @@ _ao_config_get(void)  			ao_config.ignite_mode = AO_CONFIG_DEFAULT_IGNITE_MODE;  		if (ao_config.minor < 6)  			ao_config.pad_orientation = AO_CONFIG_DEFAULT_PAD_ORIENTATION; +		if (ao_config.minor < 7) +			ao_config.radio_setting = ao_config.radio_cal;  		ao_config.minor = AO_CONFIG_MINOR;  		ao_config_dirty = 1;  	} @@ -309,7 +312,7 @@ ao_config_radio_cal_set(void) __reentrant  		return;  	ao_mutex_get(&ao_config_mutex);  	_ao_config_get(); -	ao_config.radio_cal = ao_cmd_lex_u32; +	ao_config.radio_setting = ao_config.radio_cal = ao_cmd_lex_u32;  	ao_config_dirty = 1;  	ao_mutex_put(&ao_config_mutex);  	ao_config_radio_cal_show(); @@ -399,6 +402,27 @@ ao_config_pad_orientation_set(void) __reentrant  }  #endif +void +ao_config_radio_setting_show(void) __reentrant +{ +	printf("Radio setting: %ld\n", ao_config.radio_setting); +} + +void +ao_config_radio_setting_set(void) __reentrant +{ +	ao_cmd_decimal(); +	if (ao_cmd_status != ao_cmd_success) +		return; +	ao_mutex_get(&ao_config_mutex); +	_ao_config_get(); +	ao_config.radio_setting = ao_cmd_lex_u32; +	ao_config_dirty = 1; +	ao_mutex_put(&ao_config_mutex); +	ao_config_radio_setting_show(); +	ao_radio_recv_abort(); +} +  struct ao_config_var {  	__code char	*str;  	void		(*set)(void) __reentrant; @@ -443,6 +467,8 @@ __code struct ao_config_var ao_config_vars[] = {  	{ "o <0 antenna up, 1 antenna down>\0Set pad orientation",  	  ao_config_pad_orientation_set,ao_config_pad_orientation_show },  #endif +	{ "R <setting>\0Radio freq control (freq = 434.550 * setting/cal)", +	  ao_config_radio_setting_set,	ao_config_radio_setting_show },  	{ "s\0Show",  	  ao_config_show,		ao_config_show },  #if HAS_EEPROM diff --git a/src/ao_radio.c b/src/ao_radio.c index 4c382bb9..1fb0eea6 100644 --- a/src/ao_radio.c +++ b/src/ao_radio.c @@ -287,9 +287,9 @@ ao_radio_get(uint8_t len)  	ao_mutex_get(&ao_radio_mutex);  	ao_radio_idle();  	RF_CHANNR = ao_config.radio_channel; -	RF_FREQ2 = (uint8_t) (ao_config.radio_cal >> 16); -	RF_FREQ1 = (uint8_t) (ao_config.radio_cal >> 8); -	RF_FREQ0 = (uint8_t) (ao_config.radio_cal); +	RF_FREQ2 = (uint8_t) (ao_config.radio_setting >> 16); +	RF_FREQ1 = (uint8_t) (ao_config.radio_setting >> 8); +	RF_FREQ0 = (uint8_t) (ao_config.radio_setting);  	RF_PKTLEN = len;  } | 
