X-Git-Url: https://git.gag.com/?a=blobdiff_plain;ds=sidebyside;f=src%2Fkernel%2Fao_report.c;h=26604d1ad4d784a96318dae4e8115327fe702cbc;hb=c1b754c12ac32ed38a561d8b35dcbdf82beea896;hp=af48b390daae0c0095c074dd6818aabc27e86d76;hpb=0bf267a6e2d401c8bd6a06d995e3d000777d622a;p=fw%2Faltos diff --git a/src/kernel/ao_report.c b/src/kernel/ao_report.c index af48b390..26604d1a 100644 --- a/src/kernel/ao_report.c +++ b/src/kernel/ao_report.c @@ -40,6 +40,8 @@ static const uint8_t flight_reports[] = { MORSE4(1,0,0,1), /* invalid 'X' */ }; +static enum ao_flight_state ao_report_state; + #if HAS_BEEP #define low(time) ao_beep_for(AO_BEEP_LOW, time) #define mid(time) ao_beep_for(AO_BEEP_MID, time) @@ -58,8 +60,6 @@ static const uint8_t flight_reports[] = { #endif #define pause(time) ao_delay(time) -static __pdata enum ao_flight_state ao_report_state; - /* * Farnsworth spacing * @@ -115,7 +115,7 @@ static __pdata enum ao_flight_state ao_report_state; */ static void -ao_report_beep(void) __reentrant +ao_report_flight_state(void) { uint8_t r = flight_reports[ao_flight_state]; uint8_t l = r & 7; @@ -134,7 +134,7 @@ ao_report_beep(void) __reentrant } static void -ao_report_digit(uint8_t digit) __reentrant +ao_report_digit(uint8_t digit) { if (!digit) { mid(AO_MS_TO_TICKS(500)); @@ -151,8 +151,8 @@ ao_report_digit(uint8_t digit) __reentrant static void ao_report_number(int16_t n) { - __xdata uint8_t digits[10]; - __pdata uint8_t ndigits, i; + uint8_t digits[10]; + uint8_t ndigits, i; if (n < 0) n = 0; @@ -178,18 +178,19 @@ ao_report_altitude(void) static void ao_report_battery(void) { - __xdata struct ao_data packet; + struct ao_data packet; for (;;) { ao_data_get(&packet); if (packet.adc.v_batt != 0) break; - ao_sleep(DATA_TO_XDATA(&ao_sample_data)); + ao_sleep(&ao_sample_data); } ao_report_number(ao_battery_decivolt(packet.adc.v_batt)); } #endif #if HAS_IGNITE_REPORT +#if HAS_IGNITE static uint8_t ao_report_igniter_ready(enum ao_igniter igniter) { @@ -202,16 +203,13 @@ ao_report_igniter(void) return (ao_report_igniter_ready(ao_igniter_drogue) | (ao_report_igniter_ready(ao_igniter_main) << 1)); } +#endif static void -ao_report_continuity(void) __reentrant +ao_report_continuity(void) { - uint8_t c; - -#if !HAS_IGNITE - if (!ao_igniter_present) - return; -#endif + uint8_t c; +#if HAS_IGNITE c = ao_report_igniter(); if (c) { while (c--) { @@ -225,8 +223,11 @@ ao_report_continuity(void) __reentrant low(AO_MS_TO_TICKS(20)); } } +#endif #if AO_PYRO_NUM +#if HAS_IGNITE pause(AO_MS_TO_TICKS(250)); +#endif for(c = 0; c < AO_PYRO_NUM; c++) { enum ao_igniter_status status = ao_pyro_status(c); if (status == ao_igniter_ready) @@ -251,7 +252,7 @@ ao_report_continuity(void) __reentrant } #endif -void +static void ao_report(void) { for(;;) { @@ -261,7 +262,12 @@ ao_report(void) ao_report_battery(); else #endif - ao_report_beep(); + ao_report_flight_state(); +#if HAS_SENSOR_ERRORS + if (ao_report_state == ao_flight_invalid && ao_sensor_errors) + ao_report_number(ao_sensor_errors); +#endif + if (ao_report_state == ao_flight_landed) { ao_report_altitude(); #if HAS_FLIGHT @@ -281,11 +287,11 @@ ao_report(void) } #endif while (ao_report_state == ao_flight_state) - ao_sleep(DATA_TO_XDATA(&ao_flight_state)); + ao_sleep(&ao_flight_state); } } -static __xdata struct ao_task ao_report_task; +static struct ao_task ao_report_task; void ao_report_init(void)