Author: jcrouse Date: 2008-09-03 21:59:44 +0200 (Wed, 03 Sep 2008) New Revision: 3561
Modified: trunk/payloads/libpayload/curses/tinycurses.c trunk/payloads/libpayload/drivers/serial.c trunk/payloads/libpayload/include/libpayload.h Log: Add support for curses color output over serial.
Note that the sequence \e[m for turning off bold resets all attributes, including color.
Signed-off-by: Ulf Jordan jordan@chalmers.se Acked-by: Jordan Crouse jordan.crouse@amd.com
Modified: trunk/payloads/libpayload/curses/tinycurses.c =================================================================== --- trunk/payloads/libpayload/curses/tinycurses.c 2008-09-02 16:06:22 UTC (rev 3560) +++ trunk/payloads/libpayload/curses/tinycurses.c 2008-09-03 19:59:44 UTC (rev 3561) @@ -669,10 +669,12 @@ // FIXME. int serial_is_bold = 0; int serial_is_altcharset = 0; + int serial_cur_pair = 0;
int x, y; chtype ch; int need_altcharset; + short fg, bg;
serial_end_bold(); serial_end_altcharset(); @@ -703,6 +705,7 @@ if (serial_is_bold) { serial_end_bold(); serial_is_bold = 0; + serial_cur_pair = 0; } }
@@ -723,6 +726,13 @@ serial_is_altcharset = 0; }
+ if (serial_cur_pair != PAIR_NUMBER(attr)) { + pair_content(PAIR_NUMBER(attr), + &fg, &bg); + serial_set_color(fg, bg); + serial_cur_pair = PAIR_NUMBER(attr); + } + serial_putchar(ch); }
Modified: trunk/payloads/libpayload/drivers/serial.c =================================================================== --- trunk/payloads/libpayload/drivers/serial.c 2008-09-02 16:06:22 UTC (rev 3560) +++ trunk/payloads/libpayload/drivers/serial.c 2008-09-03 19:59:44 UTC (rev 3561) @@ -110,6 +110,8 @@ enacs=\E(B\E)0, smacs=^N, rmacs=^O. */ #define VT100_SMACS "\e(0" #define VT100_RMACS "\e(B" +/* A vt100 doesn't do color, setaf/setab below are from xterm-color. */ +#define VT100_SET_COLOR "\e[3%d;4%dm"
static void serial_putcmd(char *str) { @@ -142,6 +144,19 @@ serial_putcmd(VT100_RMACS); }
+/** + * Set the foreground and background colors on the serial console. + * + * @param fg Foreground color number. + * @param bg Background color number. + */ +void serial_set_color(short fg, short bg) +{ + char buffer[32]; + snprintf(buffer, sizeof(buffer), VT100_SET_COLOR, fg, bg); + serial_putcmd(buffer); +} + void serial_set_cursor(int y, int x) { char buffer[32];
Modified: trunk/payloads/libpayload/include/libpayload.h =================================================================== --- trunk/payloads/libpayload/include/libpayload.h 2008-09-02 16:06:22 UTC (rev 3560) +++ trunk/payloads/libpayload/include/libpayload.h 2008-09-03 19:59:44 UTC (rev 3561) @@ -139,6 +139,7 @@ void serial_end_bold(void); void serial_start_altcharset(void); void serial_end_altcharset(void); +void serial_set_color(short fg, short bg); void serial_set_cursor(int y, int x); /** @} */