1234567891011121314151617181920212223242526 |
- import subprocess
- import time
- # [!] To get this to work bluetoothctl needs to connect to the device before using BLE_GATT.connect
- def ble_ctl(addr:str):
- """
- use bluetoothctl interactively: scan on, ... wait ..., scan off, connect CF:CD:27:79:55:6B, exit
- subprocess has a relevant bug in line-buffering, see issue 21471
- """
- ctl = subprocess.Popen(['bluetoothctl'], stdin = subprocess.PIPE)
- def writeHelper(proc, str, delay = 1):
- proc.stdin.write(str.encode('utf-8'))
- proc.stdin.flush()
- time.sleep(delay)
- # send bluetoothctl commands interactively
- writeHelper(ctl, "scan on\n", 4)
- writeHelper(ctl, "scan off\n")
- writeHelper(ctl, "connect " + addr + "\n", 3)
- writeHelper(ctl, "exit\n")
- # wait for child subprocess to terminate
- while True:
- if None != ctl.poll():
- break
- time.sleep(.1)
- ble_ctl('CF:CD:27:79:55:6B')
|