msg_id → msg_type
This commit is contained in:
parent
9bee0bf774
commit
bf1834cd63
6 changed files with 50 additions and 46 deletions
|
@ -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" %}
|
||||
<div class="mesh-msg-data mesh-msg-type-{{ key }}">
|
||||
<strong>{{ key }}</strong>: {{ value }}
|
||||
</div>
|
||||
|
|
|
@ -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"],
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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"]}
|
||||
|
||||
|
|
|
@ -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(),
|
||||
}
|
||||
|
|
|
@ -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((
|
||||
|
|
|
@ -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)})
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue