2012-03-27 4 views
0

virtuellen COM-Port verwenden ich eine Bluetooth-Client auf Android haben, die von RFCOMM an meinen Computer anschließen muss und mit dem UUID 00001101-0000-1000-8000-00805F9B34FBBluetooth RFCOMM auf einem Computer arbeiten, aber gezwungen, auf einem anderen

Die PyBluez-Bibliothek wird verwendet, ebenso wie Python 2.6. Ich habe den folgenden Code aus dem PyBluez Documentation

from bluetooth import * 

server_sock=BluetoothSocket(RFCOMM) 
server_sock.bind(("",PORT_ANY)) 
server_sock.listen(1) 

port = server_sock.getsockname()[1] 
uuid = "00001101-0000-1000-8000-00805F9B34FB" 
advertise_service(server_sock, "SampleServer", 
        service_id = uuid, 
        service_classes = [ uuid, SERIAL_PORT_CLASS ], 
        profiles = [ SERIAL_PORT_PROFILE ], 
        ) 

print "Waiting for connection on RFCOMM channel %d" % port 
client_sock, client_info = server_sock.accept() 
print "Accepted connection from ", client_info 

try: 
    while True: 
     data = client_sock.recv(1024) 
     if len(data) == 0: break 
     print "received [%s]" % data 
except IOError: 
    pass 

print "disconnected" 
client_sock.close() 
server_sock.close() 
print "all done"

Es funktioniert völlig in Ordnung unter Windows 7.

Aber ich habe keine Reaktion mit einem anderen Computer unter Windows XP, also meinen Code auf der Linie bleibt „Warten auf Verbindungs auf dem RFCOMM-Kanal ". Mein Bluetooth-Client warnt mich aber, dass es verbunden ist.

Diese Windows XP-Computer-Bluetooth-Konfiguration ermöglicht es mir, einen COM-Anschluss für die serielle Kommunikation mit Bluetooth einzurichten. Wenn ich diesen konfigurierten COM-Port abhöre, kann ich meine Daten vom Bluetooth-Client aus sehen.

Ich bevorzuge einen Code, der auf jedem Windows-Computer funktioniert, und ich möchte den virtuellen COM-Port auf diesen Computern nicht konfigurieren. So möchte ich das obige Programm auch mit dem Windows XP Computer arbeiten.

Was vermisse ich? Es ist, als würde der Windows XP-Computer Bluetooth-Daten nicht an mein Programm weiterleiten, selbst wenn ich die Möglichkeit zur Wiedergabe von Daten auf einem virtuellen seriellen Port deaktiviere. Es scheint, dass die UUID, die ich verwende, eine bekannte ist, aber ich muss diese verwenden, um mein Programm mit einer anderen spezifischen Plattform kompatibel zu machen.

Der Bluetooth-Stack auf dem Windows 7-Computer stammt von Atheros Communications, der auf dem Windows XP-Computer stammt von Widcomm.

+0

Klingt wie Ihr Windows-Treiber die Verbindung übernimmt und es für den virtuellen COM-Anschluss verwendet. Haben Sie versucht, die virtuellen COM-Port-/Bluetooth-Geräte mit seriellen Ports im Windows-Geräte-Manager zu deaktivieren (oder zu deinstallieren)? – TJD

+0

Ich habe das gleiche Gefühl. Ja, ich habe es deinstalliert, ich habe sogar die virtuelle Port-Service-Funktion in meinem Bluetooth-Manager entfernt und neu gestartet, nur für den Fall, dass ich meinen Bluetooth-Client verbinden kann, aber nichts passiert. Etwas Interessantes zu wissen: Wenn der virtuelle Port aktiviert ist und wenn ich mein Programm starte, kann der Bluetooth-Client keine Verbindung herstellen (als ob der Treiber und mein Programm in Konflikt wären). –

Antwort

0

Der auf Ihrem XP installierte Widcomm Bluetooth-Stack verfügt über eine eigene API und einen eigenen Treiber; Diese API ist völlig inkompatibel mit dem MS Bluetooth Stack! (Außerdem brauchen Sie XP SP2, um MS Stack zu verwenden, mit einem kompatiblen Dongle ... Ich habe noch nie einen gefunden)

Also, auf Win7 können Sie 'Sockets' mit dem MS Stack verwenden (sogar ein Broadcom/Widcomm funktioniert mit dem MS-Stack und nicht mit der spezifischen API!) Unter XP müssen Sie einen anderen Code verwenden, der mit dem Widcomm-Stack kompatibel ist ... Sie können eventuell COMports unter XP verwenden, die mit den virtuellen COMs verbunden sind. ..aber Sie erhalten keine Benachrichtigung vom Stapel ...