diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/ao.h | 10 | ||||
| -rw-r--r-- | src/core/ao_config.c | 60 | ||||
| -rw-r--r-- | src/drivers/ao_cc115l.c | 5 | ||||
| -rw-r--r-- | src/drivers/ao_rf_cc115l.h | 2 | ||||
| -rw-r--r-- | src/drivers/ao_rfpa0133.c | 7 | ||||
| -rw-r--r-- | src/telegps-v0.1/ao_pins.h | 4 | 
6 files changed, 80 insertions, 8 deletions
| diff --git a/src/core/ao.h b/src/core/ao.h index 6d617cfc..7c5c69b8 100644 --- a/src/core/ao.h +++ b/src/core/ao.h @@ -550,7 +550,7 @@ ao_radio_send_lots(ao_radio_fill_func fill);   * ao_radio_pa   */ -#if AO_RADIO_HAS_PA +#if HAS_RADIO_AMP  void  ao_radio_pa_on(void); @@ -715,7 +715,7 @@ extern __xdata uint8_t ao_force_freq;  #endif  #define AO_CONFIG_MAJOR	1 -#define AO_CONFIG_MINOR	13 +#define AO_CONFIG_MINOR	14  #define AO_AES_LEN 16 @@ -743,6 +743,12 @@ struct ao_config {  	struct ao_pyro	pyro[AO_PYRO_NUM];	/* minor version 12 */  #endif  	uint16_t	aprs_interval;		/* minor version 13 */ +#if HAS_RADIO_POWER +	uint8_t		radio_power;		/* minor version 14 */ +#endif +#if HAS_RADIO_AMP +	uint8_t		radio_amp;		/* minor version 14 */ +#endif  };  #define AO_IGNITE_MODE_DUAL		0 diff --git a/src/core/ao_config.c b/src/core/ao_config.c index 9c84fe60..73608a55 100644 --- a/src/core/ao_config.c +++ b/src/core/ao_config.c @@ -47,6 +47,8 @@ __xdata uint8_t ao_config_mutex;  #define AO_CONFIG_DEFAULT_FLIGHT_LOG_MAX	((uint32_t) 192 * (uint32_t) 1024)  #endif  #endif +#define AO_CONFIG_DEFAULT_RADIO_POWER		0x60 +#define AO_CONFIG_DEFAULT_RADIO_AMP		0  #if HAS_EEPROM  static void @@ -141,6 +143,14 @@ _ao_config_get(void)  #endif  		if (minor < 13)  			ao_config.aprs_interval = 0; +#if HAS_RADIO_POWER +		if (minor < 14) +			ao_config.radio_power = AO_CONFIG_DEFAULT_RADIO_POWER; +		#endif +#if HAS_RADIO_AMP +		if (minor  < 14) +			ao_config.radio_amp = AO_CONFIG_DEFAULT_RADIO_AMP; +#endif  		ao_config.minor = AO_CONFIG_MINOR;  		ao_config_dirty = 1;  	} @@ -524,6 +534,48 @@ ao_config_aprs_set(void)  #endif /* HAS_APRS */ +#if HAS_RADIO_AMP + +void +ao_config_radio_amp_show(void) +{ +	printf ("Radio amp setting: %d\n", ao_config.radio_amp); +} + +void +ao_config_radio_amp_set(void) +{ +	ao_cmd_decimal(); +	if (ao_cmd_status != ao_cmd_success) +		return; +	_ao_config_edit_start(); +	ao_config.radio_amp = ao_cmd_lex_i; +	_ao_config_edit_finish(); +} + +#endif + +#if HAS_RADIO_POWER + +void +ao_config_radio_power_show(void) +{ +	printf ("Radio power setting: %d\n", ao_config.radio_power); +} + +void +ao_config_radio_power_set(void) +{ +	ao_cmd_decimal(); +	if (ao_cmd_status != ao_cmd_success) +		return; +	_ao_config_edit_start(); +	ao_config.radio_power = ao_cmd_lex_i; +	_ao_config_edit_finish(); +} + +#endif +  struct ao_config_var {  	__code char	*str;  	void		(*set)(void) __reentrant; @@ -557,6 +609,14 @@ __code struct ao_config_var ao_config_vars[] = {  	  ao_config_radio_enable_set, ao_config_radio_enable_show },  	{ "f <cal>\0Radio calib (cal = rf/(xtal/2^16))",  	  ao_config_radio_cal_set,  	ao_config_radio_cal_show }, +#if HAS_RADIO_POWER +	{ "p <setting>\0Radio power setting (0-255)", +	  ao_config_radio_power_set,	ao_config_radio_power_show }, +#endif +#if HAS_RADIO_AMP +	{ "d <setting>\0Radio amplifier setting (0-3)", +	  ao_config_radio_amp_set,	ao_config_radio_amp_show }, +#endif  #endif /* HAS_RADIO */  #if HAS_ACCEL  	{ "a <+g> <-g>\0Accel calib (0 for auto)", diff --git a/src/drivers/ao_cc115l.c b/src/drivers/ao_cc115l.c index feff82af..5b0ec3d7 100644 --- a/src/drivers/ao_cc115l.c +++ b/src/drivers/ao_cc115l.c @@ -452,6 +452,7 @@ static void  ao_radio_get(uint8_t len)  {  	static uint32_t	last_radio_setting; +	static uint8_t	last_power_setting;  	ao_mutex_get(&ao_radio_mutex);  	if (!ao_radio_configured) @@ -462,6 +463,10 @@ ao_radio_get(uint8_t len)  		ao_radio_reg_write(CC115L_FREQ0, ao_config.radio_setting);  		last_radio_setting = ao_config.radio_setting;  	} +	if (ao_config.radio_power != last_power_setting) { +		ao_radio_reg_write(CC115L_PA, ao_config.radio_power); +		last_power_setting = ao_config.radio_power; +	}  	ao_radio_set_len(len);  } diff --git a/src/drivers/ao_rf_cc115l.h b/src/drivers/ao_rf_cc115l.h index 6eb30bf2..50a730ab 100644 --- a/src/drivers/ao_rf_cc115l.h +++ b/src/drivers/ao_rf_cc115l.h @@ -80,4 +80,4 @@          CC115L_TEST1,                       0x35,       /* Various Test Settings */          CC115L_TEST0,                       0x09,       /* Various Test Settings */ -	CC115L_PA,		     	    0x60,	 /* Power setting (0dBm) */ +	CC115L_PA,		     	    0x00,	 /* Power setting (0dBm) */ diff --git a/src/drivers/ao_rfpa0133.c b/src/drivers/ao_rfpa0133.c index 70d5edba..a98e261a 100644 --- a/src/drivers/ao_rfpa0133.c +++ b/src/drivers/ao_rfpa0133.c @@ -17,10 +17,8 @@  #include "ao.h" -static uint8_t	power = 0; -  static void -ao_rfpa0133_set_power(void) +ao_rfpa0133_set_power(uint8_t power)  {  	ao_gpio_set(AO_PA_GAIN_8_GPIO, AO_PA_GAIN_8_PIN, AO_PA_GAIN_8, power & 1);  	ao_gpio_set(AO_PA_GAIN_16_GPIO, AO_PA_GAIN_16_PIN, AO_PA_GAIN_16, (power >> 1) & 1); @@ -29,7 +27,7 @@ ao_rfpa0133_set_power(void)  void  ao_radio_pa_on(void)  { -	ao_rfpa0133_set_power(); +	ao_rfpa0133_set_power(ao_config.radio_amp);  	ao_gpio_set(AO_PA_POWER_GPIO, AO_PA_POWER_PIN, AO_PA_POWER, 1);  } @@ -37,6 +35,7 @@ void  ao_radio_pa_off(void)  {  	ao_gpio_set(AO_PA_POWER_GPIO, AO_PA_POWER_PIN, AO_PA_POWER, 0); +	ao_rfpa0133_set_power(0);  }  void diff --git a/src/telegps-v0.1/ao_pins.h b/src/telegps-v0.1/ao_pins.h index 01f4a303..09574568 100644 --- a/src/telegps-v0.1/ao_pins.h +++ b/src/telegps-v0.1/ao_pins.h @@ -132,6 +132,8 @@  #define AO_RADIO_CAL_DEFAULT 	0x10b6a5 +#define HAS_RADIO_POWER		1 +  #define AO_FEC_DEBUG		0  #define AO_CC115L_SPI_CS_PORT	(&stm_gpiob)  #define AO_CC115L_SPI_CS_PIN	12 @@ -150,7 +152,7 @@  #define AO_CC115L_MARC_GPIO	0  #define AO_CC115L_MARC_GPIO_IOCFG	CC115L_IOCFG0 -#define AO_RADIO_HAS_PA	1 +#define HAS_RADIO_AMP		1  /*   * Power amplifier (RFPA0133) | 
