From 78c82fbd0a481249de1763b5d43bb9876ea612bd Mon Sep 17 00:00:00 2001 From: Jeremy Kerr Date: Tue, 21 May 2013 14:26:12 +0800 Subject: [PATCH] ui/ncurses: Add cancel-default reporting When we first see key input, we can tell the discover server to cancel the default boot. Untested on ps3. Signed-off-by: Jeremy Kerr --- ui/ncurses/generic-main.c | 1 - ui/ncurses/nc-cui.c | 35 ++++------------------------------- ui/ncurses/nc-cui.h | 14 +------------- ui/ncurses/ps3-main.c | 34 +--------------------------------- 4 files changed, 6 insertions(+), 78 deletions(-) diff --git a/ui/ncurses/generic-main.c b/ui/ncurses/generic-main.c index 560e3e5..6280a34 100644 --- a/ui/ncurses/generic-main.c +++ b/ui/ncurses/generic-main.c @@ -259,7 +259,6 @@ int main(int argc, char *argv[]) return EXIT_FAILURE; pb.mm = pb_mm_init(&pb); - ui_timer_disable(&pb.cui->timer); cui_result = cui_run(pb.cui, pb.mm, 0); diff --git a/ui/ncurses/nc-cui.c b/ui/ncurses/nc-cui.c index bd4f6b8..82e534d 100644 --- a/ui/ncurses/nc-cui.c +++ b/ui/ncurses/nc-cui.c @@ -222,7 +222,10 @@ static int cui_process_key(void *arg) assert(cui->current); - ui_timer_disable(&cui->timer); + if (!cui->has_input) + discover_client_cancel_default(cui->client); + cui->has_input = true; + for (;;) { int c = getch(); @@ -257,24 +260,6 @@ static int cui_process_js(void *arg) return 0; } -/** - * cui_handle_timeout - Handle the timeout. - */ - -static void cui_handle_timeout(struct ui_timer *timer) -{ - struct cui *cui = cui_from_timer(timer); - struct pmenu_item *i = pmenu_find_selected(cui->main); - -#if defined(DEBUG) - { - struct cui_opt_data *cod = cod_from_item(i); - assert(cod && (cod->opt_hash == cui->default_item)); - } -#endif - i->on_execute(i); -} - /** * cui_handle_resize - Handle the term resize. */ @@ -399,12 +384,6 @@ static int cui_boot_option_add(struct device *dev, struct boot_option *opt, pb_log(" initrd '%s'\n", cod->bd->initrd); pb_log(" args '%s'\n", cod->bd->args); - /* If this is the default_item select it and start timer. */ - if (cod->opt_hash == cui->default_item) { - selected = i->nci; - ui_timer_kick(&cui->timer); - } - /* Re-attach the items array. */ result = set_menu_items(cui->main->ncm, cui->main->items); @@ -459,11 +438,6 @@ static void cui_device_remove(struct device *dev, void *arg) assert(pb_protocol_device_cmp(dev, cod->dev)); pmenu_remove(cui->main, i); - - /* If this is the default_item disable timer. */ - - if (cod->opt_hash == cui->default_item) - ui_timer_disable(&cui->timer); } /* Re-attach the items array. */ @@ -527,7 +501,6 @@ struct cui *cui_init(void* platform_info, cui->c_sig = pb_cui_sig; cui->platform_info = platform_info; - cui->timer.handle_timeout = cui_handle_timeout; cui->waitset = waitset_create(cui); /* Loop here for scripts that just started the server. */ diff --git a/ui/ncurses/nc-cui.h b/ui/ncurses/nc-cui.h index 69c15d4..a5ac5d5 100644 --- a/ui/ncurses/nc-cui.h +++ b/ui/ncurses/nc-cui.h @@ -22,7 +22,6 @@ #include #include "ui/common/joystick.h" -#include "ui/common/timer.h" #include "nc-menu.h" #include "nc-boot-editor.h" @@ -49,11 +48,11 @@ struct cui_opt_data { struct cui { enum pb_nc_sig c_sig; + bool has_input; sig_atomic_t abort; sig_atomic_t resize; struct nc_scr *current; struct pmenu *main; - struct ui_timer timer; struct waitset *waitset; struct discover_client *client; struct pjs *pjs; @@ -94,15 +93,4 @@ static inline struct cui *cui_from_item(struct pmenu_item *item) return cui_from_pmenu(item->pmenu); } -static inline struct cui *cui_from_timer(struct ui_timer *timer) -{ - struct cui *cui; - - cui = (struct cui *)((char *)timer - - (size_t)&((struct cui *)0)->timer); - assert(cui->c_sig == pb_cui_sig); - - return cui; -} - #endif diff --git a/ui/ncurses/ps3-main.c b/ui/ncurses/ps3-main.c index 3b9fab1..5735055 100644 --- a/ui/ncurses/ps3-main.c +++ b/ui/ncurses/ps3-main.c @@ -70,7 +70,6 @@ struct opts { enum opt_value show_help; const char *log_file; enum opt_value reset_defaults; - enum opt_value use_timeout; enum opt_value show_version; }; @@ -84,11 +83,10 @@ static int opts_parse(struct opts *opts, int argc, char *argv[]) {"help", no_argument, NULL, 'h'}, {"log", required_argument, NULL, 'l'}, {"reset-defaults", no_argument, NULL, 'r'}, - {"timeout", no_argument, NULL, 't'}, {"version", no_argument, NULL, 'V'}, { NULL, 0, NULL, 0}, }; - static const char short_options[] = "hl:trV"; + static const char short_options[] = "hl:rV"; static const struct opts default_values = { .log_file = "/var/log/petitboot/petitboot-nc.log", }; @@ -109,9 +107,6 @@ static int opts_parse(struct opts *opts, int argc, char *argv[]) case 'l': opts->log_file = optarg; break; - case 't': - opts->use_timeout = opt_yes; - break; case 'r': opts->reset_defaults = opt_yes; break; @@ -398,21 +393,6 @@ 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. */ @@ -566,10 +546,6 @@ 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); @@ -666,14 +642,6 @@ int main(int argc, char *argv[]) ps3.mm = ps3_mm_init(&ps3); ps3.svm = ps3_svm_init(&ps3); - if (opts.use_timeout != opt_yes - || 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); -- 2.39.2