X-Git-Url: http://git.ozlabs.org/?p=petitboot;a=blobdiff_plain;f=ui%2Fncurses%2Fps3-main.c;h=f60a05e41a8c842395ae6350b4c86c8930805632;hp=890e47b852221a0c1b04e1519e838ac5a8bbb6e9;hb=2dfbd9811d1e14911a6476850aada94b88a0dbdd;hpb=ae0ba68f475ae5b057aad6538765bc8702134b9a;ds=sidebyside diff --git a/ui/ncurses/ps3-main.c b/ui/ncurses/ps3-main.c index 890e47b..f60a05e 100644 --- a/ui/ncurses/ps3-main.c +++ b/ui/ncurses/ps3-main.c @@ -28,7 +28,7 @@ #include "config.h" #endif -#define _GNU_SOURCE +#include #include #include #include @@ -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; @@ -267,20 +262,20 @@ static int ps3_svm_cb(struct pmenu_item *item) } /** - * ps3_kexec_cb - The kexec callback. + * ps3_boot_cb - The kexec callback. * - * Writes config data to PS3 flash then calls pb_run_kexec(). + * Writes config data to PS3 flash then calls pb_boot(). * Adds a video mode arg to the kernel command line if needed. */ -static int ps3_kexec_cb(struct cui *cui, struct cui_opt_data *cod) +static int ps3_boot_cb(struct cui *cui, struct cui_opt_data *cod) { struct ps3_cui *ps3 = ps3_from_cui(cui); int result; int altered_args; char *orig_args; - pb_log("%s: %s\n", __func__, cod->name); + pb_debug("%s: %s\n", __func__, cod->name); assert(ps3->cui->current == &ps3->cui->main->scr); @@ -294,24 +289,24 @@ static int ps3_kexec_cb(struct cui *cui, struct cui_opt_data *cod) /* Add a default kernel video mode. */ - if (!cod->kd->args) { + if (!cod->bd->args) { altered_args = 1; orig_args = NULL; - cod->kd->args = talloc_asprintf(NULL, "video=ps3fb:mode:%u", + cod->bd->args = talloc_asprintf(NULL, "video=ps3fb:mode:%u", (unsigned int)ps3->values.video_mode); - } else if (!strstr(cod->kd->args, "video=")) { + } else if (!strstr(cod->bd->args, "video=")) { altered_args = 1; - orig_args = cod->kd->args; - cod->kd->args = talloc_asprintf(NULL, "%s video=ps3fb:mode:%u", + orig_args = cod->bd->args; + cod->bd->args = talloc_asprintf(NULL, "%s video=ps3fb:mode:%u", orig_args, (unsigned int)ps3->values.video_mode); } else altered_args = 0; - result = pb_run_kexec(cod->kd); + result = pb_boot(cod->bd, ps3->cui->dry_run); if (altered_args) { - talloc_free(cod->kd->args); - cod->kd->args = orig_args; + talloc_free(cod->bd->args); + cod->bd->args = orig_args; } return result; @@ -348,7 +343,7 @@ static int ps3_svm_to_mm_cb(struct pmenu_item *item) } /** - * ps3_svm_to_mm_helper - The svm ESC callback. + * ps3_svm_to_mm_helper - The svm exit callback. */ static void ps3_svm_to_mm_helper(struct pmenu *menu) @@ -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. */ @@ -431,8 +411,16 @@ static struct pmenu *ps3_mm_init(struct ps3_cui *ps3_cui) return NULL; } - m->hot_key = ps3_hot_key; - m->on_open = cui_on_open; + m->n_hot_keys = 2; + m->hot_keys = talloc_array(m, hot_key_fn *, m->n_hot_keys); + if (!m->hot_keys) { + pb_log("%s: failed to allocate hot_keys\n", __func__); + talloc_free(m); + return NULL; + } + m->hot_keys[0] = ps3_hot_key; + m->hot_keys[1] = pmenu_main_hot_keys; + m->on_new = cui_item_new; #if defined(DEBUG) m->scr.frame.title = talloc_strdup(m, @@ -441,7 +429,7 @@ static struct pmenu *ps3_mm_init(struct ps3_cui *ps3_cui) m->scr.frame.title = talloc_strdup(m, "Petitboot PS3"); #endif m->scr.frame.help = talloc_strdup(m, - "ESC=exit, Enter=accept, e=edit, o=open"); + "Enter=accept, e=edit, o=open, x=exit"); m->scr.frame.status = talloc_strdup(m, "Welcome to Petitboot"); i = pmenu_item_init(m, 0, "Boot GameOS"); @@ -492,7 +480,7 @@ static struct pmenu *ps3_svm_init(struct ps3_cui *ps3_cui) m->hot_key = ps3_hot_key; m->scr.frame.title = talloc_strdup(m, "Select PS3 Video Mode"); - m->scr.frame.help = talloc_strdup(m, "ESC=exit, Enter=accept"); + m->scr.frame.help = talloc_strdup(m, "Enter=accept, x=exit"); i = pmenu_item_init(m, 0, "auto detect"); i->on_execute = ps3_svm_cb; @@ -566,10 +554,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); @@ -597,7 +581,6 @@ int main(int argc, char *argv[]) int result; int cui_result; unsigned int mode; - FILE *log; result = opts_parse(&opts, argc, argv); @@ -616,9 +599,13 @@ int main(int argc, char *argv[]) return EXIT_SUCCESS; } - log = fopen(opts.log_file, "a"); - assert(log); - pb_log_set_stream(log); + if (strcmp(opts.log_file, "-")) { + FILE *log = fopen(opts.log_file, "a"); + + assert(log); + pb_log_set_stream(log); + } else + pb_log_set_stream(stderr); #if defined(DEBUG) pb_log_always_flush(1); @@ -655,7 +642,7 @@ int main(int argc, char *argv[]) if (!result && (ps3.values.video_mode != (uint16_t)mode)) ps3_set_video_mode(ps3.values.video_mode); - ps3.cui = cui_init(&ps3, ps3_kexec_cb, ps3_sixaxis_map); + ps3.cui = cui_init(&ps3, ps3_boot_cb, ps3_sixaxis_map); if (!ps3.cui) return EXIT_FAILURE; @@ -663,14 +650,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);