web-dev-qa-db-de.com

Gerät wurde als serielle Maus falsch erkannt

Ich arbeite an einem Gerät, das über einen (virtuellen) seriellen Port mit einem PC kommuniziert. Das Problem ist, dass die von uns gesendeten Daten von Windows gelegentlich falsch als Busmaus identifiziert werden. Danach wird der Treiber "Microsoft Serial Ballpoint" geladen und der Mauszeiger springt auf dem Bildschirm und klickt zufällig auf Dinge.

Ein wenig Googling macht deutlich, dass es sich um ein altes und bekanntes Problem mit seriellen Geräten handelt, bei denen die übliche Problemumgehung ein bisschen Registry-Hacking ist, um den fehlerhaften Treiber zu deaktivieren. Es ist jedoch sehr viel von unseren Benutzern zu verlangen, und ich möchte, dass unsere Anwendung nicht mit der Registrierung des Benutzers in Kontakt kommt. Insbesondere dann nicht, wenn der Fix von der Windows-Version abhängig ist und der Benutzer möglicherweise eine Busmaus verwendet.

Stattdessen möchte ich das Problem vermeiden, indem Sie unser Protokoll so ändern, dass keine Daten gesendet werden, die uns als Maus falsch identifizieren könnten. Das einzige Problem ist, dass ich nicht ganz sicher bin, welche Muster zu vermeiden sind . Anscheinend besteht Microsofts Mausprotokoll aus Paketen von vier Bytes, bei denen das MSB des ersten festgelegt ist und das der letzten drei klar ist.

Würde das Senden von nur 7-Bit ASCII ausreichen? Gibt es andere Geräte, bei denen ich mir Sorgen machen muss, dass sie entdeckt werden?

31
doynax

Ich bin gerade auf Windows 7 Professional x64 auf dieses Problem gestoßen, und eine Lösung, die für mich funktionierte, bestand darin, in die Registrierung zu gehen und den folgenden Wert zu bearbeiten:

Location: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\sermouse  
Key: Start  
Value: 3

Wenn Sie Value in 4 ändern, wird das Problem nicht mehr auftreten.

Hier ist eine Liste aller gültigen Startwerte :

0 Boot (loaded by kernel loader). Components of the driver stack for the boot (startup) volume must be loaded by the kernel loader.

1 System (loaded by I/O subsystem). Specifies that the driver is loaded at kernel initialization.

2 Automatic (loaded by Service Control Manager). Specifies that the service is loaded or started automatically.

3 Manual. Specifies that the service does not start until the user starts it manually, such as by using Device Manager.

4 Disabled. Specifies that the service should not be started.

Ein Reg-Edit-Befehl würde folgendermaßen aussehen:

REG ADD "HKLM\SYSTEM\CurrentControlSet\Services\sermouse" /V Start /T REG_DWORD /F /D 4

Sie müssen dann den Computer neu starten, der jetzt korrekt starten sollte und nicht versuchen sollte, eine serielle Maus zu erkennen.

viel Glück.

30
Serdalis

Es stellt sich heraus, dass die Mauserkennung in Windows normalerweise vom serenum.sys-Filtertreiber durchgeführt wird. Dieser Treiber implementiert Unterstützung für ältere serielle Mäuse zusammen mit Serielles Plug-and-Play . Microsoft hat sogar den Quellcode als WDK-Beispiel bereitgestellt.

Während der Erkennung wechseln die Ports in den 1200-7-N-1-Modus, wobei DTR + RTS geltend gemacht wird, auf den innerhalb von 200 ms eine Antwort erwartet wird, mit einigen Wiederholungsversuchen. Leider reicht für eine ältere Maus ein einzelnes M- oder B-Zeichen zur Identifizierung aus.

In unserem Fall wurde das Protokoll überarbeitet, um diese Zeichen zu vermeiden, und scheint jetzt nicht mehr falsch identifiziert zu werden.

Wir haben jedoch einen virtuellen seriellen USB-Port verwendet, und für einen herkömmlichen seriellen Port ist dieser Ansatz möglicherweise etwas schwierig, da alles, was mit einer anderen Baudrate gesendet wird, wie Leitungsrauschen aussieht. In diesem Fall, denke ich, ist die einfachste Lösung wahrscheinlich, wie bereits vorgeschlagen wurde, unerwünschte Übertragungen zu vermeiden.

Alternativ dazu, wenn die seriellen Steuersignale tatsächlich angeschlossen oder von einem USB-CDC-Gerät abgefangen werden, werden die Signale DTR oder RTS verarbeitet und die Ausgabe unterbrochen. Die Implementierung des Plug-and-Play-Protokolls wäre eine noch einfachere Option. Angeblich gibt es billige RS232-Kabel ohne ein komplettes Steuersignal, obwohl dieser Ansatz immer noch ausfällt.

7
doynax

Ich bin diesem Windows-Fehler selbst begegnet. Hier ist meine eigene Forschung zum Thema:

Microsoft erkennt diesen Fehler an: http://support.Microsoft.com/kb/819036 .__ Starten Sie mit dem Download des jeweiligen Tools und prüfen Sie, ob das Problem dadurch gelöst wird.

  • Laden Sie das Programm herunter und installieren Sie es.
  • Führen Sie es über die Eingabeaufforderung unter C:\program\Microsoft comdisable\aus.
  • Schreiben Sie comdisable /list, wenn Sie das Programm ausführen.
  • Alle Anschlüsse des Computers werden angezeigt.
  • Schreiben Sie comdisable /disable COMx, wobei x die Portnummer ist.
  • Tun Sie dies für alle Anschlüsse des Computers.
  • Starten Sie neu.

Dies sollte hoffentlich als universelle Lösung funktionieren. 

Alternativ können Sie in boot.ini hacken, aber ich glaube nicht, dass dies in Vista/Win 7 funktioniert. Ich habe einige App-Hinweise von Cisco-Systemen, in denen beschrieben wird, wie dies ausgeführt wird. Wenn sich das Problem nicht lösen lässt, lassen Sie es mich wissen.

4
Lundin

Ich bin auch auf dieses Problem gestoßen, das durch die Deaktivierung von "Serial Enumerator" in den erweiterten Eigenschaften des FTDI-Treibers (Eigenschaften der COM-Anschlüsse im Geräte-Manager) behoben wurde. Dies wird in http://www.ftdichip.com/Support/Documents/AppNotes/AN_107_AdvancedDriverOptions_AN_000073.pdf beschrieben. 

4
Reed Hedges

Wenn Sie einen "echten" seriellen Port oder einen USB-Dongle (RS-232, RS-485, egal) haben, können Sie dieses Problem umgehen, indem Sie den betreffenden seriellen Port zuerst mit einem Terminal oder der gewünschten Anwendung öffnen Sie möchten das Gerät mit überwachen und erst dann das Gerät anschließen. Außerdem sollten Sie darauf achten, das Gerät zu entfernen, bevor Sie die Verbindung trennen.

Mit FTDI-Chips, die auf dem Gerät selbst gelötet sind, sind Sie kaputt. Ich brauchte ein paar Runden, um das Management zu erklären, dass ein Gerät, das eigenständig kommuniziert, gepaart mit einem auf dem PCB gelöteten FTDI-Chip, auf dem Windows-Computer sitzen, nicht aus Gründen der Benutzerfreundlichkeit bestehen wird, egal wie glatt ein USB-Stick ist Steckdose kann wie auf dem Schrank aussehen ... (Zum Glück sind all diese Zustände recht selten und ungewöhnlich)

1
Jubatian

Vielleicht hilft das: Wir hatten das gleiche Problem mit FTDI FT232RL.Wir fanden heraus, dass es sich um ein Hardwareproblem unserer Leiterplatte handelte.

FTDI-Datenblatt sagt zu # RESET-Pin: Aktiver Low-Reset-Pin. Dies kann von einem externen Gerät verwendet werden, um den FT232R zurückzusetzen. Wenn dies nicht erforderlich ist, kann es nicht angeschlossen werden oder es kann bis zu VCC hochgezogen werden.

RESET-Pin war in unserer Anwendung nicht erforderlich, daher haben wir es über 1k Pull-Up .. mit Vcc verbunden. Es schien, dass der Pull-Up von # RESET-Pin einen undefinierten Start des FT232RL verursachte, zumindest jeden zweiten Konverter, den wir an eine USB-Buchse angeschlossen haben, verursachte einen seriellen Kugelpunkt im Devive-Manager. Wir haben den Pullup-Widerstand am # RESET-Pin entfernt, damit ist der # RESET-Pin nicht verbunden. Seitdem hat jedes Interface einwandfrei funktioniert und im Windows-Geräte-Manager keine seriellen Kugelpunkte mehr erstellt.

1
Werner

In meiner Entwicklungsumgebung habe ich einfach Microsoft Serial Mouse im Geräte-Manager deaktiviert.

Dies scheint den Täter meines Problems zu lösen. Bevor Sie dies tun, senkt der CH340G-Chip, den ich in meinem Design verwendet habe, die DTR fünf Mal, bevor Sie die Verbindung initiieren, mein Arduino-basiertes Board effektiv neu starten und unbrauchbar machen.

 Microsoft Serial Mouse Drivers Messing With Arduino Clone's CH340G UART to USB

1
David Refoua

Ich hatte dieses Problem seit 2010 mit seriellen Skalenköpfen, die an den PC angeschlossen sind. Usb zu seriellem Konverter oder nicht .. Ich verwende nur SIL2S-Geräte vom Typ CP2102 von SILABS oder dergleichen , DEINSTALLIEREN SIE ES NICHT, deaktivieren Sie es einfach. Nach dem Neustart, auch wenn der Treiber installiert ist, scheint Windows den Comport als serielle Maus zu ignorieren und verwendet die Daten der Eingabe. Sie werden auch feststellen, dass, wenn der Ballpoint-Treiber aktiv ist, dieser COMport verwendet wird und manchmal einen nicht zugänglichen COM-Port zurückgibt. Ich hoffe, das hilft jemandem da draußen :) Tx Ben

1
Ben Burger