diff --git a/src/c3nav/control/templates/control/mesh_messages.html b/src/c3nav/control/templates/control/mesh_messages.html
index 640dc8cd..27b99e84 100644
--- a/src/c3nav/control/templates/control/mesh_messages.html
+++ b/src/c3nav/control/templates/control/mesh_messages.html
@@ -69,7 +69,7 @@
{% else %}
{% for key, value in msg.data.items %}
- {% if key != "src" and key != "dst" and key != "msg_id" %}
+ {% if key != "src" and key != "dst" and key != "msg_type" %}
{{ key }}: {{ value }}
diff --git a/src/c3nav/control/views/mesh.py b/src/c3nav/control/views/mesh.py
index b7d36131..76bbe5d9 100644
--- a/src/c3nav/control/views/mesh.py
+++ b/src/c3nav/control/views/mesh.py
@@ -169,7 +169,7 @@ class MeshMessageSendingView(ControlPanelMixin, TemplateView):
**data,
"node_name": node_names.get(data["msg_data"].get("address"), ""),
"recipients": [(address, node_names[address]) for address in data["recipients"]],
- "msg_type": MeshMessageType(data["msg_data"]["msg_id"]).name,
+ "msg_type": data["msg_data"]["msg_type"],
}
diff --git a/src/c3nav/mesh/consumers.py b/src/c3nav/mesh/consumers.py
index 9591268e..8a6b55fd 100644
--- a/src/c3nav/mesh/consumers.py
+++ b/src/c3nav/mesh/consumers.py
@@ -217,7 +217,7 @@ class MeshConsumer(WebsocketConsumer):
NodeMessage.objects.create(
uplink_node=self.uplink_node,
src_node=src_node,
- message_type=msg.msg_id,
+ message_type=msg.msg_type.name,
data=as_json,
)
@@ -325,7 +325,7 @@ class MeshUIConsumer(JsonWebsocketConsumer):
async_to_sync(self.channel_layer.group_add)("mesh_msg_sent", self.channel_name)
self.msg_sent_filter = {"sender": self.channel_name}
- if msg_to_send["msg_data"]["msg_id"] == MeshMessageType.MESH_ROUTE_REQUEST:
+ if msg_to_send["msg_data"]["msg_type"] == MeshMessageType.MESH_ROUTE_REQUEST.name:
async_to_sync(self.channel_layer.group_add)("mesh_msg_received", self.channel_name)
self.msg_received_filter = {"request_id": msg_to_send["msg_data"]["request_id"]}
diff --git a/src/c3nav/mesh/forms.py b/src/c3nav/mesh/forms.py
index 3fe5b874..5e0c1b08 100644
--- a/src/c3nav/mesh/forms.py
+++ b/src/c3nav/mesh/forms.py
@@ -72,7 +72,7 @@ class MeshMessageForm(forms.Form):
raise Exception('nope')
return {
- 'msg_id': self.msg_type,
+ 'msg_type': self.msg_type.name,
'src': MESH_ROOT_ADDRESS,
**self.get_cleaned_msg_data(),
}
diff --git a/src/c3nav/mesh/management/commands/generate_c_types.py b/src/c3nav/mesh/management/commands/generate_c_types.py
index 4fd9f73d..0b334b70 100644
--- a/src/c3nav/mesh/management/commands/generate_c_types.py
+++ b/src/c3nav/mesh/management/commands/generate_c_types.py
@@ -18,27 +18,27 @@ class Command(BaseCommand):
done_definitions = set()
ignore_names = set(field_.name for field_ in fields(MeshMessage))
- for msg_id, msg_type in MeshMessage.get_types().items():
- if msg_type.c_struct_name:
- if msg_type.c_struct_name in done_struct_names:
+ for msg_type, msg_class in MeshMessage.get_types().items():
+ if msg_class.c_struct_name:
+ if msg_class.c_struct_name in done_struct_names:
continue
- done_struct_names.add(msg_type.c_struct_name)
- msg_type = MeshMessage.c_structs[msg_type.c_struct_name]
+ done_struct_names.add(msg_class.c_struct_name)
+ msg_class = MeshMessage.c_structs[msg_class.c_struct_name]
- base_name = (msg_type.c_struct_name or normalize_name(
- getattr(msg_id, 'name', msg_type.__name__)
+ base_name = (msg_class.c_struct_name or normalize_name(
+ getattr(msg_type, 'name', msg_class.__name__)
))
name = "mesh_msg_%s_t" % base_name
- for definition_name, definition in msg_type.get_c_definitions().items():
+ for definition_name, definition in msg_class.get_c_definitions().items():
if definition_name not in done_definitions:
done_definitions.add(definition_name)
print(definition)
print()
- code = msg_type.get_c_code(name, ignore_fields=ignore_names, no_empty=True)
+ code = msg_class.get_c_code(name, ignore_fields=ignore_names, no_empty=True)
if code:
- size = msg_type.get_min_size(no_inherited_fields=True)
+ size = msg_class.get_min_size(no_inherited_fields=True)
struct_lines[base_name] = "%s %s;" % (name, base_name.replace('_announce', ''))
struct_sizes.append(size)
print(code)
@@ -46,7 +46,7 @@ class Command(BaseCommand):
(name, size))
print()
else:
- nodata.add(msg_type)
+ nodata.add(msg_class)
print("/** union between all message data structs */")
print("typedef union __packed {")
@@ -63,16 +63,16 @@ class Command(BaseCommand):
max_msg_type = max(MeshMessage.get_types().keys())
macro_data = []
for i in range(((max_msg_type//16)+1)*16):
- msg_type = MeshMessage.get_types().get(i, None)
- if msg_type:
- name = (msg_type.c_struct_name or normalize_name(
- getattr(msg_type.msg_id, 'name', msg_type.__name__)
+ msg_class = MeshMessage.get_types().get(i, None)
+ if msg_class:
+ name = (msg_class.c_struct_name or normalize_name(
+ getattr(msg_class.msg_type, 'name', msg_class.__name__)
))
macro_data.append((
- msg_type.get_c_enum_name()+',',
- ("nodata" if msg_type in nodata else name)+',',
- msg_type.get_var_num(),
- msg_type.__doc__.strip(),
+ msg_class.get_c_enum_name()+',',
+ ("nodata" if msg_class in nodata else name)+',',
+ msg_class.get_var_num(),
+ msg_class.__doc__.strip(),
))
else:
macro_data.append((
diff --git a/src/c3nav/mesh/messages.py b/src/c3nav/mesh/messages.py
index 2f73b81f..23069922 100644
--- a/src/c3nav/mesh/messages.py
+++ b/src/c3nav/mesh/messages.py
@@ -47,7 +47,11 @@ class MeshMessageType(IntEnum):
@property
def pretty_name(self):
- return self.name.replace('_', ' ').title()
+ name = self.name.replace('_', ' ').lower()
+ if name.startswith('config'):
+ name = name.removeprefix('config').strip()+' config'
+ name.replace('ota', 'OTA')
+ return name
M = TypeVar('M', bound='MeshMessage')
@@ -64,10 +68,10 @@ class ChipType(IntEnum):
@dataclass
-class MeshMessage(StructType, union_type_field="msg_id"):
+class MeshMessage(StructType, union_type_field="msg_type"):
dst: str = field(metadata={"format": MacAddressFormat()})
src: str = field(metadata={"format": MacAddressFormat()})
- msg_id: int = field(metadata={"format": SimpleFormat('B')}, init=False, repr=False)
+ msg_type: MeshMessageType = field(metadata={"format": EnumFormat('B')}, init=False, repr=False)
c_structs = {}
c_struct_name = None
@@ -106,7 +110,7 @@ class MeshMessage(StructType, union_type_field="msg_id"):
@dataclass
-class NoopMessage(MeshMessage, msg_id=MeshMessageType.NOOP):
+class NoopMessage(MeshMessage, msg_type=MeshMessageType.NOOP):
""" noop """
pass
@@ -122,25 +126,25 @@ class BaseEchoMessage(MeshMessage, c_struct_name="echo"):
@dataclass
-class EchoRequestMessage(BaseEchoMessage, msg_id=MeshMessageType.ECHO_REQUEST):
+class EchoRequestMessage(BaseEchoMessage, msg_type=MeshMessageType.ECHO_REQUEST):
""" repeat back string """
pass
@dataclass
-class EchoResponseMessage(BaseEchoMessage, msg_id=MeshMessageType.ECHO_RESPONSE):
+class EchoResponseMessage(BaseEchoMessage, msg_type=MeshMessageType.ECHO_RESPONSE):
""" repeat back string """
pass
@dataclass
-class MeshSigninMessage(MeshMessage, msg_id=MeshMessageType.MESH_SIGNIN):
+class MeshSigninMessage(MeshMessage, msg_type=MeshMessageType.MESH_SIGNIN):
""" node says hello to upstream node """
pass
@dataclass
-class MeshLayerAnnounceMessage(MeshMessage, msg_id=MeshMessageType.MESH_LAYER_ANNOUNCE):
+class MeshLayerAnnounceMessage(MeshMessage, msg_type=MeshMessageType.MESH_LAYER_ANNOUNCE):
""" upstream node announces layer number """
layer: int = field(metadata={
"format": SimpleFormat('B'),
@@ -159,19 +163,19 @@ class BaseDestinationsMessage(MeshMessage, c_struct_name="destinations"):
@dataclass
-class MeshAddDestinationsMessage(BaseDestinationsMessage, msg_id=MeshMessageType.MESH_ADD_DESTINATIONS):
+class MeshAddDestinationsMessage(BaseDestinationsMessage, msg_type=MeshMessageType.MESH_ADD_DESTINATIONS):
""" downstream node announces served destination """
pass
@dataclass
-class MeshRemoveDestinationsMessage(BaseDestinationsMessage, msg_id=MeshMessageType.MESH_REMOVE_DESTINATIONS):
+class MeshRemoveDestinationsMessage(BaseDestinationsMessage, msg_type=MeshMessageType.MESH_REMOVE_DESTINATIONS):
""" downstream node announces no longer served destination """
pass
@dataclass
-class MeshRouteRequestMessage(MeshMessage, msg_id=MeshMessageType.MESH_ROUTE_REQUEST):
+class MeshRouteRequestMessage(MeshMessage, msg_type=MeshMessageType.MESH_ROUTE_REQUEST):
""" request routing information for node """
request_id: int = field(metadata={"format": SimpleFormat('I')})
address: str = field(metadata={
@@ -181,7 +185,7 @@ class MeshRouteRequestMessage(MeshMessage, msg_id=MeshMessageType.MESH_ROUTE_REQ
@dataclass
-class MeshRouteResponseMessage(MeshMessage, msg_id=MeshMessageType.MESH_ROUTE_RESPONSE):
+class MeshRouteResponseMessage(MeshMessage, msg_type=MeshMessageType.MESH_ROUTE_RESPONSE):
""" reporting the routing table entry to the given address """
request_id: int = field(metadata={"format": SimpleFormat('I')})
route: str = field(metadata={
@@ -191,7 +195,7 @@ class MeshRouteResponseMessage(MeshMessage, msg_id=MeshMessageType.MESH_ROUTE_RE
@dataclass
-class MeshRouteTraceMessage(MeshMessage, msg_id=MeshMessageType.MESH_ROUTE_TRACE):
+class MeshRouteTraceMessage(MeshMessage, msg_type=MeshMessageType.MESH_ROUTE_TRACE):
""" special message, collects all hop adresses on its way """
request_id: int = field(metadata={"format": SimpleFormat('I')})
trace: list[str] = field(default_factory=list, metadata={
@@ -201,19 +205,19 @@ class MeshRouteTraceMessage(MeshMessage, msg_id=MeshMessageType.MESH_ROUTE_TRACE
@dataclass
-class MeshRoutingFailedMessage(MeshMessage, msg_id=MeshMessageType.MESH_ROUTING_FAILED):
+class MeshRoutingFailedMessage(MeshMessage, msg_type=MeshMessageType.MESH_ROUTING_FAILED):
""" TODO description"""
address: str = field(metadata={"format": MacAddressFormat()})
@dataclass
-class ConfigDumpMessage(MeshMessage, msg_id=MeshMessageType.CONFIG_DUMP):
+class ConfigDumpMessage(MeshMessage, msg_type=MeshMessageType.CONFIG_DUMP):
""" request for the node to dump its config """
pass
@dataclass
-class ConfigHardwareMessage(MeshMessage, msg_id=MeshMessageType.CONFIG_HARDWARE):
+class ConfigHardwareMessage(MeshMessage, msg_type=MeshMessageType.CONFIG_HARDWARE):
""" respond hardware/chip info """
chip: ChipType = field(metadata={
"format": EnumFormat("H"),
@@ -227,19 +231,19 @@ class ConfigHardwareMessage(MeshMessage, msg_id=MeshMessageType.CONFIG_HARDWARE)
@dataclass
-class ConfigBoardMessage(MeshMessage, msg_id=MeshMessageType.CONFIG_BOARD):
+class ConfigBoardMessage(MeshMessage, msg_type=MeshMessageType.CONFIG_BOARD):
""" set/respond board config """
board_config: BoardConfig = field(metadata={"c_embed": True, "json_embed": True})
@dataclass
-class ConfigFirmwareMessage(MeshMessage, msg_id=MeshMessageType.CONFIG_FIRMWARE):
+class ConfigFirmwareMessage(MeshMessage, msg_type=MeshMessageType.CONFIG_FIRMWARE):
""" respond firmware info """
app_desc: FirmwareAppDescription = field(metadata={'json_embed': True})
@dataclass
-class ConfigPositionMessage(MeshMessage, msg_id=MeshMessageType.CONFIG_POSITION):
+class ConfigPositionMessage(MeshMessage, msg_type=MeshMessageType.CONFIG_POSITION):
""" set/respond position config """
x_pos: int = field(metadata={"format": SimpleFormat('i')})
y_pos: int = field(metadata={"format": SimpleFormat('i')})
@@ -247,7 +251,7 @@ class ConfigPositionMessage(MeshMessage, msg_id=MeshMessageType.CONFIG_POSITION)
@dataclass
-class ConfigUplinkMessage(MeshMessage, msg_id=MeshMessageType.CONFIG_UPLINK):
+class ConfigUplinkMessage(MeshMessage, msg_type=MeshMessageType.CONFIG_UPLINK):
""" set/respond uplink config """
enabled: bool = field(metadata={"format": BoolFormat()})
ssid: str = field(metadata={"format": FixedStrFormat(32)})
@@ -260,12 +264,12 @@ class ConfigUplinkMessage(MeshMessage, msg_id=MeshMessageType.CONFIG_UPLINK):
@dataclass
-class LocateRequestRangeMessage(MeshMessage, msg_id=MeshMessageType.LOCATE_REQUEST_RANGE):
+class LocateRequestRangeMessage(MeshMessage, msg_type=MeshMessageType.LOCATE_REQUEST_RANGE):
""" request to report distance to all nearby nodes """
pass
@dataclass
-class LocateRangeResults(MeshMessage, msg_id=MeshMessageType.LOCATE_RANGE_RESULTS):
+class LocateRangeResults(MeshMessage, msg_type=MeshMessageType.LOCATE_RANGE_RESULTS):
""" reports distance to given nodes """
ranges: dict[str, int] = field(metadata={"format": VarArrayFormat(RangeItemType)})