Bluetooth und virtueller COM-Port -> 0xC0000225 / Object not found
-
Hi zusammen,
wir haben einen kleinen Beschleunigungsmesser entwickelt, der die Beschleunigung in G und m/s² messen kann. Diese Daten werden entweder auf eine CompactFlash-Karte gespeichert oder (wenn die Daten live ausgewertet und angezeigt werden sollen) per Bluetooth übermittelt.
Für das Bluetooth nutzen wir dabei die virtuellen COM-Ports. Alles soweit so gut. In meinem C++-Tool (das die Daten dann für unsere Software in ein TCP/IP-Packet packt) öffne ich den COM-Port wie folgt:
hCom = CreateFile(comDevice, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
So weit so gut. Hat bisher alles wunderbar funktioniert.
Nun kam es wie es kommen musste - ein Test mit einem Kunden auf seinem Laptop. Dieser konnte sich nach korrekter Installation mit Hyperterminal (nutze ich immer zum Test) auf den Bluetooth-COM-Port verbinden und sah auch die Messdaten im Terminalfenster. Mit meiner Anwendung ging nix. Die Fehlermeldung lautet nur "Element wurde nicht gefunden." bzw. "Object not found"
Nun habe ich das nochmal auf meinem Rechner ausprobiert, und habe dort ein seltsames Ergebnis. Bei mir ist die Situation andersrum, im einzelnen wie folgt:
- Ich starte meinen Rechner und das Bluetoothgerät
- Ich starte meine Anwendung und verbinde mich zum COM-Port -> Fehlermeldung
- Ich starte Hyperterminal und verbinde mich zum COM-Port -> ich bekomme eine Verbindung
- Ich trenne die Verbindung. Verbinde mich wieder mit meiner Anwendung -> ich erhalte die Verbindung
- Ich trenne die Verbindung und versuche es erneut mit Hyperterminal -> Fehlermeldung
- Danach kann ich mich in 99% der Fälle nur noch mit meiner Anwendung verbinden.(Es liegt nicht daran, dass der COM-Port blockiert ist, ich trenne die Verbindung meines Tools vorher freilich korrekt. Seh ich mir das mit Portmon an gilt der COM-Port auch als geschlossen.)
Nun habe ich versucht das ganze nachzuvollziehen, und mir mit strace for NT die Aufrufe von Hyperterminal und meiner Anwendung von NtCreateFile gefiltert. Heraus kommen zwei fast identische Aufrufe:
NtCreateFile (0xc0100080, {24, 0, 0x40, 0, XXXXX,
"\??\COM3"}, 0x0, 0, 0, 1, 64, 0, 0, ... ) == 0x0XXXXX = Hier unterscheiden sich die Werte. Hyperterminal verursacht hier einen Wert von 456552 und mein Tool liegt ca. 600.000 darüber. Doch egal welchen Parameter in meinem CreateFile-Aufruf ich auch ändere, es steckt stets ein anderer Wert dahinter - der hier unterschiedliche Wert ändert sich nicht.
Nun kommt es, wenn es mit meiner Anwendung oder mit HyperTerminal nicht geht zu folgendem Status-Code:
0xC0000225 -> in der ntstatus.h steht dies für STATUS_NOT_FOUND - dabei ist die Adressierung des COM-Ports (\.\COM3) bei den Aufrufen stets gleich.
Ich würde das ja verstehen, wenn es mit keiner Anwendung ginge - aber es geht ja stets mit einer Anwendung (nur welche funktioniert ist wohl pro Rechner verschieden).
Hatte jemand dieses Problem schon mal? Ich möchte natürlich gern eine zuverlässig arbeitende Anwendung mit unserer Hardware ausliefern und nichts, was mal funktioniert und mal nicht

-
Kann es sein dass sich dein Bluetooth Atapter auf einen anderen COM Port verbindet ?