260 lines
7.4 KiB
Text
260 lines
7.4 KiB
Text
--buttonmap a=b,c=d,e=f
|
|
--axismap x1=x2,x2=
|
|
|
|
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
|
|
--
|
|
--buttonmap A:B,B:B,X:X
|
|
|
|
|
|
* 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 #
|