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); |