support multiple_acks

This commit is contained in:
Florent de Lamotte 2025-10-30 10:59:08 +01:00
parent 4712415a71
commit 3ad3be82e7
3 changed files with 43 additions and 43 deletions

View file

@ -4,7 +4,7 @@ build-backend = "hatchling.build"
[project]
name = "meshcore"
version = "2.1.17"
version = "2.1.18"
authors = [
{ name="Florent de Lamotte", email="florent@frizoncorrea.fr" },
{ name="Alex Wolden", email="awolden@gmail.com" },

View file

@ -87,14 +87,18 @@ class DeviceCommands(CommandHandlerBase):
[EventType.OK, EventType.ERROR],
)
# the old set_other_params function has been replaced in
# favour of set_other_params_from_infos to be more generic
# stays here for backward compatibility but does not support
# multi_acks for instance
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,
) -> Event:
self,
manual_add_contacts: bool,
telemetry_mode_base: int,
telemetry_mode_loc: int,
telemetry_mode_env: int,
advert_loc_policy: int,
) -> Event:
telemetry_mode = (
(telemetry_mode_base & 0b11)
| ((telemetry_mode_loc & 0b11) << 2)
@ -108,55 +112,50 @@ class DeviceCommands(CommandHandlerBase):
)
return await self.send(data, [EventType.OK, EventType.ERROR])
async def set_other_params_from_infos(self, infos) -> Event:
telemetry_mode = (
(infos["telemetry_mode_base"] & 0b11)
| ((infos["telemetry_mode_loc"] & 0b11) << 2)
| ((infos["telemetry_mode_env"] & 0b11) << 4)
)
data = (
b"\x26"
+ infos["manual_add_contacts"].to_bytes(1)
+ telemetry_mode.to_bytes(1)
+ infos["adv_loc_policy"].to_bytes(1)
+ infos["multi_acks"].to_bytes(1)
)
return await self.send(data, [EventType.OK, EventType.ERROR])
async def set_telemetry_mode_base(self, telemetry_mode_base: int) -> Event:
infos = (await self.send_appstart()).payload
return await self.set_other_params(
infos["manual_add_contacts"],
telemetry_mode_base,
infos["telemetry_mode_loc"],
infos["telemetry_mode_env"],
infos["adv_loc_policy"],
)
infos["telemetry_mode_base"] = telemetry_mode_base
return await self.set_other_params_from_infos(infos)
async def set_telemetry_mode_loc(self, telemetry_mode_loc: int) -> Event:
infos = (await self.send_appstart()).payload
return await self.set_other_params(
infos["manual_add_contacts"],
infos["telemetry_mode_base"],
telemetry_mode_loc,
infos["telemetry_mode_env"],
infos["adv_loc_policy"],
)
infos["telemetry_mode_loc"] = telemetry_mode_loc
return await self.set_other_params_from_infos(infos)
async def set_telemetry_mode_env(self, telemetry_mode_env: int) -> Event:
infos = (await self.send_appstart()).payload
return await self.set_other_params(
infos["manual_add_contacts"],
infos["telemetry_mode_base"],
infos["telemetry_mode_loc"],
telemetry_mode_env,
infos["adv_loc_policy"],
)
infos["telemetry_mode_env"] = telemetry_mode_env
return await self.set_other_params_from_infos(infos)
async def set_manual_add_contacts(self, manual_add_contacts: bool) -> Event:
infos = (await self.send_appstart()).payload
return await self.set_other_params(
manual_add_contacts,
infos["telemetry_mode_base"],
infos["telemetry_mode_loc"],
infos["telemetry_mode_env"],
infos["adv_loc_policy"],
)
infos["manual_add_contacts"] = manual_add_contacts
return await self.set_other_params_from_infos(infos)
async def set_advert_loc_policy(self, advert_loc_policy: int) -> Event:
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,
)
infos["adv_loc_policy"] = advert_loc_policy
return await self.set_other_params_from_infos(infos)
async def set_multi_ack(self, multi_acks: int) -> Event:
infos = (await self.send_appstart()).payload
infos["multi_acks"] = multi_acks
return await self.set_other_params_from_infos(infos)
async def set_devicepin(self, pin: int) -> Event:
logger.debug(f"Setting device PIN to: {pin}")

View file

@ -123,6 +123,7 @@ class MessageReader:
self_info["adv_lon"] = (
int.from_bytes(data[40:44], byteorder="little", signed=True) / 1e6
)
self_info["multi_acks"] = data[44]
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