diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/Makefile | 1 | ||||
| -rw-r--r-- | src/drivers/ao_mma655x.c | 2 | ||||
| -rw-r--r-- | src/drivers/ao_ms5607.c | 47 | ||||
| -rw-r--r-- | src/fox1ihu/flash-loader/ao_pins.h | 2 | ||||
| -rw-r--r-- | src/kernel/ao.h | 2 | ||||
| -rw-r--r-- | src/kernel/ao_config.c | 3 | ||||
| -rw-r--r-- | src/kernel/ao_log.c | 12 | ||||
| -rw-r--r-- | src/kernel/ao_log.h | 2 | ||||
| -rw-r--r-- | src/kernel/ao_log_big.c | 56 | ||||
| -rw-r--r-- | src/kernel/ao_log_gps.c | 64 | ||||
| -rw-r--r-- | src/kernel/ao_log_mega.c | 106 | ||||
| -rw-r--r-- | src/kernel/ao_log_metrum.c | 54 | ||||
| -rw-r--r-- | src/kernel/ao_log_mini.c | 42 | ||||
| -rw-r--r-- | src/lpc/ao_serial_lpc.c | 5 | ||||
| -rw-r--r-- | src/stm/ao_timer.c | 5 | ||||
| -rw-r--r-- | src/stmf0/ao_serial_stm.c | 8 | 
16 files changed, 218 insertions, 193 deletions
diff --git a/src/Makefile b/src/Makefile index 0dafb5ec..a1ff84c2 100644 --- a/src/Makefile +++ b/src/Makefile @@ -25,7 +25,6 @@ SDCCDIRS=\  	telerepeat-v1.0  ARMM3DIRS=\ -	fox1ihu fox1ihu/flash-loader \  	easymega-v1.0 easymega-v1.0/flash-loader \  	telemega-v0.1 telemega-v0.1/flash-loader \  	telemega-v1.0 telemega-v1.0/flash-loader \ diff --git a/src/drivers/ao_mma655x.c b/src/drivers/ao_mma655x.c index b9f1709c..5d44bffd 100644 --- a/src/drivers/ao_mma655x.c +++ b/src/drivers/ao_mma655x.c @@ -30,8 +30,6 @@  #define PRINTD(l,...)   #endif -uint8_t	ao_mma655x_spi_index = AO_MMA655X_SPI_INDEX; -  static void  ao_mma655x_start(void) {  	ao_spi_get_bit(AO_MMA655X_CS_PORT, diff --git a/src/drivers/ao_ms5607.c b/src/drivers/ao_ms5607.c index 914e0c1b..53ed992a 100644 --- a/src/drivers/ao_ms5607.c +++ b/src/drivers/ao_ms5607.c @@ -57,10 +57,11 @@ ao_ms5607_crc(uint8_t *prom)  	uint8_t 	cnt;  	uint16_t	n_rem = 0;  	uint8_t		n_bit; +	uint8_t		*p = prom;  	prom[15] = 0;  	for (cnt = 0; cnt < 16; cnt++) { -		n_rem ^= prom[cnt]; +		n_rem ^= *p++;  		for (n_bit = 8; n_bit > 0; n_bit--) {  			if (n_rem & 0x8000)  				n_rem = (n_rem << 1) ^ 0x3000; @@ -73,12 +74,33 @@ ao_ms5607_crc(uint8_t *prom)  	return n_rem;  } +static int +ao_ms5607_prom_valid(uint8_t *prom) +{ +	uint8_t	crc; +	int	i; +	uint8_t *p; + +	/* Look for a value other than 0x0000 or 0xffff */ +	p = prom; +	for (i = 0; i < 16; i++) +		if (*p++ + 1 > 1) +			break; +	if (i == 16) +		return FALSE; + +	crc = ao_ms5607_crc(prom); +	if (crc != (prom[15] & 0xf)) +		return FALSE; + +	return TRUE; +} +  static void  ao_ms5607_prom_read(__xdata struct ao_ms5607_prom *prom)  { -	uint8_t			addr; -	uint8_t			crc; -	__xdata uint16_t	*r; +	uint8_t		addr; +	uint16_t	*r;  	r = (__xdata uint16_t *) prom;  	for (addr = 0; addr < 8; addr++) { @@ -89,22 +111,19 @@ ao_ms5607_prom_read(__xdata struct ao_ms5607_prom *prom)  		ao_ms5607_stop();  		r++;  	} -	crc = ao_ms5607_crc((uint8_t *) prom); -	if (crc != (((uint8_t *) prom)[15] & 0xf)) { -#if HAS_TASK -		printf ("MS5607 PROM CRC error (computed %x actual %x)\n", -			crc, (((uint8_t *) prom)[15] & 0xf)); -		flush(); -#endif + +	if (!ao_ms5607_prom_valid((uint8_t *) prom))  		ao_panic(AO_PANIC_SELF_TEST_MS5607); -	}  #if __BYTE_ORDER == __LITTLE_ENDIAN  	/* Byte swap */  	r = (uint16_t *) prom;  	for (addr = 0; addr < 8; addr++) { -		uint16_t	t = *r; -		*r++ = (t << 8) | (t >> 8); +		uint8_t		*t = (uint8_t *) r; +		uint8_t	a = t[0]; +		t[0] = t[1]; +		t[1] = a; +		r++;  	}  #endif  } diff --git a/src/fox1ihu/flash-loader/ao_pins.h b/src/fox1ihu/flash-loader/ao_pins.h index 19f29b08..c4fa69bd 100644 --- a/src/fox1ihu/flash-loader/ao_pins.h +++ b/src/fox1ihu/flash-loader/ao_pins.h @@ -45,7 +45,7 @@  		AO_WATCHDOG_PORT->odr ^= (1 << AO_WATCHDOG_BIT);	\  	} while (0) -#define HAS_TICK		1 +#define HAS_TICK		0  #include <ao_flash_stm_pins.h>  /* Attached signal, PB8 */ diff --git a/src/kernel/ao.h b/src/kernel/ao.h index 2bd0e367..0a3981d7 100644 --- a/src/kernel/ao.h +++ b/src/kernel/ao.h @@ -662,7 +662,7 @@ ao_radio_init(void);  #if HAS_MONITOR -extern const char const * const ao_state_names[]; +extern const char * const ao_state_names[];  #define AO_MONITOR_RING	8 diff --git a/src/kernel/ao_config.c b/src/kernel/ao_config.c index 25634ffc..86d4838f 100644 --- a/src/kernel/ao_config.c +++ b/src/kernel/ao_config.c @@ -243,6 +243,9 @@ _ao_config_get(void)  	if (ao_force_freq) {  		ao_config.frequency = 434550;  		ao_config.radio_cal = ao_radio_cal; +#if HAS_RADIO_RATE +		ao_config.radio_rate = AO_CONFIG_DEFAULT_RADIO_RATE; +#endif  		ao_xmemcpy(&ao_config.callsign, CODE_TO_XDATA(AO_CONFIG_DEFAULT_CALLSIGN),  		       sizeof(AO_CONFIG_DEFAULT_CALLSIGN) - 1);  	} diff --git a/src/kernel/ao_log.c b/src/kernel/ao_log.c index f70c7232..5fb086ce 100644 --- a/src/kernel/ao_log.c +++ b/src/kernel/ao_log.c @@ -117,7 +117,7 @@ ao_log_erase_mark(void)   * structure.   */ -__xdata ao_log_type log; +__xdata ao_log_type ao_log_data;  static uint8_t  ao_log_csum(__xdata uint8_t *b) __reentrant @@ -154,7 +154,7 @@ ao_log_write(__xdata ao_log_type *log) __reentrant  uint8_t  ao_log_check_data(void)  { -	if (ao_log_csum((uint8_t *) &log) != 0) +	if (ao_log_csum((uint8_t *) &ao_log_data) != 0)  		return 0;  	return 1;  } @@ -162,7 +162,7 @@ ao_log_check_data(void)  uint8_t  ao_log_check_clear(void)  { -	uint8_t *b = (uint8_t *) &log; +	uint8_t *b = (uint8_t *) &ao_log_data;  	uint8_t i;  	for (i = 0; i < sizeof (ao_log_type); i++) { @@ -176,17 +176,17 @@ int16_t  ao_log_flight(uint8_t slot)  {  	if (!ao_storage_read(ao_log_pos(slot), -			     &log, +			     &ao_log_data,  			     sizeof (ao_log_type)))  		return -(int16_t) (slot + 1);  	if (ao_log_check_clear())  		return 0; -	if (!ao_log_check_data() || log.type != AO_LOG_FLIGHT) +	if (!ao_log_check_data() || ao_log_data.type != AO_LOG_FLIGHT)  		return -(int16_t) (slot + 1); -	return log.u.flight.flight; +	return ao_log_data.u.flight.flight;  }  #endif diff --git a/src/kernel/ao_log.h b/src/kernel/ao_log.h index 5f04ef9a..e2f1e0e4 100644 --- a/src/kernel/ao_log.h +++ b/src/kernel/ao_log.h @@ -507,7 +507,7 @@ typedef struct ao_log_record ao_log_type;  #endif  #ifndef AO_LOG_UNCOMMON -extern __xdata ao_log_type log; +extern __xdata ao_log_type ao_log_data;  #define AO_LOG_SIZE sizeof(ao_log_type) diff --git a/src/kernel/ao_log_big.c b/src/kernel/ao_log_big.c index 28a893c7..7d7332e9 100644 --- a/src/kernel/ao_log_big.c +++ b/src/kernel/ao_log_big.c @@ -41,13 +41,13 @@ ao_log(void)  	while (!ao_log_running)  		ao_sleep(&ao_log_running); -	log.type = AO_LOG_FLIGHT; -	log.tick = ao_sample_tick; +	ao_log_data.type = AO_LOG_FLIGHT; +	ao_log_data.tick = ao_sample_tick;  #if HAS_ACCEL -	log.u.flight.ground_accel = ao_ground_accel; +	ao_log_data.u.flight.ground_accel = ao_ground_accel;  #endif -	log.u.flight.flight = ao_flight_number; -	ao_log_write(&log); +	ao_log_data.u.flight.flight = ao_flight_number; +	ao_log_write(&ao_log_data);  	/* Write the whole contents of the ring to the log  	 * when starting up. @@ -58,38 +58,38 @@ ao_log(void)  	for (;;) {  		/* Write samples to EEPROM */  		while (ao_log_data_pos != ao_sample_data) { -			log.tick = ao_data_ring[ao_log_data_pos].tick; -			if ((int16_t) (log.tick - next_sensor) >= 0) { -				log.type = AO_LOG_SENSOR; -				log.u.sensor.accel = ao_data_ring[ao_log_data_pos].adc.accel; -				log.u.sensor.pres = ao_data_ring[ao_log_data_pos].adc.pres; -				ao_log_write(&log); +			ao_log_data.tick = ao_data_ring[ao_log_data_pos].tick; +			if ((int16_t) (ao_log_data.tick - next_sensor) >= 0) { +				ao_log_data.type = AO_LOG_SENSOR; +				ao_log_data.u.sensor.accel = ao_data_ring[ao_log_data_pos].adc.accel; +				ao_log_data.u.sensor.pres = ao_data_ring[ao_log_data_pos].adc.pres; +				ao_log_write(&ao_log_data);  				if (ao_log_state <= ao_flight_coast) -					next_sensor = log.tick + AO_SENSOR_INTERVAL_ASCENT; +					next_sensor = ao_log_data.tick + AO_SENSOR_INTERVAL_ASCENT;  				else -					next_sensor = log.tick + AO_SENSOR_INTERVAL_DESCENT; +					next_sensor = ao_log_data.tick + AO_SENSOR_INTERVAL_DESCENT;  			} -			if ((int16_t) (log.tick - next_other) >= 0) { -				log.type = AO_LOG_TEMP_VOLT; -				log.u.temp_volt.temp = ao_data_ring[ao_log_data_pos].adc.temp; -				log.u.temp_volt.v_batt = ao_data_ring[ao_log_data_pos].adc.v_batt; -				ao_log_write(&log); -				log.type = AO_LOG_DEPLOY; -				log.u.deploy.drogue = ao_data_ring[ao_log_data_pos].adc.sense_d; -				log.u.deploy.main = ao_data_ring[ao_log_data_pos].adc.sense_m; -				ao_log_write(&log); -				next_other = log.tick + AO_OTHER_INTERVAL; +			if ((int16_t) (ao_log_data.tick - next_other) >= 0) { +				ao_log_data.type = AO_LOG_TEMP_VOLT; +				ao_log_data.u.temp_volt.temp = ao_data_ring[ao_log_data_pos].adc.temp; +				ao_log_data.u.temp_volt.v_batt = ao_data_ring[ao_log_data_pos].adc.v_batt; +				ao_log_write(&ao_log_data); +				ao_log_data.type = AO_LOG_DEPLOY; +				ao_log_data.u.deploy.drogue = ao_data_ring[ao_log_data_pos].adc.sense_d; +				ao_log_data.u.deploy.main = ao_data_ring[ao_log_data_pos].adc.sense_m; +				ao_log_write(&ao_log_data); +				next_other = ao_log_data.tick + AO_OTHER_INTERVAL;  			}  			ao_log_data_pos = ao_data_ring_next(ao_log_data_pos);  		}  		/* Write state change to EEPROM */  		if (ao_flight_state != ao_log_state) {  			ao_log_state = ao_flight_state; -			log.type = AO_LOG_STATE; -			log.tick = ao_sample_tick; -			log.u.state.state = ao_log_state; -			log.u.state.reason = 0; -			ao_log_write(&log); +			ao_log_data.type = AO_LOG_STATE; +			ao_log_data.tick = ao_sample_tick; +			ao_log_data.u.state.state = ao_log_state; +			ao_log_data.u.state.reason = 0; +			ao_log_write(&ao_log_data);  			if (ao_log_state == ao_flight_landed)  				ao_log_stop(); diff --git a/src/kernel/ao_log_gps.c b/src/kernel/ao_log_gps.c index a55d93f1..7284932c 100644 --- a/src/kernel/ao_log_gps.c +++ b/src/kernel/ao_log_gps.c @@ -27,37 +27,37 @@  void  ao_log_gps_flight(void)  { -	log.type = AO_LOG_FLIGHT; -	log.tick = ao_time(); -	log.u.flight.flight = ao_flight_number; -	ao_log_write(&log); +	ao_log_data.type = AO_LOG_FLIGHT; +	ao_log_data.tick = ao_time(); +	ao_log_data.u.flight.flight = ao_flight_number; +	ao_log_write(&ao_log_data);  }  void  ao_log_gps_data(uint16_t tick, struct ao_telemetry_location *gps_data)  { -	log.tick = tick; -	log.type = AO_LOG_GPS_TIME; -	log.u.gps.latitude = gps_data->latitude; -	log.u.gps.longitude = gps_data->longitude; -	log.u.gps.altitude_low = gps_data->altitude_low; -	log.u.gps.altitude_high = gps_data->altitude_high; +	ao_log_data.tick = tick; +	ao_log_data.type = AO_LOG_GPS_TIME; +	ao_log_data.u.gps.latitude = gps_data->latitude; +	ao_log_data.u.gps.longitude = gps_data->longitude; +	ao_log_data.u.gps.altitude_low = gps_data->altitude_low; +	ao_log_data.u.gps.altitude_high = gps_data->altitude_high; -	log.u.gps.hour = gps_data->hour; -	log.u.gps.minute = gps_data->minute; -	log.u.gps.second = gps_data->second; -	log.u.gps.flags = gps_data->flags; -	log.u.gps.year = gps_data->year; -	log.u.gps.month = gps_data->month; -	log.u.gps.day = gps_data->day; -	log.u.gps.course = gps_data->course; -	log.u.gps.ground_speed = gps_data->ground_speed; -	log.u.gps.climb_rate = gps_data->climb_rate; -	log.u.gps.pdop = gps_data->pdop; -	log.u.gps.hdop = gps_data->hdop; -	log.u.gps.vdop = gps_data->vdop; -	log.u.gps.mode = gps_data->mode; -	ao_log_write(&log); +	ao_log_data.u.gps.hour = gps_data->hour; +	ao_log_data.u.gps.minute = gps_data->minute; +	ao_log_data.u.gps.second = gps_data->second; +	ao_log_data.u.gps.flags = gps_data->flags; +	ao_log_data.u.gps.year = gps_data->year; +	ao_log_data.u.gps.month = gps_data->month; +	ao_log_data.u.gps.day = gps_data->day; +	ao_log_data.u.gps.course = gps_data->course; +	ao_log_data.u.gps.ground_speed = gps_data->ground_speed; +	ao_log_data.u.gps.climb_rate = gps_data->climb_rate; +	ao_log_data.u.gps.pdop = gps_data->pdop; +	ao_log_data.u.gps.hdop = gps_data->hdop; +	ao_log_data.u.gps.vdop = gps_data->vdop; +	ao_log_data.u.gps.mode = gps_data->mode; +	ao_log_write(&ao_log_data);  }  void @@ -65,27 +65,27 @@ ao_log_gps_tracking(uint16_t tick, struct ao_telemetry_satellite *gps_tracking_d  {  	uint8_t c, n, i; -	log.tick = tick; -	log.type = AO_LOG_GPS_SAT; +	ao_log_data.tick = tick; +	ao_log_data.type = AO_LOG_GPS_SAT;  	i = 0;  	n = gps_tracking_data->channels;  	for (c = 0; c < n; c++) -		if ((log.u.gps_sat.sats[i].svid = gps_tracking_data->sats[c].svid)) +		if ((ao_log_data.u.gps_sat.sats[i].svid = gps_tracking_data->sats[c].svid))  		{ -			log.u.gps_sat.sats[i].c_n = gps_tracking_data->sats[c].c_n_1; +			ao_log_data.u.gps_sat.sats[i].c_n = gps_tracking_data->sats[c].c_n_1;  			i++;  			if (i >= 12)  				break;  		} -	log.u.gps_sat.channels = i; -	ao_log_write(&log); +	ao_log_data.u.gps_sat.channels = i; +	ao_log_write(&ao_log_data);  }  int8_t  ao_log_check(uint32_t pos)  {  	if (!ao_storage_read(pos, -			     &log, +			     &ao_log_data,  			     sizeof (struct ao_log_gps)))  		return AO_LOG_INVALID; diff --git a/src/kernel/ao_log_mega.c b/src/kernel/ao_log_mega.c index c6bdf1e2..0ae4e536 100644 --- a/src/kernel/ao_log_mega.c +++ b/src/kernel/ao_log_mega.c @@ -47,22 +47,22 @@ ao_log(void)  		ao_sleep(&ao_log_running);  #if HAS_FLIGHT -	log.type = AO_LOG_FLIGHT; -	log.tick = ao_sample_tick; +	ao_log_data.type = AO_LOG_FLIGHT; +	ao_log_data.tick = ao_sample_tick;  #if HAS_ACCEL -	log.u.flight.ground_accel = ao_ground_accel; +	ao_log_data.u.flight.ground_accel = ao_ground_accel;  #endif  #if HAS_GYRO -	log.u.flight.ground_accel_along = ao_ground_accel_along; -	log.u.flight.ground_accel_across = ao_ground_accel_across; -	log.u.flight.ground_accel_through = ao_ground_accel_through; -	log.u.flight.ground_roll = ao_ground_roll; -	log.u.flight.ground_pitch = ao_ground_pitch; -	log.u.flight.ground_yaw = ao_ground_yaw; +	ao_log_data.u.flight.ground_accel_along = ao_ground_accel_along; +	ao_log_data.u.flight.ground_accel_across = ao_ground_accel_across; +	ao_log_data.u.flight.ground_accel_through = ao_ground_accel_through; +	ao_log_data.u.flight.ground_roll = ao_ground_roll; +	ao_log_data.u.flight.ground_pitch = ao_ground_pitch; +	ao_log_data.u.flight.ground_yaw = ao_ground_yaw;  #endif -	log.u.flight.ground_pres = ao_ground_pres; -	log.u.flight.flight = ao_flight_number; -	ao_log_write(&log); +	ao_log_data.u.flight.ground_pres = ao_ground_pres; +	ao_log_data.u.flight.flight = ao_flight_number; +	ao_log_write(&ao_log_data);  #endif  	/* Write the whole contents of the ring to the log @@ -74,54 +74,54 @@ ao_log(void)  	for (;;) {  		/* Write samples to EEPROM */  		while (ao_log_data_pos != ao_data_head) { -			log.tick = ao_data_ring[ao_log_data_pos].tick; -			if ((int16_t) (log.tick - next_sensor) >= 0) { -				log.type = AO_LOG_SENSOR; +			ao_log_data.tick = ao_data_ring[ao_log_data_pos].tick; +			if ((int16_t) (ao_log_data.tick - next_sensor) >= 0) { +				ao_log_data.type = AO_LOG_SENSOR;  #if HAS_MS5607 -				log.u.sensor.pres = ao_data_ring[ao_log_data_pos].ms5607_raw.pres; -				log.u.sensor.temp = ao_data_ring[ao_log_data_pos].ms5607_raw.temp; +				ao_log_data.u.sensor.pres = ao_data_ring[ao_log_data_pos].ms5607_raw.pres; +				ao_log_data.u.sensor.temp = ao_data_ring[ao_log_data_pos].ms5607_raw.temp;  #endif  #if HAS_MPU6000 -				log.u.sensor.accel_x = ao_data_ring[ao_log_data_pos].mpu6000.accel_x; -				log.u.sensor.accel_y = ao_data_ring[ao_log_data_pos].mpu6000.accel_y; -				log.u.sensor.accel_z = ao_data_ring[ao_log_data_pos].mpu6000.accel_z; -				log.u.sensor.gyro_x = ao_data_ring[ao_log_data_pos].mpu6000.gyro_x; -				log.u.sensor.gyro_y = ao_data_ring[ao_log_data_pos].mpu6000.gyro_y; -				log.u.sensor.gyro_z = ao_data_ring[ao_log_data_pos].mpu6000.gyro_z; +				ao_log_data.u.sensor.accel_x = ao_data_ring[ao_log_data_pos].mpu6000.accel_x; +				ao_log_data.u.sensor.accel_y = ao_data_ring[ao_log_data_pos].mpu6000.accel_y; +				ao_log_data.u.sensor.accel_z = ao_data_ring[ao_log_data_pos].mpu6000.accel_z; +				ao_log_data.u.sensor.gyro_x = ao_data_ring[ao_log_data_pos].mpu6000.gyro_x; +				ao_log_data.u.sensor.gyro_y = ao_data_ring[ao_log_data_pos].mpu6000.gyro_y; +				ao_log_data.u.sensor.gyro_z = ao_data_ring[ao_log_data_pos].mpu6000.gyro_z;  #endif  #if HAS_HMC5883 -				log.u.sensor.mag_x = ao_data_ring[ao_log_data_pos].hmc5883.x; -				log.u.sensor.mag_z = ao_data_ring[ao_log_data_pos].hmc5883.z; -				log.u.sensor.mag_y = ao_data_ring[ao_log_data_pos].hmc5883.y; +				ao_log_data.u.sensor.mag_x = ao_data_ring[ao_log_data_pos].hmc5883.x; +				ao_log_data.u.sensor.mag_z = ao_data_ring[ao_log_data_pos].hmc5883.z; +				ao_log_data.u.sensor.mag_y = ao_data_ring[ao_log_data_pos].hmc5883.y;  #endif  #if HAS_MPU9250 -				log.u.sensor.accel_x = ao_data_ring[ao_log_data_pos].mpu9250.accel_x; -				log.u.sensor.accel_y = ao_data_ring[ao_log_data_pos].mpu9250.accel_y; -				log.u.sensor.accel_z = ao_data_ring[ao_log_data_pos].mpu9250.accel_z; -				log.u.sensor.gyro_x = ao_data_ring[ao_log_data_pos].mpu9250.gyro_x; -				log.u.sensor.gyro_y = ao_data_ring[ao_log_data_pos].mpu9250.gyro_y; -				log.u.sensor.gyro_z = ao_data_ring[ao_log_data_pos].mpu9250.gyro_z; -				log.u.sensor.mag_x = ao_data_ring[ao_log_data_pos].mpu9250.mag_x; -				log.u.sensor.mag_z = ao_data_ring[ao_log_data_pos].mpu9250.mag_z; -				log.u.sensor.mag_y = ao_data_ring[ao_log_data_pos].mpu9250.mag_y; +				ao_log_data.u.sensor.accel_x = ao_data_ring[ao_log_data_pos].mpu9250.accel_x; +				ao_log_data.u.sensor.accel_y = ao_data_ring[ao_log_data_pos].mpu9250.accel_y; +				ao_log_data.u.sensor.accel_z = ao_data_ring[ao_log_data_pos].mpu9250.accel_z; +				ao_log_data.u.sensor.gyro_x = ao_data_ring[ao_log_data_pos].mpu9250.gyro_x; +				ao_log_data.u.sensor.gyro_y = ao_data_ring[ao_log_data_pos].mpu9250.gyro_y; +				ao_log_data.u.sensor.gyro_z = ao_data_ring[ao_log_data_pos].mpu9250.gyro_z; +				ao_log_data.u.sensor.mag_x = ao_data_ring[ao_log_data_pos].mpu9250.mag_x; +				ao_log_data.u.sensor.mag_z = ao_data_ring[ao_log_data_pos].mpu9250.mag_z; +				ao_log_data.u.sensor.mag_y = ao_data_ring[ao_log_data_pos].mpu9250.mag_y;  #endif -				log.u.sensor.accel = ao_data_accel(&ao_data_ring[ao_log_data_pos]); -				ao_log_write(&log); +				ao_log_data.u.sensor.accel = ao_data_accel(&ao_data_ring[ao_log_data_pos]); +				ao_log_write(&ao_log_data);  				if (ao_log_state <= ao_flight_coast) -					next_sensor = log.tick + AO_SENSOR_INTERVAL_ASCENT; +					next_sensor = ao_log_data.tick + AO_SENSOR_INTERVAL_ASCENT;  				else -					next_sensor = log.tick + AO_SENSOR_INTERVAL_DESCENT; +					next_sensor = ao_log_data.tick + AO_SENSOR_INTERVAL_DESCENT;  			} -			if ((int16_t) (log.tick - next_other) >= 0) { -				log.type = AO_LOG_TEMP_VOLT; -				log.u.volt.v_batt = ao_data_ring[ao_log_data_pos].adc.v_batt; -				log.u.volt.v_pbatt = ao_data_ring[ao_log_data_pos].adc.v_pbatt; -				log.u.volt.n_sense = AO_ADC_NUM_SENSE; +			if ((int16_t) (ao_log_data.tick - next_other) >= 0) { +				ao_log_data.type = AO_LOG_TEMP_VOLT; +				ao_log_data.u.volt.v_batt = ao_data_ring[ao_log_data_pos].adc.v_batt; +				ao_log_data.u.volt.v_pbatt = ao_data_ring[ao_log_data_pos].adc.v_pbatt; +				ao_log_data.u.volt.n_sense = AO_ADC_NUM_SENSE;  				for (i = 0; i < AO_ADC_NUM_SENSE; i++) -					log.u.volt.sense[i] = ao_data_ring[ao_log_data_pos].adc.sense[i]; -				log.u.volt.pyro = ao_pyro_fired; -				ao_log_write(&log); -				next_other = log.tick + AO_OTHER_INTERVAL; +					ao_log_data.u.volt.sense[i] = ao_data_ring[ao_log_data_pos].adc.sense[i]; +				ao_log_data.u.volt.pyro = ao_pyro_fired; +				ao_log_write(&ao_log_data); +				next_other = ao_log_data.tick + AO_OTHER_INTERVAL;  			}  			ao_log_data_pos = ao_data_ring_next(ao_log_data_pos);  		} @@ -129,11 +129,11 @@ ao_log(void)  		/* Write state change to EEPROM */  		if (ao_flight_state != ao_log_state) {  			ao_log_state = ao_flight_state; -			log.type = AO_LOG_STATE; -			log.tick = ao_time(); -			log.u.state.state = ao_log_state; -			log.u.state.reason = 0; -			ao_log_write(&log); +			ao_log_data.type = AO_LOG_STATE; +			ao_log_data.tick = ao_time(); +			ao_log_data.u.state.state = ao_log_state; +			ao_log_data.u.state.reason = 0; +			ao_log_write(&ao_log_data);  			if (ao_log_state == ao_flight_landed)  				ao_log_stop(); diff --git a/src/kernel/ao_log_metrum.c b/src/kernel/ao_log_metrum.c index afb8f637..34729070 100644 --- a/src/kernel/ao_log_metrum.c +++ b/src/kernel/ao_log_metrum.c @@ -46,14 +46,14 @@ ao_log(void)  		ao_sleep(&ao_log_running);  #if HAS_FLIGHT -	log.type = AO_LOG_FLIGHT; -	log.tick = ao_sample_tick; +	ao_log_data.type = AO_LOG_FLIGHT; +	ao_log_data.tick = ao_sample_tick;  #if HAS_ACCEL -	log.u.flight.ground_accel = ao_ground_accel; +	ao_log_data.u.flight.ground_accel = ao_ground_accel;  #endif -	log.u.flight.ground_pres = ao_ground_pres; -	log.u.flight.flight = ao_flight_number; -	ao_log_write(&log); +	ao_log_data.u.flight.ground_pres = ao_ground_pres; +	ao_log_data.u.flight.flight = ao_flight_number; +	ao_log_write(&ao_log_data);  #endif  	/* Write the whole contents of the ring to the log @@ -65,29 +65,29 @@ ao_log(void)  	for (;;) {  		/* Write samples to EEPROM */  		while (ao_log_data_pos != ao_data_head) { -			log.tick = ao_data_ring[ao_log_data_pos].tick; -			if ((int16_t) (log.tick - next_sensor) >= 0) { -				log.type = AO_LOG_SENSOR; +			ao_log_data.tick = ao_data_ring[ao_log_data_pos].tick; +			if ((int16_t) (ao_log_data.tick - next_sensor) >= 0) { +				ao_log_data.type = AO_LOG_SENSOR;  #if HAS_MS5607 -				log.u.sensor.pres = ao_data_ring[ao_log_data_pos].ms5607_raw.pres; -				log.u.sensor.temp = ao_data_ring[ao_log_data_pos].ms5607_raw.temp; +				ao_log_data.u.sensor.pres = ao_data_ring[ao_log_data_pos].ms5607_raw.pres; +				ao_log_data.u.sensor.temp = ao_data_ring[ao_log_data_pos].ms5607_raw.temp;  #endif  #if HAS_ACCEL -				log.u.sensor.accel = ao_data_accel(&ao_data_ring[ao_log_data_pos]); +				ao_log_data.u.sensor.accel = ao_data_accel(&ao_data_ring[ao_log_data_pos]);  #endif -				ao_log_write(&log); +				ao_log_write(&ao_log_data);  				if (ao_log_state <= ao_flight_coast) -					next_sensor = log.tick + AO_SENSOR_INTERVAL_ASCENT; +					next_sensor = ao_log_data.tick + AO_SENSOR_INTERVAL_ASCENT;  				else -					next_sensor = log.tick + AO_SENSOR_INTERVAL_DESCENT; +					next_sensor = ao_log_data.tick + AO_SENSOR_INTERVAL_DESCENT;  			} -			if ((int16_t) (log.tick - next_other) >= 0) { -				log.type = AO_LOG_TEMP_VOLT; -				log.u.volt.v_batt = ao_data_ring[ao_log_data_pos].adc.v_batt; -				log.u.volt.sense_a = ao_data_ring[ao_log_data_pos].adc.sense_a; -				log.u.volt.sense_m = ao_data_ring[ao_log_data_pos].adc.sense_m; -				ao_log_write(&log); -				next_other = log.tick + AO_OTHER_INTERVAL; +			if ((int16_t) (ao_log_data.tick - next_other) >= 0) { +				ao_log_data.type = AO_LOG_TEMP_VOLT; +				ao_log_data.u.volt.v_batt = ao_data_ring[ao_log_data_pos].adc.v_batt; +				ao_log_data.u.volt.sense_a = ao_data_ring[ao_log_data_pos].adc.sense_a; +				ao_log_data.u.volt.sense_m = ao_data_ring[ao_log_data_pos].adc.sense_m; +				ao_log_write(&ao_log_data); +				next_other = ao_log_data.tick + AO_OTHER_INTERVAL;  			}  			ao_log_data_pos = ao_data_ring_next(ao_log_data_pos);  		} @@ -95,11 +95,11 @@ ao_log(void)  		/* Write state change to EEPROM */  		if (ao_flight_state != ao_log_state) {  			ao_log_state = ao_flight_state; -			log.type = AO_LOG_STATE; -			log.tick = ao_time(); -			log.u.state.state = ao_log_state; -			log.u.state.reason = 0; -			ao_log_write(&log); +			ao_log_data.type = AO_LOG_STATE; +			ao_log_data.tick = ao_time(); +			ao_log_data.u.state.state = ao_log_state; +			ao_log_data.u.state.reason = 0; +			ao_log_write(&ao_log_data);  			if (ao_log_state == ao_flight_landed)  				ao_log_stop(); diff --git a/src/kernel/ao_log_mini.c b/src/kernel/ao_log_mini.c index af2fa605..12c5d6bb 100644 --- a/src/kernel/ao_log_mini.c +++ b/src/kernel/ao_log_mini.c @@ -44,11 +44,11 @@ ao_log(void)  		ao_sleep(&ao_log_running);  #if HAS_FLIGHT -	log.type = AO_LOG_FLIGHT; -	log.tick = ao_sample_tick; -	log.u.flight.flight = ao_flight_number; -	log.u.flight.ground_pres = ao_ground_pres; -	ao_log_write(&log); +	ao_log_data.type = AO_LOG_FLIGHT; +	ao_log_data.tick = ao_sample_tick; +	ao_log_data.u.flight.flight = ao_flight_number; +	ao_log_data.u.flight.ground_pres = ao_ground_pres; +	ao_log_write(&ao_log_data);  #endif  	/* Write the whole contents of the ring to the log @@ -60,23 +60,23 @@ ao_log(void)  	for (;;) {  		/* Write samples to EEPROM */  		while (ao_log_data_pos != ao_data_head) { -			log.tick = ao_data_ring[ao_log_data_pos].tick; -			if ((int16_t) (log.tick - next_sensor) >= 0) { -				log.type = AO_LOG_SENSOR; -				ao_log_pack24(log.u.sensor.pres, +			ao_log_data.tick = ao_data_ring[ao_log_data_pos].tick; +			if ((int16_t) (ao_log_data.tick - next_sensor) >= 0) { +				ao_log_data.type = AO_LOG_SENSOR; +				ao_log_pack24(ao_log_data.u.sensor.pres,  					      ao_data_ring[ao_log_data_pos].ms5607_raw.pres); -				ao_log_pack24(log.u.sensor.temp, +				ao_log_pack24(ao_log_data.u.sensor.temp,  					      ao_data_ring[ao_log_data_pos].ms5607_raw.temp);  #if AO_LOG_FORMAT != AO_LOG_FORMAT_DETHERM -				log.u.sensor.sense_a = ao_data_ring[ao_log_data_pos].adc.sense_a; -				log.u.sensor.sense_m = ao_data_ring[ao_log_data_pos].adc.sense_m; -				log.u.sensor.v_batt = ao_data_ring[ao_log_data_pos].adc.v_batt; +				ao_log_data.u.sensor.sense_a = ao_data_ring[ao_log_data_pos].adc.sense_a; +				ao_log_data.u.sensor.sense_m = ao_data_ring[ao_log_data_pos].adc.sense_m; +				ao_log_data.u.sensor.v_batt = ao_data_ring[ao_log_data_pos].adc.v_batt;  #endif -				ao_log_write(&log); +				ao_log_write(&ao_log_data);  				if (ao_log_state <= ao_flight_coast) -					next_sensor = log.tick + AO_SENSOR_INTERVAL_ASCENT; +					next_sensor = ao_log_data.tick + AO_SENSOR_INTERVAL_ASCENT;  				else -					next_sensor = log.tick + AO_SENSOR_INTERVAL_DESCENT; +					next_sensor = ao_log_data.tick + AO_SENSOR_INTERVAL_DESCENT;  			}  			ao_log_data_pos = ao_data_ring_next(ao_log_data_pos);  		} @@ -84,11 +84,11 @@ ao_log(void)  		/* Write state change to EEPROM */  		if (ao_flight_state != ao_log_state) {  			ao_log_state = ao_flight_state; -			log.type = AO_LOG_STATE; -			log.tick = ao_time(); -			log.u.state.state = ao_log_state; -			log.u.state.reason = 0; -			ao_log_write(&log); +			ao_log_data.type = AO_LOG_STATE; +			ao_log_data.tick = ao_time(); +			ao_log_data.u.state.state = ao_log_state; +			ao_log_data.u.state.reason = 0; +			ao_log_write(&ao_log_data);  			if (ao_log_state == ao_flight_landed)  				ao_log_stop(); diff --git a/src/lpc/ao_serial_lpc.c b/src/lpc/ao_serial_lpc.c index 0011744d..d5cf930a 100644 --- a/src/lpc/ao_serial_lpc.c +++ b/src/lpc/ao_serial_lpc.c @@ -66,8 +66,9 @@ lpc_usart_isr(void)  	}  	if (wake_input) {  		ao_wakeup(&ao_usart_rx_fifo); -		if (stdin) -			ao_wakeup(&ao_stdin_ready); +#if USE_SERIAL_0_STDIN +		ao_wakeup(&ao_stdin_ready); +#endif  	}  } diff --git a/src/stm/ao_timer.c b/src/stm/ao_timer.c index 7b526902..9d118b72 100644 --- a/src/stm/ao_timer.c +++ b/src/stm/ao_timer.c @@ -26,6 +26,8 @@  #define HAS_TICK 1  #endif +#if HAS_TICK || defined(AO_TIMER_HOOK) +  #if HAS_TICK  volatile AO_TICK_TYPE ao_tick_count; @@ -34,6 +36,7 @@ ao_time(void)  {  	return ao_tick_count;  } +#endif  #if AO_DATA_ALL  volatile __data uint8_t	ao_data_interval = 1; @@ -44,7 +47,9 @@ void stm_systick_isr(void)  {  	ao_validate_cur_stack();  	if (stm_systick.csr & (1 << STM_SYSTICK_CSR_COUNTFLAG)) { +#if HAS_TICK  		++ao_tick_count; +#endif  #if HAS_TASK_QUEUE  		if (ao_task_alarm_tick && (int16_t) (ao_tick_count - ao_task_alarm_tick) >= 0)  			ao_task_check_alarm((uint16_t) ao_tick_count); diff --git a/src/stmf0/ao_serial_stm.c b/src/stmf0/ao_serial_stm.c index 59cfde2e..5097041a 100644 --- a/src/stmf0/ao_serial_stm.c +++ b/src/stmf0/ao_serial_stm.c @@ -56,14 +56,14 @@ _ao_usart_cts(struct ao_stm_usart *usart)  #endif  static void -_ao_usart_rx(struct ao_stm_usart *usart, int stdin) +_ao_usart_rx(struct ao_stm_usart *usart, int is_stdin)  {  	if (usart->reg->isr & (1 << STM_USART_ISR_RXNE)) {  		usart->reg->icr = (1 << STM_USART_ICR_ORECF);  		if (!ao_fifo_full(usart->rx_fifo)) {  			ao_fifo_insert(usart->rx_fifo, usart->reg->rdr);  			ao_wakeup(&usart->rx_fifo); -			if (stdin) +			if (is_stdin)  				ao_wakeup(&ao_stdin_ready);  #if HAS_SERIAL_SW_FLOW  			/* If the fifo is nearly full, turn off RTS and wait @@ -81,9 +81,9 @@ _ao_usart_rx(struct ao_stm_usart *usart, int stdin)  }  static void -ao_usart_isr(struct ao_stm_usart *usart, int stdin) +ao_usart_isr(struct ao_stm_usart *usart, int is_stdin)  { -	_ao_usart_rx(usart, stdin); +	_ao_usart_rx(usart, is_stdin);  	if (!_ao_usart_tx_start(usart))  		usart->reg->cr1 &= ~(1<< STM_USART_CR1_TXEIE);  | 
