Andruav Messages Type

Warning

Message IDs are under constant updates. The authoritative source is always the code: de_common/de_databus/messages.hpp, which as of the 2026 protocol audit carries a doc comment above every message constant (direction, send rate, and drop/keep-latest guidance). This page is a curated, browsable rendering of that same header - if the two ever disagree, the header wins.

How to Read This Reference

Each entry below documents one message type as it is actually used in the current codebase (traced through sender + receiver code across all C++/ Python/Node.js modules and the React webclient), not just its original intent.

Direction:

WEB_TO_MODULE - GCS webclient sends it to an onboard module (a command). MODULE_TO_WEB - onboard module sends it to the GCS webclient (telemetry/status). BIDIRECTIONAL - used both ways, often request/response. MODULE_TO_MODULE - internal only, never reaches the webclient. DRONE_TO_DRONE - peer unit to peer unit, via the comm server or P2P mesh. DEAD/UNUSED - the constant is defined but no matching sender+receiver pair exists in the current codebase.

Rate:

How often the message is actually sent, for periodic/frequent messages: ON_DEMAND (one-shot, event/user-triggered) · LOW (interval ≥5s) · MEDIUM (~1-5s) · HIGH (~100-999ms) · REALTIME (streamed continuously, ≤100ms, or tied to frame rate).

Discard:

Guidance for a link-quality-aware sender - can this message be safely dropped or coalesced (keep-latest-only) when the connection is congested? YES - latest-value semantics, a newer message fully supersedes an older one. NO - must be delivered reliably (a command, a one-time event, a chunk in a reassembled payload, or a raw byte stream where loss corrupts state).

Messages marked DEAD/UNUSED are kept in this reference because the constant still exists in the header and may still appear in older client code - but nothing in the current codebase sends and receives a matching pair. Treat them as historical, not as something to build new integrations against.

Binary & Chunked Messages

Two distinct byte-layout mechanisms show up across the categories below - worth understanding once rather than re-deriving from each message’s field list.

Binary message anatomy - JSON header plus null terminator plus binary payload, and WayPoints' separate manual chunk format

Draft diagram - under review, see images/diagrams_2026/binary_message_anatomy_2026.txt for the intended content and known issues.

A binary-attachment message (IMG, SDR_SPECTRUM, TELNET_DATA) is a JSON text header, a null terminator, then raw binary bytes appended directly after. A manually-chunked message (WayPoints only) is a different mechanism entirely: each UDP packet carries its own small i field marking WAYPOINT_CHUNK (1) or WAYPOINT_LAST_CHUNK (999), with no per-chunk acknowledgment - do not confuse this with de_common’s own lower-level UDP chunking (2-byte chunk number + data, 0xFFFF = last chunk), which is a separate, transparent mechanism used by large single messages like UploadWayPoints.

Envelope & Routing (constants, not message types)

CMD_TYPE_INTERMODULE (“uv”) / CMD_TYPE_SYSTEM_MSG (“s”) — uv / s

Top-level command-type marker. uv sends a message from one module to another (e.g. emulate a GCS-originated command from inside a module). Anything else routes through the communicator as a normal message.

CMD_COMM_GROUP / CMD_COMM_INDIVIDUAL / CMD_COMM_SYSTEM — g / i / s

Routing type carried in field ty. GROUP broadcasts to a group (overrides individual); INDIVIDUAL targets one party_id (or a reserved name below); SYSTEM is handled by the comm server itself (task/account-level messages).

Reserved target names — _GCS_ / _AGN_ / _GD_ / _SYS_

_GCS_ = all GCS/web clients; _AGN_ = all agents/drones; _GD_ = all GCS and agents; _SYS_ = the comm server itself.

Andruav protocol envelope fields — gr, sd, tg, mt, ms, p, ty, GU, ew, ef, ls

Every message carries: gr group id, sd sender party id, tg target party id, mt message type (numeric, this reference), ms message command payload (JSON string), p permission bitmask, ty routing type (see above), GU module key. ew/ef/ls support the wait/fire event linking mechanism between chained mission actions.

Socket status codes — 1-8

FRESH(1), CONNECTING(2), DISCONNECTING(3), DISCONNECTED(4), CONNECTED(5), REGISTERED(6, connected + AddMe executed), UNREGISTERED(7), ERROR(8).

Module Registration & Internal RPC

TYPE_AndruavModule_ID — 9100

Direction:

MODULE_TO_MODULE

Rate:

ON_DEMAND - once on connect, plus on-demand resend

Discard:

NO - identity/registration, must be delivered

Module registers itself with the comm broker.

Fields: a module_id, b module_class, c module_messages filter list, d module_features [T,R], e module_key, s hardware_serial, t hardware_serial_type, v module_version, z resend flag — all REQUIRED

TYPE_AndruavModule_RemoteExecute — 9101

Direction:

MODULE_TO_MODULE

Rate:

ON_DEMAND

Discard:

NO - it is an RPC call, dropping it silently loses the request

Generic “call this action on another module” RPC envelope; sub-command carried in nested field “C” (often reuses a TYPE_AndruavMessage_* id as the verb).

Fields: C int REQUIRED - sub-command/action id

TYPE_AndruavModule_Location_Info — 9102

Direction:

MODULE_TO_MODULE

Rate:

HIGH - periodic ~300ms

Discard:

YES - latest position supersedes older ones

FCB broadcasts vehicle position to other onboard modules (e.g. camera geotagging).

Fields: la/ln int REQUIRED (lat/lon degE7), a int REQUIRED (abs alt mm), r int REQUIRED (rel alt mm), ha int OPTIONAL (horiz accuracy mm), y int OPTIONAL (yaw cdeg)

Core Telemetry & Unit State

TYPE_AndruavMessage_GPS — 1002

Direction:

MODULE_TO_WEB

Rate:

HIGH - periodic ~1000ms (1Hz)

Discard:

YES - only the latest fix matters

Reports a unit’s own GPS fix (sent by de_comm for a control-unit; the drone/FCB instead forwards raw MAVLink GPS under MAVLINK).

Fields: la/ln float REQUIRED; a/r float REQUIRED (abs/rel altitude, m); y int always 0 (unused); 3D int REQUIRED (3D fix indicator); SC int REQUIRED (satellite count); p int REQUIRED (provider, always 0); c/t/s OPTIONAL (accuracy/timestamp/ground speed)

TYPE_AndruavMessage_POWER — 1003

Direction:

DEAD/UNUSED

Defined but never constructed or parsed anywhere. Real battery telemetry is forwarded as raw MAVLink BATTERY_STATUS under TYPE_AndruavMessage_MAVLINK.

TYPE_AndruavMessage_ID — 1004

Direction:

BIDIRECTIONAL

Rate:

LOW - ~10s heartbeat, plus immediate resend on connect/restart/state change

Discard:

YES for the periodic refresh - but always resend after reconnect or a real state change

Unit identity/state heartbeat: vehicle type, flight mode, GPS mode, name, permissions, module list. Also answerable on-demand via RemoteExecute{C:1004}.

Fields: VT,GS,VR,B,FM,GM,C,UD,DS,p,dv,m1,T REQUIRED; TP OPTIONAL; b,FI,AP,FL,AR,SD,x,y,n,o,q,z,a OPTIONAL (present only when truthy/non-default)

TYPE_AndruavMessage_DroneReport — 1020

Direction:

MODULE_TO_WEB

Rate:

ON_DEMAND - fired only when a mission waypoint is reached

Discard:

NO - a discrete milestone event

Drone-side report event (currently only “mission waypoint reached”).

Fields: R int REQUIRED (report type, only Drone_Report_NAV_ItemReached=1 defined); P int REQUIRED (mission sequence number reached)

TYPE_AndruavMessage_Error — 1008

Direction:

MODULE_TO_WEB

Rate:

ON_DEMAND - fired only on error conditions, no timer

Discard:

NO - alerts must be delivered

Error/notification report (module lifecycle failures, permission denials, etc).

Fields: EN int REQUIRED (error number); IT int REQUIRED (reporting component); NT int REQUIRED (severity, see NOTIFICATION_TYPE_*); DS string REQUIRED (description)

TYPE_AndruavMessage_NAV_INFO — 1036

Direction:

DEAD/UNUSED as this JSON type

Roll/pitch/yaw/nav-error info. The webclient still has a legacy parser for it, but drone_engage_mavlink sends the equivalent as raw MAVLink (ATTITUDE/NAV_CONTROLLER_OUTPUT/VFR_HUD) under TYPE_AndruavMessage_MAVLINK instead.

TYPE_AndruavMessage_CommSignalsStatus — 1059

Direction:

MODULE_TO_WEB

Rate:

unknown from this repo, treat as MEDIUM/LOW

Discard:

YES - a signal-strength snapshot, latest reading is sufficient

Cellular signal status of a unit (sender module - likely an Android/mobile companion app - not present in this repo, only consumers found here).

Fields: r number REQUIRED (signal dBm); s number REQUIRED (network type code); op/c/ds OPTIONAL (operator, country ISO, data state)

TYPE_AndruavMessage_MODULE_HEALTH_STATUS — 6535

Direction:

MODULE_TO_WEB

Rate:

LOW - ~15-30s depending on module

Discard:

YES - the single best candidate in the whole protocol to drop entirely under a degraded link

Periodic self-reported module health/memory status (RSS, VmPeak, VmSwap, thread count, growth trend). Sent by CFacade_Base::sendMemoryStatus(); any C++ module linking de_common gets this for free, but sdr/telnet/tracking/camera_2025/mavlink do not currently call it.

Fields: a MODULE_HEALTH_ACTION_STATUS; rs/pk/sw MB (RSS/VmPeak/VmSwap); th thread count; sl MB/hour growth rate; tr trend (UP/DOWN/STABLE); hs status (OK/WARNING/CRITICAL); up seconds since monitor start

Flight Control Commands

TYPE_AndruavMessage_FlightControl — 1010

Direction:

WEB_TO_MODULE

Rate:

ON_DEMAND

Discard:

NO - flight-mode command, safety-relevant

Change flight mode.

Fields: F unsigned int REQUIRED - Andruav flight-mode code

TYPE_AndruavMessage_Arm — 1030

Direction:

WEB_TO_MODULE

Rate:

ON_DEMAND

Discard:

NO - critical safety command, permission-gated (PERMISSION_ALLOW_GCS_MODES_CONTROL)

Arm/disarm the vehicle.

Fields: A bool REQUIRED (arm/disarm); D bool OPTIONAL (force/emergency disarm)

TYPE_AndruavMessage_ChangeAltitude — 1031

Direction:

WEB_TO_MODULE

Rate:

ON_DEMAND

Discard:

NO

Change target altitude (routes to DE-Pilot or direct MAVLink).

Fields: a float/unsigned REQUIRED - target altitude (m)

TYPE_AndruavMessage_Land — 1032

Direction:

WEB_TO_MODULE

Rate:

ON_DEMAND

Discard:

NO - critical safety command

Land the vehicle.

Fields: none (empty payload)

TYPE_AndruavMessage_GuidedPoint — 1033

Direction:

WEB_TO_MODULE

Rate:

ON_DEMAND

Discard:

NO

“Fly here” - fly to a guided point. Module replies with DistinationLocation.

Fields: a/g float REQUIRED (lat/lon); l float/unsigned OPTIONAL (alt mm, keeps current relative alt if absent); x/y/z OPTIONAL (sent but not consumed)

TYPE_AndruavMessage_CirclePoint — 1034

Direction:

WEB_TO_MODULE (intended) - DEAD on receiving side

Rate:

ON_DEMAND (intended)

Discard:

NO (intended)

“Circle here” - webclient sends it (API_do_CircleHere) but drone_engage_mavlink has no case for it. Currently a no-op end-to-end.

Fields: a lat, g lon, l alt, r radius, t turns

TYPE_AndruavMessage_DoYAW — 1035

Direction:

WEB_TO_MODULE

Rate:

ON_DEMAND

Discard:

NO

Yaw the vehicle to a target angle/rate; routed to DE-Pilot or direct MAVLink.

Fields: A number REQUIRED (target_angle); R number REQUIRED (turn_rate); C bool REQUIRED (clockwise); L bool REQUIRED (relative)

TYPE_AndruavMessage_DistinationLocation — 1037

Direction:

MODULE_TO_WEB

Rate:

ON_DEMAND - one-shot echo

Discard:

YES - purely informational echo of the just-sent command

Confirms the target of a GuidedPoint/CirclePoint after processing.

Fields: P int REQUIRED (target_type/DESTINATION_* marker); T/O/A float REQUIRED (lat/lon/alt)

TYPE_AndruavMessage_ChangeSpeed — 1040

Direction:

WEB_TO_MODULE

Rate:

ON_DEMAND

Discard:

NO

Change target speed.

Fields: a float/unsigned REQUIRED (speed); b bool REQUIRED (is_ground_speed); c float/int REQUIRED (throttle); d bool REQUIRED (is_relative)

TYPE_AndruavMessage_SET_HOME_LOCATION — 1048

Direction:

WEB_TO_MODULE

Rate:

ON_DEMAND

Discard:

NO

Set the home location.

Fields: T/O float REQUIRED (lat/lon); A float REQUIRED (alt; falls back to current FCB home alt if 0)

TYPE_AndruavMessage_HomeLocation — 1022

Direction:

BIDIRECTIONAL

Rate:

ON_DEMAND

Discard:

YES - idempotent/re-derivable, safe to drop under a congested link

Home position: pushed on FCB update, and as reply to an explicit request.

Fields: T/O/A float REQUIRED (lat/lon/alt)

TYPE_AndruavMessage_RemoteControlSettings — 1047

Direction:

WEB_TO_MODULE

Rate:

ON_DEMAND

Discard:

NO - a mode-change command

Engage/release RC input mode (gamepad session start/stop), not a per-frame stream itself.

Fields: b unsigned int REQUIRED - RC_SUB_ACTION (0 RELEASED, 1 CENTER_CHANNELS, 2 FREEZE_CHANNELS, 4 JOYSTICK_CHANNELS, 8 JOYSTICK_CHANNELS_GUIDED)

TYPE_AndruavMessage_RemoteControl2 — 1052

Direction:

WEB_TO_MODULE

Rate:

REALTIME - streamed every 250ms while gamepad engaged

Discard:

YES - the canonical “safe to drop under a bad link” message in this protocol

Continuous joystick/gamepad axis stream while engaged (RC channel values).

Fields: R/T/A/E unsigned REQUIRED (Rudder/Throttle/Aileron/Elevator, [0,1000]); w/x/y/z int OPTIONAL (Aux 1-4; -999 = release channel)

TYPE_AndruavMessage_ServoChannel — 6001

Direction:

WEB_TO_MODULE

Rate:

ON_DEMAND

Discard:

NO - permission-gated (PERMISSION_ALLOW_GCS_MODES_SERVOS)

Sets a servo channel value from the webclient’s manual servo dialog and gamepad handlers. Despite the legacy “OBSOLETE” naming, this is ACTIVELY USED.

Fields: n int REQUIRED (servo channel); v int REQUIRED (servo value, 0->1000, 9999->2000 special-cased)

TYPE_AndruavMessage_DEPilot_Control — 1081

Direction:

WEB_TO_MODULE

Rate:

ON_DEMAND

Discard:

NO - permission-gated (PERMISSION_ALLOW_GCS_MODES_CONTROL) flight-behavior command

Engage DE-Pilot autonomous control (stabilization/altitude/tracking/yaw).

Fields: e bool OPTIONAL (enable); m int OPTIONAL (DEPILOT_OP_* mode); q bool OPTIONAL (enqueue vs immediate); d int(ms) OPTIONAL (duration); l float(m) OPTIONAL (target altitude); y float(deg) OPTIONAL (target yaw)

RemoteExecute Envelope & Sub-Commands

RemoteExecute request/response idiom - WebClient sends RemoteExecute with C equal to a target message type, module replies with a message of that same type

Draft diagram - under review, see images/diagrams_2026/remoteexecute_pattern_2026.txt for the intended content and known issues.

TYPE_AndruavMessage_RemoteExecute — 1005

Direction:

BIDIRECTIONAL - mostly WEB_TO_MODULE, also MODULE_TO_MODULE

Rate:

ON_DEMAND

Discard:

NO - it is a command/request envelope, not a state snapshot

Execute a remote command on another unit. “C” can be a command id below 1000 (RemoteCommand_*) or equal to another TYPE_AndruavMessage_* id, in which case the target replies with that same message type (e.g. RemoteExecute(TYPE_AndruavMessage_ID) == “send me your ID”).

Fields: C int REQUIRED (target command id); Act OPTIONAL (context-dependent activate flag); other fields vary by C

RemoteCommand_* (sub-commands, carried in RemoteExecute’s “C” field) — 500-508, 105-118

Direction:

WEB_TO_MODULE unless noted

Rate:

ON_DEMAND

Discard:

NO (one-shot commands)

GET_WAY_POINTS(500, DEAD - no receiving case today), RELOAD_WAY_POINTS_FROM_FCB(501), CLEAR_WAY_POINTS(502, permission-gated), CLEAR_FENCE_DATA(503, permission-gated), SET_START_MISSION_ITEM(504), REQUEST_PARA_LIST(505), SET_UDPPROXY_CLIENT_PORT(506, permission-gated), MISSION_COUNT(507), MISSION_CURRENT(508, shares handler with 507) — mission/waypoint sub-commands.

Camera sub-commands: ROTATECAM(105), TELEMETRYCTRL(108, permission-gated), STREAMVIDEO(110, DEAD-ish), RECORDVIDEO(111), STREAMVIDEORESUME(112, DEAD), SWITCHCAM(114, DEAD in practice), CONNECT_FCB(118, no-op stub).

Camera & Video

TYPE_AndruavMessage_IMG — 1006

Direction:

MODULE_TO_WEB

Rate:

ON_DEMAND - one per captured image, can burst

Discard:

NO - each image is unique payload data

Captured still image (binary message: JSON header + raw image bytes).

Fields: prv OPTIONAL (“gps” or absent); lat/lng/alt float REQUIRED (0 if no fix); tim int REQUIRED; trailing binary image bytes REQUIRED (may be zero-length on failure); des/spd/ber/acc OPTIONAL, reserved

TYPE_AndruavMessage_CameraList — 1012

Direction:

MODULE_TO_WEB

Rate:

ON_DEMAND - event-triggered, plus reply to request

Discard:

NO - reasonably low frequency, treat as authoritative state

List of cameras available on a unit (capabilities, recording state).

Fields: T array REQUIRED, each {v,ln,id,active,r,p,s,a}; R bool REQUIRED (true only when replying to a request)

TYPE_AndruavMessage_Signaling — 1021

Direction:

BIDIRECTIONAL

Rate:

ON_DEMAND - one per signaling event

Discard:

NO - SDP/ICE loss breaks call setup

WebRTC signaling (SDP offer/answer, ICE candidates, hangup) for camera streaming.

Fields: w object REQUIRED - {packet, number (target party id), channel}; webclient falls back to raw payload if w absent

TYPE_AndruavMessage_Ctrl_Cameras — 1041

Direction:

WEB_TO_MODULE

Rate:

ON_DEMAND

Discard:

NO

Trigger still-image capture (a bounded burst, not continuous video - video streams over WebRTC). Module replies with CameraList.

Fields: a string REQUIRED (channel, “”=first available); b number REQUIRED (image count); c number REQUIRED (ms between shots); d OPTIONAL (not consumed); e OPTIONAL (0/1: low-res vs full-res)

TYPE_AndruavMessage_CameraZoom — 1049

Direction:

WEB_TO_MODULE (intended) - DEAD/UNUSED end-to-end

Webclient sends it but drone_engage_camera_2025 does not subscribe to it - no handler.

TYPE_AndruavMessage_CameraSwitch — 1050

Direction:

WEB_TO_MODULE (intended) - DEAD/UNUSED end-to-end

Webclient sends it (API_SwitchCamera) but camera module has no handler. Actual camera-switch UI goes through RemoteCommand_SWITCHCAM(114) instead, which is itself dead.

TYPE_AndruavMessage_CameraFlash — 1051

Direction:

WEB_TO_MODULE (intended) - DEAD/UNUSED on this module today

Webclient sends it (legacy/mobile Andruav support) but camera module has no handler.

Geofence & Mission

TYPE_AndruavMessage_GeoFence — 1023

Direction:

BIDIRECTIONAL

Rate:

ON_DEMAND

Discard:

NO - a request/response pair, must be delivered

Request/response of geofence list. Web requests via RemoteExecute{C:1023}; module replies directly.

Fields: fn string OPTIONAL - fence-name filter; if absent, all fences of the party are sent back one by one

TYPE_AndruavMessage_ExternalGeoFence — 1024

Direction:

BIDIRECTIONAL/system-mediated

Rate:

ON_DEMAND - triggered when tasks/fences are (re)loaded

Discard:

NO - must be applied to be effective, not a snapshot

Applies a fence definition pushed from storage/system (“_sys_”) or saved by the web.

Fields: fence-definition object per CGeoFenceFactory schema; “n” string REQUIRED (fence name)

TYPE_AndruavMessage_GEOFenceHit — 1025

Direction:

MODULE_TO_WEB

Rate:

MEDIUM - event-driven, can repeat while near a boundary

Discard:

YES - only the latest in/out-zone state matters

Fired whenever geofence proximity/in-zone status changes.

Fields: n string REQUIRED (fence name); z bool REQUIRED (in_zone); d number OPTIONAL (distance); o bool/legacy-int OPTIONAL (should_keep_outside)

TYPE_AndruavMessage_GeoFenceAttachStatus — 1029

Direction:

BIDIRECTIONAL

Rate:

ON_DEMAND

Discard:

NO

Whether a fence is currently attached to the vehicle.

Fields: request: fn string OPTIONAL; response: n string REQUIRED (fence name), a bool REQUIRED (isAttachedToFence)

TYPE_AndruavMessage_WayPoints — 1027

Direction:

MODULE_TO_WEB

Rate:

ON_DEMAND - one-shot burst of several UDP packets

Discard:

NO - losing ONE chunk corrupts the whole list (no per-chunk retransmission)

Mission waypoint list, sent as a manually-chunked burst (max 20 items/chunk, no per-chunk ack).

Fields: n int REQUIRED (item count); i int REQUIRED (WAYPOINT_CHUNK/LAST_CHUNK/NO_CHUNK marker); “0”..”n-1” object REQUIRED per item (t,s,a,g,l,h,y,…)

TYPE_AndruavMessage_UploadWayPoints — 1046

Direction:

WEB_TO_MODULE

Rate:

ON_DEMAND

Discard:

NO - loss corrupts the uploaded mission

Upload a full mission (legacy serialized text format; also carries fences). Relies on de_common’s own UDP-layer chunking.

Fields: a string REQUIRED - serialized mission-plan text

TYPE_AndruavMessage_Upload_DE_Mission — 1075

Direction:

WEB_TO_MODULE

Rate:

ON_DEMAND

Discard:

NO - loss corrupts the mission

Upload DroneEngage mission file (current format).

Fields: j string REQUIRED - serialized DE mission JSON; e bool OPTIONAL (erase existing fences/mission first)

TYPE_AndruavMessage_Mission_Item_Sequence — 6518

Direction:

MODULE_TO_MODULE - internal only, never reaches the webclient

Rate:

ON_DEMAND - once per waypoint reached

Discard:

NO - drives mission-attached-command triggering

Fires once per mission-item transition during mission execution.

Fields: s string REQUIRED - event/mission-item sequence ID

Swarm

TYPE_AndruavMessage_FollowHim_Request — 1054

Direction:

BIDIRECTIONAL - WEB_TO_MODULE and DRONE_TO_DRONE

Rate:

ON_DEMAND

Discard:

NO - state-changing swarm membership request

Tell a drone that another drone is in its team (a follower). Can be sent from GCS or another drone; the receiver should not assume it is a follower, only forward the request to the leader.

Fields: a int REQUIRED for FOLLOW/CHANGE_FORMATION (follower index, -1=any); b string OPTIONAL (leader party id); c string REQUIRED (target/slave party id); d int OPTIONAL (formation id); f int REQUIRED (SWARM_FOLLOW/UNFOLLOW/CHANGE_FORMATION); h/v int OPTIONAL

TYPE_AndruavMessage_FollowMe_Guided — 1055

Direction:

DEAD/UNUSED in this codebase

Intended: leader guides a follower to a destination point. Registered in de_mavlink’s MESSAGE_FILTER but no handler exists. Actual leader->follower guidance flows through SWARM_MAVLINK instead.

TYPE_AndruavMessage_Make_Swarm — 1056

Direction:

WEB_TO_MODULE

Rate:

ON_DEMAND

Discard:

NO

Instruct a drone to be a leader with a swarm formation. FORMATION_SERB_NO_SWARM demotes the leader.

Fields: a int REQUIRED (formation id); b string REQUIRED (must equal own party_id); h/v int OPTIONAL (min spacing)

TYPE_AndruavMessage_SwarmReport — 1057

Direction:

DEAD/UNUSED

Defined but never constructed or parsed anywhere.

TYPE_AndruavMessage_UpdateSwarm — 1058

Direction:

DRONE_TO_DRONE - follower -> leader, via comm server

Rate:

ON_DEMAND

Discard:

NO - swarm membership state change

Add or remove a slave drone in a swarm at a given index (leader resolves index conflicts).

Fields: a int REQUIRED (SWARM_ADD/DELETE); c string REQUIRED (leader party id); d string REQUIRED (follower party id); b (index, documented but unused)

TYPE_AndruavMessage_SWARM_MAVLINK — 6503

Direction:

MODULE_TO_MODULE (DRONE_TO_DRONE)

Rate:

HIGH - periodic ~1000ms

Discard:

YES - latest leader position/attitude supersedes older ones

Leader shares its position/attitude with swarm followers (packed MAVLink GLOBAL_POSITION_INT + ATTITUDE).

Tracking & AI Recognition

TYPE_AndruavMessage_TrackingTarget_ACTION — 1042

Direction:

WEB_TO_MODULE

Rate:

ON_DEMAND - only on user click/drag

Discard:

NO - a discrete user action

User selects/clears a tracking point or region on the video.

Fields: a int REQUIRED (0 POINT,1 REGION,2 STOP,3 PAUSE,4 ENABLE,5 QUERY_CONFIG,6/7 AI_DRIVER on/off); b/c/r/d/e float, action-dependent

TYPE_AndruavMessage_TrackingTargetLocation — 1043

Direction:

MODULE_TO_MODULE - not normally relayed to the web client

Rate:

REALTIME - ~2Hz (tracker) / ~10Hz (IR camera)

Discard:

YES - latest offset supersedes older ones

Streamed tracked-target position deltas feeding DE-Pilot’s autonomous camera-pointing. IR camera module reuses this same ID for unrelated hot/cold thermal point reporting.

Fields: tracker: t array {x,y} normalized -0.5..0.5; IR camera (same id): t array {type:”hot”|”cold”, x, y, temp}

TYPE_AndruavMessage_TrackingTarget_STATUS — 1044

Direction:

MODULE_TO_WEB - force-broadcast by the comm broker regardless of internal_message flag

Rate:

ON_DEMAND - state transitions only

Discard:

NO - the one tracking message the broker force-broadcasts

Tracking state transition (lost/detected/enabled/stopped/config).

Fields: a int REQUIRED (0 LOST,1 DETECTED,2 ENABLED,3 STOPPED,4 CONFIG); b uint8 REQUIRED (camera direction); c bool REQUIRED (ai_priority)

TYPE_AndruavMessage_AI_Recognition_ACTION — 1076

Direction:

WEB_TO_MODULE

Rate:

ON_DEMAND

Discard:

NO

Select/search/enable/disable AI recognition targets, or request the class list.

Fields: a int REQUIRED (0 POINT[unused],1 SEARCH,2 DISABLE,3 ENABLE,4 CLASS_LIST); i array of int REQUIRED for a=1

TYPE_AndruavMessage_AI_Recognition_STATUS — 1077

Direction:

MODULE_TO_WEB

Rate:

ON_DEMAND - state transitions only

Discard:

NO

AI recognition state transition, or the detectable class list.

Fields: a int REQUIRED (0 LOST,1 DETECTED,2 ENABLED,3 DISABLED,4 CLASS_LIST); c array of string REQUIRED only when a=4

TYPE_AndruavMessage_AI_Recognition_TargetLocation — 1078

Direction:

MODULE_TO_MODULE - internal_message=true, never reaches the comm server/web

Rate:

REALTIME - essentially every inference frame

Discard:

YES - ideal candidate to drop under congestion

Best-detected-object bounding box, feeding de_tracker’s AI-assisted driver.

Fields: b object REQUIRED {x,y,w,h} normalized; conf float OPTIONAL; t array DEBUG-ONLY (never sent in release builds)

TYPE_AndruavMessage_IR_CAMERA_MI48_ACTION — 6528

Direction:

DEAD/UNIMPLEMENTED

Parser case exists but body is an empty switch (“TODO: LATER”); no sender anywhere.

TYPE_AndruavMessage_IR_CAMERA_MI48_STATUS — 6529

Direction:

MODULE_TO_MODULE (intended), currently a no-op end-to-end

Rate:

ON_DEMAND (intended)

Sent on IR detection state changes, but the receiving parser case is an empty stub and nothing else parses it.

Fields: a int REQUIRED (reuses TrackingTarget_STATUS_* constants); b uint8 REQUIRED (camera direction)

P2P Mesh (ESP32 radio)

TYPE_AndruavMessage_P2P_ACTION — 6505

Direction:

BIDIRECTIONAL - WEB_TO_MODULE and MODULE_TO_MODULE

Rate:

ON_DEMAND

Discard:

NO - a mesh state-change command

P2P mesh control (restart/connect/scan/access to a MAC).

Fields: a int REQUIRED (P2P_ACTION_* code); b string REQUIRED for CONNECT_TO_MAC; p string OPTIONAL (wifi password); c int OPTIONAL (channel)

TYPE_AndruavMessage_P2P_STATUS — 6506

Direction:

DEAD/UNUSED

Both p2p and mavlink modules validate/parse this defensively but nothing ever constructs/sends it.

TYPE_AndruavMessage_P2P_InRange_BSSID — 6507

Direction:

MODULE_TO_WEB

Rate:

MEDIUM - ~10s or immediate on change

Discard:

YES - a scan snapshot, latest results supersede older ones

Detected mesh access points (BSSIDs) near this unit.

Fields: keyed by party_id; per entry: b bssid, p party id, s ssid, c channel, r rssi, t usec since last seen

TYPE_AndruavMessage_P2P_InRange_Node — 6508

Direction:

MODULE_TO_WEB

Rate:

MEDIUM - ~10s

Discard:

YES - a scan snapshot, latest results supersede older ones

Detected mesh peer nodes/pings near this unit.

Fields: keyed by party_id; per entry: m mac, p party id, c connected, t usec since last action

TYPE_AndruavMessage_P2P_INFO — 6517

Direction:

MODULE_TO_WEB

Rate:

MEDIUM - ~10s

Discard:

YES - a status snapshot, latest value wins

Own P2P mesh connection status of this unit.

Fields: c connection type; a1/a2 own/AP address; wc wifi channel; wp wifi password; pa parent node address; pc parent connected; f firmware version; lp expected parent mac; a/o/d driver/p2p connected/disabled

TYPE_AndruavMessage_Ping_Unit — 1073

Direction:

DRONE_TO_DRONE - P2P mesh only

Rate:

ON_DEMAND

Discard:

YES - a liveness probe, occasional loss is tolerable

Ping a unit to verify P2P mesh presence, or request/reply like TYPE_AndruavMessage_ID.

Fields: a string (sender party id, ping use); k 1=request ack (ID-like use)

SDR (Software Defined Radio)

TYPE_AndruavMessage_SDR_ACTION — 6514

Direction:

BIDIRECTIONAL

Rate:

ON_DEMAND per command/reply; TRIGGER is event-driven

Discard:

NO - configuration/commands and trigger alerts must be delivered

Generic SDR module message: connect/disconnect/set-config/read-data/pause-data (web->module) and SDR_INFO reply/device-list reply/trigger alert (module->web).

Fields: a int REQUIRED (SDR_ACTION_*); fc/g/r/i/t/l depend on action. Fixed 2026: field “t” (streaming interval, ms) was previously mis-consumed as whole seconds (1e9 instead of 1e6), making 1000ms wait ~16.7 minutes.

TYPE_AndruavMessage_SDR_REMOTE_EXECUTE — 6515

Direction:

WEB_TO_MODULE

Rate:

ON_DEMAND

Discard:

NO

Request SDR info or device list (wraps a sub-action inside SDR_ACTION’s namespace).

Fields: C int REQUIRED (always TYPE_AndruavMessage_SDR_ACTION); a int REQUIRED (SDR_ACTION_SDR_INFO or LIST_SDR_DEVICES)

TYPE_AndruavMessage_SDR_SPECTRUM — 6516

Direction:

MODULE_TO_WEB

Rate:

REALTIME - continuous while active, interval = SDR_ACTION’s “t” field

Discard:

YES - the definitive keep-latest message in the SDR module

Streamed FFT spectrum bars (binary: JSON header + float32 array).

Fields: fcm double REQUIRED (min frequency); fcst float REQUIRED (frequency step); tim uint64 REQUIRED; binary attachment REQUIRED (raw float array)

GPIO

TYPE_AndruavMessage_GPIO_ACTION — 6519

Direction:

WEB_TO_MODULE

Rate:

ON_DEMAND

Discard:

NO - a hardware-control command

Configure or write a GPIO pin.

Fields: i string OPTIONAL (target module_key); a int REQUIRED (PORT_CONFIG/PORT_WRITE, PORT_READ unimplemented); CONFIG: p pin, m mode, v/n OPTIONAL; WRITE: v REQUIRED, n/p lookup, d REQUIRED in PWM mode

TYPE_AndruavMessage_GPIO_STATUS — 6520

Direction:

MODULE_TO_WEB

Rate:

MEDIUM/LOW - internal tick 1000ms, sent to GCS every 10s, plus on-change

Discard:

YES for the periodic snapshot - on-change updates worth keeping but recoverable

GPIO pin status (full snapshot or a single targeted pin).

Fields: a int REQUIRED (always GPIO_ACTION_INFO); s array REQUIRED, each {i,p/b,m,t,d(if PWM),v,n(optional)}

TYPE_AndruavMessage_GPIO_REMOTE_EXECUTE — 6521

Direction:

WEB_TO_MODULE

Rate:

ON_DEMAND

Discard:

NO

Request current GPIO status (full or a specific pin).

Fields: a int REQUIRED (only GPIO_STATUS request handled); p int OPTIONAL (specific pin); i string OPTIONAL (module_key)

Sound / TTS

TYPE_AndruavMessage_SOUND_TEXT_TO_SPEECH — 6511

Direction:

WEB_TO_MODULE

Rate:

ON_DEMAND

Discard:

NO

Text-to-speech request.

Fields: t string REQUIRED (text); l string OPTIONAL (language); p/v OPTIONAL (pitch/volume)

TYPE_AndruavMessage_SOUND_PLAY_FILE — 6512

Direction:

WEB_TO_MODULE

Rate:

ON_DEMAND

Discard:

NO

Play a sound file.

Fields: f string REQUIRED (file path)

TYPE_AndruavMessage_SOUND_LIST — 6530

Direction:

MODULE_TO_WEB

Rate:

ON_DEMAND - startup, after config apply, or on request

Discard:

NO - low frequency, not a candidate for dropping

Sound library list (available TTS/sound files).

Fields: T array REQUIRED, each {n name, f file_path}; R bool REQUIRED (true when replying to a request)

Telnet / Remote Terminal

TYPE_AndruavMessage_TELNET_ACTION — 6531

Direction:

WEB_TO_MODULE

Rate:

ON_DEMAND - one-shot per user action

Discard:

NO - dropping “close” leaks a pty, dropping “open” silently fails a user action

Open/close/list/resize a remote shell session on a unit. The de_telnet module owns the pty lifecycle.

Fields: a int REQUIRED (TELNET_ACTION_*); i string REQUIRED for CLOSE/RESIZE; sh string OPTIONAL (OPEN); c/r int OPTIONAL default 80/24 (RESIZE)

TYPE_AndruavMessage_TELNET_STATUS — 6532

Direction:

MODULE_TO_WEB

Rate:

ON_DEMAND - one-shot per lifecycle transition

Discard:

NO - a lifecycle transition, must be delivered

Telnet session lifecycle status (opened/closed/list/error/resized).

Fields: a int REQUIRED (TELNET_STATUS_*); i string (session_id); e string OPTIONAL (error); ec int (exit code); c/r int (cols/rows); l array (session list)

TYPE_AndruavMessage_TELNET_DATA — 6533

Direction:

BIDIRECTIONAL

Rate:

REALTIME - continuous while a session is open

Discard:

NO - unlike telemetry, each message carries unique unrepeatable terminal bytes; do NOT keep-latest-only this

Raw terminal I/O byte stream: keystrokes (web->module) and pty output (module->web).

Fields: i string REQUIRED (session_id); a int (output direction only, TELNET_STATUS_DATA); input as binary attachment (preferred) or d string (fallback)

TYPE_AndruavMessage_TELNET_REMOTE_EXECUTE — 6534

Direction:

DEAD/UNUSED

Defined for possible future use; de_telnet’s handler is an explicit no-op stub.

Configuration Management

TYPE_AndruavMessage_CONFIG_ACTION — 6525

Direction:

WEB_TO_MODULE - handled generically by every C++ module via de_common

Rate:

ON_DEMAND

Discard:

NO - a config-management command

Restart/apply-config/fetch-template/fetch-config/shutdown/restart-hw.

Fields: a int REQUIRED (CONFIG_ACTION_*); b string OPTIONAL (target module_key, ignored if mismatched); c object REQUIRED only for APPLY_CONFIG

TYPE_AndruavMessage_CONFIG_STATUS — 6526

Direction:

MODULE_TO_WEB

Rate:

ON_DEMAND - reply to a fetch request

Discard:

NO - config content must arrive intact, not a state snapshot

Reply carrying a module’s config template or current config JSON.

Fields: a int REQUIRED (FETCH_CONFIG_TEMPLATE/FETCH_CONFIG); b object REQUIRED (template/config JSON); k string REQUIRED (module_key); R bool REQUIRED

TYPE_AndruavMessage_MAVLINK_EVENTS — 6527

Direction:

DEAD/UNUSED

Defined but never constructed or parsed anywhere, not even in the webclient parser.

Chat, Sync & Misc

TYPE_AndruavMessage_Sync_EventFire — 1061

Direction:

BIDIRECTIONAL - WEB_TO_MODULE, MODULE_TO_MODULE, and DRONE_TO_DRONE rebroadcast

Rate:

ON_DEMAND - event-driven (mission item triggers, GCS UI action)

Discard:

NO - an event trigger, dropping it means a mission/sync event never fires

Fire a droneengage sync/mission event.

Fields: d string REQUIRED (event id); m object OPTIONAL (event payload). Also carries c/s (sender module class/id) per some callers.

TYPE_AndruavMessage_SearchTargetList — 1062

Direction:

DEAD/UNUSED (experimental, disabled)

Webclient has request/response code for it but both are gated behind CONST_EXPERIMENTAL_FEATURES_ENABLED=false, and no module answers it.

TYPE_AndruavMessage_Unit_Name — 1072

Direction:

WEB_TO_MODULE

Rate:

ON_DEMAND

Discard:

NO - a rename command

Set unit name and description.

Fields: UN string REQUIRED (unit name); DS string REQUIRED (description); PR bool OPTIONAL (reset party_id flag)

TYPE_AndruavMessage_Prepherials — 1070

Direction:

DEAD/UNUSED

andruav_facade.cpp::API_sendPrepherals() is fully implemented but explicitly commented “NOT USED” and never called.

TYPE_AndruavMessage_LightTelemetry — 2022

Direction:

DEAD/UNUSED

Deprecated telemetry technology; no sender found. Superseded by TYPE_AndruavMessage_MAVLINK + UDP proxy.

TYPE_AndruavMessage_SensorsStatus — 1053

Direction:

DEAD/UNUSED

Defined but never constructed or parsed anywhere.

TYPE_AndruavMessage_ConfigCOM — 1038

Direction:

DEAD/UNUSED

Only a #define, no construction or parsing found anywhere (C++ or JS).

TYPE_AndruavMessage_ConfigFCB — 1039

Direction:

DEAD/UNUSED

Same situation as ConfigCOM - only a #define, no builder or parser found in mavlink, communication_pro, or webclient.

TYPE_AndruavMessage_DUMMY — 9999

Direction:

DEAD/UNUSED in production traffic

Test/debug only - used by de_databus client library examples to smoke-test the message bus.

System / Connection-Layer Messages (9001-9009)

TYPE_AndruavSystem_LoadTasks — 9001

Direction:

BIDIRECTIONAL

Rate:

ON_DEMAND - on connect / task-management UI action

Discard:

NO - a data-management request, not a snapshot

Load saved tasks/mission-and-fence set. Dual purpose: a top-level System WS command (web<->storage server) AND a reused inter-module RemoteExecute “C” action code.

TYPE_AndruavSystem_SaveTasks — 9002

Direction:

WEB_TO_MODULE-equivalent (web -> comm/storage server)

Rate:

ON_DEMAND

Discard:

NO

Save tasks (fences/missions) to storage.

TYPE_AndruavSystem_DeleteTasks — 9003

Direction:

WEB_TO_MODULE-equivalent

Rate:

ON_DEMAND

Discard:

NO

Delete saved tasks.

TYPE_AndruavSystem_DisableTasks — 9004

Direction:

WEB_TO_MODULE-equivalent

Rate:

ON_DEMAND

Discard:

NO

Disable saved tasks.

TYPE_AndruavSystem_Ping — 9005

Direction:

MODULE_TO_MODULE - module <-> cloud comm server link keepalive

Rate:

LOW - floor ~10s

Discard:

YES - a heartbeat, a dropped ping is recovered by the next one

Connection-layer heartbeat/keepalive, not part of the web UI protocol.

Fields: t number REQUIRED (timestamp usec)

TYPE_AndruavSystem_LogoutCommServer — 9006

Direction:

BIDIRECTIONAL

Rate:

ON_DEMAND

Discard:

NO - connection state, must be delivered

Deregister from the comm server (logout/disconnect).

TYPE_AndruavSystem_ConnectedCommServer — 9007

Direction:

MODULE_TO_MODULE-equivalent (comm server -> connecting module/web)

Rate:

ON_DEMAND - once per handshake

Discard:

NO - connection state

Comm server’s registration acknowledgment.

TYPE_AndruavSystem_UDPProxy — 9008

Direction:

MODULE_TO_MODULE (mavlink <-> comm server)

Rate:

ON_DEMAND

Discard:

NO - a one-time setup handshake

Request/confirm UDP proxy telemetry sockets.

Fields: en bool REQUIRED; socket1/socket2 object REQUIRED, each {address, port}

TYPE_AndruavSystem_LocalServer — 9009

Direction:

DEAD/UNUSED

Only appears in de_databus/nodejs/messages.js; not to be confused with the actively-used LocalServer_ACTION/STATUS (6522-6524).

Constants Reference (Selected)

Compact reference for enum-style constants referenced by the fields above. Not exhaustive - see messages.hpp for the complete list.

Group

Values

GCS Permissions (bitmask, field `p`)

ALLOW_GCS=0x1, ALLOW_UNIT=0x10, ALLOW_GCS_WP_CONTROL=0x100, ALLOW_GCS_MODES_CONTROL=0x200, ALLOW_GCS_MODES_SERVOS=0x400, ALLOW_GCS_FULL_CONTROL=0xf00, ALLOW_GCS_VIDEO=0xf000, ALLOW_SWARM=0xf0000

Notification/Error Severity

EMERGENCY=0, ALERT=1, CRITICAL=2, ERROR=3, WARNING=4, NOTICE=5, INFO=6, DEBUG=7 (mirrors MAV_SEVERITY_*)

GPS Mode

AUTO=0, EXTERNAL=1 (mobile/non-board GPS), FCB=2

Waypoint Chunk Markers

NO_CHUNK=0, CHUNK=1, LAST_CHUNK=999

Fence Actions

SOFT=0, RTL=2, LAND=12, LOITER=10, BRAKE=17, SMART_RTL=21

Swarm Actions

UpdateSwarm: ADD=1, DELETE=2. FollowHim_Request: FOLLOW=1, UNFOLLOW=2, CHANGE_FORMATION=3

Swarm Formation (TASHKEEL_SERB_*)

NO_SWARM=0, THREAD=1, VECTOR=2, VECTOR_180=3

DistinationLocation Type

GUIDED_POINT=0, SWARM_MY_LOCATION=1

Reserved Special Names

_any_, _generic_ (all receivers), _drone_ (vehicle receivers), _gcs_ (GCS receivers)

Tracking Camera Direction

NONE=0, FRONT=1, BACK=2, DOWN=3, UP=4

Custom/User Message IDs

80000-90000 (TYPE_AndruavMessage_USER_RANGE_START/END) reserved for project-specific extensions, outside the ranges used above

Reserved but unimplemented

A commented-out Sonar_Info/Action/RemoteExecute block (13001-13003) exists in the header as a placeholder for a future sonar module - not a real message type today

See Also