1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2026-03-30 19:55:52 -04:00
sdrangel/modemmeshtastic

Meshtastic port payload reference

This note summarizes Meshtastic port names used by SDRangel packet decoding and what payload kind to expect.

Scope:

  • Port names and IDs come from the local map in meshtasticpacket.cpp (kPortMap).
  • Payload types are practical expectations based on Meshtastic app semantics.
  • SDRangel currently does generic data decode only (header + protobuf envelope fields + raw payload), not per-port protobuf decoding.

How to interpret payload display in SDRangel

  • Text is shown only when payload bytes look like valid UTF-8.
  • Otherwise payload is shown as hex.
  • For most ports (POSITION, NODEINFO, TELEMETRY, ROUTING, etc.), payload is protobuf/binary, so hex is the normal representation.
  • Seeing a mix of readable text and binary garbage (for example NODEINFO_APP showing the node name) is normal: protobuf stores string fields as raw UTF-8 bytes inline in the binary stream. The readable parts are string field values; the surrounding bytes are protobuf field tags (varints), numeric IDs, and other binary-encoded fields.

Port list (current SDRangel map)

Port name ID Expected payload kind Typical content SDRangel decode level
UNKNOWN_APP 0 binary/unknown unspecified envelope + raw payload
TEXT / TEXT_MESSAGE_APP 1 UTF-8 text plain chat text envelope + text/hex payload
REMOTE_HARDWARE_APP 2 protobuf/binary remote hardware control messages envelope + raw payload
POSITION_APP 3 protobuf/binary GPS position fields envelope + raw payload
NODEINFO_APP 4 protobuf/binary node metadata / identity (long name, short name, hardware model, node ID) envelope + raw payload. Node name strings appear in clear because protobuf stores string fields as raw UTF-8 bytes; surrounding bytes are binary (field tags, varint IDs, enums).
ROUTING_APP 5 protobuf/binary routing/control data envelope + raw payload
ADMIN_APP 6 protobuf/binary admin/config operations envelope + raw payload
TEXT_MESSAGE_COMPRESSED_APP 7 compressed/binary compressed text payload envelope + raw payload
WAYPOINT_APP 8 protobuf/binary waypoint structures envelope + raw payload
AUDIO_APP 9 binary encoded audio frames envelope + raw payload
DETECTION_SENSOR_APP 10 protobuf/binary sensor detection events envelope + raw payload
ALERT_APP 11 protobuf/binary alert/notification message envelope + raw payload
KEY_VERIFICATION_APP 12 protobuf/binary key verification/signaling envelope + raw payload
REPLY_APP 32 protobuf/binary reply wrapper/ack data envelope + raw payload
IP_TUNNEL_APP 33 binary tunneled IP packet bytes envelope + raw payload
PAXCOUNTER_APP 34 protobuf/binary pax counter telemetry envelope + raw payload
STORE_FORWARD_PLUSPLUS_APP 35 protobuf/binary store-and-forward control/data envelope + raw payload
NODE_STATUS_APP 36 protobuf/binary node status information envelope + raw payload
SERIAL_APP 64 binary serial tunnel bytes envelope + raw payload
STORE_FORWARD_APP 65 protobuf/binary store-and-forward messages envelope + raw payload
RANGE_TEST_APP 66 protobuf/binary range test metadata/results envelope + raw payload
TELEMETRY_APP 67 protobuf/binary telemetry records envelope + raw payload
ZPS_APP 68 protobuf/binary ZPS-specific messages envelope + raw payload
SIMULATOR_APP 69 protobuf/binary simulator-generated messages envelope + raw payload
TRACEROUTE_APP 70 protobuf/binary traceroute path/hops envelope + raw payload
NEIGHBORINFO_APP 71 protobuf/binary neighbor table entries envelope + raw payload
ATAK_PLUGIN 72 protobuf/binary ATAK integration payloads envelope + raw payload

Notes

  • This is a practical operator reference, not a protocol authority.
  • For authoritative and exhaustive app payload schemas, use Meshtastic upstream protobuf definitions (for example portnums.proto and related message protos).
  • If SDRangel later adds per-port protobuf decoding, this table should be updated with "decoded fields available" per port.

Protocol availability and per-port decoding

The Meshtastic protocol is fully public and open-source (GPL v3, same license as SDRangel).

Key message types relevant to SDRangel decoding:

Proto message Port Fields of interest
Position POSITION_APP (3) latitude, longitude, altitude, time, speed, heading
User NODEINFO_APP (4) id (node ID string), long_name, short_name, hw_model, is_licensed
Routing ROUTING_APP (5) route success/failure error codes
Data (envelope, already decoded) portnum, payload, want_response, dest, source
Telemetry TELEMETRY_APP (67) device metrics (battery, voltage, utilization), environment (temp, humidity), air quality
RouteDiscovery TRACEROUTE_APP (70) route (node ID list), snr_towards, snr_back
NeighborInfo NEIGHBORINFO_APP (71) node_id, node_broadcast_interval_secs, neighbors list
Waypoint WAYPOINT_APP (8) id, latitude, longitude, expire, locked_to, name, description

Adding per-port decoding to SDRangel

Three practical approaches (in order of fit for this codebase):

  1. Extend the existing hand-parsermeshtasticpacket.cpp already contains a minimal protobuf varint/length-delimited parser for the Data envelope. The same approach can be extended per-port for common types (POSITION, NODEINFO, TELEMETRY) with no extra dependency. Best choice for portability and minimal build impact.

  2. nanopb — the C library used by Meshtastic firmware itself; tiny footprint, no external runtime, generates .pb.c/.pb.h from the upstream .proto files. Would require adding it to CMakeLists.txt as a dependency.

  3. Qt Protobuf (QProtobufSerializer) — available in Qt 6.5+. Adds a Qt version constraint that may conflict with Qt5 builds.