feat(core): add option to disconnect BLE from device side

[no changelog]
tychovrahe/T3W1/devkit1_with_ble2
tychovrahe 8 months ago
parent 3bc038c3ee
commit 209aede783

@ -94,27 +94,32 @@ def connect() -> None:
click.echo("Connected")
@cli.command()
@click.option("--device", is_flag=True, help="Disconnect from device side.")
@with_client
def disconnect(client: "TrezorClient", device: bool) -> None:
if device:
def disconnect_device(client: "TrezorClient") -> None:
"""Disconnect from device side."""
try:
ble.disconnect(client)
else:
"""Connect to the device via BLE."""
adapter = tealblue.TealBlue().find_adapter()
except exceptions.Cancelled:
click.echo("Disconnect aborted on device.")
except exceptions.TrezorException as e:
click.echo(f"Disconnect failed: {e}")
sys.exit(3)
devices = lookup_device(adapter)
devices = [d for d in devices if d.connected]
@cli.command()
@click.option("--device", is_flag=True, help="Disconnect from device side.")
def disconnect(device: bool) -> None:
if device:
disconnect_device()
else:
ble_proxy = BleProxy()
devices = [d for d in ble_proxy.lookup() if d.connected]
if len(devices) == 0:
print("No device is connected")
for d in devices:
d.disconnect()
print(f"Device {d.name}, {d.address}, disconnected.")
click.echo("No BLE devices found")
return
ble_proxy.connect(devices[0].address)
ble_proxy.disconnect()
@cli.command()

@ -213,6 +213,23 @@ class BleAsync:
].acquire()
self.current = address
async def disconnect(self):
if self.current is None:
return
ble_device = self.devices[self.current]
if ble_device.connected:
LOG.info(
"Disconnecting from %s (%s)..." % (ble_device.name, ble_device.address)
)
await ble_device.disconnect()
else:
LOG.info(
"Disconnected from %s (%s)." % (ble_device.name, ble_device.address)
)
self.current = None
self.rx = None
self.tx = None
async def read(self):
assert self.tx is not None
await ready(self.tx)

Loading…
Cancel
Save