X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fkernel%2Fao_report.c;h=08967af8450f3f2701b82e3c3df146e801dfa5e1;hb=015d3055a52532070e96469907683c3aa3eda44e;hp=5314fc8fb82fa7a698dd3743939ef23fe54dbeda;hpb=e935ebe55705cb0506aac0859583d54fd8e5ca46;p=fw%2Faltos diff --git a/src/kernel/ao_report.c b/src/kernel/ao_report.c index 5314fc8f..08967af8 100644 --- a/src/kernel/ao_report.c +++ b/src/kernel/ao_report.c @@ -3,7 +3,8 @@ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of @@ -44,13 +45,20 @@ static const uint8_t flight_reports[] = { #define mid(time) ao_beep_for(AO_BEEP_MID, time) #define high(time) ao_beep_for(AO_BEEP_HIGH, time) #else -#define low(time) ao_led_for(AO_LED_GREEN, time) -#define mid(time) ao_led_for(AO_LED_RED, time) -#define high(time) ao_led_for(AO_LED_GREEN|AO_LED_RED, time) +#ifndef AO_LED_LOW +#define AO_LED_LOW AO_LED_GREEN +#endif +#ifndef AO_LED_MID +#define AO_LED_MID AO_LED_RED +#endif + +#define low(time) ao_led_for(AO_LED_LOW, time) +#define mid(time) ao_led_for(AO_LED_MID, time) +#define high(time) ao_led_for(AO_LED_MID|AO_LED_LOW, time) #endif #define pause(time) ao_delay(time) -static __pdata enum ao_flight_state ao_report_state; +static enum ao_flight_state ao_report_state; /* * Farnsworth spacing @@ -107,7 +115,7 @@ static __pdata enum ao_flight_state ao_report_state; */ static void -ao_report_beep(void) __reentrant +ao_report_beep(void) { uint8_t r = flight_reports[ao_flight_state]; uint8_t l = r & 7; @@ -126,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)); @@ -143,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; @@ -170,12 +178,12 @@ 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)); } @@ -196,7 +204,7 @@ ao_report_igniter(void) } static void -ao_report_continuity(void) __reentrant +ao_report_continuity(void) { uint8_t c; @@ -246,15 +254,15 @@ ao_report_continuity(void) __reentrant void ao_report(void) { - ao_report_state = ao_flight_state; for(;;) { + ao_report_state = ao_flight_state; #if HAS_BATTERY_REPORT - if (ao_flight_state == ao_flight_startup) + if (ao_report_state == ao_flight_startup) ao_report_battery(); else #endif ao_report_beep(); - if (ao_flight_state == ao_flight_landed) { + if (ao_report_state == ao_flight_landed) { ao_report_altitude(); #if HAS_FLIGHT ao_delay(AO_SEC_TO_TICKS(5)); @@ -262,7 +270,7 @@ ao_report(void) #endif } #if HAS_IGNITE_REPORT - if (ao_flight_state == ao_flight_idle) + if (ao_report_state == ao_flight_idle) ao_report_continuity(); while (ao_flight_state == ao_flight_pad) { uint8_t c; @@ -272,14 +280,12 @@ ao_report(void) pause(AO_MS_TO_TICKS(100)); } #endif - while (ao_report_state == ao_flight_state) - ao_sleep(DATA_TO_XDATA(&ao_flight_state)); - ao_report_state = 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)