mirror of
https://github.com/meshcore-dev/meshcore_py.git
synced 2026-06-11 11:56:18 +00:00
support multiple_acks
This commit is contained in:
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "meshcore"
|
name = "meshcore"
|
||||||
version = "2.1.17"
|
version = "2.1.18"
|
||||||
authors = [
|
authors = [
|
||||||
{ name="Florent de Lamotte", email="florent@frizoncorrea.fr" },
|
{ name="Florent de Lamotte", email="florent@frizoncorrea.fr" },
|
||||||
{ name="Alex Wolden", email="awolden@gmail.com" },
|
{ name="Alex Wolden", email="awolden@gmail.com" },
|
||||||
|
|||||||
@@ -87,14 +87,18 @@ class DeviceCommands(CommandHandlerBase):
|
|||||||
[EventType.OK, EventType.ERROR],
|
[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(
|
async def set_other_params(
|
||||||
self,
|
self,
|
||||||
manual_add_contacts: bool,
|
manual_add_contacts: bool,
|
||||||
telemetry_mode_base: int,
|
telemetry_mode_base: int,
|
||||||
telemetry_mode_loc: int,
|
telemetry_mode_loc: int,
|
||||||
telemetry_mode_env: int,
|
telemetry_mode_env: int,
|
||||||
advert_loc_policy: int,
|
advert_loc_policy: int,
|
||||||
) -> Event:
|
) -> Event:
|
||||||
telemetry_mode = (
|
telemetry_mode = (
|
||||||
(telemetry_mode_base & 0b11)
|
(telemetry_mode_base & 0b11)
|
||||||
| ((telemetry_mode_loc & 0b11) << 2)
|
| ((telemetry_mode_loc & 0b11) << 2)
|
||||||
@@ -108,55 +112,50 @@ class DeviceCommands(CommandHandlerBase):
|
|||||||
)
|
)
|
||||||
return await self.send(data, [EventType.OK, EventType.ERROR])
|
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:
|
async def set_telemetry_mode_base(self, telemetry_mode_base: int) -> Event:
|
||||||
infos = (await self.send_appstart()).payload
|
infos = (await self.send_appstart()).payload
|
||||||
return await self.set_other_params(
|
infos["telemetry_mode_base"] = telemetry_mode_base
|
||||||
infos["manual_add_contacts"],
|
return await self.set_other_params_from_infos(infos)
|
||||||
telemetry_mode_base,
|
|
||||||
infos["telemetry_mode_loc"],
|
|
||||||
infos["telemetry_mode_env"],
|
|
||||||
infos["adv_loc_policy"],
|
|
||||||
)
|
|
||||||
|
|
||||||
async def set_telemetry_mode_loc(self, telemetry_mode_loc: int) -> Event:
|
async def set_telemetry_mode_loc(self, telemetry_mode_loc: int) -> Event:
|
||||||
infos = (await self.send_appstart()).payload
|
infos = (await self.send_appstart()).payload
|
||||||
return await self.set_other_params(
|
infos["telemetry_mode_loc"] = telemetry_mode_loc
|
||||||
infos["manual_add_contacts"],
|
return await self.set_other_params_from_infos(infos)
|
||||||
infos["telemetry_mode_base"],
|
|
||||||
telemetry_mode_loc,
|
|
||||||
infos["telemetry_mode_env"],
|
|
||||||
infos["adv_loc_policy"],
|
|
||||||
)
|
|
||||||
|
|
||||||
async def set_telemetry_mode_env(self, telemetry_mode_env: int) -> Event:
|
async def set_telemetry_mode_env(self, telemetry_mode_env: int) -> Event:
|
||||||
infos = (await self.send_appstart()).payload
|
infos = (await self.send_appstart()).payload
|
||||||
return await self.set_other_params(
|
infos["telemetry_mode_env"] = telemetry_mode_env
|
||||||
infos["manual_add_contacts"],
|
return await self.set_other_params_from_infos(infos)
|
||||||
infos["telemetry_mode_base"],
|
|
||||||
infos["telemetry_mode_loc"],
|
|
||||||
telemetry_mode_env,
|
|
||||||
infos["adv_loc_policy"],
|
|
||||||
)
|
|
||||||
|
|
||||||
async def set_manual_add_contacts(self, manual_add_contacts: bool) -> Event:
|
async def set_manual_add_contacts(self, manual_add_contacts: bool) -> Event:
|
||||||
infos = (await self.send_appstart()).payload
|
infos = (await self.send_appstart()).payload
|
||||||
return await self.set_other_params(
|
infos["manual_add_contacts"] = manual_add_contacts
|
||||||
manual_add_contacts,
|
return await self.set_other_params_from_infos(infos)
|
||||||
infos["telemetry_mode_base"],
|
|
||||||
infos["telemetry_mode_loc"],
|
|
||||||
infos["telemetry_mode_env"],
|
|
||||||
infos["adv_loc_policy"],
|
|
||||||
)
|
|
||||||
|
|
||||||
async def set_advert_loc_policy(self, advert_loc_policy: int) -> Event:
|
async def set_advert_loc_policy(self, advert_loc_policy: int) -> Event:
|
||||||
infos = (await self.send_appstart()).payload
|
infos = (await self.send_appstart()).payload
|
||||||
return await self.set_other_params(
|
infos["adv_loc_policy"] = advert_loc_policy
|
||||||
infos["manual_add_contacts"],
|
return await self.set_other_params_from_infos(infos)
|
||||||
infos["telemetry_mode_base"],
|
|
||||||
infos["telemetry_mode_loc"],
|
async def set_multi_ack(self, multi_acks: int) -> Event:
|
||||||
infos["telemetry_mode_env"],
|
infos = (await self.send_appstart()).payload
|
||||||
advert_loc_policy,
|
infos["multi_acks"] = multi_acks
|
||||||
)
|
return await self.set_other_params_from_infos(infos)
|
||||||
|
|
||||||
async def set_devicepin(self, pin: int) -> Event:
|
async def set_devicepin(self, pin: int) -> Event:
|
||||||
logger.debug(f"Setting device PIN to: {pin}")
|
logger.debug(f"Setting device PIN to: {pin}")
|
||||||
|
|||||||
@@ -123,6 +123,7 @@ class MessageReader:
|
|||||||
self_info["adv_lon"] = (
|
self_info["adv_lon"] = (
|
||||||
int.from_bytes(data[40:44], byteorder="little", signed=True) / 1e6
|
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["adv_loc_policy"] = data[45]
|
||||||
self_info["telemetry_mode_env"] = (data[46] >> 4) & 0b11
|
self_info["telemetry_mode_env"] = (data[46] >> 4) & 0b11
|
||||||
self_info["telemetry_mode_loc"] = (data[46] >> 2) & 0b11
|
self_info["telemetry_mode_loc"] = (data[46] >> 2) & 0b11
|
||||||
|
|||||||
Reference in New Issue
Block a user