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 #