From 4006bf474f4fee1e2d47fdc930b3b08b4fecbe24 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sun, 2 Aug 2020 13:06:01 -0700 Subject: [PATCH] altos: Add EasyMotor logging support Log EasyMotor sensor data. Signed-off-by: Keith Packard --- src/kernel/ao_log.h | 30 ++++++++++++++++++++++++++++++ src/kernel/ao_log_motor.c | 22 +++++----------------- 2 files changed, 35 insertions(+), 17 deletions(-) diff --git a/src/kernel/ao_log.h b/src/kernel/ao_log.h index 26ff4440..12eefe74 100644 --- a/src/kernel/ao_log.h +++ b/src/kernel/ao_log.h @@ -502,6 +502,36 @@ struct ao_log_gps { } u; }; +struct ao_log_motor { + char type; /* 0 */ + uint8_t csum; /* 1 */ + uint16_t tick; /* 2 */ + union { /* 4 */ + /* AO_LOG_FLIGHT */ + struct { + uint16_t flight; /* 4 */ + int16_t ground_accel; /* 6 */ + int16_t ground_accel_along; /* 8 */ + int16_t ground_accel_across; /* 10 */ + int16_t ground_accel_through; /* 12 */ + } flight; + /* AO_LOG_STATE */ + struct { + uint16_t state; /* 4 */ + uint16_t reason; /* 6 */ + } state; + /* AO_LOG_SENSOR */ + struct { + uint16_t pressure; /* 4 */ + uint16_t v_batt; /* 6 */ + int16_t accel; /* 8 */ + int16_t accel_across; /* 10 */ + int16_t accel_along; /* 12 */ + int16_t accel_through; /* 14 */ + } sensor; /* 16 */ + } u; +}; + #if AO_LOG_FORMAT == AO_LOG_FOMAT_TELEMEGA_OLD || AO_LOG_FORMAT == AO_LOG_FORMAT_TELEMEGA || AO_LOG_FORMAT == AO_LOG_FORMAT_TELEMEGA_3 || AO_LOG_FORMAT == AO_LOG_FORMAT_EASYMEGA_2 || AO_LOG_FORMAT == AO_LOG_FORMAT_TELEMEGA_4 typedef struct ao_log_mega ao_log_type; #endif diff --git a/src/kernel/ao_log_motor.c b/src/kernel/ao_log_motor.c index 6d42c77c..7ce75b6a 100644 --- a/src/kernel/ao_log_motor.c +++ b/src/kernel/ao_log_motor.c @@ -36,8 +36,7 @@ typedef uint8_t check_log_size[1-(256 % sizeof(struct ao_log_mega))] ; void ao_log(void) { - uint16_t next_sensor, next_other; - uint8_t i; + uint16_t next_sensor; ao_storage_setup(); @@ -46,22 +45,17 @@ ao_log(void) while (!ao_log_running) ao_sleep(&ao_log_running); -#if HAS_FLIGHT ao_log_data.type = AO_LOG_FLIGHT; ao_log_data.tick = ao_sample_tick; -#if HAS_ACCEL ao_log_data.u.flight.ground_accel = ao_ground_accel; -#endif - 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 * when starting up. */ ao_log_data_pos = ao_data_ring_next(ao_data_head); - next_other = next_sensor = ao_data_ring[ao_log_data_pos].tick; + next_sensor = ao_data_ring[ao_log_data_pos].tick; ao_log_state = ao_flight_startup; for (;;) { /* Write samples to EEPROM */ @@ -70,21 +64,15 @@ ao_log(void) 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_accel(&ao_data_ring[ao_log_data_pos]); + ao_log_data.u.sensor.accel_across = ao_data_across(&ao_data_ring[ao_log_data_pos]); + ao_log_data.u.sensor.accel_along = ao_data_along(&ao_data_ring[ao_log_data_pos]); + ao_log_data.u.sensor.accel_through = ao_data_through(&ao_data_ring[ao_log_data_pos]); ao_log_write(&ao_log_data); if (ao_log_state <= ao_flight_coast) next_sensor = ao_log_data.tick + AO_SENSOR_INTERVAL_ASCENT; else next_sensor = ao_log_data.tick + AO_SENSOR_INTERVAL_DESCENT; } - 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.n_sense = AO_ADC_NUM_SENSE; - for (i = 0; i < AO_ADC_NUM_SENSE; i++) - ao_log_data.u.volt.sense[i] = ao_data_ring[ao_log_data_pos].adc.sense[i]; - 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); } #if HAS_FLIGHT -- 2.30.2