From 6a35c6767bc6d5865d31024786d6e668f1a2e1a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Fri, 20 Oct 2023 14:43:56 +0200 Subject: [PATCH] fix communication with new board messages etc --- .../control/templates/control/mesh_node_detail.html | 2 +- src/c3nav/control/templates/control/mesh_nodes.html | 2 +- src/c3nav/mesh/baseformats.py | 7 +++---- src/c3nav/mesh/dataformats.py | 12 ++++++------ src/c3nav/mesh/messages.py | 6 +++--- 5 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/c3nav/control/templates/control/mesh_node_detail.html b/src/c3nav/control/templates/control/mesh_node_detail.html index 2484b5a9..2402991c 100644 --- a/src/c3nav/control/templates/control/mesh_node_detail.html +++ b/src/c3nav/control/templates/control/mesh_node_detail.html @@ -42,7 +42,7 @@

Hardware

- Board: {{ node.last_messages.CONFIG_BOARD.parsed.board.name }} + Board: {{ node.last_messages.CONFIG_BOARD.parsed.board_config.board.name }} (with {{ node.last_messages.CONFIG_HARDWARE.parsed.chip.name }} rev{{ node.last_messages.CONFIG_HARDWARE.parsed.revision_major }}.{{ node.last_messages.CONFIG_HARDWARE.parsed.revision_minor }}) {% if node.last_messages.CONFIG_BOARD.parsed.led %} diff --git a/src/c3nav/control/templates/control/mesh_nodes.html b/src/c3nav/control/templates/control/mesh_nodes.html index 3879451f..67a2f918 100644 --- a/src/c3nav/control/templates/control/mesh_nodes.html +++ b/src/c3nav/control/templates/control/mesh_nodes.html @@ -45,7 +45,7 @@ {{ node }} - {{ node.last_messages.CONFIG_BOARD.parsed.board.name }} + {{ node.last_messages.CONFIG_BOARD.parsed.board_config.board.name }} ({{ node.last_messages.CONFIG_HARDWARE.parsed.get_chip_display }} rev{{ node.last_messages.CONFIG_HARDWARE.parsed.revision_major }}.{{ node.last_messages.CONFIG_HARDWARE.parsed.revision_minor }}) diff --git a/src/c3nav/mesh/baseformats.py b/src/c3nav/mesh/baseformats.py index fe6c8715..638e18ae 100644 --- a/src/c3nav/mesh/baseformats.py +++ b/src/c3nav/mesh/baseformats.py @@ -86,8 +86,8 @@ class SimpleFormat(BaseFormat): class EnumFormat(SimpleFormat): - def __init__(self, as_hex=False): - super().__init__("B") + def __init__(self, fmt="B", *, as_hex=False): + super().__init__(fmt) self.as_hex = as_hex def set_field_type(self, field_type): @@ -210,12 +210,11 @@ class VarArrayFormat(BaseVarFormat): class VarStrFormat(BaseVarFormat): - def get_var_num(self): return 1 def encode(self, value: str) -> bytes: - return struct.pack(self.num_fmt, len(str)) + value.encode() + return struct.pack(self.num_fmt, len(value)) + value.encode() def decode(self, data: bytes) -> tuple[str, bytes]: num = struct.unpack(self.num_fmt, data[:self.num_size])[0] diff --git a/src/c3nav/mesh/dataformats.py b/src/c3nav/mesh/dataformats.py index 66f8ee17..6e428b8a 100644 --- a/src/c3nav/mesh/dataformats.py +++ b/src/c3nav/mesh/dataformats.py @@ -90,33 +90,33 @@ class BoardConfig(StructType, union_type_field="board"): @dataclass -class CustomBoardConfig(StructType, board=BoardType.CUSTOM): +class CustomBoardConfig(BoardConfig, board=BoardType.CUSTOM): uwb: UWBConfig = field(metadata={"as_definition": True}) led: LedConfig = field(metadata={"as_definition": True}) @dataclass -class DevkitMBoardConfig(StructType, board=BoardType.ESP32_C3_DEVKIT_M_1): +class DevkitMBoardConfig(BoardConfig, board=BoardType.ESP32_C3_DEVKIT_M_1): uwb: UWBConfig = field(metadata={"as_definition": True}) @dataclass -class Esp32SBoardConfig(StructType, board=BoardType.ESP32_C3_32S): +class Esp32SBoardConfig(BoardConfig, board=BoardType.ESP32_C3_32S): uwb: UWBConfig = field(metadata={"as_definition": True}) @dataclass -class UwbBoardConfig(StructType, board=BoardType.C3NAV_UWB_BOARD): +class UwbBoardConfig(BoardConfig, board=BoardType.C3NAV_UWB_BOARD): pass @dataclass -class LocationPCBRev0Dot1BoardConfig(StructType, board=BoardType.C3NAV_LOCATION_PCB_REV_0_1): +class LocationPCBRev0Dot1BoardConfig(BoardConfig, board=BoardType.C3NAV_LOCATION_PCB_REV_0_1): pass @dataclass -class LocationPCBRev0Dot2BoardConfig(StructType, board=BoardType.C3NAV_LOCATION_PCB_REV_0_2): +class LocationPCBRev0Dot2BoardConfig(BoardConfig, board=BoardType.C3NAV_LOCATION_PCB_REV_0_2): pass diff --git a/src/c3nav/mesh/messages.py b/src/c3nav/mesh/messages.py index 2e7de544..07154218 100644 --- a/src/c3nav/mesh/messages.py +++ b/src/c3nav/mesh/messages.py @@ -6,7 +6,7 @@ import channels from asgiref.sync import async_to_sync from c3nav.mesh.baseformats import (BoolFormat, FixedStrFormat, SimpleFormat, StructType, VarArrayFormat, VarStrFormat, - normalize_name) + normalize_name, EnumFormat) from c3nav.mesh.dataformats import (BoardConfig, FirmwareAppDescription, MacAddressesListFormat, MacAddressFormat, RangeItemType) from c3nav.mesh.utils import get_mesh_comm_group @@ -207,8 +207,8 @@ class ConfigDumpMessage(MeshMessage, msg_id=MeshMessageType.CONFIG_DUMP): @dataclass class ConfigHardwareMessage(MeshMessage, msg_id=MeshMessageType.CONFIG_HARDWARE): """ respond hardware/chip info """ - chip: int = field(metadata={ - "format": SimpleFormat('H'), + chip: ChipType = field(metadata={ + "format": EnumFormat("H"), "c_name": "chip_id", }) revision_major: int = field(metadata={"format": SimpleFormat('B')})