Hi Iain.
On 7 sty 2012, at 09:42, Iain Hibbert wrote:
I don't have a USB keyboard, but pressing the caps lock on my laptop or
Bluetooth keyboard does always toggle both LEDs.
Even after applying your patch it doesn't work this way for me, so probably the
problem with this is somewhere else.
it really should disassociate from the context, maybe doing
the call from a callout or separate task instead.
Wouldn't that again lead to the situation where mtx_owner assertion will
fail? If we call mutex_exit() from other thread than the one which
acquired the lock, it will certainly fail. I understand that callout or
separate task will be executed in another thread.
Should not, I have reworked it to offset the processing of reports to a
thread (patch attached) which does not trigger any mutex failures with
LOCKDEBUG. I'm still testing but I think its correct.. any comments?
It works for me. Looks good even with LOCKDEBUG, but I am not a locking expert
;). Since it works, should I commit it, or do you prefer doing it yourself?
No, that's the FN key.
Ok thats separate issue, does the output of 'btdevctl -a keyboard -d
device -s hid' show anything for ID 17? Unfortunately, there is no way
to handle things like that in a generic way from within the current HID
framework if the device does not report its capabilities in the descriptor
(Apple devices at least seem to be prone to this) so we need a special
driver (eg btmagic which handles several such reports) - Linux has a
concept where a driver can attach and register for other reports that
might be sent, but I'm not sure I liked their method, surely something
better can be designed..
I've attached the output of btdevctl.
local bdaddr: 00:18:5d:01:17:ad
remote bdaddr: 00:1f:5b:fc:ac:86
link mode: encrypt
vendor id: 0x05ac
product id: 0x022d
device type: bthidev
control psm: 0x0011
interrupt psm: 0x0013
Collection page=Generic_Desktop usage=Keyboard
Input id=1 size=1 count=1 page=Keyboard usage=Keyboard_LeftControl Variable,
logical range 0..1
Input id=1 size=1 count=1 page=Keyboard usage=Keyboard_LeftShift Variable,
logical range 0..1
Input id=1 size=1 count=1 page=Keyboard usage=Keyboard_LeftAlt Variable,
logical range 0..1
Input id=1 size=1 count=1 page=Keyboard usage=Keyboard_Left_GUI Variable,
logical range 0..1
Input id=1 size=1 count=1 page=Keyboard usage=Keyboard_RightControl Variable,
logical range 0..1
Input id=1 size=1 count=1 page=Keyboard usage=Keyboard_RightShift Variable,
logical range 0..1
Input id=1 size=1 count=1 page=Keyboard usage=Keyboard_RightAlt Variable,
logical range 0..1
Input id=1 size=1 count=1 page=Keyboard usage=Keyboard_Right_GUI Variable,
logical range 0..1
Input id=1 size=8 count=1 page=0x usage=0x Const, logical range 0..1
Output id=1 size=1 count=1 page=LEDs usage=Num_Lock Variable, logical range
0..1
Output id=1 size=1 count=1 page=LEDs usage=Caps_Lock Variable, logical range
0..1
Output id=1 size=1 count=1 page=LEDs usage=Scroll_Lock Variable, logical range
0..1
Output id=1 size=1 count=1 page=LEDs usage=Compose Variable, logical range 0..1
Output id=1 size=1 count=1 page=LEDs usage=Kana Variable, logical range 0..1
Output id=1 size=3 count=1 page=0x usage=0x Const, logical range 0..1
Input id=1 size=8 count=6 page=Keyboard usage=No_Event, logical range 0..255
End collection
Collection page=Consumer usage=Consumer_Control
Collection page=Generic_Desktop usage=Keyboard
Input id=71 size=8 count=1 page=Device_Controls usage=Battery_Strength
Variable, logical range 0..255
End collection
End collection
Input id=17 size=1 count=3 page=0x usage=0x Const, logical range 0..1
Collection page=Consumer usage=Consumer_Control
Input id=17 size=1 count=1 page=Consumer usage=Eject Variable, logical range
0..1
Input id=17 size=1 count=1 page=0x00ff usage=0x0003 Variable, logical range
0..1
Input id=17 size=1 count=3 page=0x usage=0x Const, logical range 0..1
Input id=18 size=1 count=1 page=Consumer usage=Pause/Play Variable, logical
range 0..1
Input id=18 size=1 count=1 page=Consumer usage=Fast_Forward Variable, logical
range 0..1
Input id=18 size=1 count=1 page=Consumer usage=Rewind Variable, logical range
0..1
Input id=18 size=1 count=1 page=Consumer usage=Scan_Next_Track Variable,
logical range 0..1
Input id=18 size=1 count=1 page=Consumer usage=Scan_Previous_Track Variable,
logical range 0..1
Input id=18 size=1 count=1 page=0x usage=0x Const, logical range 0..1
Input id=18 size=1 count=1 page=0x usage=0x Const, logical range 0..1
Input id=18 size=1 count=1 page=0x usage=0x Const, logical range 0..1
Input id=19 size=1 count=1 page=0xff01 usage=0x000a Variable, logical range
0..1
Input id=19 size=1 count=7 page=0x usage=0x Const, logical range 0..1
Feature id=9 size=8 count=1 page=0xff01 usage=0x000b Variable, logical range
0..1
Feature id=9 size=8 count=2 page=0x