]> git.ozlabs.org Git - petitboot/blobdiff - ui/ncurses/ps3-cui.c
Add ncurses joystick support
[petitboot] / ui / ncurses / ps3-cui.c
index cb63849f631d2903ff2e38e0e955e060609ffe93..2973f5dbb219e308090e7266719a30beba00a1d0 100644 (file)
@@ -156,6 +156,83 @@ static struct ps3_cui *ps3_from_item(struct pmenu_item *item)
        return ps3_from_cui(cui_from_item(item));
 }
 
+/**
+ * ps3_sixaxis_map - Map a Linux joystick event to an ncurses key code.
+ *
+ */
+
+static int ps3_sixaxis_map(const struct js_event *e)
+{
+#if 0
+       static const int axis_map[] = {
+               0,              /*   0  Left thumb X    */
+               0,              /*   1  Left thumb Y    */
+               0,              /*   2  Right thumb X   */
+               0,              /*   3  Right thumb Y   */
+               0,              /*   4  nothing         */
+               0,              /*   5  nothing         */
+               0,              /*   6  nothing         */
+               0,              /*   7  nothing         */
+               0,              /*   8  Dpad Up         */
+               0,              /*   9  Dpad Right      */
+               0,              /*  10  Dpad Down       */
+               0,              /*  11  Dpad Left       */
+               0,              /*  12  L2              */
+               0,              /*  13  R2              */
+               0,              /*  14  L1              */
+               0,              /*  15  R1              */
+               0,              /*  16  Triangle        */
+               0,              /*  17  Circle          */
+               0,              /*  18  Cross           */
+               0,              /*  19  Square          */
+               0,              /*  20  nothing         */
+               0,              /*  21  nothing         */
+               0,              /*  22  nothing         */
+               0,              /*  23  nothing         */
+               0,              /*  24  nothing         */
+               0,              /*  25  nothing         */
+               0,              /*  26  nothing         */
+               0,              /*  27  nothing         */
+       };
+#endif
+       static const int button_map[] = {
+               0,              /*   0  Select          */
+               0,              /*   1  L3              */
+               0,              /*   2  R3              */
+               0,              /*   3  Start           */
+               KEY_UP,         /*   4  Dpad Up         */
+               0,              /*   5  Dpad Right      */
+               KEY_DOWN,       /*   6  Dpad Down       */
+               0,              /*   7  Dpad Left       */
+               KEY_UP,         /*   8  L2              */
+               KEY_DOWN,       /*   9  R2              */
+               KEY_HOME,       /*  10  L1              */
+               KEY_END,        /*  11  R1              */
+               0,              /*  12  Triangle        */
+               0,              /*  13  Circle          */
+               13,             /*  14  Cross           */
+               0,              /*  15  Square          */
+               0,              /*  16  PS Button       */
+               0,              /*  17  nothing         */
+               0,              /*  18  nothing         */
+       };
+
+       if (!e->value)
+               return 0;
+
+       if (e->type == JS_EVENT_BUTTON
+               && e->number < sizeof(button_map) / sizeof(button_map[0]))
+               return button_map[e->number];
+
+#if 0
+       if (e->type == JS_EVENT_AXIS
+               && e->number < sizeof(axis_map) / sizeof(axis_map[0]))
+               return axis_map[e->number];
+#endif
+
+       return 0;
+}
+
 /**
  * ps3_set_mode - Set video mode helper.
  *
@@ -339,17 +416,14 @@ static struct pmenu *ps3_mm_init(struct ps3_cui *ps3_cui)
                "ESC=exit, Enter=accept, e=edit, o=open");
        m->scr.frame.status = talloc_strdup(m, "Welcome to Petitboot");
 
-       i = pmenu_item_init(m, 0, "Boot GameOS",
-               "Reboot the PS3 into the GameOS");
+       i = pmenu_item_init(m, 0, "Boot GameOS");
        i->on_execute = cui_run_cmd;
        i->data = (void *)bgo;
 
-       i = pmenu_item_init(m, 1, "Set Video Mode",
-               "Display a video mode selection menu");
+       i = pmenu_item_init(m, 1, "Set Video Mode");
        i->on_execute = ps3_mm_to_svm_cb;
 
-       i = pmenu_item_init(m, 2, "Exit to Shell",
-               "Exit petitboot and return to a shell prompt");
+       i = pmenu_item_init(m, 2, "Exit to Shell");
        i->on_execute = pmenu_exit_cb;
 
        result = pmenu_setup(m);
@@ -392,53 +466,51 @@ static struct pmenu *ps3_svm_init(struct ps3_cui *ps3_cui)
        m->scr.frame.title = talloc_strdup(m, "Select PS3 Video Mode");
        m->scr.frame.help = talloc_strdup(m, "ESC=exit, Enter=accept");
 
-       i = pmenu_item_init(m, 0, "auto detect",
-               "Auto detect the best HDMI video mode");
+       i = pmenu_item_init(m, 0, "auto detect");
        i->on_execute = ps3_svm_cb;
        i->data = (void *)0;
 
-       i = pmenu_item_init(m, 1, "480i    (576 x 384)", NULL);
+       i = pmenu_item_init(m, 1, "480i    (576 x 384)");
        i->on_execute = ps3_svm_cb;
        i->data = (void *)1;
 
-       i = pmenu_item_init(m, 2, "480p    (576 x 384)", NULL);
+       i = pmenu_item_init(m, 2, "480p    (576 x 384)");
        i->on_execute = ps3_svm_cb;
        i->data = (void *)2;
 
-       i = pmenu_item_init(m, 3, "576i    (576 x 460)", NULL);
+       i = pmenu_item_init(m, 3, "576i    (576 x 460)");
        i->on_execute = ps3_svm_cb;
        i->data = (void *)6;
 
-       i = pmenu_item_init(m, 4, "576p    (576 x 460)", NULL);
+       i = pmenu_item_init(m, 4, "576p    (576 x 460)");
        i->on_execute = ps3_svm_cb;
        i->data = (void *)7;
 
-       i = pmenu_item_init(m, 5, "720p   (1124 x 644)", NULL);
+       i = pmenu_item_init(m, 5, "720p   (1124 x 644)");
        i->on_execute = ps3_svm_cb;
        i->data = (void *)3;
 
-       i = pmenu_item_init(m, 6, "1080i  (1688 x 964)", NULL);
+       i = pmenu_item_init(m, 6, "1080i  (1688 x 964)");
        i->on_execute = ps3_svm_cb;
        i->data = (void *)4;
 
-       i = pmenu_item_init(m, 7, "1080p  (1688 x 964)", NULL);
+       i = pmenu_item_init(m, 7, "1080p  (1688 x 964)");
        i->on_execute = ps3_svm_cb;
        i->data = (void *)5;
 
-       i = pmenu_item_init(m, 8, "wxga   (1280 x 768)", NULL);
+       i = pmenu_item_init(m, 8, "wxga   (1280 x 768)");
        i->on_execute = ps3_svm_cb;
        i->data = (void *)11;
 
-       i = pmenu_item_init(m, 9, "sxga   (1280 x 1024)", NULL);
+       i = pmenu_item_init(m, 9, "sxga   (1280 x 1024)");
        i->on_execute = ps3_svm_cb;
        i->data = (void *)12;
 
-       i = pmenu_item_init(m, 10, "wuxga  (1920 x 1200)", NULL);
+       i = pmenu_item_init(m, 10, "wuxga  (1920 x 1200)");
        i->on_execute = ps3_svm_cb;
        i->data = (void *)13;
 
-       i = pmenu_item_init(m, 11, "Return",
-               "Return to the main menu");
+       i = pmenu_item_init(m, 11, "Return");
        i->on_execute = ps3_svm_to_mm_cb;
 
        result = pmenu_setup(m);
@@ -555,7 +627,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.cui = cui_init(&ps3, ps3_kexec_cb, ps3_sixaxis_map);
 
        if (!ps3.cui)
                return EXIT_FAILURE;