Всех с праздниками! И всего, всего, всего...
Дед Мороз подкинул головную боль в виде USB-клавиатуры Cougar 500K (http://cougargaming.com/products/keyboards/500k/), которая перестаёт работать после нажатия любой «дополнительной» клавиши (типа G0 .. G6, Fn и т.п.). При чём поведение не зависит от дистрибутива Linux и версии ядра.
На просторах интернета полезной информации пока не нашёл, хотя может плохо искал.
Что накопал на текущий момент:
- 'lsusb' говорит о том, что есть три «входные оконечные точки» (IN End Points) — 1-HID Keyboard, 2-HID Mouse, 3-HID None;
- Wireshark в Linux говорит о том, что HID-драйвер читает только первую «оконечную точку»;
- Wireshark в Windows говорит о том, что драйвер (из комплекта Windows, ни каких доп.драйверов не ставил) читает все три «входных точки». При чем при нажатии «обычных» кнопок пакеты читаются только с первой EP, а при нажатии любой доп.кнопки читаются четыре пакета из 3ей EP, 1ой EP, 2ой EP и 3ей EP.
Отсюда делаю вывод, что в Linux клавиатура зависает (Wireshark не отлавливает ни каких пакетов), из-за того, что она ждёт пока не будут считаны пакеты из 2ой и 3ей EP. Вполне возможно, что ошибаюсь.
В инете нашёл исходники драйвера клавиатуры https://bitbucket.org/Swoogan/aziokbd/src/3c66523be3bc5688fd997cb7df8d45785809c4b6?at=default. Попытался по аналогии сделать свой драйвер. Но вот беда — модуль подгружается (отрабатывает функция 'usb_kbd_init(void)'), а функция 'usb_kbd_probe(struct usb_interface *iface, const struct usb_device_id *id)' не вызывается. В логах при подключении клавиатуры появляются следующие записи:
usb 3-2: USB disconnect, device number 32
usb 3-1: new full-speed USB device number 33 using xhci_hcd
usb 3-1: New USB device found, idVendor=060b, idProduct=500a
usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
usb 3-1: Product: Cougar500k Gaming Keyboard
usb 3-1: Manufacturer: Cougar500k
input: Cougar500k Cougar500k Gaming Keyboard as /devices/pci0000:00/0000:00:14.0/usb3/3-1/3-1:1.0/0003:060B:500A.0046/input/input62
hid-generic 0003:060B:500A.0046: input,hidraw2: USB HID v1.11 Keyboard [Cougar500k Cougar500k Gaming Keyboard] on usb-0000:00:14.0-1/input0
hid-generic 0003:060B:500A.0047: ignoring exceeding usage max
input: Cougar500k Cougar500k Gaming Keyboard as /devices/pci0000:00/0000:00:14.0/usb3/3-1/3-1:1.1/0003:060B:500A.0047/input/input63
hid-generic 0003:060B:500A.0047: input,hiddev0,hidraw3: USB HID v1.11 Mouse [Cougar500k Cougar500k Gaming Keyboard] on usb-0000:00:14.0-1/input1
hid-generic 0003:060B:500A.0048: hiddev0,hidraw4: USB HID v1.11 Device [Cougar500k Cougar500k Gaming Keyboard] on usb-0000:00:14.0-1/input2
Или нужно создавать драйвер-надстройку над hid-generic? Вообще такое возможно, для конкретного HID-устройства задать свой драйвер?