X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fcore%2Fao_panic.c;h=c29cd8feb279d605e06ffafa50ff3a53f7864dbd;hb=e80fa6de4ccc5c4851eab9fb941f9282d2e3eb16;hp=0668dad26bb3c6e4bcecae1dee87a85b9796dde8;hpb=8125acc030574afed6f23aa8aa302d9c768bb04e;p=fw%2Faltos diff --git a/src/core/ao_panic.c b/src/core/ao_panic.c index 0668dad2..c29cd8fe 100644 --- a/src/core/ao_panic.c +++ b/src/core/ao_panic.c @@ -24,6 +24,14 @@ #if !HAS_BEEP #define ao_beep(x) #endif +#if !LEDS_AVAILABLE +#define ao_led_on(x) +#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) @@ -41,24 +49,40 @@ ao_panic(uint8_t reason) { uint8_t n; - __critical for (;;) { +#if LOW_LEVEL_DEBUG + ao_cur_task = NULL; + printf ("panic %d\n", reason); +#endif + 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); } ao_beep(AO_BEEP_OFF); ao_panic_delay(2); - for (n = 0; n < reason; n++) { - ao_led_on(AO_LED_RED); +#ifdef SDCC +#pragma disable_warning 126 +#endif + 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); }