From 21cbed070a87f94775dcd48e8a343f50c52b1d9f Mon Sep 17 00:00:00 2001 From: Florent Date: Wed, 9 Jul 2025 17:13:40 +0200 Subject: [PATCH] support adv loc policy --- pyproject.toml | 2 +- src/meshcore/commands.py | 25 +++++++++++++++++++------ src/meshcore/reader.py | 1 + 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index aeae234..96a3c67 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "meshcore" -version = "1.9.13" +version = "1.9.14" authors = [ { name="Florent de Lamotte", email="florent@frizoncorrea.fr" }, { name="Alex Wolden", email="awolden@gmail.com" }, diff --git a/src/meshcore/commands.py b/src/meshcore/commands.py index baa0688..37188da 100644 --- a/src/meshcore/commands.py +++ b/src/meshcore/commands.py @@ -196,9 +196,9 @@ class CommandHandler: + int(0).to_bytes(1, 'little')\ + int(0).to_bytes(1, 'little'), [EventType.OK, EventType.ERROR]) - async def set_other_params(self, manual_add_contacts : bool, telemetry_mode_base : int, telemetry_mode_loc : int, telemetry_mode_env : int) : + async def set_other_params(self, manual_add_contacts : bool, telemetry_mode_base : int, telemetry_mode_loc : int, telemetry_mode_env : int, advert_loc_policy : int) : telemetry_mode = (telemetry_mode_base & 0b11) | ((telemetry_mode_loc & 0b11) << 2) | ((telemetry_mode_env & 0b11) << 4) - data = b"\x26" + manual_add_contacts.to_bytes(1) + telemetry_mode.to_bytes(1) + data = b"\x26" + manual_add_contacts.to_bytes(1) + telemetry_mode.to_bytes(1) + advert_loc_policy.to_bytes(1) return await self.send(data, [EventType.OK, EventType.ERROR]) async def set_telemetry_mode_base(self, telemetry_mode_base : int) : @@ -207,7 +207,8 @@ class CommandHandler: infos["manual_add_contacts"], telemetry_mode_base, infos["telemetry_mode_loc"], - infos["telemetry_mode_env"]) + infos["telemetry_mode_env"], + infos["advert_loc_policy"]) async def set_telemetry_mode_loc(self, telemetry_mode_loc : int) : infos = (await self.send_appstart()).payload @@ -215,7 +216,8 @@ class CommandHandler: infos["manual_add_contacts"], infos["telemetry_mode_base"], telemetry_mode_loc, - infos["telemetry_mode_env"]) + infos["telemetry_mode_env"], + infos["advert_loc_policy"]) async def set_telemetry_mode_env(self, telemetry_mode_env : int) : infos = (await self.send_appstart()).payload @@ -223,7 +225,8 @@ class CommandHandler: infos["manual_add_contacts"], infos["telemetry_mode_base"], infos["telemetry_mode_loc"], - telemetry_mode_env) + telemetry_mode_env, + infos["advert_loc_policy"]) async def set_manual_add_contacts(self, manual_add_contacts:bool) : infos = (await self.send_appstart()).payload @@ -231,7 +234,17 @@ class CommandHandler: manual_add_contacts, infos["telemetry_mode_base"], infos["telemetry_mode_loc"], - infos["telemetry_mode_env"]) + infos["telemetry_mode_env"], + infos["advert_loc_policy"]) + + async def set_advert_loc_policy(self, advert_loc_policy:int) : + infos = (await self.send_appstart()).payload + return await self.set_other_params( + infos["manual_add_contacts"], + infos["telemetry_mode_base"], + infos["telemetry_mode_loc"], + infos["telemetry_mode_env"], + advert_loc_policy) async def set_devicepin(self, pin: int) -> Event: logger.debug(f"Setting device PIN to: {pin}") diff --git a/src/meshcore/reader.py b/src/meshcore/reader.py index 98cc805..1f7c8bf 100644 --- a/src/meshcore/reader.py +++ b/src/meshcore/reader.py @@ -74,6 +74,7 @@ class MessageReader: self_info["public_key"] = data[4:36].hex() self_info["adv_lat"] = int.from_bytes(data[36:40], byteorder='little', signed=True)/1e6 self_info["adv_lon"] = int.from_bytes(data[40:44], byteorder='little', signed=True)/1e6 + self_info["adv_loc_policy"] = data[45] self_info["telemetry_mode_env"] = (data[46] >> 4) & 0b11 self_info["telemetry_mode_loc"] = (data[46] >> 2) & 0b11 self_info["telemetry_mode_base"] = (data[46]) & 0b11