4

私は、Python でデバイスのコードを使用して HID Bluetooth デバイスに取り組んでいます。現時点では、次を実行して PC に接続できます。

os.system("hciconfig hcio class 0x002560")
os.system("hciconfig hcio name DataPaqWalk")

次に、pybluez を使用してソケットを接続し、接続を待ちます。

print("Waiting for connections")

self.scontrol=BluetoothSocket(L2CAP)
self.sinterrupt=BluetoothSocket(L2CAP)
self.scontrol.listen(1) # Limit of 1 connection
self.sinterrupt.listen(1)
self.ccontrol,cinfo = self.scontrol.accept()
self.cinterrupt, cinfo = self.sinterrupt.accept()

これは機能し、hcitool con を使用してスレッド ポーリングを行い、ソケットをダンプして再度リッスンする Windows PC (アダプター) の切断を検出します。hci はセキュリティなしでセットアップされているため、接続している PC は自動的にペアリングされます - これはすべて機能します。

ただし、デバイスの電源がオフになっていると問題が発生します。PC はデバイスがなくなったことを正しく検出し、ペアリングされた状態のままになります。私がやりたいことは、デバイスがペアリングされている PC に自動的に接続するようにすることです。私は明らかに PC の Mac アドレスを取得しており、以下を使用して接続しようとしています (P_CTRL は 17 で、P_INTR は 19 です)。

self.ccontrol,cinfo = self.scontrol.connect(('C8:FF:28:79:05:D4', self.P_CTRL))
self.controlClientMac = cinfo[0]
self.controlClientPsm = cinfo[1]
print ('control is ' + self.controlClientMac + " " + str(self.controlClientPsm))

self.cinterrupt,cinfo = self.scontrol.connect(('C8:FF:28:79:05:D4', self.P_INTR))
self.interruptClientMac = cinfo[0]
self.interruptClientPsm = cinfo[1]
print ('interrupt is ' + self.interruptClientMac + " " + str(self.interruptClientPsm))

これは基本的に接続を試み、私に返されます:

Traceback (most recent call last):
  File "server/btk_server.py", line 267, in <module>
    myservice = BTKbService();
  File "server/btk_server.py", line 226, in __init__
    self.device.listen();
  File "server/btk_server.py", line 174, in listen
    self.ccontrol,cinfo = self.scontrol.connect(('C8:FF:28:79:05:D4', self.P_CTRL))
  File "<string>", line 5, in connect
bluetooth.btcommon.BluetoothError: (111, 'Connection refused')

Bluetooth ウィンドウのダイアログでは、フリックして接続済みになっているのに、すぐにペアリング済みになっていることがわかります。質問は; デバイスをペアリングされた Windows アダプターに接続するにはどうすればよいですか? bluetoothctl で同様の応答が得られることに注意してください。

4

1 に答える 1