From 827e0b3bdfaf4a218e1d75cb9e6a52ec097a3a38 Mon Sep 17 00:00:00 2001 From: Jeremy Kerr Date: Thu, 23 Aug 2007 15:36:34 +0800 Subject: [PATCH] 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 --- petitboot.c | 40 +++++++++++++++++++++++++++++ utils/ps3-kboot-0.1-petitboot.patch | 40 +++++++++++++++++++++++++++-- 2 files changed, 78 insertions(+), 2 deletions(-) diff --git a/petitboot.c b/petitboot.c index f875768..fc72fd8 100644 --- a/petitboot.c +++ b/petitboot.c @@ -14,6 +14,7 @@ #include #include +#include #include #include @@ -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"); diff --git a/utils/ps3-kboot-0.1-petitboot.patch b/utils/ps3-kboot-0.1-petitboot.patch index a33fa24..bd1d207 100644 --- a/utils/ps3-kboot-0.1-petitboot.patch +++ b/utils/ps3-kboot-0.1-petitboot.patch @@ -7,12 +7,13 @@ More info at http://ozlabs.org/~jk/projects/petitboot/ --- ps3-kboot.orig/ps3-kboot-0.1/Makefile 2007-04-05 20:10:44.000000000 +1000 +++ ps3-kboot/ps3-kboot-0.1/Makefile 2007-04-04 20:54:40.000000000 +1000 -@@ -20,6 +20,8 @@ +@@ -20,6 +20,9 @@ LOCAL_KERNEL_CONFIG=$(PWD)/config/kernel-config LOCAL_KBOOT_CONF=$(PWD)/config/kboot.conf LOCAL_FSTAB=$(PWD)/config/fstab +LOCAL_UDEV_RULES=$(PWD)/config/65-persistent-storage.rules \ -+ $(PWD)/config/99-petitboot.rules ++ $(PWD)/config/99-petitboot.rules \ ++ $(PWD)/config/20-input-names.rules KBOOT_MESSAGE=$(PWD)/config/message KBOOT_FEATURES=$(PWD)/config/kboot-features @@ -305,3 +306,38 @@ diff -urN ps3-kboot.orig/ps3-kboot-0.1/scripts/petitboot-init ps3-kboot/ps3-kboo Standards-Version: 3.6.1 Package: ps3-kboot +--- ps3-kboot.orig/config/kernel-config 2007-06-27 14:25:08.000000000 +1000 ++++ ps3-kboot/config/kernel-config 7-06-27 14:28:28.000000000 +1000 +@@ -449,10 +449,13 @@ + # + # Userland interfaces + # +-# CONFIG_INPUT_MOUSEDEV is not set +-# CONFIG_INPUT_JOYDEV is not set ++CONFIG_INPUT_MOUSEDEV=y ++# CONFIG_INPUT_MOUSEDEV_PSAUX is not set ++CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 ++CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 ++CONFIG_INPUT_JOYDEV=y + # CONFIG_INPUT_TSDEV is not set +-# CONFIG_INPUT_EVDEV is not set ++CONFIG_INPUT_EVDEV=y + # CONFIG_INPUT_EVBUG is not set + + # +@@ -668,6 +671,7 @@ + # CONFIG_USB_STORAGE_SDDR55 is not set + # CONFIG_USB_STORAGE_JUMPSHOT is not set + # CONFIG_USB_STORAGE_ALAUDA is not set ++# CONFIG_USB_STORAGE_ONETOUCH is not set + # CONFIG_USB_LIBUSUAL is not set + + # +-- /dev/null 2007-04-18 20:56:03.000000000 +1000 ++++ ps3-kboot-0.1/config/20-input-names.rules 2007-06-27 14:34:05.000000000 +1000 +@@ -0,0 +1,5 @@ ++# Input devices, group under /dev/input ++KERNEL=="event[0-9]*", NAME="input/%k" ++KERNEL=="mice", NAME="input/%k" ++KERNEL=="mouse[0-9]*", NAME="input/%k" ++KERNEL=="js[0-9]*", NAME="input/%k" -- 2.39.2