Thread (2 messages) 2 messages, 2 authors, 2013-09-29

Re: How write driver for gamepad, that detected by usbhid but not work correctly?

From: Bruno Prémont <bonbons@linux-vserver.org>
Date: 2013-09-29 09:39:53

On Sun, 29 September 2013 "v1kt0p.rus@gmail.com" [off-list ref] wrote:
I have "Genesis to USB adapter" and two genesis gamepads. On windows it 
is work correctly. On linux do not work "left" and "up" buttons on 
D-pad, and two gamepads appear as one with double buttons.
At first I tried to write usb driver(usb_register), but when I connect 
gamepad system choose usbhid driver not my. When I unplug gamepad system 
call "probe" in my driver, but then immediately call "disconnect". Is 
there a way to force the system to choose my driver first?
Than I tried to write hid driver(hid_register_driver), but "probe" is 
not called. I can not find documentation describing how to make a 
working driver for hid, it exists at all?
What is the correct way to write a driver for the gamepad? What am I 
doing wrong?
You can have a look at all the drivers located under drivers/hid/ for
how they do it.

Two drivers that represent gamepads:
  hid-pl.c
  hid-saitek.c

Depending on how your gamepad shows up when there are two pads connected
you may need to register a second input device to send buttons from the
first pad to first input device, buttons from second to the extra input
device.

A good start to find out what your device does is to enable debugging
in your kernel and cat /sys/kernel/debug/hid/<your device>/events
to determine what happens on button presses.
You can then check how that output matches events sent from /dev/input/event*
matching your device and determine if all that is needed is proper
scancode translation of if more tuning is needed.

Bruno
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help