X-Git-Url: https://git.ozlabs.org/?a=blobdiff_plain;f=ui%2Fncurses%2Fps3-cui.c;fp=ui%2Fncurses%2Fps3-cui.c;h=e4ea6374c160a718157198c3697150f55b1d5f72;hb=e74391b7d8ec47b41315e7c2ce6b4b0a9ad139fe;hp=f166c8830cf54a748080e4205e853344c5940df1;hpb=e3663cb096badf3d493df25030333affe506669b;p=petitboot diff --git a/ui/ncurses/ps3-cui.c b/ui/ncurses/ps3-cui.c index f166c88..e4ea637 100644 --- a/ui/ncurses/ps3-cui.c +++ b/ui/ncurses/ps3-cui.c @@ -21,9 +21,7 @@ /* * TODO * removable media event - * resize after video mode change * ncurses mouse support - * timeout */ #if defined(HAVE_CONFIG_H) @@ -36,6 +34,7 @@ #include #include #include +#include #include "log/log.h" #include "talloc/talloc.h" @@ -282,6 +281,21 @@ static int ps3_hot_key(struct pmenu __attribute__((unused)) *menu, return c; } +/** + * ps3_timer_update - Timer callback. + */ + +static void ps3_timer_update(struct ui_timer *timer, unsigned int timeout) +{ + struct ps3_cui *ps3 = ps3_from_cui(cui_from_timer(timer)); + + //FIXME: make scr:timer. + // nc_scr_timer_update(&ps3.mm->scr, timeout); + + nc_scr_status_printf(&ps3->mm->scr, + "Welcome to Petitboot (timeout %u sec)", timeout); +} + /** * ps3_mm_init - Setup the main menu instance. */ @@ -434,6 +448,10 @@ static void sig_handler(int signum) DBGS("%d\n", signum); switch (signum) { + case SIGALRM: + if (ps3.cui) + ui_timer_sigalrm(&ps3.cui->timer); + break; case SIGWINCH: if (ps3.cui) cui_resize(ps3.cui); @@ -491,8 +509,9 @@ int main(int argc, char *argv[]) pb_log("--- pb-cui ---\n"); sa.sa_handler = sig_handler; - result = sigaction(SIGINT, &sa, NULL); + result = sigaction(SIGALRM, &sa, NULL); result += sigaction(SIGHUP, &sa, NULL); + result += sigaction(SIGINT, &sa, NULL); result += sigaction(SIGTERM, &sa, NULL); result += sigaction(SIGWINCH, &sa, NULL); @@ -523,6 +542,13 @@ int main(int argc, char *argv[]) ps3.mm = ps3_mm_init(&ps3); ps3.svm = ps3_svm_init(&ps3); + if (ps3.values.timeout == ps3_timeout_forever) + ui_timer_disable(&ps3.cui->timer); + else { + ps3.cui->timer.update_display = ps3_timer_update; + ui_timer_init(&ps3.cui->timer, ps3.values.timeout); + } + cui_result = cui_run(ps3.cui, ps3.mm, ps3.values.default_item); pmenu_delete(ps3.mm);