xboxdrv/TODO
2008-11-06 15:41:12 +01:00

247 lines
7.2 KiB
Text
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

- using rumble in scripts doesn't work, since you can't reset rumble back to 0,0
- locate a USB device with a string or two
- thread away on all endpoints
- read from stdin on the main thread
- send output to file or so
usb -d 005:006 -c 5:in,5:out,6:in,7:in,8:out -o /tmp/out, else stdin
- print version number on normal use
More general button map support:
% ./xboxdrv --buttonmap B=BTN_A,X=BTN_A,Y=KEY_B
So pressing B sends out BTN_A uinput event
Daemon Mode:
SYSFS{idVendor}=="045e", SYSFS{idProduct}=="028e", RUN+="/home/ingo/projects/xboxdrv/trunk/xboxdrv --daemon"
Unpluging doesn't work and causes xboxdrv processing running amok
Pictures of Xbox360 and controller:
http://g-prime.net/x360/
--stick2-as-throttle
Makes the second stick act as throttle control
Add examples to Readme for specific games
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 (done)
needs dpad first
FIX:
=====
filter auto known unknown messages
uinput name should be configurable
uinput busid/devid shouldn't be hardcoded
Battery warning: LEDs 1,4 then 2,3 over and over ~10 times rapidly
* 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
* 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
*/
-----
Guitar:
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.
-----
* Question: Firestorm Dual Power: How to get rumble to work when there is no endpoint to send data to?
* 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
* 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?
* ...
[[ InputDrv ]]
==============
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")
...
)
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)
[[ Xorg Input Hotplug ]]
========================
Not available in Ubuntu and still rough, would work via Dbus, see:
http://www.x.org/wiki/XInputHotplug
d-feet is a Dbus debuging/viewing tool.
Example Dbus stuff:
-------------------
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 \
# EOF #