November 2019

S M T W T F S
      12
34 5 678 9
10111213141516
17181920212223
24252627282930

Style Credit

Expand Cut Tags

No cut tags
Monday, January 3rd, 2011 07:53 pm

На самом деле это не клавиатура, а ИК-пульт, но с точки зрения ОС это комплект из 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

Оригинал этой записи. Комментировать можно тут или там.

Любые материалы из этого блога запрещается использовать на сайте livejournal.ru в любой форме и любом объёме

Monday, January 3rd, 2011 09:11 pm (UTC)
У нас errata может быть реализована для этого устройства.
Monday, January 3rd, 2011 10:27 pm (UTC)
Конкретно для этого устройства - вряд ли, это китайский пульт, купленный на dealextreme.
Tuesday, January 4th, 2011 06:49 pm (UTC)
Тут вот ниже с указкой у доски показывают, что у устройства кривой дескриптор. Интересно всё же, почему оно работает в windows.
Monday, January 3rd, 2011 09:55 pm (UTC)
Такие вещи встречаются достаточно часто.
Драйвер USB HID под Windows несомненно другой.
Хотите помогу разобраться что конкретно происходит?
У меня есть некоторый опыт.
[identity profile] blog.vnaum.com (from livejournal.com)
Tuesday, January 4th, 2011 06:16 am (UTC)
Ох, а можно потом рассказать про что там было дело?

А то у меня на руках тоже пара дешёвых китайских USB HID геймпадов, которые под windows показывают 2 оси, а под Linux, внезапно, 6. Причём реально имеющаяся единственная крестовина ложится не на 0 и 1 оси, а на 3 и 4.
[identity profile] blog.vnaum.com (from livejournal.com)
Tuesday, January 4th, 2011 07:18 am (UTC)
VID:PID == 0079:0011 (DragonRise Inc.)

Дамп дескриптора:
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
Tuesday, January 4th, 2011 11:41 am (UTC)
Ага, интересно. Посмотрю сегодня на досуге - отпишусь.
Tuesday, January 4th, 2011 01:33 pm (UTC)
Дааа, здесь разработчики курили что-то забористое.

Можно фотографию этого чудо-устройства для начала?

Кстати, [livejournal.com profile] dil, вы не против чтобы мы тут это обсуждали?
Tuesday, January 4th, 2011 01:34 pm (UTC)
Наоборот, я очень даже за, мне самому интересно :)
[identity profile] blog.vnaum.com (from livejournal.com)
Tuesday, January 4th, 2011 05:50 pm (UTC)
> Дааа, здесь разработчики курили что-то забористое.

В Китае оно, забористое, доступнее простому люду :-)

> Можно фотографию этого чудо-устройства для начала?

Не вопрос:
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
Tuesday, January 4th, 2011 08:48 pm (UTC)
Я так понял "наплечных" кнопок всего две. Правильно?
Tuesday, January 4th, 2011 08:50 pm (UTC)
Да, спасибо за фотографию :)

Работают ли какие-нибудь из кнопок как переключатели режимов, модификаторы других кнопок?
Tuesday, January 4th, 2011 08:54 pm (UTC)
По поводу похожести на Defender - 99.9% это он.
Так часто бывает с дешевыми устройствами.

(no subject)

[identity profile] spb-nick.livejournal.com - 2011-01-04 08:59 pm (UTC) - Expand

(no subject)

[identity profile] spb-nick.livejournal.com - 2011-01-04 09:05 pm (UTC) - Expand

(no subject)

[identity profile] blog.vnaum.com - 2011-01-05 06:55 am (UTC) - Expand

(no subject)

[identity profile] spb-nick.livejournal.com - 2011-01-05 11:09 am (UTC) - Expand

(no subject)

[identity profile] blog.vnaum.com - 2011-01-05 12:18 pm (UTC) - Expand

(no subject)

[identity profile] spb-nick.livejournal.com - 2011-01-07 03:18 pm (UTC) - Expand

(no subject)

[identity profile] blog.vnaum.com - 2011-01-06 10:11 am (UTC) - Expand

(no subject)

[identity profile] spb-nick.livejournal.com - 2011-01-06 11:09 am (UTC) - Expand

(no subject)

[identity profile] blog.vnaum.com - 2011-01-06 12:04 pm (UTC) - Expand

(no subject)

[identity profile] spb-nick.livejournal.com - 2011-01-07 10:20 am (UTC) - Expand

(no subject)

[identity profile] spb-nick.livejournal.com - 2011-01-07 10:22 am (UTC) - Expand

(no subject)

[identity profile] spb-nick.livejournal.com - 2011-01-07 11:29 am (UTC) - Expand

(no subject)

[identity profile] blog.vnaum.com - 2011-01-07 12:16 pm (UTC) - Expand

(no subject)

[identity profile] spb-nick.livejournal.com - 2011-01-07 12:35 pm (UTC) - Expand

(no subject)

[identity profile] blog.vnaum.com - 2011-01-07 03:08 pm (UTC) - Expand

(no subject)

[identity profile] spb-nick.livejournal.com - 2011-01-07 03:14 pm (UTC) - Expand

(no subject)

[identity profile] blog.vnaum.com - 2011-01-07 03:31 pm (UTC) - Expand

(no subject)

[identity profile] spb-nick.livejournal.com - 2011-01-07 03:39 pm (UTC) - Expand

(no subject)

[identity profile] blog.vnaum.com - 2011-01-07 06:04 pm (UTC) - Expand

(no subject)

[identity profile] spb-nick.livejournal.com - 2011-01-07 07:05 pm (UTC) - Expand

(no subject)

[identity profile] spb-nick.livejournal.com - 2011-01-07 03:46 pm (UTC) - Expand

(no subject)

[identity profile] blog.vnaum.com - 2011-01-07 06:05 pm (UTC) - Expand

(no subject)

[identity profile] spb-nick.livejournal.com - 2011-01-07 07:05 pm (UTC) - Expand

(no subject)

[identity profile] spb-nick.livejournal.com - 2011-01-11 09:32 pm (UTC) - Expand

(no subject)

[identity profile] blog.vnaum.com - 2011-01-12 09:10 am (UTC) - Expand

(no subject)

[identity profile] spb-nick.livejournal.com - 2011-01-12 01:09 pm (UTC) - Expand

(no subject)

[identity profile] blog.vnaum.com - 2011-01-12 02:57 pm (UTC) - Expand

(no subject)

[identity profile] spb-nick.livejournal.com - 2011-01-07 12:38 pm (UTC) - Expand

(no subject)

[identity profile] spb-nick.livejournal.com - 2011-01-07 12:43 pm (UTC) - Expand

(no subject)

[identity profile] blog.vnaum.com - 2011-01-07 03:14 pm (UTC) - Expand

(no subject)

[identity profile] spb-nick.livejournal.com - 2011-01-07 03:31 pm (UTC) - Expand

(no subject)

[identity profile] blog.vnaum.com - 2011-01-07 06:01 pm (UTC) - Expand

(no subject)

[identity profile] dil.livejournal.com - 2011-01-07 06:02 pm (UTC) - Expand

(no subject)

[identity profile] spb-nick.livejournal.com - 2011-01-05 09:25 pm (UTC) - Expand

(no subject)

[identity profile] spb-nick.livejournal.com - 2011-01-07 02:55 pm (UTC) - Expand

(no subject)

[identity profile] dil.livejournal.com - 2011-01-07 03:00 pm (UTC) - Expand

(no subject)

[identity profile] spb-nick.livejournal.com - 2011-01-07 03:12 pm (UTC) - Expand

(no subject)

[identity profile] evgalt.livejournal.com - 2011-01-04 10:16 pm (UTC) - Expand

(no subject)

[identity profile] spb-nick.livejournal.com - 2011-01-04 10:25 pm (UTC) - Expand

(no subject)

[identity profile] evgalt.livejournal.com - 2011-01-05 07:15 am (UTC) - Expand

(no subject)

[identity profile] spb-nick.livejournal.com - 2011-01-05 10:51 am (UTC) - Expand

(no subject)

[identity profile] evgalt.livejournal.com - 2011-01-05 11:14 am (UTC) - Expand

(no subject)

[identity profile] spb-nick.livejournal.com - 2011-01-05 11:21 am (UTC) - Expand

(no subject)

[identity profile] evgalt.livejournal.com - 2011-01-05 11:37 am (UTC) - Expand

(no subject)

[identity profile] spb-nick.livejournal.com - 2011-01-05 11:48 am (UTC) - Expand

(no subject)

[identity profile] evgalt.livejournal.com - 2011-01-05 12:12 pm (UTC) - Expand

(no subject)

[identity profile] spb-nick.livejournal.com - 2011-01-04 09:06 pm (UTC) - Expand
Tuesday, January 4th, 2011 12:26 pm (UTC)
> Ох, а можно потом рассказать про что там было дело?
См. http://dil.livejournal.com/983581.html?thread=7502109#t7502109
Monday, January 3rd, 2011 09:58 pm (UTC)
Кстати, почему этот патч еще не в ядре?
Monday, January 3rd, 2011 10:28 pm (UTC)
Наверное никто не отправил ещё. Девайс вряд ли часто встречающийся, я в исходниках ядра не нашел даже символической константы для vendor ID.
Tuesday, January 4th, 2011 11:58 am (UTC)
Вобщем, если автор в ближайшее время не отправит патч, можно будет предложить ему помощь - на моем счету два подобных "драйвера".
Monday, January 3rd, 2011 10:01 pm (UTC)
Чтобы помочь мне разобраться надо будет сделать дамп report descriptor'а.
С помощью моей утилитки (http://digimend.sourceforge.net/#proj-usbhid-dump).
Monday, January 3rd, 2011 10:26 pm (UTC)
003:002:001:DESCRIPTOR         1294093132.612876
 05 01 09 02 A1 01 85 01 09 01 A1 00 05 09 19 01
 29 05 15 00 25 01 95 05 75 01 81 02 95 01 75 03
 81 03 05 01 09 30 09 31 09 38 15 81 25 7F 75 08
 95 03 81 06 05 0C 0A 38 02 95 01 75 08 81 06 C0
 09 3C 15 00 26 FF 00 75 08 95 08 B1 06 C0 05 0C
 09 01 A1 01 85 02 19 00 2A 3C 02 15 00 26 3C 02
 95 01 75 10 81 00 C0 05 01 09 80 A1 01 85 03 19
 81 29 83 15 00 25 01 75 01 95 03 81 02 95 05 81
 01 C0

003:002:000:DESCRIPTOR         1294093132.626838
 05 01 09 06 A1 01 05 07 19 E0 29 E7 15 00 25 01
 75 01 95 08 81 02 95 01 75 08 81 01 95 05 75 01
 05 08 19 01 29 05 91 02 95 01 75 03 91 01 95 06
 75 08 15 00 25 01 05 07 19 00 29 65 81 00 05 01
 09 3C 15 00 26 FF 00 75 08 95 08 B1 06 C0


Tuesday, January 4th, 2011 07:59 am (UTC)
Это время может занять, если вдруг spb_nick разберётся и отпишет что -- сделай новый пост.
Tuesday, January 4th, 2011 08:02 am (UTC)
В общем-то, есть только два варианта: кривой дескриптор или кривая его обработка.
Tuesday, January 4th, 2011 11:25 am (UTC)
Банально разработчик ошибся в дескрипторе.
Тестировалось только на Windows, где драйвер это проинтерпретировал так, а Linux'овый по-другому.

Сейчас поподробней напишу.
Tuesday, January 4th, 2011 11:39 am (UTC)
Исправляется дескриптор клавиатуры на интерфейсе 0.

Вот он:
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 спецификация регламентирует обработку таких ситуаций, а может и нет - надо посмотреть на досуге.
Tuesday, January 4th, 2011 11:49 am (UTC)
Ага, спасибо. Интересно, как же оно работает в windows. То ли там явный фикс для этого девайса есть, то ли как-то по умолчанию такой явно неправильный диапазон увеличивает до разумных пределов.
Tuesday, January 4th, 2011 11:52 am (UTC)
Скорее всего увеличивает диапазон просто. Хотя, я не уверен, что это правильно. Все-таки, диапазон значений важнее, чем описание каждого их этих значений.