diff options
author | Jeremy Kerr <jk@ozlabs.org> | 2007-08-23 15:36:34 +0800 |
---|---|---|
committer | Jeremy Kerr <jk@ozlabs.org> | 2007-08-23 16:27:29 +0800 |
commit | 827e0b3bdfaf4a218e1d75cb9e6a52ec097a3a38 (patch) | |
tree | de3836130f0b974d80b3a6be2be2dacf198083b4 /petitboot.c | |
parent | cb1389df1252483c824812ca49a6c3e67619d8e0 (diff) | |
download | talos-petitboot-827e0b3bdfaf4a218e1d75cb9e6a52ec097a3a38.tar.gz talos-petitboot-827e0b3bdfaf4a218e1d75cb9e6a52ec097a3a38.zip |
Add ps3 controller support
Using the new twin joystick API, map some of the sixaxis controller
events to key events.
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Diffstat (limited to 'petitboot.c')
-rw-r--r-- | petitboot.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/petitboot.c b/petitboot.c index f875768..fc72fd8 100644 --- a/petitboot.c +++ b/petitboot.c @@ -14,6 +14,7 @@ #include <libtwin/twin.h> #include <libtwin/twin_linux_mouse.h> +#include <libtwin/twin_linux_js.h> #include <libtwin/twin_png.h> #include <libtwin/twin_jpeg.h> @@ -141,6 +142,30 @@ static pboot_lpane_t *pboot_lpane; static pboot_rpane_t *pboot_rpane; static pboot_spane_t *pboot_spane; +/* control to keyboard mappings for the sixaxis controller */ +uint8_t sixaxis_map[] = { + 0, /* 0 Select */ + 0, /* 1 L3 */ + 0, /* 2 R3 */ + 0, /* 3 Start */ + KEY_UP, /* 4 Dpad Up */ + KEY_RIGHT, /* 5 Dpad Right */ + KEY_DOWN, /* 6 Dpad Down */ + KEY_LEFT, /* 7 Dpad Left */ + 0, /* 8 L2 */ + 0, /* 9 R2 */ + 0, /* 10 L1 */ + 0, /* 11 R1 */ + 0, /* 12 Triangle */ + KEY_ENTER, /* 13 Circle */ + 0, /* 14 Cross */ + KEY_DELETE, /* 15 Square */ + 0, /* 16 PS Button */ + 0, /* 17 nothing */ + 0, /* 18 nothing */ +}; + + static int pboot_vmode_change = -1; /* XXX move to twin */ @@ -729,6 +754,20 @@ twin_bool_t pboot_event_filter(twin_screen_t *screen, pboot_cursor_hx, pboot_cursor_hy); break; + case TwinEventJoyButton: + /* map joystick events into key events */ + if (event->u.js.control >= sizeof(sixaxis_map)) + break; + + event->u.key.key = sixaxis_map[event->u.js.control]; + if (event->u.js.value == 0) { + event->kind = TwinEventKeyUp; + break; + } else { + event->kind = TwinEventKeyDown; + } + + /* fall through.. */ case TwinEventKeyDown: switch(event->u.key.key) { /* Gross hack for video modes, need something better ! */ @@ -1099,6 +1138,7 @@ int main(int argc, char **argv) } pboot_screen = pboot_fbdev->screen; twin_linux_mouse_create(NULL, pboot_screen); + twin_linux_js_create(pboot_screen); if (pboot_fbdev != NULL) { char *cursor_path = artwork_pathname("cursor.gz"); |