LINUX.ORG.RU

Подскажите по input device и конкретно по touchscreen!

 , ,


0

1

Появиласт необходимость прикрутить тачскрин к железке на процессоре ARM и на Linux. В качестве тача используется - zytronic ZXY100.

Так вот присоединил его через USB и он работает. Но работает как мышка - то есть относительное позиционирование.А надо абсолютное. Как это победить не знаю.Стал разбираться и возникли кое какие вопросы:

В системе он определяется как /dev/input/mouse1 и /dev/input/event3. Проверил это через cat /dev/input/event3 | hexdump.

1) Что выдается на выходе /dev/input/mouse1 ? Если на выходе cat /dev/input/event3 формат понятен : время - тип - код - значение. То зачем эти драйвера для каждого типа устройства усли есть evdev? event'ом пользуется X сервер, а /dev/input/mouse1 кто? И тач относится к подкласу мышек в /dev/input?

Еще похоже у меня не подгружен драйвер к тачу( надо кросскомпилировать для ARM). Почему когда я втыкаю его в USB он выдает: generic-usb 0003:14C8:0005.0005: input,hidraw0: USB HID v1.01 Mouse [Zytronic Displays Limited Zytronic Touchscreen Controller]

2) откуда он знает что это Zytronic Touchscreen? Откуда он берет это имя? 3) Почему он подсовывает тачу драйвер мышки? (если он работает как мышка). Данные на выходе с тачскрина и мышки в одном формате если это все пашет? Или как это работает? 4) как узнать через какой драйвер работает устройство в данный момент?

Делаю #ls /dev/input/

event0 event2 event4 event6 mouse0 mouse2 event1 event3 event5 mice mouse1

5) Почему клава представлена только через event0? и нет чего то типа keyboard1? 6) Ну и главный вопрос как мне сделать его нормальтым тачем(с абсолютными координатами)? если есть у кого исходника драйвера - поделитесь плиз))


1. /dev/input/mouseX выдает данные в формате PS/2. Это нужно для совместимости со старым софтом. Тебе не нужно.
2. Из дескриптора USB устройства.
3. Нет никакого «драйвера мышки». Есть один драйвер usbhid на все типы устройств ввода (даже на UPSы, которые тоже относятся к классу USB HID).
4. lsusb -t
5. Потому что для нее нет эмулятора PS/2 протокола.
6. Ты уверен, что координаты, выдаваемые тебе в /dev/input/event3, не абсолютные?

Deleted
()
Ответ на: комментарий от Deleted

Уточнение по пункту 3: в ядре есть «урезанные» драйвера usbmouse и usbkbd для мышей и клавиатур соответственно. Видимо, они нужны для embedded систем, для которых usbhid жирноват. Во всех нормальных дистрибутивах они в внесены в blacklist. Если у тебя используется драйвер usbmouse, попробуй вместо него usbhid.

Deleted
()
Ответ на: комментарий от Deleted

Спасибо!Немного подразобрался......действительно все в том числе и тач у меня работают через usbhid. Но всетаки тачскрин работает как мышь (относительные координаты). Даже курсор есть - вожу по тачу и он ездит. А как usbhid определяет мышь или тач к ниму прицепили? в usb устройстве(переыерийном) наверно битик какаой-то зашит? как это поменять?

Racot
() автор топика

Про координаты — смотришь xinput --list, смотришь как называется тачскрин, потом пишешь что-то вроде xinput --set-mode touchscreen ABSOLUTE

PolarFox ★★★★★
()
Ответ на: комментарий от PolarFox

Я в понедельник конечно попробую на работе)) но мне кажется что в моем дистрибутиве (для встраиваемых систем на ARM) нет такого пакета и утилиты)

Racot
() автор топика
Ответ на: комментарий от RiseOfDeath

В иксах работает как мышь но кнопки не работают....в qws (qt оконная система) как мышь и кнопки работают...

Racot
() автор топика
Ответ на: комментарий от Racot

В случае с QWS - можно самому сделать как вы хотите. Вообще как хотите. Гуглите в сторону QWSCalibratedMouseHandler и QMouseDriverPlugin, ну и в сторону QWSServer. Могу даже работающий пример дать, правда там наоборот для мыши (но сути это не меняет) (я делал по туториалу http://radekp.github.io/qtmoko/api/tut-deviceexample.html, но там не совсем рабочий код (к сожалению это единственный пример в сети, который мне помог)).

Что касается иксов - там все в конфиге правится, но я тут малость не в теме, думаю гугл вам поможет сильнее.

RiseOfDeath ★★★★
()
Последнее исправление: RiseOfDeath (всего исправлений: 3)
Ответ на: комментарий от RiseOfDeath

Спасибо! я посмотрю примеры эти....но у меня такое ощущение что вся суть где-то ниже чем графическая подсистема...на выходе из /dev/input/event - уже выходит что то не то..... (мышиный протокол).....а калибровка может и пригодится))

Racot
() автор топика
Ответ на: комментарий от Racot

Там не совсем калибровка. Там, фактически, обработчик событий. (грубо говоря, у класса есть функция, которую QWS сам вызывает при появлении новых событий, а вы уже сами думаете что с ними делать).

Ну и разумеется вам придется ознакомиться с файлом linux/input.h (правда у тачскрина есть события, не задефайненые в этом файле!)

Каждый эвент имеет формат, описываемый структурой

struct input_event {
	struct timeval time;
	__u16 type;
	__u16 code;
	__s32 value;
};

(к стати, это одна из ошибок статьи на которую я ссылаюсь - в ней вместо времени просто какие-то поля такой же длинны).

type - тип события, например для перемещения мыши это

#define EV_REL			0x02
т.е. относительное смещение, для тачпада должно бы быть
#define EV_ABS			0x03

RiseOfDeath ★★★★
()
Последнее исправление: RiseOfDeath (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.