summaryrefslogtreecommitdiffstats
path: root/firmware/panic.c
diff options
context:
space:
mode:
authorBjörn Stenberg <bjorn@haxx.se>2002-11-12 09:04:06 +0000
committerBjörn Stenberg <bjorn@haxx.se>2002-11-12 09:04:06 +0000
commit42510d9e783f72a4945019bdcec19b9b60156aa1 (patch)
treeeeb516381492d5a5e5cda64b7db5f5b122100825 /firmware/panic.c
parentbca1f64d136a6f34618aba60417870acccd8b483 (diff)
downloadrockbox-42510d9e783f72a4945019bdcec19b9b60156aa1.tar.gz
rockbox-42510d9e783f72a4945019bdcec19b9b60156aa1.tar.bz2
rockbox-42510d9e783f72a4945019bdcec19b9b60156aa1.zip
Added '*PANIC*' string. Line is now wrapped on recorders. LED blinks slowly to indicate controlled state.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@2835 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/panic.c')
-rw-r--r--firmware/panic.c31
1 files changed, 27 insertions, 4 deletions
diff --git a/firmware/panic.c b/firmware/panic.c
index 3dd5e157bf..df8afdfda3 100644
--- a/firmware/panic.c
+++ b/firmware/panic.c
@@ -19,10 +19,12 @@
#include <stdio.h>
#include <stdarg.h>
+#include <string.h>
#include "panic.h"
#include "lcd.h"
#include "font.h"
#include "debug.h"
+#include "led.h"
static char panic_buf[128];
@@ -34,6 +36,8 @@ void panicf( char *fmt, ...)
va_list ap;
#ifndef SIMULATOR
+ bool state = false;
+
/* Disable interrupts */
asm volatile ("ldc\t%0,sr" : : "r"(15<<4));
#endif
@@ -44,17 +48,36 @@ void panicf( char *fmt, ...)
#ifdef HAVE_LCD_CHARCELLS
lcd_double_height(false);
- lcd_puts(0,0,panic_buf);
+ lcd_puts(0,0,"*PANIC*");
+ lcd_puts(0,1,panic_buf);
#elif defined(HAVE_LCD_BITMAP)
lcd_clear_display();
-
lcd_setfont(FONT_SYSFIXED);
- lcd_putsxy(0,0,panic_buf);
+ lcd_puts(0,0,"*PANIC*");
+ {
+ /* wrap panic line */
+ int i, y=1, len = strlen(panic_buf);
+ for (i=0; i<len; i+=18) {
+ unsigned char c = panic_buf[i+18];
+ panic_buf[i+18] = 0;
+ lcd_puts(0,y++,panic_buf+i);
+ panic_buf[i+18] = c;
+ }
+ }
lcd_update();
#else
/* no LCD */
#endif
DEBUGF(panic_buf);
- while(1);
+ while (1)
+ {
+#ifndef SIMULATOR
+ volatile int i;
+ led (state);
+ state = state?false:true;
+
+ for (i = 0; i < 400000; ++i);
+#endif
+ }
}