LINUX.ORG.RU

Как научить драйвер мыши поворачиваться на 45 градусов?

 , ,


0

1

Здравствуйте!


Надумал я тут сделать нестандартное устройство ввода. За основу беру оптическую USB-мышь. Проблема в том, что оптический сенсор конструктивно можно разместить только с поворотом на 45 градусов (или на 90, что не отменяет проблемы).

Тут встает вопрос с драйвером мыши. Как к нему подступиться? Что придется перекомпилировать? Всё ядро? Модуль ядра .ko? Какой-нибудь so-шник? А может быть прощще будет модифицировать какую-нибудь библиотеку X сервера? Тогда какую?

Кто занимался подобными вещами, пожалуйста, отпишитесь.

★★★★★

тогда надо сам контроллер мышиный править - тот контроллер который в самой мыше

ОС то поправить можно - но это придеться делать каждый раз

ae1234 ★★ ()

научись двигать свой девайс под углом 45 градусов :)

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

Upd. распарсил. Датчик на железяке развернут на 45 градусов. Надо программно «убрать» эти 45 градусов.

Таки пиши свой драйвер )

AF ★★★ ()

яничегонепонял

ТС хочет изобрести принципиально новый манипулятор типа «мышь»?

Zimet ()

Можно пропатчить xserver-xorg-input-evdev (или как он там у тебя называется), в секцию мышей добавляешь преобразование координат. Правда, тогда все нормальные мыши будут наискосок ездить. Правильней написать отдельный иксовый модуль, который по VID/PID будет подхватывать твою мышь и преобразовывать координаты только для нее.

eagleivg ★★★★★ ()

ИМХО, правильнее будет делать это аппаратно в самом девайсе, чтоб при данном конретном движении сигналы, выдаваемые девайсом, не отличались от ожидаемых от стандартной мышки

А ядро, драйверы и X сервер не трогай, ибо нефиг :)

Harald ★★★★★ ()

В принципе, легче всего пропатчить X-овую часть. Например, Debian:

http://ftp.de.debian.org/debian/pool/main/x/xserver-xorg-input-mouse/xserver-...

Там есть src/mouse.c, где прописана интересная функция

static void MouseReadInput(InputInfoPtr pInfo)

В принципе, на первое время можно повоевать в этих местах. Правда, слова USB в этом файле не видать, но есть надежда, что все заработает.

Другое дело, что отдельный девайс должен быть отдельным девайсом, так намного меньше проблем. Поэтому, возможно, лучше крутить координаты на самой мышке. Если там поставлен собственный МК - изменять координаты им, если же это раскоряченная обычная мышка - тоже есть шанс считать-переписать прошивку.

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

Посмотрел этот исходник. Впринципе половина понятна, можно под конец функции вставить изменение координат.

Но вот там есть переменные, о назначении которых можно тольоко догадываться.

int j, buttons, dx, dy, dz, dw, baddata;

dx и dy - это то что нужно. Но вот что такое dz и dw? Просто интересно.

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

Но вот что такое dz и dw? Просто интересно.

Мышь еще может двигаться по Z и во времени, очевидно же!

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

Нет, походу это не та функция

Нет, походу MouseReadInput - это не та функция.

После всех вычислений dx и dy я внес изменение:

post_event:
 dy=0-dy;

пересобрал пакет xserver-xorg-input-mouse, переустановил его, для надежности перегрузился.

По идее, движение мыши должны были стать инвентированными по верху-низу. Но ничего подобно го произошло, мышь как работала правильно так и работает.

Xintrea ★★★★★ ()
Ответ на: Нет, походу это не та функция от Xintrea

Re: Нет, походу это не та функция

Невесело, тогда и в правду придется по-серьезному разбираться с evdev. Есть у ксорговцев хаутушка трехлетней давности http://www.x.org/wiki/Development/Documentation/XorgInputHOWTO .

Правда, есть еще два варианта «на скорую руку». Во-первых, можно принудительно в xorg.conf прописать мышь с драйвером mouse

Section "InputDevice"
	Identifier	"Mouse 1"
	Driver		"mouse"
	Option		"Device"	"/dev/mouse"
	Option		"Protocol"	"Auto"
EndSection

Фиг знает, может, это счастье до сих пор поддерживается.

Или же, как сказал eagleivg, поправить xserver-xorg-input-evdev, https://launchpadlibrarian.net/42585223/xserver-xorg-input-evdev_2.3.2.orig.t... . Из того, что мне известно, там есть здоровенный файл src/evdev.c, где присутствует махонькая функция EvdevProcessEvent, ссылающаяся на EvdevProcessRelativeMotionEvent. Правда, там как-то все неочевидно. Может быть, лучше подоткнуться к EvdevProcessValuators, по крайней мере, это единственное место, где происходит [опциональная] инверсия координат.

anonymous ()

Я так понимаю, нужен AngleOffset из старых дров для мышей: http://ftp.x.org/pub/X11R7.0/doc/html/mouse.4.html или man mousedrv, если установлен xf86-input-mouse

Увы, в evdev этой опции нет, и, судя по обсуждениям из списка рассылки, не будет.

srj ★★ ()

Посмотри/почитай что идет от мыши по /dev/input/xxxx и подвесь своего демона который это будет преобразовывать и писать результат в файл-сокет. На сколько я понимаю если потом его указать X, то им пофиг устройство там или fifo - файл и есть файл.

Соответственно твоего демона можно пускать по udev, там же создавать ему fifo с нужными правами доступа, плюс патчить udev event / или генерить свой. Что бы желающие работать с твоей мышкой просто цепляли ее стандартным образом как девайс типа мыш.

Ксате посмотри еще в исходники gpm - они будут резко проще X, а для твоих целей как раз то что нужно. ЕМНИП когда то давно в них была аналогичная функциональность.

При такой схеме, в общем, ничего патчить ни в ядре ни X, ни писать драйвера для них не понадобится.

kernel ★★☆ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.