From: Keith Packard Date: Thu, 29 Aug 2013 04:52:58 +0000 (-0600) Subject: Merge remote-tracking branch 'origin/telemini' X-Git-Tag: 1.2.9.4~118 X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=commitdiff_plain;h=dcc51bb18985c24fa35bce0dd42ea3d847b960bf Merge remote-tracking branch 'origin/telemini' Signed-off-by: Keith Packard Conflicts: src/core/ao_telemetry.c src/core/ao_telemetry.h Added both Mini and Metrum telemetry defines --- dcc51bb18985c24fa35bce0dd42ea3d847b960bf diff --cc src/core/ao_telemetry.c index 65d7d08f,9c673030..cd95aa6b --- a/src/core/ao_telemetry.c +++ b/src/core/ao_telemetry.c @@@ -175,56 -171,35 +175,85 @@@ ao_send_mega_data(void } #endif /* AO_SEND_MEGA */ +#ifdef AO_SEND_METRUM +/* Send telemetrum sensor packet */ +static void +ao_send_metrum_sensor(void) +{ + __xdata struct ao_data *packet = (__xdata struct ao_data *) &ao_data_ring[ao_data_ring_prev(ao_sample_data)]; - - telemetry.generic.tick = packet->tick; ++ + telemetry.generic.type = AO_TELEMETRY_METRUM_SENSOR; + + telemetry.metrum_sensor.state = ao_flight_state; + telemetry.metrum_sensor.accel = ao_data_accel(packet); + telemetry.metrum_sensor.pres = ao_data_pres(packet); + telemetry.metrum_sensor.temp = ao_data_temp(packet); + + telemetry.metrum_sensor.acceleration = ao_accel; + telemetry.metrum_sensor.speed = ao_speed; + telemetry.metrum_sensor.height = ao_height; + + telemetry.metrum_sensor.v_batt = packet->adc.v_batt; + telemetry.metrum_sensor.sense_a = packet->adc.sense_a; + telemetry.metrum_sensor.sense_m = packet->adc.sense_m; + + ao_radio_send(&telemetry, sizeof (telemetry)); +} + +static __pdata int8_t ao_telemetry_metrum_data_max; +static __pdata int8_t ao_telemetry_metrum_data_cur; + +/* Send telemetrum data packet */ +static void +ao_send_metrum_data(void) +{ + if (--ao_telemetry_metrum_data_cur <= 0) { + __xdata struct ao_data *packet = (__xdata struct ao_data *) &ao_data_ring[ao_data_ring_prev(ao_sample_data)]; + uint8_t i; + + telemetry.generic.tick = packet->tick; - telemetry.generic.type = AO_TELEMETRY_MEGA_DATA; ++ telemetry.generic.type = AO_TELEMETRY_METRUM_DATA; + + telemetry.metrum_data.ground_pres = ao_ground_pres; + telemetry.metrum_data.ground_accel = ao_ground_accel; + telemetry.metrum_data.accel_plus_g = ao_config.accel_plus_g; + telemetry.metrum_data.accel_minus_g = ao_config.accel_minus_g; + + ao_radio_send(&telemetry, sizeof (telemetry)); + ao_telemetry_metrum_data_cur = ao_telemetry_metrum_data_max; + } +} - #endif /* AO_SEND_MEGA */ ++#endif /* AO_SEND_METRUM */ ++ + #ifdef AO_SEND_MINI + + static void + ao_send_mini(void) + { + __xdata struct ao_data *packet = (__xdata struct ao_data *) &ao_data_ring[ao_data_ring_prev(ao_sample_data)]; + + telemetry.generic.tick = packet->tick; + telemetry.generic.type = AO_TELEMETRY_MINI; + + telemetry.mini.state = ao_flight_state; + + telemetry.mini.v_batt = packet->adc.v_batt; + telemetry.mini.sense_a = packet->adc.sense_a; + telemetry.mini.sense_m = packet->adc.sense_m; + + telemetry.mini.pres = ao_data_pres(packet); + telemetry.mini.temp = ao_data_temp(packet); + + telemetry.mini.acceleration = ao_accel; + telemetry.mini.speed = ao_speed; + telemetry.mini.height = ao_height; + + telemetry.mini.ground_pres = ao_ground_pres; + + ao_radio_send(&telemetry, sizeof (telemetry)); + } + -#endif ++#endif /* AO_SEND_MINI */ #ifdef AO_SEND_ALL_BARO static uint8_t ao_baro_sample; @@@ -369,7 -344,7 +398,6 @@@ ao_telemetry(void ao_aprs_time = time; #endif while (ao_telemetry_interval) { -- #if HAS_APRS if (!(ao_config.radio_enable & AO_RADIO_DISABLE_TELEMETRY)) #endif @@@ -377,19 -352,18 +405,23 @@@ #ifdef AO_SEND_ALL_BARO ao_send_baro(); #endif ++ #if HAS_FLIGHT - #ifdef AO_SEND_MEGA + # ifdef AO_SEND_MEGA ao_send_mega_sensor(); ao_send_mega_data(); - #else - #ifdef AO_SEND_METRUM -# else -# ifdef AO_SEND_MINI ++# endif ++# ifdef AO_SEND_METRUM + ao_send_metrum_sensor(); + ao_send_metrum_data(); - #else ++# endif ++# ifdef AO_SEND_MINI + ao_send_mini(); -# else ++# endif ++# ifdef AO_TELEMETRY_SENSOR ao_send_sensor(); - #endif - #endif - #endif -# endif + # endif -#endif ++#endif /* HAS_FLIGHT */ #if HAS_COMPANION if (ao_companion_running) @@@ -406,18 -380,18 +438,18 @@@ if (ao_rdf && #if HAS_APRS !(ao_config.radio_enable & AO_RADIO_DISABLE_RDF) && --#endif ++#endif /* HAS_APRS */ (int16_t) (ao_time() - ao_rdf_time) >= 0) { #if HAS_IGNITE_REPORT uint8_t c; --#endif ++#endif /* HAS_IGNITE_REPORT */ ao_rdf_time = ao_time() + AO_RDF_INTERVAL_TICKS; #if HAS_IGNITE_REPORT if (ao_flight_state == ao_flight_pad && (c = ao_report_igniter())) ao_radio_continuity(c); else --#endif ++#endif /* HAS_IGNITE_REPORT*/ ao_radio_rdf(); } #endif /* HAS_RDF */ @@@ -428,8 -402,8 +460,8 @@@ ao_aprs_time = ao_time() + AO_SEC_TO_TICKS(ao_config.aprs_interval); ao_aprs_send(); } --#endif --#endif ++#endif /* HAS_APRS */ ++#endif /* !AO_SEND_ALL_BARO */ time += ao_telemetry_interval; delay = time - ao_time(); if (delay > 0) { diff --cc src/core/ao_telemetry.h index 17dc3e93,77601529..fd6b76b3 --- a/src/core/ao_telemetry.h +++ b/src/core/ao_telemetry.h @@@ -207,47 -207,31 +207,71 @@@ struct ao_telemetry_mega_data }; +#define AO_TELEMETRY_METRUM_SENSOR 0x0A + +struct ao_telemetry_metrum_sensor { + uint16_t serial; /* 0 */ + uint16_t tick; /* 2 */ + uint8_t type; /* 4 */ + + uint8_t state; /* 5 flight state */ + int16_t accel; /* 6 Z axis */ + + int32_t pres; /* 8 Pa * 10 */ + int16_t temp; /* 12 °C * 100 */ + + int16_t acceleration; /* 14 m/s² * 16 */ + int16_t speed; /* 16 m/s * 16 */ + int16_t height; /* 18 m */ + + int16_t v_batt; /* 20 battery voltage */ + int16_t sense_a; /* 22 apogee continuity sense */ + int16_t sense_m; /* 24 main continuity sense */ + + uint8_t pad[6]; /* 26 */ + /* 32 */ +}; + +#define AO_TELEMETRY_METRUM_DATA 0x0B + +struct ao_telemetry_metrum_data { + uint16_t serial; /* 0 */ + uint16_t tick; /* 2 */ + uint8_t type; /* 4 */ + + int32_t ground_pres; /* 8 average pres on pad */ + int16_t ground_accel; /* 12 average accel on pad */ + int16_t accel_plus_g; /* 14 accel calibration at +1g */ + int16_t accel_minus_g; /* 16 accel calibration at -1g */ + + uint8_t pad[14]; /* 18 */ + /* 32 */ +}; + + #define AO_TELEMETRY_MINI 0x10 + + struct ao_telemetry_mini { + uint16_t serial; /* 0 */ + uint16_t tick; /* 2 */ + uint8_t type; /* 4 */ + + uint8_t state; /* 5 flight state */ - + int16_t v_batt; /* 6 battery voltage */ + int16_t sense_a; /* 8 apogee continuity */ + int16_t sense_m; /* 10 main continuity */ + + int32_t pres; /* 12 Pa * 10 */ + int16_t temp; /* 16 °C * 100 */ + + int16_t acceleration; /* 18 m/s² * 16 */ + int16_t speed; /* 20 m/s * 16 */ + int16_t height; /* 22 m */ + + int32_t ground_pres; /* 24 average pres on pad */ + + int32_t pad28; /* 28 */ + /* 32 */ + }; /* #define AO_SEND_ALL_BARO */ @@@ -282,8 -266,7 +306,9 @@@ union ao_telemetry_all struct ao_telemetry_companion companion; struct ao_telemetry_mega_sensor mega_sensor; struct ao_telemetry_mega_data mega_data; + struct ao_telemetry_metrum_sensor metrum_sensor; + struct ao_telemetry_metrum_data metrum_data; + struct ao_telemetry_mini mini; struct ao_telemetry_baro baro; };