На самом деле это не клавиатура, а ИК-пульт, но с точки зрения ОС это комплект из 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
Драйвер USB HID под Windows несомненно другой.
Хотите помогу разобраться что конкретно происходит?
У меня есть некоторый опыт.
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
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
Однако смущает разница в описании. У Defender'а указано 13 кнопок против 8-ми и у него якобы нет датчика движения.
no subject
Как ответите про его параметры - дам примерный план действий.
Итак, сейчас интересует сколько реально кнопок, есть ли кнопки-переключатели режимов/модификаторы, есть ли на самом деле датчик движения и определяет ли он направление.
no subject
Может быть мне просто проспонсировать закупку устройства за 300 рублей? :-)
"Наплечных" кнопок 4, две слева и две справа.
Модификаторами работают кнопки turbo, auto и clear - их нажатия jstest не видит.
Итого выходит десять настоящих кнопок (4 основных + 4 шифта + select/start).
Все нажатия кнопок обрабатываются как положено, никаких аномалий (ядро видит 10 кнопок и реально присутствуют десять).
Никакого работающего "датчика движения" не наблюдаю.
USB-устройство ровно одно, оно джойстик. jstest показывает его вот так:
$ jstest --normal /dev/input/js0
Driver version is 2.1.0.
Joystick (USB Gamepad ) has 6 axes (X, Y, Z, Rx, Ry, (null))
and 10 buttons (Trigger, ThumbBtn, ThumbBtn2, TopBtn, TopBtn2, PinkieBtn, BaseBtn, BaseBtn2, BaseBtn3, BaseBtn4).
Testing ... (interrupt to exit)
Axes: 0:-32767 1: 0 2: 0 3: 0 4: 0 5: 32767 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off 9:off
Оси 0 и 5 показывают в jstest такие значения (-32767 и 32767) постоянно,
независимо от положения крестовины, кнопок и джойстика.
Дамп потока:
Ничего не нажато:
004:009:000:STREAM
01 7F 7F 7F 7F 0F 00 00
"Крестовина Влево":
004:009:000:STREAM
01 7F 7F 00 7F 0F 00 00
"Крестовина Вправо":
004:009:000:STREAM
01 7F 7F FF 7F 0F 00 00
"Крестовина Вверх":
004:009:000:STREAM
01 7F 7F 7F 00 0F 00 00
"Крестовина Вниз":
004:009:000:STREAM
01 7F 7F 7F FF 0F 00 00
Нажимаю кнопки по одной:
01 7F 7F 7F 7F 0F 01 00 (левый шифт #1)
01 7F 7F 7F 7F 0F 02 00 (правый шифт #1)
01 7F 7F 7F 7F 0F 04 00 (левый шифт #2)
01 7F 7F 7F 7F 0F 08 00 (правый шифт #2)
01 7F 7F 7F 7F 0F 10 00 (select)
01 7F 7F 7F 7F 0F 20 00 (start)
01 7F 7F 7F 7F 1F 00 00 (кнопка #1)
01 7F 7F 7F 7F 2F 00 00 (#2)
01 7F 7F 7F 7F 4F 00 00 (#3)
01 7F 7F 7F 7F 8F 00 00 (#4)
no subject
Мне как-то эта идея в голову не пришла - с моими обычными устройствами - планшетами этот фокус не проходит :) Раз уж вы сделали дамп, может и не понадобится устройства, иначе попробую найти.
> Модификаторами работают кнопки turbo, auto и clear - их нажатия jstest не видит.
А что они делают?
Для какого ядра вам патч сделать?
no subject
> А что они делают?
"turbo": зажимаешь "турбо" + кнопку, и она теперь "турбированная" - её
можно просто держать зажатой, "долбит" джойстик сам.
"auto": то же самое, плюс можно уже и не держать - джойстик сам стреляет
"clear": снимает эффекты верхних двух с указанной кнопки.
> Для какого ядра вам патч сделать?
В идеале, наверное, надо работать для будущих поколений - чтоб в
апстрим толкать можно было.
У самого у меня текущее ядро из squeeze, 2.6.32-5-openvz-686.
Или удобно было бы иметь что-то вроде упомянутого в посте
http://gitorious.org/hid-aureal-kernel-module.
no subject
Тогда модификаторы на дескриптор не влияют.
no subject
Для 2.6.32.
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
no subject
Исправил дескриптор в соответствии с теми данными которые вы успели дать: https://github.com/spbnick/dragonrise_joystick_0011_driver/blob/master/rdesc/fixed.xml
Вам осталось сказать номер версии ядра и я сделаю пробный патч.
no subject
(no subject)
(no subject)
no subject
no subject
Я основываю свое суждение на ситуации с графическими планшетами.
Но там начинка сильнее завязана на корпус, пожалуй.
Кроме того это более сложные устройства - сложнее копировать частями.
no subject
no subject
Может быть и с планшетами то же будет, но сложно представить :)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
no subject
no subject
См. http://dil.livejournal.com/983581.html?thread=7502109#t7502109