Skip to content

CLI hangs on BLE connected keyboard interrupt #792

@bkt0031

Description

@bkt0031

I'm looking at integrating Bluetooth connectivity into the TC2-BBS software. I created a simple Python script that connects, waits, and disconnects from a RAK 4631 radio. It connected fine, but when I issue a keyboard interrupt it hung requiring a second Ctrl-C to be entered. I thought that maybe it was my script so I decided to run a listen command from the meshtastic CLI script and it does the same thing:

# meshtastic --ble xx:xx:xx:xx:xx:xx --listen --debug

[... all kinds of good debug connection information displayed ...]
DEBUG file:client.py read_gatt_char line:763 Read Characteristic 2c55e69e-4993-11ed-b878-0242ac120002 | /org/bluez/hci0/dev_F5_1B_B9_6D_B9_81/service0025/char0029: bytearray(b'')
DEBUG file:manager.py _parse_msg line:872 received D-Bus signal: org.freedesktop.DBus.Properties.PropertiesChanged (/org/bluez/hci0/dev_F5_1B_B9_6D_B9_81/service0025/char0029): ['org.bluez.GattCharacteristic1', {'Value': <dbus_fast.signature.Variant ('ay', b'')>}, []]
DEBUG file:client.py read_gatt_char line:763 Read Characteristic 2c55e69e-4993-11ed-b878-0242ac120002 | /org/bluez/hci0/dev_F5_1B_B9_6D_B9_81/service0025/char0029: bytearray(b'')

I then hit Ctrl-C after a few seconds with the following result:

^CINFO file:__main__.py common line:1323 Exiting due to keyboard interrupt
DEBUG file:client.py disconnect line:391 Disconnecting ({/org/bluez/hci0/dev_F5_1B_B9_6D_B9_81})
DEBUG file:manager.py _parse_msg line:872 received D-Bus signal: org.freedesktop.DBus.ObjectManager.InterfacesRemoved (/): ['/org/bluez/hci0/dev_F5_1B_B9_6D_B9_81', ['org.bluez.Battery1']]
DEBUG file:manager.py _parse_msg line:872 received D-Bus signal: org.freedesktop.DBus.Properties.PropertiesChanged (/org/bluez/hci0/dev_F5_1B_B9_6D_B9_81): ['org.bluez.Device1', {'ServicesResolved': <dbus_fast.signature.Variant ('b', False)>}, []]
DEBUG file:manager.py _parse_msg line:872 received D-Bus signal: org.freedesktop.DBus.Properties.PropertiesChanged (/org/bluez/hci0/dev_F5_1B_B9_6D_B9_81): ['org.bluez.Device1', {'Connected': <dbus_fast.signature.Variant ('b', False)>}, []]
DEBUG file:client.py on_connected_changed line:163 Device disconnected (/org/bluez/hci0/dev_F5_1B_B9_6D_B9_81)
DEBUG file:client.py _cleanup_all line:353 _cleanup_all(/org/bluez/hci0/dev_F5_1B_B9_6D_B9_81)
DEBUG file:ble_interface.py _sendToRadioImpl line:208 TORADIO write: 2001

It hung here with not further output. Hitting Ctrl-C again after 10 minutes or so I get:

^CException ignored in atexit callback: <bound method BLEClient.disconnect of <meshtastic.ble_interface.BLEClient object at 0x7f9ba41f10>>
Traceback (most recent call last):
  File "/home/brian/TC2-BBS-mesh/venv/lib/python3.11/site-packages/meshtastic/ble_interface.py", line 270, in disconnect
    self.async_await(self.bleak_client.disconnect(**kwargs))
  File "/home/brian/TC2-BBS-mesh/venv/lib/python3.11/site-packages/meshtastic/ble_interface.py", line 296, in async_await
    return self.async_run(coro).result(timeout)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/concurrent/futures/_base.py", line 451, in result
    self._condition.wait(timeout)
  File "/usr/lib/python3.11/threading.py", line 320, in wait
    waiter.acquire()
KeyboardInterrupt:
#

I'm not sure why the software is writing TORADIO 2001 after the connection has been close, but then again I'm not 100% sure how to read these logs with threading and async stuff thrown in there.

Normally if I were just dealing with this on the CLI I would not care, but it adds an undesired complication when I want to run the TC2-BBS as a service and desire to stop it.

I'm running this software on Raspberry Pi OS "Debian GNU/Linux 12 (bookworm)", on a 2 W device, Python version 3.11.2, meshtastic firmware firmware-rak4631-2.6.10.9ce4455, and the Python meshtastic library version 2.6.3.

I will keep digging into this, but quite frankly I suck at reading/figuring out someone else's code...

Thanks in advance

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions