Pictures of Xbox360 and controller: http://g-prime.net/x360/ FIX: ===== filter auto known unknown messages usbcat contains ugly endpoint hack Battery warning: LEDs 1,4 then 2,3 over and over ~10 times rapidly Easy interface: =============== --trigger-as-zaxis * a way to send keyboard combination sequences or more general event sequences * abs input must be normalized to min/max * rel input must be scaleable * Cleanup naming conventions sending rumble is slow and delayed, gets buffered up d-feet dbus-send --system --type=method_call --print-reply --dest=org.x.config.display0 /org/x/config/0 org.x.config.input.remove uint32:5 Error org.freedesktop.DBus.Error.ServiceUnknown: The name org.x.config.display0 was not provi Doing polling seems to lose some events dbus-send --dest=org.gnome.ScreenSaver / dbus-send --dest=org.freedesktop.ExampleName \ /org/freedesktop/sample/object/name org.freedesktop.ExampleInterface.ExampleMethod \ int32:47 string:'hello world' double:65.32 \ array:string:"1st item","next item","last item" \ dict:string:int32:"one",1,"two",2,"three",3 \ variant:int32:-8 \ objpath:/org/freedesktop/sample/object/name dbus-send --dest=org.x.config.display0 \ /org/x/config/0 org.x.config.input.add dbus-send --dest=org.x.config.display0 /org/x/config/0 org.x.config.input.remove int32:5 dbus-send \ --dest=org.x.config.display0 \ org.freedesktop.DBus.Introspectable \ org.freedesktop.DBus.Introspectable.Introspect \ Controls: ========= * invert button * toggle button * autofire button * invert axis * deadzone axis * split axis (gas/break) * join axis (trigger -> zaxis) * non-linear axis (gamma or so) * examples in doc for --dpad as buttons and other options Figure out: =========== Unknown data: bytes: 3 Data: 0x01 0x03 0x0e Unknown data: bytes: 3 Data: 0x02 0x03 0x00 Unknown data: bytes: 3 Data: 0x03 0x03 0x03 Unknown data: bytes: 3 Data: 0x08 0x03 0x00 Unknown data: bytes: 3 Data: 0x01 0x03 0x00 Different Computer/Pad: Unknown data: bytes: 3 Data: 0x01 0x03 0x0e Unknown data: bytes: 3 Data: 0x02 0x03 0x00 Unknown data: bytes: 3 Data: 0x03 0x03 0x03 Unknown data: bytes: 3 Data: 0x08 0x03 0x00 Unknown data: bytes: 3 Data: 0x01 0x03 0x00 /* Happens with XBox360 Controller sometimes Unknown data: bytes: 3 Data: 0x01 0x03 0x0e Unknown data: bytes: 3 Data: 0x02 0x03 0x00 Unknown data: bytes: 3 Data: 0x03 0x03 0x03 Unknown data: bytes: 3 Data: 0x08 0x03 0x00 -- different session: Unknown data: bytes: 3 Data: 0x01 0x03 0x0e Unknown data: bytes: 3 Data: 0x02 0x03 0x00 Unknown data: bytes: 3 Data: 0x03 0x03 0x03 Unknown data: bytes: 3 Data: 0x08 0x03 0x00 Unknown data: bytes: 3 Data: 0x01 0x03 0x06 */ ----- Tilt Sensor: is mapped to the second axis of S2, to LT and RT (three parts) - Range for 2nd axis of S2 : -32768 when guitar is straight down and 32767 when she is straight up. - Range for LT : ~200 not very precise and ~60 at min. - Range for RT : ~190 not very precise and ~55 at min. dummy should stay mostly 0, except the position five and six, which are the LT/RT trigger. We can either just ignore them or you can try to find out if they have any meaning. They control guitar rotation, hmm hard to explain, it's when I rotate the guitar in front of me, it detects if the guitar is in the correct position. ----- * add -type option to enforce controller type * Question: Firestorm Dual Power: How to get rumble to work when there is no endpoint to send data to? * allow selection of controller by usb path busNr,deviceNr * Guitar Hero Controller: - lsusb -v output looks like a XBox360 controller - usbcat looks like an XBox360 controller - it doesn't report events http://forums.gentoo.org/viewtopic-p-5061825.html http://gentoo-wiki.com/HOWTO_Xbox_360_controller_on_Linux http://happypenguin.org/show?xboxdrv http://ubuntuforums.org/showthread.php?t=404577&page=16 http://tattiebogle.net/index.php/ProjectRoot/Xbox360Controller/OsxDriver WirelessHIDDevice::receivedMessage(IOMemoryDescriptor *data) * wireless reports battery level * disconnecting the pad in use will just let the driver wait forever for new data, any way we can catch a disconnect? * a way to configure the deadzone for axis (might be needed for some games) * Add support for dancepad/mats (should just mean cleanup up the buttons/axis not provided by the dancepad/mat) New Command Line Options: --button-map BTN BTN is a list of integers, where each integer corresponds to the event that gets send A,B,X,Y,LB,RB,SL,SR,LT,RT,Start,Mode,Back,DPAD-UP,DPAD-DOWN,DPAD-LEFT,DPAD-RIGHT A,B,X,Y,TL2,TR2,TL,TR, #define BTN_A 0x130 #define BTN_B 0x131 #define BTN_C 0x132 #define BTN_X 0x133 #define BTN_Y 0x134 #define BTN_Z 0x135 #define BTN_TL 0x136 #define BTN_TR 0x137 #define BTN_TL2 0x138 #define BTN_TR2 0x139 #define BTN_SELECT 0x13a #define BTN_START 0x13b #define BTN_MODE 0x13c #define BTN_THUMBL 0x13d #define BTN_THUMBR 0x13e --dpad-first Dpad becomes first and second axis, instead of last, useful for 2D jump'n run --stick2-as-throttle Makes the second stick act as throttle control * add support to remap keys * allow mouse emulation * allow swapping of dpad and analog axis, so that dpad is first instead of last * merge this thing with Pingus Input handling to get a very flexible framework? * ... Use cases: ========== * flightsim: expects: X/Y Rudder Throttle XBox: Left-Stick LT+RT Right-Stick(rel) * FPS: expects: Mouse-X/Y Walk-X/Y Trigger XBox: Left-Stick RickStick Trigger(btn) * 2D Jump Run needs dpad first Needed features: ================ * stick to mouse * relative-axis (throttle doesn't flip back, a stick does, need to handle that) * trigger to button * dpad to axis * dpad to button * inversal of axis * soft-axis for dpad (controller (button (name "BTN_X") ;; X and Y send out BTN_X events (device (xbox360-button "Y") (xbox360-button "X"))) (button (name "BTN_A") (device (inverse (xbox360-button "Y")))) (axis (name "ABS_X") ... ) ;; -- Pingus Input Configuration -- (pingus-controller (standard-pointer (usbmouse:pointer (device "/dev/input/mx500"))) (standard-scroller (usbmouse:scroller (device "/dev/input/marblemouse"))) (primary-button (usbmouse:button (device "/dev/input/mx500") (button 0))) (secondary-button (usbmouse:button (device "/dev/input/mx500") (button 1))) (pause-button (usbmouse:button (device "/dev/input/mx500") (button 4))) (fast-forward-button (usbmouse:button (device "/dev/input/mx500") (button 3))) ;; (armageddon-button ;; (usbmouse:button (device "/dev/input/mx500") (button 4))) (escape-button (sdl:keyboard-button (key "escape"))) (action-up-button (usbmouse:button (device "/dev/input/mx500") (button 6))) (action-down-button (usbmouse:button (device "/dev/input/mx500") (button 5))) ) ;; EOF ;; # EOF #