249 lines
7.3 KiB
Text
249 lines
7.3 KiB
Text
- add autofire with variable range, make it so that you can have one button mapped to A and one to A with autofire
|
||
--autofire A=50,B=10
|
||
- 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 #
|