diff --git a/src/c3nav/control/templates/control/mesh_messages.html b/src/c3nav/control/templates/control/mesh_messages.html
index 27b99e84..19d3b867 100644
--- a/src/c3nav/control/templates/control/mesh_messages.html
+++ b/src/c3nav/control/templates/control/mesh_messages.html
@@ -34,17 +34,31 @@
{{ msg.src_node }} |
{{ msg.get_message_type_display }} |
- {% if msg.get_message_type_display == "CONFIG_HARDWARE" %}
- Chip: {{ msg.parsed.get_chip_display }} rev{{ msg.parsed.revision_major }}.{{ msg.parsed.revision_minor }}
- {% elif msg.get_message_type_display == "CONFIG_FIRMWARE" %}
+ {% if msg.message_type == "CONFIG_HARDWARE" %}
+ Chip: {{ msg.parsed.chip.pretty_name }} rev{{ msg.parsed.revision_major }}.{{ msg.parsed.revision_minor }}
+
+ {% elif msg.message_type == "CONFIG_BOARD" %}
+ Board: {{ msg.parsed.board_config.board.pretty_name }}
+
+ {% if msg.parsed.led %}
+
+ Status LED: {{ msg.parsed.led }}
+ {% endif %}
+
+ {% if msg.parsed.uwb %}
+
+ UWB: {{ msg.parsed.led }}
+ {% endif %}
+
+ {% elif msg.message_type == "CONFIG_FIRMWARE" %}
Firmware: {{ msg.parsed.app_desc.project_name }} {{ msg.parsed.app_desc.version }} (IDF {{ msg.parsed.app_desc.idf_version }})
Compile Date: {{ msg.parsed.app_desc.compile_date }} {{ msg.parsed.app_desc.compile_time }}
SHA256: {{ msg.parsed.app_desc.app_elf_sha256 }}
- {% elif msg.get_message_type_display == "CONFIG_UPLINK" %}
+ {% elif msg.message_type == "CONFIG_UPLINK" %}
Enabled: {{ msg.parsed.enabled }},
SSID: {{ msg.parsed.ssid }},
Channel: {{ msg.parsed.channel }}
@@ -53,13 +67,13 @@
UDP: {{ msg.parsed.udp }},
SSL: {{ msg.parsed.ssl }}
- {% elif msg.get_message_type_display == "CONFIG_LED" %}
+ {% elif msg.message_type == "CONFIG_LED" %}
LED config: {{ msg.parsed.led_config }}
- {% elif msg.get_message_type_display == "CONFIG_POSITION" %}
+ {% elif msg.message_type == "CONFIG_POSITION" %}
X={{ msg.parsed.x_pos }}, Y={{ msg.parsed.y_pos }}, Z={{ msg.parsed.z_pos }}
- {% elif msg.get_message_type_display == "MESH_ADD_DESTINATIONS" or msg.get_message_type_display == "MESH_REMOVE_DESTINATIONS" %}
+ {% elif msg.message_type == "MESH_ADD_DESTINATIONS" or msg.message_type == "MESH_REMOVE_DESTINATIONS" %}
adresses:
{% for address in msg.parsed.addresses %}
@@ -67,6 +81,14 @@
{% endfor %}
+ {% elif msg.message_type == "LOCATE_RANGE_RESULTS" %}
+ ranges:
+
+ {% for range in msg.parsed.ranges %}
+ - {{ range.address }} - {{ range.distance }}
+ {% endfor %}
+
+
{% else %}
{% for key, value in msg.data.items %}
{% if key != "src" and key != "dst" and key != "msg_type" %}
diff --git a/src/c3nav/mesh/baseformats.py b/src/c3nav/mesh/baseformats.py
index e30e7069..440ce86a 100644
--- a/src/c3nav/mesh/baseformats.py
+++ b/src/c3nav/mesh/baseformats.py
@@ -209,6 +209,16 @@ class VarArrayFormat(BaseVarFormat):
result.append(item)
return result, data
+ def fromjson(self, data):
+ return [
+ self.child_type.fromjson(item) for item in data
+ ]
+
+ def tojson(self, data):
+ return [
+ item.tojson(item) for item in data
+ ]
+
def get_c_parts(self):
pre, post = self.child_type.get_c_parts()
return super().get_num_c_code() + "\n" + pre, "[0]" + post
diff --git a/src/c3nav/mesh/forms.py b/src/c3nav/mesh/forms.py
index 5e0c1b08..f5db1c48 100644
--- a/src/c3nav/mesh/forms.py
+++ b/src/c3nav/mesh/forms.py
@@ -262,6 +262,10 @@ class ConfigPositionMessageForm(MeshMessageForm):
z_pos = forms.IntegerField(min_value=0, max_value=2 ** 16 - 1, label=_('Z'))
+class LocateRequestRangeMessageForm(MeshMessageForm):
+ msg_type = MeshMessageType.LOCATE_REQUEST_RANGE
+
+
class MeshNodeForm(forms.ModelForm):
class Meta:
model = MeshNode
diff --git a/src/c3nav/mesh/messages.py b/src/c3nav/mesh/messages.py
index 3a3be1f7..4ad5e8f5 100644
--- a/src/c3nav/mesh/messages.py
+++ b/src/c3nav/mesh/messages.py
@@ -340,4 +340,4 @@ class LocateRequestRangeMessage(MeshMessage, msg_type=MeshMessageType.LOCATE_REQ
@dataclass
class LocateRangeResults(MeshMessage, msg_type=MeshMessageType.LOCATE_RANGE_RESULTS):
""" reports distance to given nodes """
- ranges: dict[str, int] = field(metadata={"format": VarArrayFormat(RangeItemType)})
+ ranges: list[RangeItemType] = field(metadata={"format": VarArrayFormat(RangeItemType)})
|