Add support for curses color output over serial.
authorUlf Jordan <jordan@chalmers.se>
Wed, 3 Sep 2008 19:59:44 +0000 (19:59 +0000)
committerJordan Crouse <jordan.crouse@amd.com>
Wed, 3 Sep 2008 19:59:44 +0000 (19:59 +0000)
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>
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3561 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1

payloads/libpayload/curses/tinycurses.c
payloads/libpayload/drivers/serial.c
payloads/libpayload/include/libpayload.h

index 16e06ec4738853e7c5c631d069e53dcfc63cef2c..960e74fc9e195304b9d22f15a9cba6665ca9c46d 100644 (file)
@@ -669,10 +669,12 @@ int wnoutrefresh(WINDOW *win)
        // 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 @@ int wnoutrefresh(WINDOW *win)
                                        if (serial_is_bold) {
                                                serial_end_bold();
                                                serial_is_bold = 0;
+                                               serial_cur_pair = 0;
                                        }
                                }
 
@@ -723,6 +726,13 @@ int wnoutrefresh(WINDOW *win)
                                        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);
                        }
 
index 6e46e06581d629e44729e95e74c147d1dd65d85d..8d7273c3a520d233eda75907545641079e89d0ad 100644 (file)
@@ -110,6 +110,8 @@ int serial_getchar(void)
    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 @@ void serial_end_altcharset(void)
        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];
index cc50fd06719b878eac654e7e90c6972e77d57788..7af19dee06358ce0bf881210b3cd10b2ecfa385f 100644 (file)
@@ -139,6 +139,7 @@ void serial_start_bold(void);
 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);
 /** @} */