Устройство неправильно определено как последовательная мышь
Я работаю над устройством, которое взаимодействует с ПК через (виртуальный) последовательный порт. Проблема в том, что данные, которые мы отправляем, иногда неправильно идентифицируются Windows как мышь с шиной, после чего загружается драйвер "Microsoft Serial Ballpoint", и указатель мыши начинает прыгать на экране и случайным образом нажимать на вещи.
Немного Googling показывает, что это старая и хорошо известная проблема с последовательными устройствами, где обычное обходное устройство - это немного взлома реестра, чтобы отключить драйвер. Тем не менее, нам очень нужно требовать от наших пользователей, и я бы предпочел не использовать наше приложение в реестре пользователей. Особенно, когда исправление зависит от версии Windows, и пользователь вполне может использовать мышь с шиной.
Вместо этого я хотел бы избежать этой проблемы, изменив наш протокол, чтобы не отправлять какие-либо данные, которые могут оказаться неверно идентифицированными как мышь. Единственная проблема заключается в том, что я не совсем уверен, какие шаблоны следует избегать.
По-видимому, протокол Microsoft Mouse состоит из пакетов из четырех байтов, где установлен MSB первого, а третий из них - ясный.
Будет ли достаточно отправлять только 7-бит ASCII? Есть ли другие устройства, о которых мне нужно беспокоиться о том, чтобы их можно было обнаружить как?
Ответы
Ответ 1
Я сам столкнулся с этой проблемой на Windows 7 Professional x64
, и решение, которое сработало для меня, состояло в том, чтобы войти в реестр и изменить следующее значение:
Местоположение: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\sermouse
Ключ: Начать поиск
Значение: 3
Измените Value
на 4
, что есть Disabled
, и это остановит эту проблему.
Команда редактирования reg будет выглядеть следующим образом:
REG ADD "HKLM\SYSTEM\CurrentControlSet\Services\sermouse" /V Start /T REG_DWORD /F /D 4
Затем вам необходимо перезагрузить компьютер, который должен начать правильно, а не пытаться обнаружить последовательную мышь.
удачи.
Ответ 2
Оказывается, что обнаружение мыши в Windows обычно обрабатывается драйвером фильтра serenum.sys
. Этот драйвер реализует поддержку унаследованных серийных мышей, а также последовательный подключаемый модуль. Microsoft даже предоставила исходный код в качестве образца WDK.
Во время обнаружения порты переключаются в режим 1200-7-N-1, утверждая DTR
+ RTS
, к которому ожидается ответ в течение 200 мс, с несколькими попытками в случае отказа. К сожалению, для устаревшей мыши в качестве идентификации достаточно одного символа M
или B
.
В нашем случае протокол был переработан, чтобы избежать этих символов, и теперь он больше не может быть неверно идентифицирован.
Однако мы использовали виртуальный последовательный порт USB, и для традиционного последовательного порта этот подход может быть несколько сложным, поскольку все, что отправлено с другой скоростью передачи данных, может выглядеть как линейный шум. В этом случае я предполагаю, что наиболее простой способ решения проблемы, как уже было предложено, - это, вероятно, избежать нежелательных передач.
В качестве альтернативы, сигналы последовательного управления фактически подключены или перехватываются устройством USB CDC, обрабатывая сигналы DTR
или RTS
и удерживая их на выходе. Фактически реализация протокола plug-and-play была бы еще более нулевым вариантом. Предположительно, есть дешевые кабели RS232 без полного дополнения сигналов управления, хотя такой подход все равно может потерпеть неудачу.
Ответ 3
Я сам столкнулся с этой ошибкой Windows. Вот мои собственные исследования по теме:
Microsoft подтверждает эту ошибку: http://support.microsoft.com/kb/819036
Начните с загрузки своего инструмента и выясните, разрешает ли он проблему.
- Загрузите и установите свою программу.
- Запустите его из командной строки из C:\program\Microsoft comdisable\
- Запишите
comdisable /list
при выполнении программы.
- Отобразятся все порты на компьютере.
- Напишите
comdisable /disable COMx
, где x - номер порта.
- Сделайте это для всех портов на компьютере.
- Reboot.
Это, надеюсь, будет работать как универсальное решение.
В качестве альтернативы вы можете взломать boot.ini, но я не верю, что это работает в Vista/Win 7. У меня есть заметка о приложении от систем Cisco, описывающая, как это сделать. Если вышеуказанное не решит вашу проблему, сообщите мне.
Ответ 4
Я также столкнулся с этой проблемой, исправил ее, отключив "последовательный перечислитель" в расширенных свойствах драйвера FTDI (свойства COM-портов в диспетчере устройств). Это описано в http://www.ftdichip.com/Support/Documents/AppNotes/AN_107_AdvancedDriverOptions_AN_000073.pdf.
Ответ 5
Может быть, это помогает:
У нас была та же проблема с FTDI FT232RL. Мы выяснили, что это была аппаратная проблема нашей печатной платы.
FTDI-Datasheet говорит о # RESET -Pin: активный низкий reset контакт. Это может использоваться внешним устройством для reset FT232R. Если не требуется, его можно отключить или подключить к VCC.
RESET -Pin не требуется в нашем приложении, поэтому мы подключили его к Vcc через 1k Pull-Up.
Казалось, что подтягивание # RESET -Pin вызвало запуск undefined FT232RL, по крайней мере, каждый второй преобразователь, который мы подключили к USB-гнезду, вызвал последовательный балл в менеджере devive, Мы удалили подтягивающий резистор на # RESET -Pin, при этом # RESET -Pin не подключен. С тех пор каждый интерфейс работал proberly и больше не создавал последовательные баллы в диспетчере устройств Windows.
Ответ 6
У меня была эта проблема с 2010 года, когда к компьютеру подключены последовательные головки. Usb to serial converter или нет.. Я использую onkly устройство SILABS CP2102 или тому подобное.. Я работал вокруг него, просто позволяя драйверу установить, а затем в диспетчере устройств искать шариковый драйвер под мышью /HIDA, а затем просто отключить драйвер, НЕ УДАЛЯЙТЕ ЭТО, просто отключите его. Затем, когда вы перезагружаетесь даже при установке драйвера, кажется, что окна игнорируют comport как последовательную мышь и используют данные из ввода. Вы также обнаружите, что если шарик-шарик активен, то этот COMport используется и иногда возвращает COM-ПОРТ не доступный... надеюсь, что это поможет кому-то там:) Tx Ben
Ответ 7
Если у вас есть "истинный" последовательный порт или USB-ключ (RS-232, RS-485, это не имеет значения), эта проблема может быть решена путем первого открытия соответствующего последовательного порта с помощью терминала или независимо от того, какое приложение вы хотите контролировать, и только затем подключить устройство. Ради вас также следует обратить внимание на удаление устройства до завершения соединения.
С чипами FTDI, припаянными к самому устройству, вы разорены. Для меня потребовалось несколько раундов, чтобы объяснить руководству, что устройство, сообщающееся на нем, сопряжено с микросхемой FTDI, спаянной на PCB-встрече. Компьютеры Windows вряд ли пройдут для удобства пользователя, независимо от того, насколько гладким может быть USB-сокет на шкафу... (К счастью, все эти условия, встречающиеся вместе, довольно редки и необычны)