На самом деле это не клавиатура, а ИК-пульт, но с точки зрения ОС это комплект из 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
no subject
Драйвер USB HID под Windows несомненно другой.
Хотите помогу разобраться что конкретно происходит?
У меня есть некоторый опыт.
no subject
no subject
С помощью моей утилитки (http://digimend.sourceforge.net/#proj-usbhid-dump).
no subject
no subject
no subject
no subject
А то у меня на руках тоже пара дешёвых китайских USB HID геймпадов, которые под windows показывают 2 оси, а под Linux, внезапно, 6. Причём реально имеющаяся единственная крестовина ложится не на 0 и 1 оси, а на 3 и 4.
no subject
Дамп дескриптора:
004:002:000:DESCRIPTOR 1294125322.024277
05 01 09 04 A1 01 A1 02 75 08 95 05 15 00 26 FF
00 35 00 46 FF 00 09 30 09 30 09 30 09 30 09 31
81 02 75 04 95 01 25 07 46 3B 01 65 14 09 00 81
42 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
no subject
no subject
Тестировалось только на Windows, где драйвер это проинтерпретировал так, а Linux'овый по-другому.
Сейчас поподробней напишу.
no subject
Вот он:
Usage Page (Desktop), ; Generic desktop controls (01h) Usage (Keyboard), ; Keyboard (06h, application collection) Collection (Application), Usage Page (Keyboard), ; Keyboard/keypad (07h) Usage Minimum (KB Leftcontrol), ; Keyboard left control (E0h, dynamic value) Usage Maximum (KB Right GUI), ; Keyboard right GUI (E7h, dynamic value) Logical Minimum (0), Logical Maximum (1), Report Size (1), Report Count (8), Input (Variable), Report Count (1), Report Size (8), Input (Constant), Report Count (5), Report Size (1), Usage Page (LED), ; LEDs (08h) Usage Minimum (01h), Usage Maximum (05h), Output (Variable), Report Count (1), Report Size (3), Output (Constant), Report Count (6), Report Size (8), Logical Minimum (0), Logical Maximum (1), ; Значение 1 здесь исправляется на 101 Usage Page (Keyboard), ; Keyboard/keypad (07h) Usage Minimum (None), ; No event (00h, selector) Usage Maximum (KB Application), ; Keyboard Application (65h, selector) Input, Usage Page (Desktop), ; Generic desktop controls (01h) Usage (Motion Wakeup), ; Motion wakeup (3Ch, one-shot control) Logical Minimum (0), Logical Maximum (255), Report Size (8), Report Count (8), Feature (Variable, Relative), End CollectionОригинальный дескриптор говорит, что каждый из шести байт начиная со смещения 3 - это индекс одной из ста (одновременно) нажатых кнопок (или 0), но диапазон этого индекса указан как [0, 1]. Указанный кусок кода исправляет этот диапазон чтобы вместить все кнопки и соответствовать тому что присылает девайс на самом деле, т.е. [0, 101].
Формат дескриптора допускает излишнюю информацию (это упрощает формат), и в нашем случае эта информация расходится.
Возможно HID спецификация регламентирует обработку таких ситуаций, а может и нет - надо посмотреть на досуге.
no subject
no subject
no subject
no subject
no subject
См. http://dil.livejournal.com/983581.html?thread=7502109#t7502109
no subject
Можно фотографию этого чудо-устройства для начала?
Кстати,
no subject
no subject
В Китае оно, забористое, доступнее простому люду :-)
> Можно фотографию этого чудо-устройства для начала?
Не вопрос:
http://vnaum.com/misc/201101/dragonrise.jpg
Продавалось под маркой "DVTech PC JS19":
http://market.yandex.ru/model.xml?hid=91117&modelid=6471611
По фоткам сдаётся мне что "Defender Game Master" это тоже он:
http://market.yandex.ru/model.xml?modelid=6157419&hid=91117
no subject
no subject
no subject
Работают ли какие-нибудь из кнопок как переключатели режимов, модификаторы других кнопок?
no subject
Так часто бывает с дешевыми устройствами.