MORSE4(1,0,0,1), /* invalid 'X' */
};
-#if 1
-#define signal(time) ao_beep_for(AO_BEEP_MID, time)
+#if HAS_BEEP
+#define low(time) ao_beep_for(AO_BEEP_LOW, time)
+#define mid(time) ao_beep_for(AO_BEEP_MID, time)
+#define high(time) ao_beep_for(AO_BEEP_HIGH, time)
#else
-#define signal(time) ao_led_for(AO_LED_RED, time)
+#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)
#endif
#define pause(time) ao_delay(time)
-static __xdata enum ao_flight_state ao_report_state;
+static __pdata enum ao_flight_state ao_report_state;
static void
ao_report_beep(void) __reentrant
return;
while (l--) {
if (r & 8)
- signal(AO_MS_TO_TICKS(600));
+ mid(AO_MS_TO_TICKS(600));
else
- signal(AO_MS_TO_TICKS(200));
+ mid(AO_MS_TO_TICKS(200));
pause(AO_MS_TO_TICKS(200));
r >>= 1;
}
ao_report_digit(uint8_t digit) __reentrant
{
if (!digit) {
- signal(AO_MS_TO_TICKS(500));
+ mid(AO_MS_TO_TICKS(500));
pause(AO_MS_TO_TICKS(200));
} else {
while (digit--) {
- signal(AO_MS_TO_TICKS(200));
+ mid(AO_MS_TO_TICKS(200));
pause(AO_MS_TO_TICKS(200));
}
}
static void
ao_report_altitude(void)
{
- __xdata int16_t agl = ao_pres_to_altitude(ao_min_pres) - ao_pres_to_altitude(ao_ground_pres);
+ __pdata int16_t agl = ao_max_height;
__xdata uint8_t digits[10];
- __xdata uint8_t ndigits, i;
+ __pdata uint8_t ndigits, i;
if (agl < 0)
agl = 0;
}
}
+#if HAS_IGNITE
static uint8_t
ao_report_igniter_ready(enum ao_igniter igniter)
{
(ao_report_igniter_ready(ao_igniter_main) << 1));
if (c) {
while (c--) {
- ao_beep_for(AO_BEEP_HIGH, AO_MS_TO_TICKS(25));
+ high(AO_MS_TO_TICKS(25));
pause(AO_MS_TO_TICKS(100));
}
} else {
c = 10;
while (c--) {
- ao_beep_for(AO_BEEP_HIGH, AO_MS_TO_TICKS(20));
- ao_beep_for(AO_BEEP_LOW, AO_MS_TO_TICKS(20));
+ high(AO_MS_TO_TICKS(20));
+ low(AO_MS_TO_TICKS(20));
}
}
if (ao_log_full()) {
pause(AO_MS_TO_TICKS(100));
c = 2;
while (c--) {
- ao_beep_for(AO_BEEP_LOW, AO_MS_TO_TICKS(100));
- ao_beep_for(AO_BEEP_MID, AO_MS_TO_TICKS(100));
- ao_beep_for(AO_BEEP_HIGH, AO_MS_TO_TICKS(100));
- ao_beep_for(AO_BEEP_MID, AO_MS_TO_TICKS(100));
+ low(AO_MS_TO_TICKS(100));
+ mid(AO_MS_TO_TICKS(100));
+ high(AO_MS_TO_TICKS(100));
+ mid(AO_MS_TO_TICKS(100));
}
}
c = 50;
while (c-- && ao_flight_state == ao_flight_pad)
pause(AO_MS_TO_TICKS(100));
}
+#endif
void
ao_report(void)
if (ao_flight_state == ao_flight_landed)
ao_report_altitude();
ao_report_beep();
+#if HAS_IGNITE
if (ao_flight_state == ao_flight_idle)
ao_report_continuity();
while (ao_flight_state == ao_flight_pad)
ao_report_continuity();
+#endif
__critical {
while (ao_report_state == ao_flight_state)
ao_sleep(DATA_TO_XDATA(&ao_flight_state));