На самом деле это не клавиатура, а ИК-пульт, но с точки зрения ОС это комплект из USB-мыши и клавиатуры с небольшим набором мультимедийных кнопок.
В Windows работает влёт без всяких дополнительных драйверов. В линуксе работало очень частично и местами неправильно, пока я не нашел драйвер. Хотя если выражаться точно, то это не драйвер устройства. Это маленький патч, который на лету фиксит ошибку в описании одного конкретного USB- устройства. Собственно, вот весь функционал, остальное только привязка вызова этой функции в нужное время в нужном месте:
static void aureal_report_fixup(struct hid_device *hdev, __u8 *rdesc, unsigned int rsize)
{
if (rsize >= 54 && rdesc[52] == 0x25 && rdesc[53] == 0x01) {
dev_info(&hdev->dev, "fixing Aureal Cy se W-01RN USB_V3.1 "
"report descriptor. Keyboard Logical Maximum = 101\n");
rdesc[53] = 0x65;
}
}
Невыясненным остаётся вопрос, почему оно таки работает в Windows без всяких телодвижений. Потому что в линуксе криво реализована поддержка USB HID? Или потому что она криво реализована в Windows, а пульт, заточенный для работы с Windows Media Center, работает с учётом этой кривизны? Или потому что эта часть вообще не регламенитруется спецификациями, а производители сделали так, чтобы оно работало с учетом реализации HID в Windows?
Более ранние ссылки о том же пульте: https://ru-linux.livejournal.com/2579350.html, https://ru-linux.livejournal.com/2647723.html
Оригинал этой записи. Комментировать можно тут или там.
no subject
Ну в общем дело понятное, что оно скорее мозговое упражнение - если патч примут в апстрим, оно всё забудется как дурной сон.
Но у меня-таки получилось забить оригинальный дескриптор подходящим образом:
https://github.com/vnaum/hid-dragonrise-kernel-module
Дескриптор выглядит некрасиво, но usbhid разбирает его как положено:
004:002:000:DESCRIPTOR 1294125322.024277
05 01 09 04 A1 01 A1 02 75 08
патчик#1: пропуск 3 байтов (бывшие оси 0, 1 и 2):
95 03 81 01 75 08
крестовина:
95 02 15 00 26 FF 00 35 00 46 FF 00
09 30 09 31
патчик#2: бывшая 5 ось, ныне constant:
81 02 75 04 95 01 25 07 46 3B 01 65 14 09 00
81 01 65 00
кнопки:
75 01 95 0A 25 01 45 01 05 09 19 01 29 0A
остальное:
81 02 06 00 FF 75 01 95 0A 25 01 45 01 09 01
81 02 C0 A1 02 75 08 95 04 46 FF 00 26 FF 00 09
02 91 02 C0 C0
no subject
Первые два моих патча есть в 2.6.37, поэтому можно так не извращаться :)
no subject
no subject