Bluetooth RFCOMM работает на компьютере, но вынужден использовать виртуальный COM-порт на другом - PullRequest
0 голосов
/ 27 марта 2012

У меня есть клиент Bluetooth на Android, который должен подключиться к моему компьютеру по RFCOMM и использовать UUID 00001101-0000-1000-8000-00805F9B34FB

Используется библиотека PyBluez, а также Python 2.6. Я использовал следующий код из 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"

Отлично работает под Windows 7.

Но у меня нет реакции с другим компьютером на Windows XP, т. Е. Мой код остается в строке «Ожидание подключения по каналу RFCOMM». Мой Bluetooth-клиент предупреждает, что он подключен.

Эта конфигурация Bluetooth на компьютере с Windows XP позволяет мне настроить COM-порт для последовательной связи с Bluetooth. Если я прослушиваю этот настроенный COM-порт, я могу видеть свои данные с клиента Bluetooth.

Я предпочитаю, чтобы код работал на любом компьютере Windows, и я не хочу настраивать виртуальный COM-порт на этих компьютерах. Поэтому я хотел бы, чтобы вышеуказанная программа также работала с компьютером с Windows XP.

Что мне не хватает? Как будто компьютер под управлением Windows XP не передает данные Bluetooth в мою программу, даже если я отключаю возможность воспроизведения данных через виртуальный последовательный порт. Кажется, UUID, который я использую, хорошо известен, но я должен использовать его, чтобы моя программа была совместима с другой конкретной платформой.

Стек Bluetooth на компьютере под управлением Windows 7 - от Atheros Communications, а стек на компьютере под управлением Windows XP - от Widcomm.

1 Ответ

0 голосов
/ 06 марта 2015

Стек Widcomm Bluetooth, установленный на вашем XP, имеет собственный API и драйвер; этот API полностью несовместим со стеком MS Bluetooth! (кроме того, вам нужен XP SP2 для использования MS Stack, также с совместимым ключом ... Я так и не нашел)

Итак, в Win7 вы можете использовать «сокеты» со стеком MS (даже Broadcom / Widcomm будет работать, используя стек MS, а не конкретный API!) На XP вам нужно использовать другой код, совместимый со стеком Widcomm ... В конечном итоге вы можете использовать COM-порты на XP, подключенные к виртуальным COM-портам ... но вы не получите уведомление из стека ...

...