From 26730d1efa2f29e48d3041c711cce0c4e93fc384 Mon Sep 17 00:00:00 2001 From: Florent Date: Thu, 26 Feb 2026 14:24:02 -0400 Subject: [PATCH] support path_hash_mode --- pyproject.toml | 2 +- src/meshcore/commands/device.py | 4 ++++ src/meshcore/packets.py | 1 + src/meshcore/reader.py | 8 ++++++-- 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 3c6204f..bf1c7b7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "meshcore" -version = "2.2.14" +version = "2.2.15" authors = [ { name="Florent de Lamotte", email="florent@frizoncorrea.fr" }, { name="Alex Wolden", email="awolden@gmail.com" }, diff --git a/src/meshcore/commands/device.py b/src/meshcore/commands/device.py index a991327..87347c2 100644 --- a/src/meshcore/commands/device.py +++ b/src/meshcore/commands/device.py @@ -292,3 +292,7 @@ class DeviceCommands(CommandHandlerBase): logger.debug("Getting allowed repeat freqs") return await self.send(b"\x3c", [EventType.ALLOWED_REPEAT_FREQ, EventType.ERROR]) + async def set_path_hash_mode(self, mode: int) -> Event: + logger.debug(f"Setting path mode to {mode}") + data = b"\x3d\0" + mode.to_bytes(1, "little") + return await self.send(data, [EventType.OK, EventType.ERROR]) diff --git a/src/meshcore/packets.py b/src/meshcore/packets.py index 0a7dacf..077739a 100644 --- a/src/meshcore/packets.py +++ b/src/meshcore/packets.py @@ -71,6 +71,7 @@ class CommandType(Enum): SET_AUTOADD_CONFIG = 58 GET_AUTOADD_CONFIG = 59 GET_ALLOWED_REPEAT_FREQ = 60 + SET_PATH_HASH_MODE = 61 # Packet prefixes for the protocol class PacketType(Enum): diff --git a/src/meshcore/reader.py b/src/meshcore/reader.py index caefbc2..bd86949 100644 --- a/src/meshcore/reader.py +++ b/src/meshcore/reader.py @@ -270,17 +270,21 @@ class MessageReader: elif packet_type_value == PacketType.DEVICE_INFO.value: res = {} - res["fw ver"] = dbuf.read(1)[0] - if data[1] >= 3: + fw_ver = dbuf.read(1)[0] + res["fw ver"] = fw_ver + if fw_ver >= 3: res["max_contacts"] = dbuf.read(1)[0] * 2 res["max_channels"] = dbuf.read(1)[0] res["ble_pin"] = int.from_bytes(dbuf.read(4), byteorder="little") res["fw_build"] = dbuf.read(12).decode("utf-8", "ignore").replace("\0", "") res["model"] = dbuf.read(40).decode("utf-8", "ignore").replace("\0", "") res["ver"] = dbuf.read(20).decode("utf-8", "ignore").replace("\0", "") + if fw_ver >= 9: # has repeater mode rpt = dbuf.read(1) if len(rpt) > 0: res["repeat"] = (rpt[0] != 0) + if fw_ver >= 10: # has path_hash_mode + res["path_hash_mode"] = dbuf.read(1)[0] await self.dispatcher.dispatch(Event(EventType.DEVICE_INFO, res)) elif packet_type_value == PacketType.CUSTOM_VARS.value: