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 в любой форме и любом объёме

[identity profile] blog.vnaum.com (from livejournal.com)
Thursday, January 6th, 2011 10:11 am (UTC)
> Для какого ядра вам патч сделать?

Для 2.6.32.
Thursday, January 6th, 2011 11:09 am (UTC)
Debian Squeeze?
[identity profile] blog.vnaum.com (from livejournal.com)
Thursday, January 6th, 2011 12:04 pm (UTC)
Он самый.
Friday, January 7th, 2011 10:20 am (UTC)
Патчи:
https://github.com/spbnick/dragonrise_joystick_0011_driver/tree/master/patches/vanilla/2.6.32

Git'ом можно выкачать с
git://github.com/spbnick/dragonrise_joystick_0011_driver.git

Ядро 2.6.32 собранное с патчами и стоковым конфигом для 686 из Debian Squeeze (работает - пишу из под него):
http://ponomarevs.sknt.ru:48484/pub/linux-image-2.6.32_dragonrise.1_i386.deb
Friday, January 7th, 2011 10:22 am (UTC)
Драйвер называется hid-dragonrise, но должен сам подгрузиться, по идее.
Friday, January 7th, 2011 11:29 am (UTC)
Тут скринятся ссылки, так что, если вы прочтете это раньше, чем [livejournal.com profile] dil откроет мой комментарий, напишите и я пришлю их вам другим способом.
[identity profile] blog.vnaum.com (from livejournal.com)
Friday, January 7th, 2011 12:16 pm (UTC)
Спасибо огромное, всё получено, прочитано и даже, кажется, осмыслено :-)

Я со своей стороны попробую сейчас сделать "драйвер" как в верхнем посте - патчем дескриптора. Чтобы уж все варианты были :-)
Friday, January 7th, 2011 12:35 pm (UTC)
Дык, я вроде так и делаю :)

В любом случае, не могли бы вы проверить мой модуль?
Я могу еще успеть его отправить для включения в 2.6.38.
[identity profile] blog.vnaum.com (from livejournal.com)
Friday, January 7th, 2011 03:08 pm (UTC)
Проверил.
Работает отлично!
Friday, January 7th, 2011 03:14 pm (UTC)
Как-то подозрительно :)

А можно вывод jstest и evtest на него :)?
[identity profile] blog.vnaum.com (from livejournal.com)
Friday, January 7th, 2011 03:31 pm (UTC)
jstest показал его вот так:

$ jstest --normal /dev/input/js0
Driver version is 2.1.0.
Joystick (USB Gamepad ) has 2 axes (X, Y)
and 10 buttons (Trigger, ThumbBtn, ThumbBtn2, TopBtn, TopBtn2, PinkieBtn, BaseBtn, BaseBtn2, BaseBtn3, BaseBtn4).
Testing ... (interrupt to exit)
Axes: 0: 0 1: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off 9:off

Нажатия - как положено.

evtest, увы, не записал.
Friday, January 7th, 2011 03:39 pm (UTC)
Ага, спасибо.

В смысле "не записал"?

Его надо натравливать на /dev/input/eventX.
[identity profile] blog.vnaum.com (from livejournal.com)
Friday, January 7th, 2011 06:04 pm (UTC)
В смысле, я поставил пакет с ядром, оно не подхватило драйвер видеокарты, потестил в консоли jstest-ом, убедился что осей две, обе работают as expected, кнопки все на месте и нажимаются.

Если сильно интересно, я могу его ещё раз поставить и поглядеть в evtest.
Friday, January 7th, 2011 07:05 pm (UTC)
Ага, понятно.
Тогда не надо. Когда будете проверять на 2.6.37 посмотрим.
Friday, January 7th, 2011 03:46 pm (UTC)
Сможете немного попозже проверить на 2.6.37?
Пакет я дам. Или сможете сами патч наложить и собрать.
[identity profile] blog.vnaum.com (from livejournal.com)
Friday, January 7th, 2011 06:05 pm (UTC)
Лучше пакет.
Friday, January 7th, 2011 07:05 pm (UTC)
Ага, хорошо.
Tuesday, January 11th, 2011 09:32 pm (UTC)
Попробуйте, пожалуйста 2.6.37-е ядро:

http://ponomarevs.sknt.ru:48484/pub/linux-image-2.6.37+_dragonrise.1_i386.deb

Снимите пожалуйста вывод evtest, кроме обычной проверки, если не сложно.

Спасибо :)
[identity profile] blog.vnaum.com (from livejournal.com)
Wednesday, January 12th, 2011 09:10 am (UTC)
Работает как положено.
Вот вывод evtest и jstest:
http://vnaum.com/misc/201101/evtest.txt
http://vnaum.com/misc/201101/jstest.txt

(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
Friday, January 7th, 2011 12:38 pm (UTC)
Первые два патча взяты из моих патчей для планшетов.
Первый упрощает исправление дескрипторов, второй исправляет парсинг одного нетипичного случая.

Третий патч - собственно добавление исправления дескриптора для вашего устройства.

Все сделано максимально просто.
Friday, January 7th, 2011 12:43 pm (UTC)
Первый патч, собственно, позволяет менять размер дескриптора и давать свой.
Без него придется чем-то забивать то что есть в оригинальном дескрипторе и выглядеть это будет совершенно нечитабельно.
[identity profile] blog.vnaum.com (from livejournal.com)
Friday, January 7th, 2011 03:14 pm (UTC)
> Без него придется чем-то забивать то что есть в оригинальном дескрипторе и выглядеть это будет совершенно нечитабельно.

Ну в общем дело понятное, что оно скорее мозговое упражнение - если патч примут в апстрим, оно всё забудется как дурной сон.
Но у меня-таки получилось забить оригинальный дескриптор подходящим образом:
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
Friday, January 7th, 2011 03:31 pm (UTC)
Ну, собственно, это то чего я хотел избежать :)

Первые два моих патча есть в 2.6.37, поэтому можно так не извращаться :)
[identity profile] blog.vnaum.com (from livejournal.com)
Friday, January 7th, 2011 06:01 pm (UTC)
Ну нам-то, дебианщикам, до 2.6.37 ещё жить да жить :-)
Friday, January 7th, 2011 06:02 pm (UTC)
У меня вообще ещё только 2.6.26..