#define ao_led_off(x)
#endif
+#ifndef AO_LED_PANIC
+#define AO_LED_PANIC AO_LED_RED
+#endif
+
static void
ao_panic_delay(uint8_t n)
{
ao_cur_task = NULL;
printf ("panic %d\n", reason);
#endif
- __critical for (;;) {
+ ao_arch_block_interrupts();
+ for (;;) {
ao_panic_delay(20);
for (n = 0; n < 5; n++) {
- ao_led_on(AO_LED_RED);
+ ao_led_on(AO_LED_PANIC);
ao_beep(AO_BEEP_HIGH);
ao_panic_delay(1);
- ao_led_off(AO_LED_RED);
+ ao_led_off(AO_LED_PANIC);
ao_beep(AO_BEEP_LOW);
ao_panic_delay(1);
}
#ifdef SDCC
#pragma disable_warning 126
#endif
- for (n = 0; n < reason; n++) {
- ao_led_on(AO_LED_RED);
+ if (reason & 0x40) {
+ ao_led_on(AO_LED_PANIC);
+ ao_beep(AO_BEEP_HIGH);
+ ao_panic_delay(40);
+ ao_led_off(AO_LED_PANIC);
+ ao_beep(AO_BEEP_OFF);
+ ao_panic_delay(10);
+ }
+ for (n = 0; n < (reason & 0x3f); n++) {
+ ao_led_on(AO_LED_PANIC);
ao_beep(AO_BEEP_MID);
ao_panic_delay(10);
- ao_led_off(AO_LED_RED);
+ ao_led_off(AO_LED_PANIC);
ao_beep(AO_BEEP_OFF);
ao_panic_delay(10);
}