Generating keypresses from usbhidaction ?

Martijn van Buul <[email protected]>
Newsgroups gmane.os.netbsd.help
Organization Eindhoven University of Technology
Message-ID <[email protected]>
Hello

I got a new keyboard - a "Microsoft Natural Ergonomic Keyboard 4000 V1.0".
Like most keyboards these days, it comes with extra bells and whistles, like
a slider and a few extra buttons, including the infamous f-lock, which I like 
to use (or: in case of f-lock, make harmless).

To my suprise, this keyboard is actually a composite device:

uhidev0 at uhub0 port 9 configuration 1 interface 0
uhidev0: Microsoft NaturalM-BM-. Ergonomic Keyboard 4000, rev 2.00/1.73, addr 2, iclass 3/1
ukbd0 at uhidev0
wskbd1 at ukbd0 mux 1
wskbd1: connecting to wsdisplay0
uhidev1 at uhub0 port 9 configuration 1 interface 1
uhidev1: Microsoft NaturalM-BM-. Ergonomic Keyboard 4000, rev 2.00/1.73, addr 2, iclass 3/0
uhidev1: 1 report ids
uhid0 at uhidev1 reportid 1: input=7, output=0, feature=0

All the additional keys, including the function keys in case f-lock is 
deactivated, are connected to uhid0, the rest of the keyboard belongs to
ukbd0 (and works as expected).

If I run something like usbhidctl -f uhid0 -la, I get meaningful outputs; 
for example, pressing the "Web/home" key yields

AC_Home=1
No_Event=1
Consumer_Control.0xfe03=1
Consumer_Control.0xfe04=0
Consumer_Control.0xff05=0
Consumer_Control.0xff02=0

releasing it yields

Unassigned=1
No_Event=1
Consumer_Control.0xfe03=1
Consumer_Control.0xfe04=0
Consumer_Control.0xff05=0
Consumer_Control.0xff02=0

All keys generate these events; Consumer_Control 0xfe03 seems to reflect the
current "F-lock" status (and -led), Consumer_control.fe04 seems to reflect the
state of the actual F-lock button. I have no idea what the other controls
are.

Since all keys generate unique events, it should be possible to sucessfully
use usbhidaction. However, many of these keys would generate a "normal" 
keypress on other keyboards, and KDE/Gnome know how to handle those, so I want
to mimick this behaviour. Is there a way to generate keypresses using
usbhidaction? Is there another approach I could try?

Of course, I could try to write a small device driver that would attach
instead of the generic uhid driver, acting like a second wskbd. If they'd both
be in the same mux, the net result would be what I want. There is a Linux
device driver floating out there that does something like this, but I'm not
sure this is the way to go.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.