Merge remote-tracking branch 'root/master' into pr-powermon

# Conflicts:
#	meshtastic/ble_interface.py
#	meshtastic/protobuf/mesh_pb2.py
#	meshtastic/protobuf/powermon_pb2.py
#	meshtastic/protobuf/powermon_pb2.pyi
This commit is contained in:
Kevin Hester
2024-07-03 09:22:45 -07:00
10 changed files with 155 additions and 86 deletions

View File

@@ -11,13 +11,19 @@ from typing import List, Optional
from bleak import BleakClient, BleakScanner, BLEDevice
from bleak.exc import BleakDBusError, BleakError
import google.protobuf
from meshtastic.mesh_interface import MeshInterface
from .protobuf import (
mesh_pb2,
)
SERVICE_UUID = "6ba1b218-15a8-461f-9fa8-5dcae273eafd"
TORADIO_UUID = "f75c76d2-129e-4dad-a1dd-7866124401e7"
FROMRADIO_UUID = "2c55e69e-4993-11ed-b878-0242ac120002"
FROMNUM_UUID = "ed9da18c-a800-4f66-a670-aa7547e34453"
LOGRADIO_UUID = "6c6fd238-78fa-436b-aacf-15c5be1ef2e2"
LEGACY_LOGRADIO_UUID = "6c6fd238-78fa-436b-aacf-15c5be1ef2e2"
LOGRADIO_UUID = "5a3d6e49-06e6-4423-9944-e9de8cdf9547"
class BLEInterface(MeshInterface):
@@ -55,7 +61,11 @@ class BLEInterface(MeshInterface):
self.close()
raise e
self.client.start_notify(LOGRADIO_UUID, self.log_radio_handler)
if self.client.has_characteristic(LEGACY_LOGRADIO_UUID):
self.client.start_notify(LEGACY_LOGRADIO_UUID, self.legacy_log_radio_handler)
if self.client.has_characteristic(LOGRADIO_UUID):
self.client.start_notify(LOGRADIO_UUID, self.log_radio_handler)
logging.debug("Mesh configure starting")
self._startConfig()
@@ -80,6 +90,16 @@ class BLEInterface(MeshInterface):
self.should_read = True
async def log_radio_handler(self, _, b): # pylint: disable=C0116
log_record = mesh_pb2.LogRecord()
try:
log_record.ParseFromString(bytes(b))
except google.protobuf.message.DecodeError:
return
message = f'[{log_record.source}] {log_record.message}' if log_record.source else log_record.message
self._handleLogLine(message)
async def legacy_log_radio_handler(self, _, b): # pylint: disable=C0116
log_radio = b.decode("utf-8").replace("\n", "")
self._handleLogLine(log_radio)
@@ -238,6 +258,10 @@ class BLEClient:
def write_gatt_char(self, *args, **kwargs): # pylint: disable=C0116
self.async_await(self.bleak_client.write_gatt_char(*args, **kwargs))
def has_characteristic(self, specifier):
"""Check if the connected node supports a specified characteristic."""
return bool(self.bleak_client.services.get_characteristic(specifier))
def start_notify(self, *args, **kwargs): # pylint: disable=C0116
self.async_await(self.bleak_client.start_notify(*args, **kwargs))