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 @@
{{ 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')})
|