diff options
| author | Bdale Garbee <bdale@gag.com> | 2014-06-24 21:17:53 -0600 | 
|---|---|---|
| committer | Bdale Garbee <bdale@gag.com> | 2014-06-24 21:17:53 -0600 | 
| commit | bd440afc2a6e37b74fffcf1b977e149485095316 (patch) | |
| tree | 3e42f1102d68d49dae3061b9592e23907e245f23 /src/kernel | |
| parent | 5d4f912bcc6784f975c82f7b0ed8dc360e60aae8 (diff) | |
| parent | a0ccab8e4235934538a03f8be3b37aa1bbd6b144 (diff) | |
Merge branch 'master' of ssh://git.gag.com/scm/git/fw/altos
Diffstat (limited to 'src/kernel')
| -rw-r--r-- | src/kernel/ao_config.c | 34 | ||||
| -rw-r--r-- | src/kernel/ao_config.h | 5 | ||||
| -rw-r--r-- | src/kernel/ao_pyro.c | 28 | 
3 files changed, 63 insertions, 4 deletions
diff --git a/src/kernel/ao_config.c b/src/kernel/ao_config.c index 71445335..58fa7354 100644 --- a/src/kernel/ao_config.c +++ b/src/kernel/ao_config.c @@ -61,6 +61,7 @@ __xdata uint8_t ao_config_mutex;  #define AO_CONFIG_DEFAULT_RADIO_POWER		0x60  #endif  #define AO_CONFIG_DEFAULT_RADIO_AMP		0 +#define AO_CONFIG_DEFAULT_APRS_SSID		(ao_serial_number % 10)  #if HAS_EEPROM  static void @@ -192,6 +193,10 @@ _ao_config_get(void)  		if (minor < 18)  			ao_config.pyro_time = AO_CONFIG_DEFAULT_PYRO_TIME;  #endif +#if HAS_APRS +		if (minor < 19) +			ao_config.aprs_ssid = AO_CONFIG_DEFAULT_APRS_SSID; +#endif  		ao_config.minor = AO_CONFIG_MINOR;  		ao_config_dirty = 1;  	} @@ -283,6 +288,7 @@ ao_config_frequency_set(void) __reentrant  	ao_radio_recv_abort();  #endif  } +  #endif  #if HAS_FLIGHT @@ -737,6 +743,30 @@ ao_config_pyro_time_set(void)  }  #endif +#if HAS_APRS +void +ao_config_aprs_ssid_show(void) +{ +	printf ("APRS SSID: %d\n", +		ao_config.aprs_ssid); +} + +void +ao_config_aprs_ssid_set(void) +{ +	ao_cmd_decimal(); +	if (ao_cmd_status != ao_cmd_success) +		return; +	if (15 < ao_cmd_lex_i) { +		ao_cmd_status = ao_cmd_lex_error; +		return; +	} +	_ao_config_edit_start(); +	ao_config.aprs_ssid = ao_cmd_lex_i; +	_ao_config_edit_finish(); +} +#endif /* HAS_APRS */ +  struct ao_config_var {  	__code char	*str;  	void		(*set)(void) __reentrant; @@ -817,6 +847,10 @@ __code struct ao_config_var ao_config_vars[] = {  	{ "t <motion> <interval>\0Tracker configuration",  	  ao_config_tracker_set, ao_config_tracker_show },  #endif +#if HAS_APRS +	{ "S <ssid>\0Set APRS SSID (0-15)", +	  ao_config_aprs_ssid_set, ao_config_aprs_ssid_show }, +#endif  	{ "s\0Show",  	  ao_config_show,		0 },  #if HAS_EEPROM diff --git a/src/kernel/ao_config.h b/src/kernel/ao_config.h index 2b5cd352..70f9f33b 100644 --- a/src/kernel/ao_config.h +++ b/src/kernel/ao_config.h @@ -53,7 +53,7 @@  #endif  #define AO_CONFIG_MAJOR	1 -#define AO_CONFIG_MINOR	18 +#define AO_CONFIG_MINOR	19  #define AO_AES_LEN 16 @@ -102,6 +102,9 @@ struct ao_config {  #if AO_PYRO_NUM  	uint16_t	pyro_time;		/* minor version 18 */  #endif +#if HAS_APRS +	uint8_t		aprs_ssid;		/* minor version 19 */ +#endif  };  #define AO_IGNITE_MODE_DUAL		0 diff --git a/src/kernel/ao_pyro.c b/src/kernel/ao_pyro.c index 85d88d98..0b286466 100644 --- a/src/kernel/ao_pyro.c +++ b/src/kernel/ao_pyro.c @@ -69,6 +69,16 @@ ao_pyro_print_status(void)  uint16_t	ao_pyro_fired; +#ifndef PYRO_DBG +#define PYRO_DBG	0 +#endif + +#if PYRO_DBG +#define DBG(...)	do { printf("\t%d: ", (int) (pyro - ao_config.pyro)); printf(__VA_ARGS__); } while (0) +#else +#define DBG(...) +#endif +  /*   * Given a pyro structure, figure out   * if the current flight state satisfies all @@ -88,63 +98,73 @@ ao_pyro_ready(struct ao_pyro *pyro)  		case ao_pyro_accel_less:  			if (ao_accel <= pyro->accel_less)  				continue; +			DBG("accel %d > %d\n", ao_accel, pyro->accel_less);  			break;  		case ao_pyro_accel_greater:  			if (ao_accel >= pyro->accel_greater)  				continue; +			DBG("accel %d < %d\n", ao_accel, pyro->accel_greater);  			break; - -  		case ao_pyro_speed_less:  			if (ao_speed <= pyro->speed_less)  				continue; +			DBG("speed %d > %d\n", ao_speed, pyro->speed_less);  			break;  		case ao_pyro_speed_greater:  			if (ao_speed >= pyro->speed_greater)  				continue; +			DBG("speed %d < %d\n", ao_speed, pyro->speed_greater);  			break; -  		case ao_pyro_height_less:  			if (ao_height <= pyro->height_less)  				continue; +			DBG("height %d > %d\n", ao_height, pyro->height_less);  			break;  		case ao_pyro_height_greater:  			if (ao_height >= pyro->height_greater)  				continue; +			DBG("height %d < %d\n", ao_height, pyro->height_greater);  			break;  #if HAS_GYRO  		case ao_pyro_orient_less:  			if (ao_sample_orient <= pyro->orient_less)  				continue; +			DBG("orient %d > %d\n", ao_sample_orient, pyro->orient_less);  			break;  		case ao_pyro_orient_greater:  			if (ao_sample_orient >= pyro->orient_greater)  				continue; +			DBG("orient %d < %d\n", ao_sample_orient, pyro->orient_greater);  			break;  #endif  		case ao_pyro_time_less:  			if ((int16_t) (ao_time() - ao_boost_tick) <= pyro->time_less)  				continue; +			DBG("time %d > %d\n", (int16_t)(ao_time() - ao_boost_tick), pyro->time_less);  			break;  		case ao_pyro_time_greater:  			if ((int16_t) (ao_time() - ao_boost_tick) >= pyro->time_greater)  				continue; +			DBG("time %d < %d\n", (int16_t)(ao_time() - ao_boost_tick), pyro->time_greater);  			break;  		case ao_pyro_ascending:  			if (ao_speed > 0)  				continue; +			DBG("not ascending speed %d\n", ao_speed);  			break;  		case ao_pyro_descending:  			if (ao_speed < 0)  				continue; +			DBG("not descending speed %d\n", ao_speed);  			break;  		case ao_pyro_after_motor:  			if (ao_motor_number == pyro->motor)  				continue; +			DBG("motor %d != %d\n", ao_motor_number, pyro->motor);  			break;  		case ao_pyro_delay: @@ -154,10 +174,12 @@ ao_pyro_ready(struct ao_pyro *pyro)  		case ao_pyro_state_less:  			if (ao_flight_state < pyro->state_less)  				continue; +			DBG("state %d >= %d\n", ao_flight_state, pyro->state_less);  			break;  		case ao_pyro_state_greater_or_equal:  			if (ao_flight_state >= pyro->state_greater_or_equal)  				continue; +			DBG("state %d >= %d\n", ao_flight_state, pyro->state_less);  			break;  		default:  | 
