Page 2 of 4

Posted: Thu Apr 05, 2007 10:06 am
by k@sTIg@r
Кстати о птичках!
У меня ядро давно(относительно) понимает третью кнопку мыши. Там оказалось все просто. В файле hid/m_ps2.inc (или как он там) нужно было всего лишь заменить
and [BTN_DWN],3
на
and [BTN_DWN],7
то есть не обнулять 3-й бит(который отвечает за 3-ю кнопку мыши).
Хотел прикрутить еще и скролл, но не все так просто оказалось как хотелось, не смог найти нормальные доки. В тех что указаны выше все классно описывается, но руки еще не добрались...
я вообще удивлен насчет 3-го бита, зачем его было принудительно занулять??? Конечно я незнаю как поведет себя 3-й бит при простой дву-кнопочной мышке, может в том была причина....

Posted: Fri Apr 20, 2007 12:10 pm
by k@sTIg@r
Дополнил драйвер ps/2 мыши.
Теперь при детекте определяется тип мыши (простая 3-х кнопочная, 3к со скролом или 5-кнопочная со скролом), пока такие.
Добавлены 37.7 (получить тип мыши, соответственно 0/1/2) и 37.8 получить данные скролла.
Как работает скролл. Используется общая переменная, которая хранит сумарное смещение (кол-во щелчков) скроллера с момента последнего прочтения. Значение доступно только активному окну, все остальные получают 0. Значение также обнуляется при потере фокуса (ввиду того что используется общая переменная).
Также теперь 37.2 возвращает 5 значимых бита.
http://ifolder.ru/1743781 взять можно тут. В архиве несжатое ядро и mouse.asm, который показывает тип вашей мышки, состояние кнопок и действие скроллинга.

минуса:
- ядро не пускает ланчера(по крайней мере у меня) был вязт вчерашний trunk. (это не мой бок)
- детект почему-то происходит с задержкой, там конечно добавился код но я не думал что он может такую задержку делать (использовались mouse_cmd и mouse_read, может в них дело).
- хотя это скорей всего бок моей мыши. Нет никаких проверок на переполнение, поэтому если очень быстро вращать скролл, то положительное смещение становится отрицательным, а отрицательное положительным. Было проверено в винде - тоже самое.

Posted: Fri Apr 20, 2007 12:22 pm
by Mario79
k@sTIg@r
А ты уверен, что разные производители придерживаются одного стандарта?
Вернее стандарта как такового вообще нет. Не возникнет ли проблем с мышами других производителей?
Хотя теоретически первый скроллер более-менее стандартизирован и Винда его встроенными средствами поддерживает (проверял на шариковом COM Genius c одним скроллером).

Posted: Fri Apr 20, 2007 12:40 pm
by k@sTIg@r
Нет конечно. Кто может быть в этом уверен?
Во-первых, это касается только ps/2.
Кстати, возможен глюк с ком-мышами. А именно в плане 37.7, может вернуть чушь. Это легко подправить.
Во-вторых, это стандартный драйвер. Если у кого-то специфическая мышь, то придется использовать свой драйвер.
Кстати у меня была мысль не модифицировать файлы ядра а написать драйвер, который просто функции подменит. Но подумал, что сейчас практически у каждого, у кого ps/2 мыша, 3-кнопочная со скролом, а ядро предлагает только 2-х кнопочную. Так что. Но при желании, могу изменения вынести в отдельный драйвер. Не вижу в этом проблем.

Posted: Fri Apr 20, 2007 12:43 pm
by k@sTIg@r
забыл - я ядро впринципе и выложил чтобы потеститли.

Posted: Fri Apr 20, 2007 1:00 pm
by Mario79
k@sTIg@r
Но подумал, что сейчас практически у каждого, у кого ps/2 мыша, 3-кнопочная со скролом, а ядро предлагает только 2-х кнопочную.
Это известная фишка (не понимаю, почему ни у кого руки не дошли, в том числе и у меня), против этого возражений нет абсолютно никаких.
Проблема может возникнуть со скроллером, и потому название "стандартный драйвер" сильно притянуто за уши. :-)
Стандартным он будет не у всех и лучше действительно поддержку скроллеров выносить в отдельный драйвер, но это на будущее.
Сегодня вечером посмотрю то, что ты сделал. Правда отписать получится не раньше понедельника.

Posted: Fri Apr 20, 2007 1:15 pm
by k@sTIg@r
Согласен. Прикинув я вижу что будут проблемы с 2-мя скролерами. Ядро конечно не рухнет, да и кнопки будут работать, а вот скрол врядли будет правильно работать.
Тогда вынесу в отдельный драйвер.
Хотя насчет 3-й кнопки. Есть объективное мнение, почему не была реализована 3-я кнопка? Есть проблемы с 2-кнопочными? или так, на всякий случай?

Posted: Fri Apr 20, 2007 1:59 pm
by Mario79
k@sTIg@r
Хотя насчет 3-й кнопки. Есть объективное мнение, почему не была реализована 3-я кнопка? Есть проблемы с 2-кнопочными? или так, на всякий случай?
Скорее всего, из-за отсутствия стандартной реализации 3 кнопки в COM мыши. При этом получается неравнозначность - на PS2 мышах есть кнопка, а на COM нету, а если на третью кнопку повесят достаточно важную функцию, то пользователь с COM мышью будет заведомо в ущемленном положении.
Я пытался написать реализацию для COM мышей третьей кнопки, но у меня в наличии была лишь мышь Genius с 3-я кнопками. А реализация протокола 3 кнопки у разных фирм разная.

Posted: Fri Apr 20, 2007 3:50 pm
by Ghost
в некоторых системах, две нажатых кнопки (правая + левая) = нажатию средней кнопки, но тут может оказатся что комуто нужно одновременно нажимать кнопки )

Posted: Sat Apr 21, 2007 12:02 am
by mike.dld
Пользователь с COM мышью уже по определению ущемлён, причём самим собой. Лично я последний раз видел COM мышь, когда работал на старом добром 386DX.

Posted: Sun Apr 22, 2007 3:23 am
by mike.dld
Проверил - работает. Задержки при определении не заметил, хотя и не старался. Лаунчер у меня запустился. Добавляй проверку на переполнение - и в транк.
В скором времени прикручу к Tinypad'у.

PS: Logitech RX300

Posted: Sun Apr 22, 2007 2:31 pm
by Heavyiron
+1
Logitech M-BT58. Все работает корректно, ланчер запускается. Проверил в qemu, vmware и на реальной системе.

Posted: Mon Apr 23, 2007 7:46 am
by Mario79
k@sTIg@r
Проверил на реальной системе. Работает. Оба скроллера на моей мыши воспринимаются как один - видимо нужно учитывать какой-то дополнительный бит. Мышь A4-Tech WOP-35 (5 кнопок, 2 скроллера).
Только непонятно почему при прокрутке вверх число останавливается на 0? Получается дальше данные игнорируются.

Posted: Mon Apr 23, 2007 12:59 pm
by k@sTIg@r
Ленин
Ты не понял, проверка на переполнение отсутствует в железе. Для Z-indexa выделено только 4 бита, 1 знаковый 3 значимых. То есть можно успеть сделать восемь щелчков скрола, пока обрабатываются 4 пакета от мышки. Без понятия как это обойти. Но я проверил в виндах - тож самое. При интенсивной прокрутке страниц (firefox, pspad, остальные не пробовал) вниз, страница иногда проскакивает вверх. У меня тоже Logitech, видимо они забили на это на уровне железа, посчитали что не возможно переполнить эти 3 бита.
Ланчер запустился? хм..... тогда какого он у меня не пускается???
Ну если задержки не заметил, это хорошо.

Mario79
нет, данные не игнорируются. Это в моей программе стоит ограничение (спроси зачем - скажу не знаю). Посмотри в исходнике - увидишь, что к переменной прибавляется значение, возвращаемое ф-цией 37.8. Если результат меньше 0, то он обнуляется.
Да, со 2 скроллом проблемы. Дополнительных битов нет. Пытаюсь вникнуть - вот что описано в стандарте
There are mice with two scrolling wheels, one vertical and the other horizontal. These mice use the Microsoft Intellimouse data packet format as described above. If the vertical wheel is scrolled upward, the Z-counter is incremented by one and if that wheel is scrolled down, the Z-counter is decremented by one. This is normal operation for a scrolling wheel. However, if the horizontal wheel is scrolled right, the Z-counter is incremented by two and if it is scrolled left, the Z-counter is decremented by two. This seems like an odd way to implement the second scrolling wheel, but it works since the placement of the two wheels make it virtually impossible to use both of them at the same time (and if you try to trick the software and use both at the same time, it will ignore the horizontal wheel).
Тобишь, горизонтальный скролл инкрементит и декрементит 2 единицы. Тогда получается, что отсутствует совместимость, с односкроловыми мышами. И для нормальной работы придется делать отдельный драйвер. Жаль у меня нет такой мыши, потестил бы. Кста, если есть возможность попробуй поставить стандартный драйвер односкроловой мыши для винды и проверь как себя будет вести горизонтальный скролл.

И во вторых. Были тут обсуждения. Дополнительные режими вносить в ядро или все же в отдельный драйвер. Начал писать драйвер, но увидел как это сложно, слишком слабый интерфейс. Но все же можно....

Posted: Mon Apr 23, 2007 1:07 pm
by Serge
k@sTIg@r

Если есть вопросы по дровам пиши мне.