X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fcore%2Fao_telemetry.c;h=8385c6d038c9f48dc9862af73f299e8cf64a438b;hb=pwmin;hp=b3ce8ba9325a3573ed93c3b641a6f7c317d5249d;hpb=1ae69a1c2ce7e45db9d9c175bc63867eff68ebe5;p=fw%2Faltos diff --git a/src/core/ao_telemetry.c b/src/core/ao_telemetry.c index b3ce8ba9..8385c6d0 100644 --- a/src/core/ao_telemetry.c +++ b/src/core/ao_telemetry.c @@ -22,9 +22,6 @@ static __pdata uint16_t ao_telemetry_interval; static __pdata uint8_t ao_rdf = 0; static __pdata uint16_t ao_rdf_time; -#define AO_RDF_INTERVAL_TICKS AO_SEC_TO_TICKS(5) -#define AO_RDF_LENGTH_MS 500 - #if defined(MEGAMETRUM) #define AO_SEND_MEGA 1 #endif @@ -104,6 +101,7 @@ ao_send_mega_sensor(void) telemetry.mega_sensor.pres = ao_data_pres(packet); telemetry.mega_sensor.temp = ao_data_temp(packet); +#if HAS_MPU6000 telemetry.mega_sensor.accel_x = packet->mpu6000.accel_x; telemetry.mega_sensor.accel_y = packet->mpu6000.accel_y; telemetry.mega_sensor.accel_z = packet->mpu6000.accel_z; @@ -111,10 +109,13 @@ ao_send_mega_sensor(void) telemetry.mega_sensor.gyro_x = packet->mpu6000.gyro_x; telemetry.mega_sensor.gyro_y = packet->mpu6000.gyro_y; telemetry.mega_sensor.gyro_z = packet->mpu6000.gyro_z; +#endif +#if HAS_HMC5883 telemetry.mega_sensor.mag_x = packet->hmc5883.x; telemetry.mega_sensor.mag_y = packet->hmc5883.y; telemetry.mega_sensor.mag_z = packet->hmc5883.z; +#endif ao_radio_send(&telemetry, sizeof (telemetry)); } @@ -137,9 +138,9 @@ ao_send_mega_data(void) telemetry.mega_data.v_batt = packet->adc.v_batt; telemetry.mega_data.v_pyro = packet->adc.v_pbatt; - /* XXX figure out right shift value; 4 might suffice */ + /* ADC range is 0-4095, so shift by four to save the high 8 bits */ for (i = 0; i < AO_ADC_NUM_SENSE; i++) - telemetry.mega_data.sense[i] = packet->adc.sense[i] >> 8; + telemetry.mega_data.sense[i] = packet->adc.sense[i] >> 4; telemetry.mega_data.ground_pres = ao_ground_pres; telemetry.mega_data.ground_accel = ao_ground_accel; @@ -282,6 +283,12 @@ ao_telemetry(void) while (!ao_flight_number) ao_sleep(&ao_flight_number); +#if RADIO_DELAY_AFTER_BOOST + while (ao_flight_state < ao_flight_boost) + ao_sleep(DATA_TO_XDATA(&ao_flight_state)); + ao_delay(AO_SEC_TO_TICKS(RADIO_DELAY_AFTER_BOOST)); +#endif + telemetry.generic.serial = ao_serial_number; for (;;) { while (ao_telemetry_interval == 0) @@ -313,8 +320,16 @@ ao_telemetry(void) if (ao_rdf && (int16_t) (ao_time() - ao_rdf_time) >= 0) { +#if HAS_IGNITE_REPORT + uint8_t c; +#endif ao_rdf_time = ao_time() + AO_RDF_INTERVAL_TICKS; - ao_radio_rdf(AO_MS_TO_RDF_LEN(AO_RDF_LENGTH_MS)); +#if HAS_IGNITE_REPORT + if (ao_flight_state == ao_flight_pad && (c = ao_report_igniter())) + ao_radio_continuity(c); + else +#endif + ao_radio_rdf(); } #endif time += ao_telemetry_interval; @@ -326,6 +341,7 @@ ao_telemetry(void) } else time = ao_time(); + bottom: ; } } }