coreinfo: Fix the subwindow refresh based on the libpayload changes
authorJordan Crouse <jordan.crouse@amd.com>
Tue, 20 May 2008 20:16:03 +0000 (20:16 +0000)
committerJordan Crouse <jordan.crouse@amd.com>
Tue, 20 May 2008 20:16:03 +0000 (20:16 +0000)
Changes to libpayload to fix subwindows broke coreinfo.  This fixes it,
and improves performance by eliminating the entire screen refresh every
second.

Signed-off-by: Jordan Crouse <jordan.crouse@amd.com>
Acked-by: Myles Watson <mylesgw@gmail.com>
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3339 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1

payloads/coreinfo/coreinfo.c

index ae43357e6291f9ba8550ce5c392d4d08d2a885b5..f7e8d88149ed71c15fbae71ff5436fd79e8a4de1 100644 (file)
@@ -19,7 +19,7 @@
 
 #include "coreinfo.h"
 
-#define SCREEN_Y 24
+#define SCREEN_Y 25
 #define SCREEN_X 80
 
 extern struct coreinfo_module cpuinfo_module;
@@ -73,6 +73,8 @@ struct coreinfo_cat {
 
 
 static WINDOW *modwin;
+static WINDOW *menuwin;
+
 static int curwin;
 
 void print_module_title(WINDOW *win, const char *title)
@@ -94,10 +96,10 @@ static void print_submenu(struct coreinfo_cat *cat)
        char menu[80];
        char *ptr = menu;
 
-       wmove(stdscr, SCREEN_Y - 2, 0);
+       wmove(menuwin, 0, 0);
 
        for (j = 0; j < SCREEN_X; j++)
-               waddch(stdscr, ' ');
+               waddch(menuwin, ' ');
 
        if (!cat->count)
                return;
@@ -105,7 +107,7 @@ static void print_submenu(struct coreinfo_cat *cat)
        for (i = 0; i < cat->count; i++)
                ptr += sprintf(ptr, "[%c: %s] ", 'A' + i, cat->modules[i]->name);
 
-       mvprintw(SCREEN_Y - 2, 0, menu);
+       mvwprintw(menuwin, 0, 0, menu);
 }
 
 #ifdef CONFIG_SHOW_DATE_TIME
@@ -118,7 +120,7 @@ static void print_time_and_date(void)
 
        rtc_read_clock(&tm);
 
-       mvprintw(23, 57, "%02d/%02d/%04d - %02d:%02d:%02d",
+       mvwprintw(menuwin, 0, 57, "%02d/%02d/%04d - %02d:%02d:%02d",
                tm.tm_mon, tm.tm_mday, 1900+tm.tm_year, tm.tm_hour,
                tm.tm_min, tm.tm_sec);
 }
@@ -130,10 +132,10 @@ static void print_menu(void)
        char menu[80];
        char *ptr = menu;
 
-       wmove(stdscr, SCREEN_Y - 1, 0);
+       wmove(menuwin, 1, 0);
 
        for (j = 0; j < SCREEN_X; j++)
-               waddch(stdscr, ' ');
+               waddch(menuwin, ' ');
 
        for (i = 0; i < ARRAY_SIZE(categories); i++) {
                if (categories[i].count == 0)
@@ -142,7 +144,7 @@ static void print_menu(void)
                ptr += sprintf(ptr, "F%d: %s ", i + 1, categories[i].name);
        }
 
-       mvprintw(23, 0, menu);
+       mvwprintw(menuwin, 1, 0, menu);
 
 #ifdef CONFIG_SHOW_DATE_TIME
        print_time_and_date();
@@ -192,7 +194,7 @@ static void redraw_module(struct coreinfo_cat *cat)
 
        wclear(modwin);
        cat->modules[cat->cur]->redraw(modwin);
-       refresh();
+       wrefresh(modwin);
 }
 
 static void handle_category_key(struct coreinfo_cat *cat, int key)
@@ -219,6 +221,7 @@ static void loop(void)
        int key;
 
        center(0, "coreinfo v0.1");
+       refresh();
 
        print_menu();
        print_submenu(&categories[curwin]);
@@ -229,7 +232,7 @@ static void loop(void)
        while (1) {
 #ifdef CONFIG_SHOW_DATE_TIME
                print_time_and_date();
-               refresh();
+               wrefresh(menuwin);
 #endif
 
                key = getch();
@@ -271,10 +274,12 @@ int main(void)
        init_pair(2, COLOR_BLACK, COLOR_WHITE);
        init_pair(3, COLOR_WHITE, COLOR_WHITE);
 
-       modwin = newwin(SCREEN_Y-2, SCREEN_X, 1, 0);
+       modwin = newwin(SCREEN_Y - 3, SCREEN_X, 1, 0);
+       menuwin = newwin(2, SCREEN_X, SCREEN_Y - 2, 0);
 
        wattrset(stdscr, COLOR_PAIR(1) | A_BOLD);
        wattrset(modwin, COLOR_PAIR(2));
+       wattrset(menuwin, COLOR_PAIR(1) | A_BOLD);
 
        for (i = 0; i < SCREEN_Y - 1; i++) {
                wmove(modwin, i - 1, 0);
@@ -283,7 +288,7 @@ int main(void)
                        waddch(modwin, ' ');
        }
 
-       refresh();
+       wrefresh(modwin);
 
        for (i = 0; i < ARRAY_SIZE(categories); i++) {
                for(j = 0; j < categories[i].count; j++)