Dear Experts,
I have a Gyration wireless gyroscopic mouse and keyboard, which use a
USB-connected receiver. Does anyone else have experience with this
device? I can recommend it for giving software demos on a projector.
Most functions work well.
The mouse has the usual buttons plus three extra ones which generate
keyboard function key events, rather than mouse button presses.
Sometimes, when I press one of these extra buttons I get the 'press'
event but not a 'release' event; I then get lots of 'repeat' events.
Before I go on I should say that this is not with the latest kernel;
this is 2.6.19. Feel free to flame me for not trying on a new one :-)
I have had a quick search through the kernel changelog and can't see
anything that's immediately relevant.
The symptom is that if I repeatedly click one of these extra buttons
and "od -x /dev/input/event<n>" I see normal 1/0/1/0 press and release
events, but after a while (order of 30 clicks perhaps) I see
1/2/2/2/2/2/ (press followed by repeats), and no release.
When I next press the button, I don't get the press event, but I do get
the release event, at which point everything seems to be back to normal.
[Aside: I decided to try to turn off auto-repeat for these events,
mainly to make the debug dumps less cluttered but also in case the
problem was caused by a bug in the auto-repeat code. Google quickly
told me that I needed to use ioctl(EVIOCSREP) but I didn't find a
command-line program to do this for a specific /dev/input/event<n> file
- have I missed something? So I wrote one, which is here:
http://svn.chezphil.org/utils/trunk/input-kbd-rpt.c - maybe it will be
useful to someone. I presume that I'm supposed to pass 0,0 as the
parameters to disable auto-repeat, yes? Anyway, it didn't solve the
problem; I still see a press event and no corresponding release event.]
I have attempted to reconcile the data from /dev/input/event with
usbmon traces, without much luck, i.e. I can't determine yet whether
there is a release event in the USB data. Does anyone know how the
timestamps in usbmon and in /dev/input/event are related? They are
both microseconds, but must be based differently I think. I need to
work out how to get the actual data in the usbmon output rather than
just "<"; I think this might be a kernel version thing.
My feeling is that this could easily be a bug in the microcontroller
inside the the mouse or the receiver. I doubt that they have
engineered the whole thing from scratch, so maybe this is a known quirk
that other products share?
So, does anyone have any experience with this hardware, or suggestions
for further debugging or work-arounds?
Many thanks for your attention.
Regards,
Phil.