У кого есть 4D mouse PS/2 ?

Drivers for periphery equipment
  • Дополнил драйвер 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, может в них дело).
    - хотя это скорей всего бок моей мыши. Нет никаких проверок на переполнение, поэтому если очень быстро вращать скролл, то положительное смещение становится отрицательным, а отрицательное положительным. Было проверено в винде - тоже самое.
  • k@sTIg@r
    А ты уверен, что разные производители придерживаются одного стандарта?
    Вернее стандарта как такового вообще нет. Не возникнет ли проблем с мышами других производителей?
    Хотя теоретически первый скроллер более-менее стандартизирован и Винда его встроенными средствами поддерживает (проверял на шариковом COM Genius c одним скроллером).
  • Нет конечно. Кто может быть в этом уверен?
    Во-первых, это касается только ps/2.
    Кстати, возможен глюк с ком-мышами. А именно в плане 37.7, может вернуть чушь. Это легко подправить.
    Во-вторых, это стандартный драйвер. Если у кого-то специфическая мышь, то придется использовать свой драйвер.
    Кстати у меня была мысль не модифицировать файлы ядра а написать драйвер, который просто функции подменит. Но подумал, что сейчас практически у каждого, у кого ps/2 мыша, 3-кнопочная со скролом, а ядро предлагает только 2-х кнопочную. Так что. Но при желании, могу изменения вынести в отдельный драйвер. Не вижу в этом проблем.
  • забыл - я ядро впринципе и выложил чтобы потеститли.
  • k@sTIg@r
    Но подумал, что сейчас практически у каждого, у кого ps/2 мыша, 3-кнопочная со скролом, а ядро предлагает только 2-х кнопочную.
    Это известная фишка (не понимаю, почему ни у кого руки не дошли, в том числе и у меня), против этого возражений нет абсолютно никаких.
    Проблема может возникнуть со скроллером, и потому название "стандартный драйвер" сильно притянуто за уши. :-)
    Стандартным он будет не у всех и лучше действительно поддержку скроллеров выносить в отдельный драйвер, но это на будущее.
    Сегодня вечером посмотрю то, что ты сделал. Правда отписать получится не раньше понедельника.
  • Согласен. Прикинув я вижу что будут проблемы с 2-мя скролерами. Ядро конечно не рухнет, да и кнопки будут работать, а вот скрол врядли будет правильно работать.
    Тогда вынесу в отдельный драйвер.
    Хотя насчет 3-й кнопки. Есть объективное мнение, почему не была реализована 3-я кнопка? Есть проблемы с 2-кнопочными? или так, на всякий случай?
  • k@sTIg@r
    Хотя насчет 3-й кнопки. Есть объективное мнение, почему не была реализована 3-я кнопка? Есть проблемы с 2-кнопочными? или так, на всякий случай?
    Скорее всего, из-за отсутствия стандартной реализации 3 кнопки в COM мыши. При этом получается неравнозначность - на PS2 мышах есть кнопка, а на COM нету, а если на третью кнопку повесят достаточно важную функцию, то пользователь с COM мышью будет заведомо в ущемленном положении.
    Я пытался написать реализацию для COM мышей третьей кнопки, но у меня в наличии была лишь мышь Genius с 3-я кнопками. А реализация протокола 3 кнопки у разных фирм разная.
  • в некоторых системах, две нажатых кнопки (правая + левая) = нажатию средней кнопки, но тут может оказатся что комуто нужно одновременно нажимать кнопки )
  • Пользователь с COM мышью уже по определению ущемлён, причём самим собой. Лично я последний раз видел COM мышь, когда работал на старом добром 386DX.
    in code we trust
  • Проверил - работает. Задержки при определении не заметил, хотя и не старался. Лаунчер у меня запустился. Добавляй проверку на переполнение - и в транк.
    В скором времени прикручу к Tinypad'у.

    PS: Logitech RX300
    in code we trust
  • +1
    Logitech M-BT58. Все работает корректно, ланчер запускается. Проверил в qemu, vmware и на реальной системе.
  • k@sTIg@r
    Проверил на реальной системе. Работает. Оба скроллера на моей мыши воспринимаются как один - видимо нужно учитывать какой-то дополнительный бит. Мышь A4-Tech WOP-35 (5 кнопок, 2 скроллера).
    Только непонятно почему при прокрутке вверх число останавливается на 0? Получается дальше данные игнорируются.
  • Ленин
    Ты не понял, проверка на переполнение отсутствует в железе. Для 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 единицы. Тогда получается, что отсутствует совместимость, с односкроловыми мышами. И для нормальной работы придется делать отдельный драйвер. Жаль у меня нет такой мыши, потестил бы. Кста, если есть возможность попробуй поставить стандартный драйвер односкроловой мыши для винды и проверь как себя будет вести горизонтальный скролл.

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

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

    Users browsing this forum: No registered users and 4 guests