/* Automatically generated nanopb header */
/* Generated by nanopb-0.4.9.1 */

#ifndef PB_MESHTASTIC_MESHTASTIC_ATAK_PB_H_INCLUDED
#define PB_MESHTASTIC_MESHTASTIC_ATAK_PB_H_INCLUDED
#include <pb.h>

#if PB_PROTO_HEADER_VERSION != 40
#error Regenerate this file with the current version of nanopb generator.
#endif

/* Enum definitions */
typedef enum _meshtastic_Team {
    /* Unspecifed */
    meshtastic_Team_Unspecifed_Color = 0,
    /* White */
    meshtastic_Team_White = 1,
    /* Yellow */
    meshtastic_Team_Yellow = 2,
    /* Orange */
    meshtastic_Team_Orange = 3,
    /* Magenta */
    meshtastic_Team_Magenta = 4,
    /* Red */
    meshtastic_Team_Red = 5,
    /* Maroon */
    meshtastic_Team_Maroon = 6,
    /* Purple */
    meshtastic_Team_Purple = 7,
    /* Dark Blue */
    meshtastic_Team_Dark_Blue = 8,
    /* Blue */
    meshtastic_Team_Blue = 9,
    /* Cyan */
    meshtastic_Team_Cyan = 10,
    /* Teal */
    meshtastic_Team_Teal = 11,
    /* Green */
    meshtastic_Team_Green = 12,
    /* Dark Green */
    meshtastic_Team_Dark_Green = 13,
    /* Brown */
    meshtastic_Team_Brown = 14
} meshtastic_Team;

/* Role of the group member */
typedef enum _meshtastic_MemberRole {
    /* Unspecifed */
    meshtastic_MemberRole_Unspecifed = 0,
    /* Team Member */
    meshtastic_MemberRole_TeamMember = 1,
    /* Team Lead */
    meshtastic_MemberRole_TeamLead = 2,
    /* Headquarters */
    meshtastic_MemberRole_HQ = 3,
    /* Airsoft enthusiast */
    meshtastic_MemberRole_Sniper = 4,
    /* Medic */
    meshtastic_MemberRole_Medic = 5,
    /* ForwardObserver */
    meshtastic_MemberRole_ForwardObserver = 6,
    /* Radio Telephone Operator */
    meshtastic_MemberRole_RTO = 7,
    /* Doggo */
    meshtastic_MemberRole_K9 = 8
} meshtastic_MemberRole;

/* CoT how field values.
 Represents how the coordinates were generated. */
typedef enum _meshtastic_CotHow {
    /* Unspecified */
    meshtastic_CotHow_CotHow_Unspecified = 0,
    /* Human entered */
    meshtastic_CotHow_CotHow_h_e = 1,
    /* Machine generated */
    meshtastic_CotHow_CotHow_m_g = 2,
    /* Human GPS/INS derived */
    meshtastic_CotHow_CotHow_h_g_i_g_o = 3,
    /* Machine relayed (imported from another system/gateway) */
    meshtastic_CotHow_CotHow_m_r = 4,
    /* Machine fused (corroborated from multiple sources) */
    meshtastic_CotHow_CotHow_m_f = 5,
    /* Machine predicted */
    meshtastic_CotHow_CotHow_m_p = 6,
    /* Machine simulated */
    meshtastic_CotHow_CotHow_m_s = 7
} meshtastic_CotHow;

/* Well-known CoT event types.
 When the type is known, use the enum value for efficient encoding.
 For unknown types, set cot_type_id to CotType_Other and populate cot_type_str. */
typedef enum _meshtastic_CotType {
    /* Unknown or unmapped type, use cot_type_str */
    meshtastic_CotType_CotType_Other = 0,
    /* a-f-G-U-C: Friendly ground unit combat */
    meshtastic_CotType_CotType_a_f_G_U_C = 1,
    /* a-f-G-U-C-I: Friendly ground unit combat infantry */
    meshtastic_CotType_CotType_a_f_G_U_C_I = 2,
    /* a-n-A-C-F: Neutral aircraft civilian fixed-wing */
    meshtastic_CotType_CotType_a_n_A_C_F = 3,
    /* a-n-A-C-H: Neutral aircraft civilian helicopter */
    meshtastic_CotType_CotType_a_n_A_C_H = 4,
    /* a-n-A-C: Neutral aircraft civilian */
    meshtastic_CotType_CotType_a_n_A_C = 5,
    /* a-f-A-M-H: Friendly aircraft military helicopter */
    meshtastic_CotType_CotType_a_f_A_M_H = 6,
    /* a-f-A-M: Friendly aircraft military */
    meshtastic_CotType_CotType_a_f_A_M = 7,
    /* a-f-A-M-F-F: Friendly aircraft military fixed-wing fighter */
    meshtastic_CotType_CotType_a_f_A_M_F_F = 8,
    /* a-f-A-M-H-A: Friendly aircraft military helicopter attack */
    meshtastic_CotType_CotType_a_f_A_M_H_A = 9,
    /* a-f-A-M-H-U-M: Friendly aircraft military helicopter utility medium */
    meshtastic_CotType_CotType_a_f_A_M_H_U_M = 10,
    /* a-h-A-M-F-F: Hostile aircraft military fixed-wing fighter */
    meshtastic_CotType_CotType_a_h_A_M_F_F = 11,
    /* a-h-A-M-H-A: Hostile aircraft military helicopter attack */
    meshtastic_CotType_CotType_a_h_A_M_H_A = 12,
    /* a-u-A-C: Unknown aircraft civilian */
    meshtastic_CotType_CotType_a_u_A_C = 13,
    /* t-x-d-d: Tasking delete/disconnect */
    meshtastic_CotType_CotType_t_x_d_d = 14,
    /* a-f-G-E-S-E: Friendly ground equipment sensor */
    meshtastic_CotType_CotType_a_f_G_E_S_E = 15,
    /* a-f-G-E-V-C: Friendly ground equipment vehicle */
    meshtastic_CotType_CotType_a_f_G_E_V_C = 16,
    /* a-f-S: Friendly sea */
    meshtastic_CotType_CotType_a_f_S = 17,
    /* a-f-A-M-F: Friendly aircraft military fixed-wing */
    meshtastic_CotType_CotType_a_f_A_M_F = 18,
    /* a-f-A-M-F-C-H: Friendly aircraft military fixed-wing cargo heavy */
    meshtastic_CotType_CotType_a_f_A_M_F_C_H = 19,
    /* a-f-A-M-F-U-L: Friendly aircraft military fixed-wing utility light */
    meshtastic_CotType_CotType_a_f_A_M_F_U_L = 20,
    /* a-f-A-M-F-L: Friendly aircraft military fixed-wing liaison */
    meshtastic_CotType_CotType_a_f_A_M_F_L = 21,
    /* a-f-A-M-F-P: Friendly aircraft military fixed-wing patrol */
    meshtastic_CotType_CotType_a_f_A_M_F_P = 22,
    /* a-f-A-C-H: Friendly aircraft civilian helicopter */
    meshtastic_CotType_CotType_a_f_A_C_H = 23,
    /* a-n-A-M-F-Q: Neutral aircraft military fixed-wing drone */
    meshtastic_CotType_CotType_a_n_A_M_F_Q = 24,
    /* b-t-f: GeoChat message */
    meshtastic_CotType_CotType_b_t_f = 25,
    /* b-r-f-h-c: CASEVAC/MEDEVAC report */
    meshtastic_CotType_CotType_b_r_f_h_c = 26,
    /* b-a-o-pan: Ring the bell / alert all */
    meshtastic_CotType_CotType_b_a_o_pan = 27,
    /* b-a-o-opn: Troops in contact */
    meshtastic_CotType_CotType_b_a_o_opn = 28,
    /* b-a-o-can: Cancel alert */
    meshtastic_CotType_CotType_b_a_o_can = 29,
    /* b-a-o-tbl: 911 alert */
    meshtastic_CotType_CotType_b_a_o_tbl = 30,
    /* b-a-g: Geofence breach alert */
    meshtastic_CotType_CotType_b_a_g = 31,
    /* a-f-G: Friendly ground (generic) */
    meshtastic_CotType_CotType_a_f_G = 32,
    /* a-f-G-U: Friendly ground unit (generic) */
    meshtastic_CotType_CotType_a_f_G_U = 33,
    /* a-h-G: Hostile ground (generic) */
    meshtastic_CotType_CotType_a_h_G = 34,
    /* a-u-G: Unknown ground (generic) */
    meshtastic_CotType_CotType_a_u_G = 35,
    /* a-n-G: Neutral ground (generic) */
    meshtastic_CotType_CotType_a_n_G = 36,
    /* b-m-r: Route */
    meshtastic_CotType_CotType_b_m_r = 37,
    /* b-m-p-w: Route waypoint */
    meshtastic_CotType_CotType_b_m_p_w = 38,
    /* b-m-p-s-p-i: Self-position marker */
    meshtastic_CotType_CotType_b_m_p_s_p_i = 39,
    /* u-d-f: Freeform shape (line/polygon) */
    meshtastic_CotType_CotType_u_d_f = 40,
    /* u-d-r: Rectangle */
    meshtastic_CotType_CotType_u_d_r = 41,
    /* u-d-c-c: Circle */
    meshtastic_CotType_CotType_u_d_c_c = 42,
    /* u-rb-a: Range/bearing line */
    meshtastic_CotType_CotType_u_rb_a = 43,
    /* a-h-A: Hostile aircraft (generic) */
    meshtastic_CotType_CotType_a_h_A = 44,
    /* a-u-A: Unknown aircraft (generic) */
    meshtastic_CotType_CotType_a_u_A = 45,
    /* a-f-A-M-H-Q: Friendly aircraft military helicopter observation */
    meshtastic_CotType_CotType_a_f_A_M_H_Q = 46,
    /* a-f-A-C-F: Friendly aircraft civilian fixed-wing */
    meshtastic_CotType_CotType_a_f_A_C_F = 47,
    /* a-f-A-C: Friendly aircraft civilian (generic) */
    meshtastic_CotType_CotType_a_f_A_C = 48,
    /* a-f-A-C-L: Friendly aircraft civilian lighter-than-air */
    meshtastic_CotType_CotType_a_f_A_C_L = 49,
    /* a-f-A: Friendly aircraft (generic) */
    meshtastic_CotType_CotType_a_f_A = 50,
    /* a-f-A-M-H-C: Friendly aircraft military helicopter cargo */
    meshtastic_CotType_CotType_a_f_A_M_H_C = 51,
    /* a-n-A-M-F-F: Neutral aircraft military fixed-wing fighter */
    meshtastic_CotType_CotType_a_n_A_M_F_F = 52,
    /* a-u-A-C-F: Unknown aircraft civilian fixed-wing */
    meshtastic_CotType_CotType_a_u_A_C_F = 53,
    /* a-f-G-U-C-F-T-A: Friendly ground unit combat forces theater aviation */
    meshtastic_CotType_CotType_a_f_G_U_C_F_T_A = 54,
    /* a-f-G-U-C-V-S: Friendly ground unit combat vehicle support */
    meshtastic_CotType_CotType_a_f_G_U_C_V_S = 55,
    /* a-f-G-U-C-R-X: Friendly ground unit combat reconnaissance exploitation */
    meshtastic_CotType_CotType_a_f_G_U_C_R_X = 56,
    /* a-f-G-U-C-I-Z: Friendly ground unit combat infantry mechanized */
    meshtastic_CotType_CotType_a_f_G_U_C_I_Z = 57,
    /* a-f-G-U-C-E-C-W: Friendly ground unit combat engineer construction wheeled */
    meshtastic_CotType_CotType_a_f_G_U_C_E_C_W = 58,
    /* a-f-G-U-C-I-L: Friendly ground unit combat infantry light */
    meshtastic_CotType_CotType_a_f_G_U_C_I_L = 59,
    /* a-f-G-U-C-R-O: Friendly ground unit combat reconnaissance other */
    meshtastic_CotType_CotType_a_f_G_U_C_R_O = 60,
    /* a-f-G-U-C-R-V: Friendly ground unit combat reconnaissance cavalry */
    meshtastic_CotType_CotType_a_f_G_U_C_R_V = 61,
    /* a-f-G-U-H: Friendly ground unit headquarters */
    meshtastic_CotType_CotType_a_f_G_U_H = 62,
    /* a-f-G-U-U-M-S-E: Friendly ground unit support medical surgical evacuation */
    meshtastic_CotType_CotType_a_f_G_U_U_M_S_E = 63,
    /* a-f-G-U-S-M-C: Friendly ground unit support maintenance collection */
    meshtastic_CotType_CotType_a_f_G_U_S_M_C = 64,
    /* a-f-G-E-S: Friendly ground equipment sensor (generic) */
    meshtastic_CotType_CotType_a_f_G_E_S = 65,
    /* a-f-G-E: Friendly ground equipment (generic) */
    meshtastic_CotType_CotType_a_f_G_E = 66,
    /* a-f-G-E-V-C-U: Friendly ground equipment vehicle utility */
    meshtastic_CotType_CotType_a_f_G_E_V_C_U = 67,
    /* a-f-G-E-V-C-ps: Friendly ground equipment vehicle public safety */
    meshtastic_CotType_CotType_a_f_G_E_V_C_ps = 68,
    /* a-u-G-E-V: Unknown ground equipment vehicle */
    meshtastic_CotType_CotType_a_u_G_E_V = 69,
    /* a-f-S-N-N-R: Friendly sea surface non-naval rescue */
    meshtastic_CotType_CotType_a_f_S_N_N_R = 70,
    /* a-f-F-B: Friendly force boundary */
    meshtastic_CotType_CotType_a_f_F_B = 71,
    /* b-m-p-s-p-loc: Self-position location marker */
    meshtastic_CotType_CotType_b_m_p_s_p_loc = 72,
    /* b-i-v: Imagery/video */
    meshtastic_CotType_CotType_b_i_v = 73,
    /* b-f-t-r: File transfer request */
    meshtastic_CotType_CotType_b_f_t_r = 74,
    /* b-f-t-a: File transfer acknowledgment */
    meshtastic_CotType_CotType_b_f_t_a = 75,
    /* u-d-f-m: Freehand telestration / annotation. Anchor at event point,
 geometry carried via DrawnShape.vertices. May be truncated to
 MAX_VERTICES by the sender. */
    meshtastic_CotType_CotType_u_d_f_m = 76,
    /* u-d-p: Closed polygon. Geometry carried via DrawnShape.vertices,
 implicitly closed (receiver duplicates first vertex as needed). */
    meshtastic_CotType_CotType_u_d_p = 77,
    /* b-m-p-s-m: Spot map marker (colored dot at a point of interest). */
    meshtastic_CotType_CotType_b_m_p_s_m = 78,
    /* b-m-p-c: Checkpoint (intermediate route control point). */
    meshtastic_CotType_CotType_b_m_p_c = 79,
    /* u-r-b-c-c: Ranging circle (range rings centered on the event point). */
    meshtastic_CotType_CotType_u_r_b_c_c = 80,
    /* u-r-b-bullseye: Bullseye with configurable range rings and bearing
 reference (magnetic / true / grid). */
    meshtastic_CotType_CotType_u_r_b_bullseye = 81,
    /* a-f-G-E-V-A: Friendly armored vehicle, user-selectable self PLI. */
    meshtastic_CotType_CotType_a_f_G_E_V_A = 82,
    /* a-n-A: Neutral aircraft (friendly/hostile/unknown already present). */
    meshtastic_CotType_CotType_a_n_A = 83,
    /* --- 2525 quick-drop: artillery (4) ---------------------------------- */
    meshtastic_CotType_CotType_a_u_G_U_C_F = 84,
    meshtastic_CotType_CotType_a_n_G_U_C_F = 85,
    meshtastic_CotType_CotType_a_h_G_U_C_F = 86,
    meshtastic_CotType_CotType_a_f_G_U_C_F = 87,
    /* --- 2525 quick-drop: building (4) ----------------------------------- */
    meshtastic_CotType_CotType_a_u_G_I = 88,
    meshtastic_CotType_CotType_a_n_G_I = 89,
    meshtastic_CotType_CotType_a_h_G_I = 90,
    meshtastic_CotType_CotType_a_f_G_I = 91,
    /* --- 2525 quick-drop: mine (4) --------------------------------------- */
    meshtastic_CotType_CotType_a_u_G_E_X_M = 92,
    meshtastic_CotType_CotType_a_n_G_E_X_M = 93,
    meshtastic_CotType_CotType_a_h_G_E_X_M = 94,
    meshtastic_CotType_CotType_a_f_G_E_X_M = 95,
    /* --- 2525 quick-drop: ship (3; a-f-S already at 17) ------------------ */
    meshtastic_CotType_CotType_a_u_S = 96,
    meshtastic_CotType_CotType_a_n_S = 97,
    meshtastic_CotType_CotType_a_h_S = 98,
    /* --- 2525 quick-drop: sniper (4) ------------------------------------- */
    meshtastic_CotType_CotType_a_u_G_U_C_I_d = 99,
    meshtastic_CotType_CotType_a_n_G_U_C_I_d = 100,
    meshtastic_CotType_CotType_a_h_G_U_C_I_d = 101,
    meshtastic_CotType_CotType_a_f_G_U_C_I_d = 102,
    /* --- 2525 quick-drop: tank (4) --------------------------------------- */
    meshtastic_CotType_CotType_a_u_G_E_V_A_T = 103,
    meshtastic_CotType_CotType_a_n_G_E_V_A_T = 104,
    meshtastic_CotType_CotType_a_h_G_E_V_A_T = 105,
    meshtastic_CotType_CotType_a_f_G_E_V_A_T = 106,
    /* --- 2525 quick-drop: troops (3; a-f-G-U-C-I already at 2) ----------- */
    meshtastic_CotType_CotType_a_u_G_U_C_I = 107,
    meshtastic_CotType_CotType_a_n_G_U_C_I = 108,
    meshtastic_CotType_CotType_a_h_G_U_C_I = 109,
    /* --- 2525 quick-drop: generic vehicle (3; a-u-G-E-V already at 69) --- */
    meshtastic_CotType_CotType_a_n_G_E_V = 110,
    meshtastic_CotType_CotType_a_h_G_E_V = 111,
    meshtastic_CotType_CotType_a_f_G_E_V = 112,
    /* b-m-p-w-GOTO: Go To / bloodhound navigation target. */
    meshtastic_CotType_CotType_b_m_p_w_GOTO = 113,
    /* b-m-p-c-ip: Initial point (mission planning). */
    meshtastic_CotType_CotType_b_m_p_c_ip = 114,
    /* b-m-p-c-cp: Contact point (mission planning). */
    meshtastic_CotType_CotType_b_m_p_c_cp = 115,
    /* b-m-p-s-p-op: Observation post. */
    meshtastic_CotType_CotType_b_m_p_s_p_op = 116,
    /* u-d-v: 2D vehicle outline drawn on the map. */
    meshtastic_CotType_CotType_u_d_v = 117,
    /* u-d-v-m: 3D vehicle model reference. */
    meshtastic_CotType_CotType_u_d_v_m = 118,
    /* u-d-c-e: Non-circular ellipse (circle with distinct major/minor axes). */
    meshtastic_CotType_CotType_u_d_c_e = 119,
    /* b-i-x-i: Quick Pic geotagged image marker. The image itself does not
 ride on LoRa; this event references the image via iconset metadata. */
    meshtastic_CotType_CotType_b_i_x_i = 120,
    /* b-t-f-d: GeoChat delivered receipt. Carried on the existing `chat`
 payload_variant via GeoChat.receipt_for_uid + receipt_type. */
    meshtastic_CotType_CotType_b_t_f_d = 121,
    /* b-t-f-r: GeoChat read receipt. Same wire slot as b-t-f-d. */
    meshtastic_CotType_CotType_b_t_f_r = 122,
    /* b-a-o-c: Custom / generic emergency beacon. */
    meshtastic_CotType_CotType_b_a_o_c = 123,
    /* t-s: Task / engage request. Structured payload carried via the new
 TaskRequest typed variant. */
    meshtastic_CotType_CotType_t_s = 124,
    /* m-t-t: TAKTALK voice/text chat message. Payload carried via the
 TakTalkMessage typed variant (text, chatroom_id, lang, from_voice). */
    meshtastic_CotType_CotType_m_t_t = 125,
    /* y-: TAKTALK room/membership broadcast. Payload carried via the
 TakTalkRoomData typed variant (sender_callsign, room_id, room_name,
 participants). The CoT type literally has a trailing dash and no
 second atom — not a typo. */
    meshtastic_CotType_CotType_y = 126
} meshtastic_CotType;

/* Geopoint and altitude source */
typedef enum _meshtastic_GeoPointSource {
    /* Unspecified */
    meshtastic_GeoPointSource_GeoPointSource_Unspecified = 0,
    /* GPS derived */
    meshtastic_GeoPointSource_GeoPointSource_GPS = 1,
    /* User entered */
    meshtastic_GeoPointSource_GeoPointSource_USER = 2,
    /* Network/external */
    meshtastic_GeoPointSource_GeoPointSource_NETWORK = 3
} meshtastic_GeoPointSource;

/* Receipt discriminator. Set alongside cot_type_id = b-t-f-d (delivered)
 or b-t-f-r (read). ReceiptType_None is the default for a normal chat
 message (cot_type_id = b-t-f).

 Receivers can detect a receipt by checking receipt_type != ReceiptType_None
 without re-parsing the envelope cot_type_id. */
typedef enum _meshtastic_GeoChat_ReceiptType {
    meshtastic_GeoChat_ReceiptType_ReceiptType_None = 0, /* normal chat message */
    meshtastic_GeoChat_ReceiptType_ReceiptType_Delivered = 1, /* b-t-f-d delivered receipt */
    meshtastic_GeoChat_ReceiptType_ReceiptType_Read = 2 /* b-t-f-r read receipt */
} meshtastic_GeoChat_ReceiptType;

/* Shape kind discriminator. Drives receiver rendering and also controls
 which optional fields below are meaningful. */
typedef enum _meshtastic_DrawnShape_Kind {
    /* Unspecified (do not use on the wire) */
    meshtastic_DrawnShape_Kind_Kind_Unspecified = 0,
    /* u-d-c-c: User-drawn circle (uses major/minor/angle, anchor = event point) */
    meshtastic_DrawnShape_Kind_Kind_Circle = 1,
    /* u-d-r: User-drawn rectangle (uses vertices = 4 corners) */
    meshtastic_DrawnShape_Kind_Kind_Rectangle = 2,
    /* u-d-f: User-drawn polyline (uses vertices, not closed) */
    meshtastic_DrawnShape_Kind_Kind_Freeform = 3,
    /* u-d-f-m: Freehand telestration / annotation (uses vertices, may be truncated) */
    meshtastic_DrawnShape_Kind_Kind_Telestration = 4,
    /* u-d-p: Closed polygon (uses vertices, implicitly closed) */
    meshtastic_DrawnShape_Kind_Kind_Polygon = 5,
    /* u-r-b-c-c: Ranging circle (major/minor/angle, stroke + optional fill) */
    meshtastic_DrawnShape_Kind_Kind_RangingCircle = 6,
    /* u-r-b-bullseye: Bullseye ring with range rings and bearing reference */
    meshtastic_DrawnShape_Kind_Kind_Bullseye = 7,
    /* u-d-c-e: Ellipse with distinct major/minor axes (same storage as
 Kind_Circle — uses major_cm/minor_cm/angle_deg — but receivers
 render it as a non-circular ellipse rather than a round circle). */
    meshtastic_DrawnShape_Kind_Kind_Ellipse = 8,
    /* u-d-v: 2D vehicle outline drawn on the map. Vertices carry the
 outline polygon; receivers draw it as a filled polygon. */
    meshtastic_DrawnShape_Kind_Kind_Vehicle2D = 9,
    /* u-d-v-m: 3D vehicle model reference. Same vertex polygon as
 Kind_Vehicle2D; receivers that support 3D rendering extrude it. */
    meshtastic_DrawnShape_Kind_Kind_Vehicle3D = 10
} meshtastic_DrawnShape_Kind;

/* Explicit stroke/fill/both discriminator.

 ATAK's source XML distinguishes "stroke-only polyline" from "closed shape
 with both stroke and fill" by the presence of the <fillColor> element.
 Both states can hash to all-zero color fields, so we carry the signal
 explicitly. Parser sets this from (sawStrokeColor, sawFillColor) at the
 end of parse; builder uses it to decide which of <strokeColor> /
 <fillColor> to emit in the reconstructed XML. */
typedef enum _meshtastic_DrawnShape_StyleMode {
    /* Unspecified — receiver infers from which color fields are non-zero. */
    meshtastic_DrawnShape_StyleMode_StyleMode_Unspecified = 0,
    /* Stroke only. No <fillColor> in the source XML. Used for polylines,
 ranging lines, bullseye rings. */
    meshtastic_DrawnShape_StyleMode_StyleMode_StrokeOnly = 1,
    /* Fill only. No <strokeColor> in the source XML. Rare but valid in
 ATAK (solid region with no outline). */
    meshtastic_DrawnShape_StyleMode_StyleMode_FillOnly = 2,
    /* Both stroke and fill present. Closed shapes: circle, rectangle,
 polygon, ranging circle. */
    meshtastic_DrawnShape_StyleMode_StyleMode_StrokeAndFill = 3
} meshtastic_DrawnShape_StyleMode;

/* Marker kind. Used to pick sensible receiver defaults when the CoT type
 alone is ambiguous (e.g. a-u-G could be a 2525 symbol or a custom icon
 depending on the iconset path). */
typedef enum _meshtastic_Marker_Kind {
    /* Unspecified — fall back to TAKPacketV2.cot_type_id */
    meshtastic_Marker_Kind_Kind_Unspecified = 0,
    /* b-m-p-s-m: Spot map marker */
    meshtastic_Marker_Kind_Kind_Spot = 1,
    /* b-m-p-w: Route waypoint */
    meshtastic_Marker_Kind_Kind_Waypoint = 2,
    /* b-m-p-c: Checkpoint */
    meshtastic_Marker_Kind_Kind_Checkpoint = 3,
    /* b-m-p-s-p-i / b-m-p-s-p-loc: Self-position marker */
    meshtastic_Marker_Kind_Kind_SelfPosition = 4,
    /* 2525B/C military symbol (iconsetpath = COT_MAPPING_2525B/...) */
    meshtastic_Marker_Kind_Kind_Symbol2525 = 5,
    /* COT_MAPPING_SPOTMAP icon (e.g. colored dot) */
    meshtastic_Marker_Kind_Kind_SpotMap = 6,
    /* Custom icon set (UUID/GroupName/filename.png) */
    meshtastic_Marker_Kind_Kind_CustomIcon = 7,
    /* b-m-p-w-GOTO: Go To / bloodhound navigation waypoint. */
    meshtastic_Marker_Kind_Kind_GoToPoint = 8,
    /* b-m-p-c-ip: Initial point (mission planning control point). */
    meshtastic_Marker_Kind_Kind_InitialPoint = 9,
    /* b-m-p-c-cp: Contact point (mission planning control point). */
    meshtastic_Marker_Kind_Kind_ContactPoint = 10,
    /* b-m-p-s-p-op: Observation post. */
    meshtastic_Marker_Kind_Kind_ObservationPost = 11,
    /* b-i-x-i: Quick Pic geotagged image marker. iconset carries the
 image reference (local filename or remote URL); the image itself
 does not ride on the LoRa wire. */
    meshtastic_Marker_Kind_Kind_ImageMarker = 12
} meshtastic_Marker_Kind;

/* Travel method for the route. */
typedef enum _meshtastic_Route_Method {
    /* Unspecified / unknown */
    meshtastic_Route_Method_Method_Unspecified = 0,
    /* Driving / vehicle */
    meshtastic_Route_Method_Method_Driving = 1,
    /* Walking / foot */
    meshtastic_Route_Method_Method_Walking = 2,
    /* Flying */
    meshtastic_Route_Method_Method_Flying = 3,
    /* Swimming (individual) */
    meshtastic_Route_Method_Method_Swimming = 4,
    /* Watercraft (boat) */
    meshtastic_Route_Method_Method_Watercraft = 5
} meshtastic_Route_Method;

/* Route direction (infil = ingress, exfil = egress). */
typedef enum _meshtastic_Route_Direction {
    /* Unspecified */
    meshtastic_Route_Direction_Direction_Unspecified = 0,
    /* Infiltration (ingress) */
    meshtastic_Route_Direction_Direction_Infil = 1,
    /* Exfiltration (egress) */
    meshtastic_Route_Direction_Direction_Exfil = 2
} meshtastic_Route_Direction;

/* Line 3: precedence / urgency. */
typedef enum _meshtastic_CasevacReport_Precedence {
    meshtastic_CasevacReport_Precedence_Precedence_Unspecified = 0,
    meshtastic_CasevacReport_Precedence_Precedence_Urgent = 1, /* A - immediate, life-threatening */
    meshtastic_CasevacReport_Precedence_Precedence_UrgentSurgical = 2, /* B - needs surgery */
    meshtastic_CasevacReport_Precedence_Precedence_Priority = 3, /* C - within 4 hours */
    meshtastic_CasevacReport_Precedence_Precedence_Routine = 4, /* D - within 24 hours */
    meshtastic_CasevacReport_Precedence_Precedence_Convenience = 5 /* E - convenience */
} meshtastic_CasevacReport_Precedence;

/* Line 7: HLZ marking method. */
typedef enum _meshtastic_CasevacReport_HlzMarking {
    meshtastic_CasevacReport_HlzMarking_HlzMarking_Unspecified = 0,
    meshtastic_CasevacReport_HlzMarking_HlzMarking_Panels = 1,
    meshtastic_CasevacReport_HlzMarking_HlzMarking_PyroSignal = 2,
    meshtastic_CasevacReport_HlzMarking_HlzMarking_Smoke = 3,
    meshtastic_CasevacReport_HlzMarking_HlzMarking_None = 4,
    meshtastic_CasevacReport_HlzMarking_HlzMarking_Other = 5
} meshtastic_CasevacReport_HlzMarking;

/* Line 6: security situation at the pickup zone. */
typedef enum _meshtastic_CasevacReport_Security {
    meshtastic_CasevacReport_Security_Security_Unspecified = 0,
    meshtastic_CasevacReport_Security_Security_NoEnemy = 1, /* N - no enemy activity */
    meshtastic_CasevacReport_Security_Security_PossibleEnemy = 2, /* P - possible enemy */
    meshtastic_CasevacReport_Security_Security_EnemyInArea = 3, /* E - enemy, approach with caution */
    meshtastic_CasevacReport_Security_Security_EnemyInArmedContact = 4 /* X - armed escort required */
} meshtastic_CasevacReport_Security;

typedef enum _meshtastic_EmergencyAlert_Type {
    meshtastic_EmergencyAlert_Type_Type_Unspecified = 0,
    meshtastic_EmergencyAlert_Type_Type_Alert911 = 1, /* b-a-o-tbl */
    meshtastic_EmergencyAlert_Type_Type_RingTheBell = 2, /* b-a-o-pan */
    meshtastic_EmergencyAlert_Type_Type_InContact = 3, /* b-a-o-opn */
    meshtastic_EmergencyAlert_Type_Type_GeoFenceBreached = 4, /* b-a-g */
    meshtastic_EmergencyAlert_Type_Type_Custom = 5, /* b-a-o-c */
    meshtastic_EmergencyAlert_Type_Type_Cancel = 6 /* b-a-o-can */
} meshtastic_EmergencyAlert_Type;

typedef enum _meshtastic_TaskRequest_Priority {
    meshtastic_TaskRequest_Priority_Priority_Unspecified = 0,
    meshtastic_TaskRequest_Priority_Priority_Low = 1,
    meshtastic_TaskRequest_Priority_Priority_Normal = 2,
    meshtastic_TaskRequest_Priority_Priority_High = 3,
    meshtastic_TaskRequest_Priority_Priority_Critical = 4
} meshtastic_TaskRequest_Priority;

typedef enum _meshtastic_TaskRequest_Status {
    meshtastic_TaskRequest_Status_Status_Unspecified = 0,
    meshtastic_TaskRequest_Status_Status_Pending = 1, /* assigned, not yet acknowledged */
    meshtastic_TaskRequest_Status_Status_Acknowledged = 2, /* assignee has seen it */
    meshtastic_TaskRequest_Status_Status_InProgress = 3, /* assignee is working it */
    meshtastic_TaskRequest_Status_Status_Completed = 4, /* task done */
    meshtastic_TaskRequest_Status_Status_Cancelled = 5 /* cancelled before completion */
} meshtastic_TaskRequest_Status;

/* Coarse sensor category, inferred from `model` on parse when the source
 XML doesn't label it. Receivers that render differently per sensor
 class (thermal overlay vs daylight cone) use this. */
typedef enum _meshtastic_SensorFov_SensorType {
    meshtastic_SensorFov_SensorType_SensorType_Unspecified = 0,
    meshtastic_SensorFov_SensorType_SensorType_Camera = 1, /* daylight / general optical */
    meshtastic_SensorFov_SensorType_SensorType_Thermal = 2, /* FLIR, thermal imager */
    meshtastic_SensorFov_SensorType_SensorType_Laser = 3, /* rangefinder, LRF, designator */
    meshtastic_SensorFov_SensorType_SensorType_Nvg = 4, /* night vision goggles */
    meshtastic_SensorFov_SensorType_SensorType_Rf = 5, /* radio/radar direction-finding */
    meshtastic_SensorFov_SensorType_SensorType_Other = 6
} meshtastic_SensorFov_SensorType;

/* Struct definitions */
/* ATAK GeoChat message */
typedef struct _meshtastic_GeoChat {
    /* The text message. Empty for receipts. */
    char message[200];
    /* Uid recipient of the message */
    bool has_to;
    char to[120];
    /* Callsign of the recipient for the message */
    bool has_to_callsign;
    char to_callsign[120];
    /* UID of the chat message this event is acknowledging. Empty for a
 normal chat message; set for delivered / read receipts. Paired with
 receipt_type so receivers can match the ack back to the original
 outbound GeoChat by its event uid. */
    char receipt_for_uid[48];
    /* Receipt kind discriminator. See ReceiptType doc. Default ReceiptType_None
 means this is a regular chat message, not a receipt. */
    meshtastic_GeoChat_ReceiptType receipt_type;
    /* BCP-47-ish language tag or human-readable name (e.g. "en", "English")
 that the originator's TAKTALK plugin recorded for the message. */
    pb_callback_t lang;
    /* TAKTALK chatroom UUID (e.g. "30b2755c-c547-44ef-a0cc-cdbd8a15616f") that
 the receiver's TAKTALK plugin uses to thread the message under the
 right room. Resolved to a friendly name via TakTalkRoomData broadcasts. */
    pb_callback_t room_id;
    /* TAKTALK voice profile pointer. Often empty in practice (the empty
 marker `<voice_profile_id/>` still signals TAKTALK origination), so
 receivers should treat empty-but-present as the equivalent of the
 marker rather than a missing field. */
    pb_callback_t voice_profile_id;
} meshtastic_GeoChat;

/* ATAK Group
 <__group role='Team Member' name='Cyan'/> */
typedef struct _meshtastic_Group {
    /* Role of the group member */
    meshtastic_MemberRole role;
    /* Team (color)
 Default Cyan */
    meshtastic_Team team;
} meshtastic_Group;

/* ATAK EUD Status
 <status battery='100' /> */
typedef struct _meshtastic_Status {
    /* Battery level */
    uint8_t battery;
} meshtastic_Status;

/* ATAK Contact
 <contact endpoint='0.0.0.0:4242:tcp' phone='+12345678' callsign='FALKE'/> */
typedef struct _meshtastic_Contact {
    /* Callsign */
    char callsign[120];
    /* Device callsign */
    char device_callsign[120]; /* IP address of endpoint in integer form (0.0.0.0 default) */
} meshtastic_Contact;

/* Position Location Information from ATAK */
typedef struct _meshtastic_PLI {
    /* The new preferred location encoding, multiply by 1e-7 to get degrees
 in floating point */
    int32_t latitude_i;
    /* The new preferred location encoding, multiply by 1e-7 to get degrees
 in floating point */
    int32_t longitude_i;
    /* Altitude (ATAK prefers HAE) */
    int32_t altitude;
    /* Speed */
    uint32_t speed;
    /* Course in degrees */
    uint16_t course;
} meshtastic_PLI;

typedef PB_BYTES_ARRAY_T(220) meshtastic_TAKPacket_detail_t;
/* Packets for the official ATAK Plugin */
typedef struct _meshtastic_TAKPacket {
    /* Are the payloads strings compressed for LoRA transport? */
    bool is_compressed;
    /* The contact / callsign for ATAK user */
    bool has_contact;
    meshtastic_Contact contact;
    /* The group for ATAK user */
    bool has_group;
    meshtastic_Group group;
    /* The status of the ATAK EUD */
    bool has_status;
    meshtastic_Status status;
    pb_size_t which_payload_variant;
    union {
        /* TAK position report */
        meshtastic_PLI pli;
        /* ATAK GeoChat message */
        meshtastic_GeoChat chat;
        /* Generic CoT detail XML
     May be compressed / truncated by the sender (EUD) */
        meshtastic_TAKPacket_detail_t detail;
    } payload_variant;
} meshtastic_TAKPacket;

/* Aircraft track information from ADS-B or military air tracking.
 Covers the majority of observed real-world CoT traffic. */
typedef struct _meshtastic_AircraftTrack {
    /* ICAO hex identifier (e.g. "AD237C") */
    char icao[8];
    /* Aircraft registration (e.g. "N946AK") */
    char registration[16];
    /* Flight number/callsign (e.g. "ASA864") */
    char flight[16];
    /* ICAO aircraft type designator (e.g. "B39M") */
    char aircraft_type[8];
    /* Transponder squawk code (0-7777 octal) */
    uint16_t squawk;
    /* ADS-B emitter category (e.g. "A3") */
    char category[4];
    /* Received signal strength * 10 (e.g. -194 for -19.4 dBm) */
    int32_t rssi_x10;
    /* Whether receiver has GPS fix */
    bool gps;
    /* CoT host ID for source attribution */
    char cot_host_id[64];
} meshtastic_AircraftTrack;

/* Compact geographic vertex used by repeated vertex lists in TAK geometry
 payloads. Named with a `Cot` prefix to avoid a namespace collision with
 `meshtastic.GeoPoint` in `device_ui.proto`, which is an unrelated zoom/
 latitude/longitude type used by the on-device map UI.

 Encoded as a signed DELTA from TAKPacketV2.latitude_i / longitude_i (the
 enclosing event's anchor point). The absolute coordinate is recovered by
 the receiver as `event.latitude_i + vertex.lat_delta_i` (and likewise for
 longitude).

 Why deltas: a 32-vertex telestration with vertices clustered within a few
 hundred meters of the anchor has per-vertex deltas in the ±10^4 range.
 Under sint32+zigzag those encode as 2 bytes each (tag+varint), versus the
 4 bytes that sfixed32 would always require. At 32 vertices that is ~128
 bytes of savings — the difference between fitting under the LoRa MTU or
 not. Absolute coordinates (values ~10^9) would cost sint32 varint 5 bytes
 per field, which is why TAKPacketV2's top-level latitude_i / longitude_i
 stay sfixed32 — only small values win with sint32. */
typedef struct _meshtastic_CotGeoPoint {
    /* Latitude delta from TAKPacketV2.latitude_i, in 1e-7 degree units.
 Add to the enclosing event's latitude_i to recover the absolute latitude. */
    int32_t lat_delta_i;
    /* Longitude delta from TAKPacketV2.longitude_i, in 1e-7 degree units. */
    int32_t lon_delta_i;
} meshtastic_CotGeoPoint;

/* User-drawn tactical graphic: circle, rectangle, polygon, polyline, freehand
 telestration, ranging circle, or bullseye.

 Covers CoT types u-d-c-c, u-d-r, u-d-f, u-d-f-m, u-d-p, u-r-b-c-c,
 u-r-b-bullseye. The shape's anchor position is carried on
 TAKPacketV2.latitude_i/longitude_i; polyline/polygon vertices are in the
 `vertices` repeated field as `CotGeoPoint` deltas from that anchor.

 Colors use the Team enum as a 14-color palette (see color encoding below)
 with a fixed32 exact-ARGB fallback for custom user-picked colors that
 don't map to a palette entry. */
typedef struct _meshtastic_DrawnShape {
    /* Shape kind (circle, rectangle, freeform, etc.) */
    meshtastic_DrawnShape_Kind kind;
    /* Explicit stroke/fill/both discriminator. See StyleMode doc. */
    meshtastic_DrawnShape_StyleMode style;
    /* Ellipse major radius in centimeters. 0 for non-ellipse kinds. */
    uint32_t major_cm;
    /* Ellipse minor radius in centimeters. 0 for non-ellipse kinds. */
    uint32_t minor_cm;
    /* Ellipse rotation angle in degrees. Valid values are 0..360 inclusive;
 0 and 360 are equivalent rotations. In proto3, an unset uint32 reads
 as 0, so senders should emit 0 when the angle is unspecified. */
    uint16_t angle_deg;
    /* Stroke color as a named palette entry from the Team enum. If
 Unspecifed_Color, the exact ARGB is carried in stroke_argb.
 Valid only when style is StrokeOnly or StrokeAndFill. */
    meshtastic_Team stroke_color;
    /* Stroke color as an exact 32-bit ARGB bit pattern. Always populated
 on the wire; readers MUST use this value when stroke_color ==
 Unspecifed_Color and MAY use it to recover the exact original bytes
 even when a palette entry is set. */
    uint32_t stroke_argb;
    /* Stroke weight in tenths of a unit (e.g. 30 = 3.0). Typical ATAK
 range 10..60. */
    uint16_t stroke_weight_x10;
    /* Fill color as a named palette entry. See stroke_color docs.
 Valid only when style is FillOnly or StrokeAndFill. */
    meshtastic_Team fill_color;
    /* Fill color exact ARGB fallback. See stroke_argb docs. */
    uint32_t fill_argb;
    /* Whether labels are rendered on this shape. */
    bool labels_on;
    /* True if the sender truncated the vertex columns to fit the pool. */
    bool truncated; /* --- Bullseye-only fields. All ignored unless kind == Kind_Bullseye. --- */
    /* Bullseye distance in meters * 10 (e.g. 3285 = 328.5 m). 0 = unset. */
    uint32_t bullseye_distance_dm;
    /* Bullseye bearing reference: 0 unset, 1 Magnetic, 2 True, 3 Grid. */
    uint8_t bullseye_bearing_ref;
    /* Bullseye attribute bit flags:
   bit 0: rangeRingVisible
   bit 1: hasRangeRings
   bit 2: edgeToCenter
   bit 3: mils */
    uint8_t bullseye_flags;
    /* Bullseye reference UID (anchor marker). Empty = anchor is self. */
    char bullseye_uid_ref[48];
    pb_callback_t vertex_lat_deltas;
    pb_callback_t vertex_lon_deltas;
} meshtastic_DrawnShape;

/* Fixed point of interest: spot marker, waypoint, checkpoint, 2525 symbol,
 or custom icon.

 Covers CoT types b-m-p-s-m, b-m-p-w, b-m-p-c, b-m-p-s-p-i, b-m-p-s-p-loc,
 plus a-u-G / a-f-G / a-h-G / a-n-G with iconset paths. The marker position
 is carried on TAKPacketV2.latitude_i/longitude_i; fields below carry only
 the marker-specific metadata. */
typedef struct _meshtastic_Marker {
    /* Marker kind */
    meshtastic_Marker_Kind kind;
    /* Marker color as a named palette entry. If Unspecifed_Color, the exact
 ARGB is in color_argb. */
    meshtastic_Team color;
    /* Marker color exact ARGB bit pattern. Always populated on the wire. */
    uint32_t color_argb;
    /* Status readiness flag (ATAK <status readiness="true"/>). */
    bool readiness;
    /* Parent link UID (ATAK <link uid=... relation="p-p"/>). Empty = no parent.
 For spot/waypoint markers this is typically the producing TAK user's UID. */
    char parent_uid[48];
    /* Parent CoT type (e.g. "a-f-G-U-C"). Usually the parent TAK user's type. */
    char parent_type[24];
    /* Parent callsign (e.g. "HOPE"). */
    char parent_callsign[24];
    /* Iconset path stored verbatim. ATAK emits three flavors:
   Kind_Symbol2525    -> "COT_MAPPING_2525B/<cot-type-prefix>/<cot-type>"
   Kind_SpotMap       -> "COT_MAPPING_SPOTMAP/<cot-type>/<argb>"
   Kind_CustomIcon    -> "<UUID>/<GroupName>/<filename>.png"
 Stored end-to-end without prefix stripping; the ~19 bytes saved by
 stripping well-known prefixes are not worth the builder-side bug
 surface, and the dict compresses the repetition effectively. */
    char iconset[80];
} meshtastic_Marker;

/* Range and bearing measurement line from the event anchor to a target point.

 Covers CoT type u-rb-a. The anchor position is on
 TAKPacketV2.latitude_i/longitude_i; the target endpoint is carried as a
 CotGeoPoint — same delta-from-anchor encoding used by DrawnShape.vertices
 so a self-anchored RAB (common case) encodes in zero bytes. */
typedef struct _meshtastic_RangeAndBearing {
    /* Target/anchor endpoint (delta-encoded from TAKPacketV2.latitude_i/longitude_i). */
    bool has_anchor;
    meshtastic_CotGeoPoint anchor;
    /* Anchor UID (from <link uid="anchor-1"/>). Empty = free-standing. */
    char anchor_uid[48];
    /* Range in centimeters (value * 100). Range 0..4294 km. */
    uint32_t range_cm;
    /* Bearing in degrees * 100 (0..36000). */
    uint16_t bearing_cdeg;
    /* Stroke color as a Team palette entry. See DrawnShape.stroke_color doc. */
    meshtastic_Team stroke_color;
    /* Stroke color exact ARGB fallback. */
    uint32_t stroke_argb;
    /* Stroke weight * 10 (e.g. 30 = 3.0). */
    uint16_t stroke_weight_x10;
} meshtastic_RangeAndBearing;

/* Route waypoint or control point. Each link corresponds to one ATAK
 <link type=... point=...> entry inside the b-m-r event. */
typedef struct _meshtastic_Route_Link {
    /* Waypoint position (delta-encoded from TAKPacketV2.latitude_i/longitude_i). */
    bool has_point;
    meshtastic_CotGeoPoint point;
    /* Optional UID (empty = receiver derives). */
    char uid[48];
    /* Optional display callsign (e.g. "CP1"). Empty for unnamed control points. */
    char callsign[16];
    /* Link role: 0 = waypoint (b-m-p-w), 1 = checkpoint (b-m-p-c). */
    uint8_t link_type;
} meshtastic_Route_Link;

/* Named route consisting of ordered waypoints and control points.

 Covers CoT type b-m-r. The first waypoint's position is on
 TAKPacketV2.latitude_i/longitude_i; subsequent waypoints and checkpoints
 are in `links`. Link count is capped at 16 by the nanopb pool; senders
 MUST truncate longer routes and set `truncated = true`. */
typedef struct _meshtastic_Route {
    /* Travel method */
    meshtastic_Route_Method method;
    /* Direction (infil/exfil) */
    meshtastic_Route_Direction direction;
    /* Waypoint name prefix (e.g. "CP"). */
    char prefix[8];
    /* Stroke weight * 10 (e.g. 30 = 3.0). 0 = default. */
    uint16_t stroke_weight_x10;
    /* Ordered list of route control points. Capped at 16. */
    pb_size_t links_count;
    meshtastic_Route_Link links[16];
    /* True if the sender truncated `links` to fit the pool. */
    bool truncated;
} meshtastic_Route;

/* 9-line MEDEVAC request (CoT type b-r-f-h-c).

 Mirrors the ATAK MedLine tool's <_medevac_> detail element. Every field
 is optional (proto3 default); senders omit lines they don't have. The
 envelope (TAKPacketV2.uid, cot_type_id=b-r-f-h-c, latitude_i/longitude_i,
 altitude, callsign) carries Line 1 (location) and Line 2 (callsign).

 All numeric fields are tight varints so a complete 9-line request fits
 in well under 100 bytes of proto on the wire. */
typedef struct _meshtastic_CasevacReport {
    /* Line 3: precedence / urgency. */
    meshtastic_CasevacReport_Precedence precedence;
    /* Line 4: special equipment required, as a bitfield.
   bit 0: none
   bit 1: hoist
   bit 2: extraction equipment
   bit 3: ventilator
   bit 4: blood */
    uint8_t equipment_flags;
    /* Line 5: number of litter (stretcher-bound) patients. */
    uint8_t litter_patients;
    /* Line 5: number of ambulatory (walking-wounded) patients. */
    uint8_t ambulatory_patients;
    /* Line 6: security situation at the PZ. */
    meshtastic_CasevacReport_Security security;
    /* Line 7: HLZ marking method. */
    meshtastic_CasevacReport_HlzMarking hlz_marking;
    /* Line 7 supplementary: short free-text describing the zone marker
 (e.g. "Green smoke", "VS-17 panel west"). Capped tight in options. */
    char zone_marker[16];
    /* --- Line 8: patient nationality counts --- */
    uint8_t us_military;
    uint8_t us_civilian;
    uint8_t non_us_military;
    uint8_t non_us_civilian;
    uint8_t epw; /* enemy prisoner of war */
    uint8_t child;
    /* Line 9: terrain and obstacles at the PZ, as a bitfield.
   bit 0: slope
   bit 1: rough
   bit 2: loose
   bit 3: trees
   bit 4: wires
   bit 5: other */
    uint8_t terrain_flags;
    /* Line 2: radio frequency / callsign metadata (e.g. "38.90 Mhz" or
 "Victor 6"). Capped tight in options. */
    char frequency[16];
    /* Short title / MEDEVAC identifier (e.g. "EAGLE.15.181230"). Usually the
 same as the envelope callsign but ATAK sometimes carries a distinct
 ops-number here. */
    pb_callback_t title;
    /* Primary medline free-text — the single most clinically important line
 on a MEDLINE form (e.g. "2 urgent litter patients, smoke on approach").
 MUST be preserved under MTU pressure as long as any casevac is sent. */
    pb_callback_t medline_remarks;
    /* Line 3 (newer ATAK format): patient counts by precedence level.
 Coexists with the enum-style `precedence` field (tag 1) — older ATAK
 emits a single enum, newer ATAK emits these counts, and both can be
 set simultaneously. Senders populate whichever style(s) the source
 XML had; receivers prefer counts when non-zero. */
    uint32_t urgent_count;
    uint32_t urgent_surgical_count;
    uint32_t priority_count;
    uint32_t routine_count;
    uint32_t convenience_count;
    /* Line 4 supplementary: free-text description of non-standard equipment
 (e.g. "Blood warmer"). Pairs with the `equipment_flags` bitfield. */
    pb_callback_t equipment_detail;
    /* Line 1 override: MGRS grid when distinct from the event anchor point
 (e.g. "34T CQ 12345 67890"). Event lat/lon/hae still carries the
 numeric location; this field preserves the exact MGRS string the
 medic entered. */
    pb_callback_t zone_protected_coord;
    /* Line 9 supplementary: slope direction (e.g. "N", "NE", "SSW") when
 `terrain_flags` bit 0 (slope) is set. */
    pb_callback_t terrain_slope_dir;
    /* Line 9 supplementary: free-text description of "other" terrain hazards
 (e.g. "Loose debris on west edge") when `terrain_flags` bit 5 (other)
 is set. Tier-2 strippable under MTU pressure. */
    pb_callback_t terrain_other_detail;
    /* Line 7 supplementary: how the zone is being marked right now
 (e.g. "Orange smoke", "VS-17 panel"). Complements the structured
 `hlz_marking` enum with a specific human-readable description. */
    pb_callback_t marked_by;
    /* Nearby obstacles on the approach (e.g. "Power lines north of HLZ"). */
    pb_callback_t obstacles;
    /* Wind direction and speed (e.g. "270 at 12 kts"). */
    pb_callback_t winds_are_from;
    /* Friendly forces posture near the pickup zone
 (e.g. "Squad east of HLZ"). */
    pb_callback_t friendlies;
    /* Known or suspected enemy positions near the pickup zone
 (e.g. "Possible enemy on south ridge"). */
    pb_callback_t enemy;
    /* Free-text description of the HLZ itself
 (e.g. "Primary HLZ is soccer field"). */
    pb_callback_t hlz_remarks;
    /* Per-patient clinical records. Each entry is one patient's ZMIST card
 (Zap number / Mechanism / Injuries / Signs / Treatment). Repeatable —
 a mass-casualty event can carry 1-6 entries in practice, limited by
 the 237 B LoRa MTU. */
    pb_callback_t zmist;
} meshtastic_CasevacReport;

/* Per-patient clinical summary record — one entry per patient in a CASEVAC.
 Maps directly to ATAK's <zMist> child element inside <zMistsMap>.
 All fields are optional free-text; senders populate what they have. */
typedef struct _meshtastic_ZMistEntry {
    /* Patient identifier / sequence label (e.g. "ZMIST-1", "ZMIST-2"). */
    pb_callback_t title;
    /* Zap number — unique patient tracking ID (often a terse code like
 "Gunshot" or a serial). */
    pb_callback_t z;
    /* Mechanism of injury (e.g. "Penetrating trauma", "Blast injury"). */
    pb_callback_t m;
    /* Injuries observed (e.g. "Left thigh", "Concussion"). */
    pb_callback_t i;
    /* Signs / vital stats (e.g. "Stable", "Priority", "BP 110/70"). */
    pb_callback_t s;
    /* Treatment given (e.g. "Tourniquet 1810Z", "O2 administered"). */
    pb_callback_t t;
} meshtastic_ZMistEntry;

/* Emergency alert / 911 beacon (CoT types b-a-o-tbl, b-a-o-pan, b-a-o-opn,
 b-a-o-can, b-a-o-c, b-a-g).

 Small, high-priority structured record. The CoT type string is still set
 on cot_type_id so receivers that ignore payload_variant can still display
 the alert from the enum alone; the typed fields let modern receivers show
 the authoring unit and handle cancel-referencing without XML parsing. */
typedef struct _meshtastic_EmergencyAlert {
    /* Alert discriminator. */
    meshtastic_EmergencyAlert_Type type;
    /* UID of the unit that raised the alert. Often the same as
 TAKPacketV2.uid but can be a parent device uid when a tracker raises
 an alert on behalf of a dismount. */
    char authoring_uid[48];
    /* For Type_Cancel: the uid of the alert being cancelled. Empty for
 non-cancel alert types. */
    char cancel_reference_uid[48];
} meshtastic_EmergencyAlert;

/* Task / engage request (CoT type t-s).

 Mirrors ATAK's TaskCotReceiver / CotTaskBuilder workflow. The envelope
 carries the task's originating uid (implicit requester), position, and
 creation time; the fields below carry structured metadata the raw-detail
 fallback currently loses.

 Fields are deliberately lean — this variant is closer to the MTU ceiling
 than the others, so every string is capped in options. */
typedef struct _meshtastic_TaskRequest {
    /* Short tag for the task category (e.g. "engage", "observe", "recon",
 "rescue"). Free text on the wire so ATAK-specific task taxonomies
 don't need proto coordination; capped tight in options. */
    char task_type[12];
    /* UID of the target / map item being tasked. */
    char target_uid[32];
    /* UID of the assigned unit. Empty = unassigned / broadcast task. */
    char assignee_uid[32];
    meshtastic_TaskRequest_Priority priority;
    meshtastic_TaskRequest_Status status;
    /* Optional short note (reason, constraints, grid reference). Capped
 tight in options to keep the worst-case under the LoRa MTU. */
    char note[48];
} meshtastic_TaskRequest;

/* Weather annotation from <environment> CoT detail element.

 Attaches to any TAKPacketV2 regardless of payload_variant — an Aircraft,
 PLI, or Marker can all carry observed conditions at the emitting station.
 ATAK-CIV ships an XSD for <environment> but no dedicated handler, so the
 element round-trips through the generic detail pipeline; this message
 promotes it to a first-class structured field.

 Target wire cost: ~6-8 bytes compressed with a fully populated instance.

 Named `TAKEnvironment` (not just `Environment`) because the bare name
 collides with `SwiftUI.Environment` — every SwiftUI view in a consuming
 iOS app uses the `@Environment` property wrapper, and importing the
 generated proto module would make `Environment` ambiguous in every one
 of those files. The `TAK` prefix matches the convention used by the
 outer `TAKPacketV2` wrapper and is unambiguous across all target
 languages (Swift, Kotlin, Python, TypeScript, C#). */
typedef struct _meshtastic_TAKEnvironment {
    /* Temperature in deci-degrees Celsius. 225 = 22.5°C.
 Range covers -50°C to +50°C (-500 to +500) which spans every realistic
 outdoor TAK deployment. sint32 because negative temps are common in
 cold-weather ops. */
    int32_t temperature_c_x10;
    /* Wind direction in whole degrees, 0-359. "Direction FROM" per
 meteorological convention (matches CoT / ATAK). */
    uint32_t wind_direction_deg;
    /* Wind speed in cm/s. Matches the unit of TAKPacketV2.speed for
 consistency. 1200 = 12.00 m/s = ~27 mph. */
    uint32_t wind_speed_cm_s;
} meshtastic_TAKEnvironment;

/* Sensor field-of-view cone from <sensor> CoT detail element.

 Encodes the 8 geometry attributes that ATAK-CIV's SensorDetailHandler
 reads from the wire; drops the 9 visual-styling attributes that are
 receiver-side render hints (fovAlpha, fovRed/Green/Blue, strokeColor,
 strokeWeight, displayMagneticReference, hideFov, fovLabels, rangeLines).
 The receiving ATAK client restores those from its own defaults, same as
 every other CoT carried over Meshtastic today.

 Attaches to any TAKPacketV2 — a PLI with a sensor on the operator's head,
 an Aircraft with a FLIR turret, a Marker dropped on a UAV.
 Target wire cost: ~7-14 bytes compressed (dominated by model string). */
typedef struct _meshtastic_SensorFov {
    meshtastic_SensorFov_SensorType type;
    /* Azimuth in whole degrees, 0-359. "Pointing direction" of the cone axis,
 measured clockwise from true north. Whole degrees match ATAK-CIV's
 SensorDetailHandler default (270°) and save varint bytes over centi-deg. */
    uint32_t azimuth_deg;
    /* Maximum range of the cone in meters.
 Optional — if unset, receivers should use the ATAK-CIV default of 100m. */
    bool has_range_m;
    uint32_t range_m;
    /* Horizontal field of view in whole degrees (cone's angular width).
 ATAK-CIV default is 45°. */
    uint32_t fov_horizontal_deg;
    /* Vertical field of view in whole degrees. ATAK-CIV default is 45°.
 Optional — a value of 0 means "not set / use horizontal FOV". */
    uint32_t fov_vertical_deg;
    /* Elevation angle in whole degrees. Positive = up, negative = down.
 Range -90 to +90. sint32 for varint efficiency on small negatives. */
    int32_t elevation_deg;
    /* Roll (camera tilt) in whole degrees, -180 to +180.
 Optional — use 0 if the sensor doesn't track roll. */
    int32_t roll_deg;
    /* Free-form device model identifier, e.g. "FLIR-Boson-640", "SEEK".
 Optional — empty string means "unknown model" (ATAK-CIV default). */
    pb_callback_t model;
} meshtastic_SensorFov;

/* TAKTALK chat message payload (CoT type m-t-t).

 TAKTALK is an ATAK plugin for voice + text team messaging. The voice
 audio stream goes over UDP/RTP and is NOT carried by the mesh — only
 the text envelope (this message) is. `from_voice` marks messages sent
 via push-to-talk speech-to-text so receivers can render a mic icon
 next to the text.

 Wire shape inside <event type="m-t-t">/<detail>:
   <callsign>...</callsign>        - mapped to TAKPacketV2.callsign
   <lang>English</lang>            - lang
   <text>...</text>                - text
   <chatroom-id>1</chatroom-id>    - chatroom_id
   <voice/>                        - presence sets from_voice = true */
typedef struct _meshtastic_TakTalkMessage {
    /* The text body of the TAKTALK message (speech-to-text transcript when
 from_voice = true, typed message otherwise). */
    pb_callback_t text;
    /* TAKTALK chatroom identifier. May be a short id like "1" for the
 default room or a UUID like "30b2755c-c547-44ef-a0cc-cdbd8a15616f"
 for custom rooms (resolved by TakTalkRoomData broadcasts).
 Empty = broadcast room. */
    pb_callback_t chatroom_id;
    /* BCP-47-ish language tag or human-readable name (e.g. "en", "English").
 Empty = unspecified. */
    pb_callback_t lang;
    /* True when the source CoT carried a <voice/> marker, i.e. the message
 originated as push-to-talk speech-to-text. Lets receivers show a mic
 icon. Proto3 only encodes when true so empty payload cost is 0 bytes. */
    bool from_voice;
} meshtastic_TakTalkMessage;

/* TAKTALK room/membership broadcast (CoT type y-).

 Announces a TAKTALK chatroom's friendly name and roster so peers can
 resolve room UUIDs (used in TakTalkMessage.chatroom_id and
 GeoChat.room_id) to a display name and participant list. Not a chat
 message itself — these events are emitted by TAKTALK when rooms are
 created or memberships change. */
typedef struct _meshtastic_TakTalkRoomData {
    /* Callsign of the device broadcasting the room state (typically the
 room owner / latest writer).

 DEPRECATED in v0.3.2: always equals TAKPacketV2.callsign, so the wire
 byte was redundant. Builders stop emitting this field in v0.3.2;
 parsers still read it for one release so v0.3.1-encoded packets decode
 cleanly. To be removed entirely in v0.4.x. */
    pb_callback_t sender_callsign;
    /* Room UUID, matches TakTalkMessage.chatroom_id / GeoChat.room_id on
 messages routed into this room. */
    pb_callback_t room_id;
    /* Friendly display name for the room (e.g. "test", "Alpha Team"). */
    pb_callback_t room_name;
    /* Member callsigns. Wire-encoded as repeated strings; the underlying
 CoT carries them as a single <chatroom-participants>A,B,C</> element
 which parsers split / builders join on ','. */
    pb_callback_t participants;
} meshtastic_TakTalkRoomData;

/* ATAK directed-routing recipient list (CoT <marti><dest callsign='X'/>…</marti>).

 Present when an event is addressed to specific TAK users rather than the
 broadcast group. TAKTALK gates voice TTS on this element matching the
 receiver's callsign; directed b-t-f chats use it for the same purpose. A
 missing <marti> means "broadcast to all peers", which is the default for
 PLI, alerts, drawings, and most situational-awareness events.

 Carried as repeated strings (not indexes into a per-packet table) because
 the typical event has 1-2 destinations and table overhead would erase the
 savings. Receivers that need the original XML element rebuild it from
 dest_callsign on emit. */
typedef struct _meshtastic_Marti {
    /* Recipient callsigns. Order is preserved end-to-end so receivers can show
 primary-vs-cc distinction the same way ATAK does.

 If dest_callsign is [TAKPacketV2.callsign] (self-addressed, unusual but
 legal — e.g. ATAK echoing back to its own room), the builder still emits
 the element so loopback shapes round-trip cleanly. */
    pb_callback_t dest_callsign;
} meshtastic_Marti;

typedef PB_BYTES_ARRAY_T(220) meshtastic_TAKPacketV2_raw_detail_t;
/* ATAK v2 packet with expanded CoT field support and zstd dictionary compression.
 Sent on ATAK_PLUGIN_V2 port. The wire payload is:
   [1 byte flags][zstd-compressed TAKPacketV2 protobuf]
 Flags byte: bits 0-5 = dictionary ID, bits 6-7 = reserved. */
typedef struct _meshtastic_TAKPacketV2 {
    /* Well-known CoT event type enum.
 Use CotType_Other with cot_type_str for unknown types. */
    meshtastic_CotType cot_type_id;
    /* How the coordinates were generated */
    meshtastic_CotHow how;
    /* Callsign */
    char callsign[120];
    /* Team color assignment */
    meshtastic_Team team;
    /* Role of the group member */
    meshtastic_MemberRole role;
    /* Latitude, multiply by 1e-7 to get degrees in floating point */
    int32_t latitude_i;
    /* Longitude, multiply by 1e-7 to get degrees in floating point */
    int32_t longitude_i;
    /* Altitude in meters (HAE). ATAK's "no altitude" sentinel is hae=9999999.0.

 NOTE: an earlier v0.4.0 attempt made this `optional` to omit the 9999999
 sentinel from the wire, but measurement showed it was net-negative: the
 zstd dictionary already compresses the literal 9999999 to ~nothing, while
 proto3 `optional` forces a genuine 0 m HAE (common on routes/drawings that
 carry hae="0.0" or omit hae → parsed as 0) to encode explicitly (+2 bytes),
 which REGRESSED the worst-case route fixture. Kept as a plain field. */
    int32_t altitude;
    /* Speed in cm/s */
    uint32_t speed;
    /* Course in degrees * 100 (0-36000) */
    uint16_t course;
    /* Battery level 0-100 */
    uint8_t battery;
    /* Geopoint source */
    meshtastic_GeoPointSource geo_src;
    /* Altitude source */
    meshtastic_GeoPointSource alt_src;
    /* Device UID (UUID string or device ID like "ANDROID-xxxx") */
    char uid[48];
    /* Device callsign */
    char device_callsign[120];
    /* Stale time as seconds offset from event time */
    uint16_t stale_seconds;
    /* TAK client version string */
    char tak_version[64];
    /* TAK device model */
    char tak_device[32];
    /* TAK platform (ATAK-CIV, WebTAK, etc.) */
    char tak_platform[32];
    /* TAK OS version */
    char tak_os[16];
    /* Connection endpoint */
    char endpoint[32];
    /* Phone number */
    char phone[20];
    /* CoT event type string, only populated when cot_type_id is CotType_Other */
    char cot_type_str[32];
    /* Optional remarks / free-text annotation from the <remarks> element.
 Populated for non-GeoChat payload types (shapes, markers, routes, etc.)
 when the original CoT event carried non-empty remarks text.
 GeoChat messages carry their text in GeoChat.message instead.
 Empty string (proto3 default) means no remarks were present. */
    pb_callback_t remarks;
    /* Observed weather conditions (temperature, wind). From <environment>.
 Type is `TAKEnvironment`, not `Environment`, to avoid colliding with
 SwiftUI's `@Environment` property wrapper in iOS consumers. */
    bool has_environment;
    meshtastic_TAKEnvironment environment;
    /* Sensor field-of-view cone (camera, FLIR, laser, etc.). From <sensor>. */
    bool has_sensor_fov;
    meshtastic_SensorFov sensor_fov;
    /* Directed-routing recipient list (CoT <marti><dest callsign='X'/>…</marti>).
 Empty / unset = broadcast to all peers (the default for situational-awareness
 events). Populated for TAKTALK m-t-t, directed b-t-f DMs, and any other CoT
 shape that ATAK addresses to specific recipients. TAKTALK gates voice TTS
 playback on this element matching the receiver's callsign, so dropping it
 silently breaks voice messaging end-to-end.

 See Marti. */
    bool has_marti;
    meshtastic_Marti marti;
    pb_size_t which_payload_variant;
    union {
        /* ATAK GeoChat message */
        meshtastic_GeoChat chat;
        /* Aircraft track data (ADS-B, military air) */
        meshtastic_AircraftTrack aircraft;
        /* Generic CoT detail XML for unmapped types. Kept as a fallback for CoT
     types not yet promoted to a typed variant; drawings, markers, ranging
     tools, and routes have dedicated variants below and should not land here. */
        meshtastic_TAKPacketV2_raw_detail_t raw_detail;
        /* User-drawn tactical graphic: circle, rectangle, polygon, polyline,
     telestration, ranging circle, or bullseye. See DrawnShape. */
        meshtastic_DrawnShape shape;
        /* Fixed point of interest: spot marker, waypoint, checkpoint, 2525
     symbol, or custom icon. See Marker. */
        meshtastic_Marker marker;
        /* Range and bearing measurement line. See RangeAndBearing. */
        meshtastic_RangeAndBearing rab;
        /* Named route with ordered waypoints and control points. See Route. */
        meshtastic_Route route;
        /* 9-line MEDEVAC request. See CasevacReport. */
        meshtastic_CasevacReport casevac;
        /* Emergency beacon / 911 alert. See EmergencyAlert. */
        meshtastic_EmergencyAlert emergency;
        /* Task / engage request. See TaskRequest. */
        meshtastic_TaskRequest task;
        /* TAKTALK chat message (CoT type m-t-t). See TakTalkMessage.
     Voice audio itself rides UDP/RTP outside the mesh; this carries the
     text envelope plus a from_voice marker for receiver UX. */
        meshtastic_TakTalkMessage taktalk;
        /* TAKTALK room/membership broadcast (CoT type y-). See TakTalkRoomData.
     Resolves room UUIDs (used in TakTalkMessage.chatroom_id and
     GeoChat.room_id) to display name + roster on receivers. */
        meshtastic_TakTalkRoomData taktalk_room;
    } payload_variant;
} meshtastic_TAKPacketV2;


#ifdef __cplusplus
extern "C" {
#endif

/* Helper constants for enums */
#define _meshtastic_Team_MIN meshtastic_Team_Unspecifed_Color
#define _meshtastic_Team_MAX meshtastic_Team_Brown
#define _meshtastic_Team_ARRAYSIZE ((meshtastic_Team)(meshtastic_Team_Brown+1))

#define _meshtastic_MemberRole_MIN meshtastic_MemberRole_Unspecifed
#define _meshtastic_MemberRole_MAX meshtastic_MemberRole_K9
#define _meshtastic_MemberRole_ARRAYSIZE ((meshtastic_MemberRole)(meshtastic_MemberRole_K9+1))

#define _meshtastic_CotHow_MIN meshtastic_CotHow_CotHow_Unspecified
#define _meshtastic_CotHow_MAX meshtastic_CotHow_CotHow_m_s
#define _meshtastic_CotHow_ARRAYSIZE ((meshtastic_CotHow)(meshtastic_CotHow_CotHow_m_s+1))

#define _meshtastic_CotType_MIN meshtastic_CotType_CotType_Other
#define _meshtastic_CotType_MAX meshtastic_CotType_CotType_y
#define _meshtastic_CotType_ARRAYSIZE ((meshtastic_CotType)(meshtastic_CotType_CotType_y+1))

#define _meshtastic_GeoPointSource_MIN meshtastic_GeoPointSource_GeoPointSource_Unspecified
#define _meshtastic_GeoPointSource_MAX meshtastic_GeoPointSource_GeoPointSource_NETWORK
#define _meshtastic_GeoPointSource_ARRAYSIZE ((meshtastic_GeoPointSource)(meshtastic_GeoPointSource_GeoPointSource_NETWORK+1))

#define _meshtastic_GeoChat_ReceiptType_MIN meshtastic_GeoChat_ReceiptType_ReceiptType_None
#define _meshtastic_GeoChat_ReceiptType_MAX meshtastic_GeoChat_ReceiptType_ReceiptType_Read
#define _meshtastic_GeoChat_ReceiptType_ARRAYSIZE ((meshtastic_GeoChat_ReceiptType)(meshtastic_GeoChat_ReceiptType_ReceiptType_Read+1))

#define _meshtastic_DrawnShape_Kind_MIN meshtastic_DrawnShape_Kind_Kind_Unspecified
#define _meshtastic_DrawnShape_Kind_MAX meshtastic_DrawnShape_Kind_Kind_Vehicle3D
#define _meshtastic_DrawnShape_Kind_ARRAYSIZE ((meshtastic_DrawnShape_Kind)(meshtastic_DrawnShape_Kind_Kind_Vehicle3D+1))

#define _meshtastic_DrawnShape_StyleMode_MIN meshtastic_DrawnShape_StyleMode_StyleMode_Unspecified
#define _meshtastic_DrawnShape_StyleMode_MAX meshtastic_DrawnShape_StyleMode_StyleMode_StrokeAndFill
#define _meshtastic_DrawnShape_StyleMode_ARRAYSIZE ((meshtastic_DrawnShape_StyleMode)(meshtastic_DrawnShape_StyleMode_StyleMode_StrokeAndFill+1))

#define _meshtastic_Marker_Kind_MIN meshtastic_Marker_Kind_Kind_Unspecified
#define _meshtastic_Marker_Kind_MAX meshtastic_Marker_Kind_Kind_ImageMarker
#define _meshtastic_Marker_Kind_ARRAYSIZE ((meshtastic_Marker_Kind)(meshtastic_Marker_Kind_Kind_ImageMarker+1))

#define _meshtastic_Route_Method_MIN meshtastic_Route_Method_Method_Unspecified
#define _meshtastic_Route_Method_MAX meshtastic_Route_Method_Method_Watercraft
#define _meshtastic_Route_Method_ARRAYSIZE ((meshtastic_Route_Method)(meshtastic_Route_Method_Method_Watercraft+1))

#define _meshtastic_Route_Direction_MIN meshtastic_Route_Direction_Direction_Unspecified
#define _meshtastic_Route_Direction_MAX meshtastic_Route_Direction_Direction_Exfil
#define _meshtastic_Route_Direction_ARRAYSIZE ((meshtastic_Route_Direction)(meshtastic_Route_Direction_Direction_Exfil+1))

#define _meshtastic_CasevacReport_Precedence_MIN meshtastic_CasevacReport_Precedence_Precedence_Unspecified
#define _meshtastic_CasevacReport_Precedence_MAX meshtastic_CasevacReport_Precedence_Precedence_Convenience
#define _meshtastic_CasevacReport_Precedence_ARRAYSIZE ((meshtastic_CasevacReport_Precedence)(meshtastic_CasevacReport_Precedence_Precedence_Convenience+1))

#define _meshtastic_CasevacReport_HlzMarking_MIN meshtastic_CasevacReport_HlzMarking_HlzMarking_Unspecified
#define _meshtastic_CasevacReport_HlzMarking_MAX meshtastic_CasevacReport_HlzMarking_HlzMarking_Other
#define _meshtastic_CasevacReport_HlzMarking_ARRAYSIZE ((meshtastic_CasevacReport_HlzMarking)(meshtastic_CasevacReport_HlzMarking_HlzMarking_Other+1))

#define _meshtastic_CasevacReport_Security_MIN meshtastic_CasevacReport_Security_Security_Unspecified
#define _meshtastic_CasevacReport_Security_MAX meshtastic_CasevacReport_Security_Security_EnemyInArmedContact
#define _meshtastic_CasevacReport_Security_ARRAYSIZE ((meshtastic_CasevacReport_Security)(meshtastic_CasevacReport_Security_Security_EnemyInArmedContact+1))

#define _meshtastic_EmergencyAlert_Type_MIN meshtastic_EmergencyAlert_Type_Type_Unspecified
#define _meshtastic_EmergencyAlert_Type_MAX meshtastic_EmergencyAlert_Type_Type_Cancel
#define _meshtastic_EmergencyAlert_Type_ARRAYSIZE ((meshtastic_EmergencyAlert_Type)(meshtastic_EmergencyAlert_Type_Type_Cancel+1))

#define _meshtastic_TaskRequest_Priority_MIN meshtastic_TaskRequest_Priority_Priority_Unspecified
#define _meshtastic_TaskRequest_Priority_MAX meshtastic_TaskRequest_Priority_Priority_Critical
#define _meshtastic_TaskRequest_Priority_ARRAYSIZE ((meshtastic_TaskRequest_Priority)(meshtastic_TaskRequest_Priority_Priority_Critical+1))

#define _meshtastic_TaskRequest_Status_MIN meshtastic_TaskRequest_Status_Status_Unspecified
#define _meshtastic_TaskRequest_Status_MAX meshtastic_TaskRequest_Status_Status_Cancelled
#define _meshtastic_TaskRequest_Status_ARRAYSIZE ((meshtastic_TaskRequest_Status)(meshtastic_TaskRequest_Status_Status_Cancelled+1))

#define _meshtastic_SensorFov_SensorType_MIN meshtastic_SensorFov_SensorType_SensorType_Unspecified
#define _meshtastic_SensorFov_SensorType_MAX meshtastic_SensorFov_SensorType_SensorType_Other
#define _meshtastic_SensorFov_SensorType_ARRAYSIZE ((meshtastic_SensorFov_SensorType)(meshtastic_SensorFov_SensorType_SensorType_Other+1))


#define meshtastic_GeoChat_receipt_type_ENUMTYPE meshtastic_GeoChat_ReceiptType

#define meshtastic_Group_role_ENUMTYPE meshtastic_MemberRole
#define meshtastic_Group_team_ENUMTYPE meshtastic_Team






#define meshtastic_DrawnShape_kind_ENUMTYPE meshtastic_DrawnShape_Kind
#define meshtastic_DrawnShape_style_ENUMTYPE meshtastic_DrawnShape_StyleMode
#define meshtastic_DrawnShape_stroke_color_ENUMTYPE meshtastic_Team
#define meshtastic_DrawnShape_fill_color_ENUMTYPE meshtastic_Team

#define meshtastic_Marker_kind_ENUMTYPE meshtastic_Marker_Kind
#define meshtastic_Marker_color_ENUMTYPE meshtastic_Team

#define meshtastic_RangeAndBearing_stroke_color_ENUMTYPE meshtastic_Team

#define meshtastic_Route_method_ENUMTYPE meshtastic_Route_Method
#define meshtastic_Route_direction_ENUMTYPE meshtastic_Route_Direction


#define meshtastic_CasevacReport_precedence_ENUMTYPE meshtastic_CasevacReport_Precedence
#define meshtastic_CasevacReport_security_ENUMTYPE meshtastic_CasevacReport_Security
#define meshtastic_CasevacReport_hlz_marking_ENUMTYPE meshtastic_CasevacReport_HlzMarking


#define meshtastic_EmergencyAlert_type_ENUMTYPE meshtastic_EmergencyAlert_Type

#define meshtastic_TaskRequest_priority_ENUMTYPE meshtastic_TaskRequest_Priority
#define meshtastic_TaskRequest_status_ENUMTYPE meshtastic_TaskRequest_Status


#define meshtastic_SensorFov_type_ENUMTYPE meshtastic_SensorFov_SensorType




#define meshtastic_TAKPacketV2_cot_type_id_ENUMTYPE meshtastic_CotType
#define meshtastic_TAKPacketV2_how_ENUMTYPE meshtastic_CotHow
#define meshtastic_TAKPacketV2_team_ENUMTYPE meshtastic_Team
#define meshtastic_TAKPacketV2_role_ENUMTYPE meshtastic_MemberRole
#define meshtastic_TAKPacketV2_geo_src_ENUMTYPE meshtastic_GeoPointSource
#define meshtastic_TAKPacketV2_alt_src_ENUMTYPE meshtastic_GeoPointSource


/* Initializer values for message structs */
#define meshtastic_TAKPacket_init_default        {0, false, meshtastic_Contact_init_default, false, meshtastic_Group_init_default, false, meshtastic_Status_init_default, 0, {meshtastic_PLI_init_default}}
#define meshtastic_GeoChat_init_default          {"", false, "", false, "", "", _meshtastic_GeoChat_ReceiptType_MIN, {{NULL}, NULL}, {{NULL}, NULL}, {{NULL}, NULL}}
#define meshtastic_Group_init_default            {_meshtastic_MemberRole_MIN, _meshtastic_Team_MIN}
#define meshtastic_Status_init_default           {0}
#define meshtastic_Contact_init_default          {"", ""}
#define meshtastic_PLI_init_default              {0, 0, 0, 0, 0}
#define meshtastic_AircraftTrack_init_default    {"", "", "", "", 0, "", 0, 0, ""}
#define meshtastic_CotGeoPoint_init_default      {0, 0}
#define meshtastic_DrawnShape_init_default       {_meshtastic_DrawnShape_Kind_MIN, _meshtastic_DrawnShape_StyleMode_MIN, 0, 0, 0, _meshtastic_Team_MIN, 0, 0, _meshtastic_Team_MIN, 0, 0, 0, 0, 0, 0, "", {{NULL}, NULL}, {{NULL}, NULL}}
#define meshtastic_Marker_init_default           {_meshtastic_Marker_Kind_MIN, _meshtastic_Team_MIN, 0, 0, "", "", "", ""}
#define meshtastic_RangeAndBearing_init_default  {false, meshtastic_CotGeoPoint_init_default, "", 0, 0, _meshtastic_Team_MIN, 0, 0}
#define meshtastic_Route_init_default            {_meshtastic_Route_Method_MIN, _meshtastic_Route_Direction_MIN, "", 0, 0, {meshtastic_Route_Link_init_default, meshtastic_Route_Link_init_default, meshtastic_Route_Link_init_default, meshtastic_Route_Link_init_default, meshtastic_Route_Link_init_default, meshtastic_Route_Link_init_default, meshtastic_Route_Link_init_default, meshtastic_Route_Link_init_default, meshtastic_Route_Link_init_default, meshtastic_Route_Link_init_default, meshtastic_Route_Link_init_default, meshtastic_Route_Link_init_default, meshtastic_Route_Link_init_default, meshtastic_Route_Link_init_default, meshtastic_Route_Link_init_default, meshtastic_Route_Link_init_default}, 0}
#define meshtastic_Route_Link_init_default       {false, meshtastic_CotGeoPoint_init_default, "", "", 0}
#define meshtastic_CasevacReport_init_default    {_meshtastic_CasevacReport_Precedence_MIN, 0, 0, 0, _meshtastic_CasevacReport_Security_MIN, _meshtastic_CasevacReport_HlzMarking_MIN, "", 0, 0, 0, 0, 0, 0, 0, "", {{NULL}, NULL}, {{NULL}, NULL}, 0, 0, 0, 0, 0, {{NULL}, NULL}, {{NULL}, NULL}, {{NULL}, NULL}, {{NULL}, NULL}, {{NULL}, NULL}, {{NULL}, NULL}, {{NULL}, NULL}, {{NULL}, NULL}, {{NULL}, NULL}, {{NULL}, NULL}, {{NULL}, NULL}}
#define meshtastic_ZMistEntry_init_default       {{{NULL}, NULL}, {{NULL}, NULL}, {{NULL}, NULL}, {{NULL}, NULL}, {{NULL}, NULL}, {{NULL}, NULL}}
#define meshtastic_EmergencyAlert_init_default   {_meshtastic_EmergencyAlert_Type_MIN, "", ""}
#define meshtastic_TaskRequest_init_default      {"", "", "", _meshtastic_TaskRequest_Priority_MIN, _meshtastic_TaskRequest_Status_MIN, ""}
#define meshtastic_TAKEnvironment_init_default   {0, 0, 0}
#define meshtastic_SensorFov_init_default        {_meshtastic_SensorFov_SensorType_MIN, 0, false, 0, 0, 0, 0, 0, {{NULL}, NULL}}
#define meshtastic_TakTalkMessage_init_default   {{{NULL}, NULL}, {{NULL}, NULL}, {{NULL}, NULL}, 0}
#define meshtastic_TakTalkRoomData_init_default  {{{NULL}, NULL}, {{NULL}, NULL}, {{NULL}, NULL}, {{NULL}, NULL}}
#define meshtastic_Marti_init_default            {{{NULL}, NULL}}
#define meshtastic_TAKPacketV2_init_default      {_meshtastic_CotType_MIN, _meshtastic_CotHow_MIN, "", _meshtastic_Team_MIN, _meshtastic_MemberRole_MIN, 0, 0, 0, 0, 0, 0, _meshtastic_GeoPointSource_MIN, _meshtastic_GeoPointSource_MIN, "", "", 0, "", "", "", "", "", "", "", {{NULL}, NULL}, false, meshtastic_TAKEnvironment_init_default, false, meshtastic_SensorFov_init_default, false, meshtastic_Marti_init_default, 0, {meshtastic_GeoChat_init_default}}
#define meshtastic_TAKPacket_init_zero           {0, false, meshtastic_Contact_init_zero, false, meshtastic_Group_init_zero, false, meshtastic_Status_init_zero, 0, {meshtastic_PLI_init_zero}}
#define meshtastic_GeoChat_init_zero             {"", false, "", false, "", "", _meshtastic_GeoChat_ReceiptType_MIN, {{NULL}, NULL}, {{NULL}, NULL}, {{NULL}, NULL}}
#define meshtastic_Group_init_zero               {_meshtastic_MemberRole_MIN, _meshtastic_Team_MIN}
#define meshtastic_Status_init_zero              {0}
#define meshtastic_Contact_init_zero             {"", ""}
#define meshtastic_PLI_init_zero                 {0, 0, 0, 0, 0}
#define meshtastic_AircraftTrack_init_zero       {"", "", "", "", 0, "", 0, 0, ""}
#define meshtastic_CotGeoPoint_init_zero         {0, 0}
#define meshtastic_DrawnShape_init_zero          {_meshtastic_DrawnShape_Kind_MIN, _meshtastic_DrawnShape_StyleMode_MIN, 0, 0, 0, _meshtastic_Team_MIN, 0, 0, _meshtastic_Team_MIN, 0, 0, 0, 0, 0, 0, "", {{NULL}, NULL}, {{NULL}, NULL}}
#define meshtastic_Marker_init_zero              {_meshtastic_Marker_Kind_MIN, _meshtastic_Team_MIN, 0, 0, "", "", "", ""}
#define meshtastic_RangeAndBearing_init_zero     {false, meshtastic_CotGeoPoint_init_zero, "", 0, 0, _meshtastic_Team_MIN, 0, 0}
#define meshtastic_Route_init_zero               {_meshtastic_Route_Method_MIN, _meshtastic_Route_Direction_MIN, "", 0, 0, {meshtastic_Route_Link_init_zero, meshtastic_Route_Link_init_zero, meshtastic_Route_Link_init_zero, meshtastic_Route_Link_init_zero, meshtastic_Route_Link_init_zero, meshtastic_Route_Link_init_zero, meshtastic_Route_Link_init_zero, meshtastic_Route_Link_init_zero, meshtastic_Route_Link_init_zero, meshtastic_Route_Link_init_zero, meshtastic_Route_Link_init_zero, meshtastic_Route_Link_init_zero, meshtastic_Route_Link_init_zero, meshtastic_Route_Link_init_zero, meshtastic_Route_Link_init_zero, meshtastic_Route_Link_init_zero}, 0}
#define meshtastic_Route_Link_init_zero          {false, meshtastic_CotGeoPoint_init_zero, "", "", 0}
#define meshtastic_CasevacReport_init_zero       {_meshtastic_CasevacReport_Precedence_MIN, 0, 0, 0, _meshtastic_CasevacReport_Security_MIN, _meshtastic_CasevacReport_HlzMarking_MIN, "", 0, 0, 0, 0, 0, 0, 0, "", {{NULL}, NULL}, {{NULL}, NULL}, 0, 0, 0, 0, 0, {{NULL}, NULL}, {{NULL}, NULL}, {{NULL}, NULL}, {{NULL}, NULL}, {{NULL}, NULL}, {{NULL}, NULL}, {{NULL}, NULL}, {{NULL}, NULL}, {{NULL}, NULL}, {{NULL}, NULL}, {{NULL}, NULL}}
#define meshtastic_ZMistEntry_init_zero          {{{NULL}, NULL}, {{NULL}, NULL}, {{NULL}, NULL}, {{NULL}, NULL}, {{NULL}, NULL}, {{NULL}, NULL}}
#define meshtastic_EmergencyAlert_init_zero      {_meshtastic_EmergencyAlert_Type_MIN, "", ""}
#define meshtastic_TaskRequest_init_zero         {"", "", "", _meshtastic_TaskRequest_Priority_MIN, _meshtastic_TaskRequest_Status_MIN, ""}
#define meshtastic_TAKEnvironment_init_zero      {0, 0, 0}
#define meshtastic_SensorFov_init_zero           {_meshtastic_SensorFov_SensorType_MIN, 0, false, 0, 0, 0, 0, 0, {{NULL}, NULL}}
#define meshtastic_TakTalkMessage_init_zero      {{{NULL}, NULL}, {{NULL}, NULL}, {{NULL}, NULL}, 0}
#define meshtastic_TakTalkRoomData_init_zero     {{{NULL}, NULL}, {{NULL}, NULL}, {{NULL}, NULL}, {{NULL}, NULL}}
#define meshtastic_Marti_init_zero               {{{NULL}, NULL}}
#define meshtastic_TAKPacketV2_init_zero         {_meshtastic_CotType_MIN, _meshtastic_CotHow_MIN, "", _meshtastic_Team_MIN, _meshtastic_MemberRole_MIN, 0, 0, 0, 0, 0, 0, _meshtastic_GeoPointSource_MIN, _meshtastic_GeoPointSource_MIN, "", "", 0, "", "", "", "", "", "", "", {{NULL}, NULL}, false, meshtastic_TAKEnvironment_init_zero, false, meshtastic_SensorFov_init_zero, false, meshtastic_Marti_init_zero, 0, {meshtastic_GeoChat_init_zero}}

/* Field tags (for use in manual encoding/decoding) */
#define meshtastic_GeoChat_message_tag           1
#define meshtastic_GeoChat_to_tag                2
#define meshtastic_GeoChat_to_callsign_tag       3
#define meshtastic_GeoChat_receipt_for_uid_tag   4
#define meshtastic_GeoChat_receipt_type_tag      5
#define meshtastic_GeoChat_lang_tag              6
#define meshtastic_GeoChat_room_id_tag           7
#define meshtastic_GeoChat_voice_profile_id_tag  8
#define meshtastic_Group_role_tag                1
#define meshtastic_Group_team_tag                2
#define meshtastic_Status_battery_tag            1
#define meshtastic_Contact_callsign_tag          1
#define meshtastic_Contact_device_callsign_tag   2
#define meshtastic_PLI_latitude_i_tag            1
#define meshtastic_PLI_longitude_i_tag           2
#define meshtastic_PLI_altitude_tag              3
#define meshtastic_PLI_speed_tag                 4
#define meshtastic_PLI_course_tag                5
#define meshtastic_TAKPacket_is_compressed_tag   1
#define meshtastic_TAKPacket_contact_tag         2
#define meshtastic_TAKPacket_group_tag           3
#define meshtastic_TAKPacket_status_tag          4
#define meshtastic_TAKPacket_pli_tag             5
#define meshtastic_TAKPacket_chat_tag            6
#define meshtastic_TAKPacket_detail_tag          7
#define meshtastic_AircraftTrack_icao_tag        1
#define meshtastic_AircraftTrack_registration_tag 2
#define meshtastic_AircraftTrack_flight_tag      3
#define meshtastic_AircraftTrack_aircraft_type_tag 4
#define meshtastic_AircraftTrack_squawk_tag      5
#define meshtastic_AircraftTrack_category_tag    6
#define meshtastic_AircraftTrack_rssi_x10_tag    7
#define meshtastic_AircraftTrack_gps_tag         8
#define meshtastic_AircraftTrack_cot_host_id_tag 9
#define meshtastic_CotGeoPoint_lat_delta_i_tag   1
#define meshtastic_CotGeoPoint_lon_delta_i_tag   2
#define meshtastic_DrawnShape_kind_tag           1
#define meshtastic_DrawnShape_style_tag          2
#define meshtastic_DrawnShape_major_cm_tag       3
#define meshtastic_DrawnShape_minor_cm_tag       4
#define meshtastic_DrawnShape_angle_deg_tag      5
#define meshtastic_DrawnShape_stroke_color_tag   6
#define meshtastic_DrawnShape_stroke_argb_tag    7
#define meshtastic_DrawnShape_stroke_weight_x10_tag 8
#define meshtastic_DrawnShape_fill_color_tag     9
#define meshtastic_DrawnShape_fill_argb_tag      10
#define meshtastic_DrawnShape_labels_on_tag      11
#define meshtastic_DrawnShape_truncated_tag      13
#define meshtastic_DrawnShape_bullseye_distance_dm_tag 14
#define meshtastic_DrawnShape_bullseye_bearing_ref_tag 15
#define meshtastic_DrawnShape_bullseye_flags_tag 16
#define meshtastic_DrawnShape_bullseye_uid_ref_tag 17
#define meshtastic_DrawnShape_vertex_lat_deltas_tag 18
#define meshtastic_DrawnShape_vertex_lon_deltas_tag 19
#define meshtastic_Marker_kind_tag               1
#define meshtastic_Marker_color_tag              2
#define meshtastic_Marker_color_argb_tag         3
#define meshtastic_Marker_readiness_tag          4
#define meshtastic_Marker_parent_uid_tag         5
#define meshtastic_Marker_parent_type_tag        6
#define meshtastic_Marker_parent_callsign_tag    7
#define meshtastic_Marker_iconset_tag            8
#define meshtastic_RangeAndBearing_anchor_tag    1
#define meshtastic_RangeAndBearing_anchor_uid_tag 2
#define meshtastic_RangeAndBearing_range_cm_tag  3
#define meshtastic_RangeAndBearing_bearing_cdeg_tag 4
#define meshtastic_RangeAndBearing_stroke_color_tag 5
#define meshtastic_RangeAndBearing_stroke_argb_tag 6
#define meshtastic_RangeAndBearing_stroke_weight_x10_tag 7
#define meshtastic_Route_Link_point_tag          1
#define meshtastic_Route_Link_uid_tag            2
#define meshtastic_Route_Link_callsign_tag       3
#define meshtastic_Route_Link_link_type_tag      4
#define meshtastic_Route_method_tag              1
#define meshtastic_Route_direction_tag           2
#define meshtastic_Route_prefix_tag              3
#define meshtastic_Route_stroke_weight_x10_tag   4
#define meshtastic_Route_links_tag               5
#define meshtastic_Route_truncated_tag           6
#define meshtastic_CasevacReport_precedence_tag  1
#define meshtastic_CasevacReport_equipment_flags_tag 2
#define meshtastic_CasevacReport_litter_patients_tag 3
#define meshtastic_CasevacReport_ambulatory_patients_tag 4
#define meshtastic_CasevacReport_security_tag    5
#define meshtastic_CasevacReport_hlz_marking_tag 6
#define meshtastic_CasevacReport_zone_marker_tag 7
#define meshtastic_CasevacReport_us_military_tag 8
#define meshtastic_CasevacReport_us_civilian_tag 9
#define meshtastic_CasevacReport_non_us_military_tag 10
#define meshtastic_CasevacReport_non_us_civilian_tag 11
#define meshtastic_CasevacReport_epw_tag         12
#define meshtastic_CasevacReport_child_tag       13
#define meshtastic_CasevacReport_terrain_flags_tag 14
#define meshtastic_CasevacReport_frequency_tag   15
#define meshtastic_CasevacReport_title_tag       16
#define meshtastic_CasevacReport_medline_remarks_tag 17
#define meshtastic_CasevacReport_urgent_count_tag 18
#define meshtastic_CasevacReport_urgent_surgical_count_tag 19
#define meshtastic_CasevacReport_priority_count_tag 20
#define meshtastic_CasevacReport_routine_count_tag 21
#define meshtastic_CasevacReport_convenience_count_tag 22
#define meshtastic_CasevacReport_equipment_detail_tag 23
#define meshtastic_CasevacReport_zone_protected_coord_tag 24
#define meshtastic_CasevacReport_terrain_slope_dir_tag 25
#define meshtastic_CasevacReport_terrain_other_detail_tag 26
#define meshtastic_CasevacReport_marked_by_tag   27
#define meshtastic_CasevacReport_obstacles_tag   28
#define meshtastic_CasevacReport_winds_are_from_tag 29
#define meshtastic_CasevacReport_friendlies_tag  30
#define meshtastic_CasevacReport_enemy_tag       31
#define meshtastic_CasevacReport_hlz_remarks_tag 32
#define meshtastic_CasevacReport_zmist_tag       33
#define meshtastic_ZMistEntry_title_tag          1
#define meshtastic_ZMistEntry_z_tag              2
#define meshtastic_ZMistEntry_m_tag              3
#define meshtastic_ZMistEntry_i_tag              4
#define meshtastic_ZMistEntry_s_tag              5
#define meshtastic_ZMistEntry_t_tag              6
#define meshtastic_EmergencyAlert_type_tag       1
#define meshtastic_EmergencyAlert_authoring_uid_tag 2
#define meshtastic_EmergencyAlert_cancel_reference_uid_tag 3
#define meshtastic_TaskRequest_task_type_tag     1
#define meshtastic_TaskRequest_target_uid_tag    2
#define meshtastic_TaskRequest_assignee_uid_tag  3
#define meshtastic_TaskRequest_priority_tag      4
#define meshtastic_TaskRequest_status_tag        5
#define meshtastic_TaskRequest_note_tag          6
#define meshtastic_TAKEnvironment_temperature_c_x10_tag 1
#define meshtastic_TAKEnvironment_wind_direction_deg_tag 2
#define meshtastic_TAKEnvironment_wind_speed_cm_s_tag 3
#define meshtastic_SensorFov_type_tag            1
#define meshtastic_SensorFov_azimuth_deg_tag     2
#define meshtastic_SensorFov_range_m_tag         3
#define meshtastic_SensorFov_fov_horizontal_deg_tag 4
#define meshtastic_SensorFov_fov_vertical_deg_tag 5
#define meshtastic_SensorFov_elevation_deg_tag   6
#define meshtastic_SensorFov_roll_deg_tag        7
#define meshtastic_SensorFov_model_tag           8
#define meshtastic_TakTalkMessage_text_tag       1
#define meshtastic_TakTalkMessage_chatroom_id_tag 2
#define meshtastic_TakTalkMessage_lang_tag       3
#define meshtastic_TakTalkMessage_from_voice_tag 4
#define meshtastic_TakTalkRoomData_sender_callsign_tag 1
#define meshtastic_TakTalkRoomData_room_id_tag   2
#define meshtastic_TakTalkRoomData_room_name_tag 3
#define meshtastic_TakTalkRoomData_participants_tag 4
#define meshtastic_Marti_dest_callsign_tag       1
#define meshtastic_TAKPacketV2_cot_type_id_tag   1
#define meshtastic_TAKPacketV2_how_tag           2
#define meshtastic_TAKPacketV2_callsign_tag      3
#define meshtastic_TAKPacketV2_team_tag          4
#define meshtastic_TAKPacketV2_role_tag          5
#define meshtastic_TAKPacketV2_latitude_i_tag    6
#define meshtastic_TAKPacketV2_longitude_i_tag   7
#define meshtastic_TAKPacketV2_altitude_tag      8
#define meshtastic_TAKPacketV2_speed_tag         9
#define meshtastic_TAKPacketV2_course_tag        10
#define meshtastic_TAKPacketV2_battery_tag       11
#define meshtastic_TAKPacketV2_geo_src_tag       12
#define meshtastic_TAKPacketV2_alt_src_tag       13
#define meshtastic_TAKPacketV2_uid_tag           14
#define meshtastic_TAKPacketV2_device_callsign_tag 15
#define meshtastic_TAKPacketV2_stale_seconds_tag 16
#define meshtastic_TAKPacketV2_tak_version_tag   17
#define meshtastic_TAKPacketV2_tak_device_tag    18
#define meshtastic_TAKPacketV2_tak_platform_tag  19
#define meshtastic_TAKPacketV2_tak_os_tag        20
#define meshtastic_TAKPacketV2_endpoint_tag      21
#define meshtastic_TAKPacketV2_phone_tag         22
#define meshtastic_TAKPacketV2_cot_type_str_tag  23
#define meshtastic_TAKPacketV2_remarks_tag       24
#define meshtastic_TAKPacketV2_environment_tag   25
#define meshtastic_TAKPacketV2_sensor_fov_tag    26
#define meshtastic_TAKPacketV2_marti_tag         29
#define meshtastic_TAKPacketV2_chat_tag          31
#define meshtastic_TAKPacketV2_aircraft_tag      32
#define meshtastic_TAKPacketV2_raw_detail_tag    33
#define meshtastic_TAKPacketV2_shape_tag         34
#define meshtastic_TAKPacketV2_marker_tag        35
#define meshtastic_TAKPacketV2_rab_tag           36
#define meshtastic_TAKPacketV2_route_tag         37
#define meshtastic_TAKPacketV2_casevac_tag       38
#define meshtastic_TAKPacketV2_emergency_tag     39
#define meshtastic_TAKPacketV2_task_tag          40
#define meshtastic_TAKPacketV2_taktalk_tag       41
#define meshtastic_TAKPacketV2_taktalk_room_tag  42

/* Struct field encoding specification for nanopb */
#define meshtastic_TAKPacket_FIELDLIST(X, a) \
X(a, STATIC,   SINGULAR, BOOL,     is_compressed,     1) \
X(a, STATIC,   OPTIONAL, MESSAGE,  contact,           2) \
X(a, STATIC,   OPTIONAL, MESSAGE,  group,             3) \
X(a, STATIC,   OPTIONAL, MESSAGE,  status,            4) \
X(a, STATIC,   ONEOF,    MESSAGE,  (payload_variant,pli,payload_variant.pli),   5) \
X(a, STATIC,   ONEOF,    MESSAGE,  (payload_variant,chat,payload_variant.chat),   6) \
X(a, STATIC,   ONEOF,    BYTES,    (payload_variant,detail,payload_variant.detail),   7)
#define meshtastic_TAKPacket_CALLBACK NULL
#define meshtastic_TAKPacket_DEFAULT NULL
#define meshtastic_TAKPacket_contact_MSGTYPE meshtastic_Contact
#define meshtastic_TAKPacket_group_MSGTYPE meshtastic_Group
#define meshtastic_TAKPacket_status_MSGTYPE meshtastic_Status
#define meshtastic_TAKPacket_payload_variant_pli_MSGTYPE meshtastic_PLI
#define meshtastic_TAKPacket_payload_variant_chat_MSGTYPE meshtastic_GeoChat

#define meshtastic_GeoChat_FIELDLIST(X, a) \
X(a, STATIC,   SINGULAR, STRING,   message,           1) \
X(a, STATIC,   OPTIONAL, STRING,   to,                2) \
X(a, STATIC,   OPTIONAL, STRING,   to_callsign,       3) \
X(a, STATIC,   SINGULAR, STRING,   receipt_for_uid,   4) \
X(a, STATIC,   SINGULAR, UENUM,    receipt_type,      5) \
X(a, CALLBACK, OPTIONAL, STRING,   lang,              6) \
X(a, CALLBACK, OPTIONAL, STRING,   room_id,           7) \
X(a, CALLBACK, OPTIONAL, STRING,   voice_profile_id,   8)
#define meshtastic_GeoChat_CALLBACK pb_default_field_callback
#define meshtastic_GeoChat_DEFAULT NULL

#define meshtastic_Group_FIELDLIST(X, a) \
X(a, STATIC,   SINGULAR, UENUM,    role,              1) \
X(a, STATIC,   SINGULAR, UENUM,    team,              2)
#define meshtastic_Group_CALLBACK NULL
#define meshtastic_Group_DEFAULT NULL

#define meshtastic_Status_FIELDLIST(X, a) \
X(a, STATIC,   SINGULAR, UINT32,   battery,           1)
#define meshtastic_Status_CALLBACK NULL
#define meshtastic_Status_DEFAULT NULL

#define meshtastic_Contact_FIELDLIST(X, a) \
X(a, STATIC,   SINGULAR, STRING,   callsign,          1) \
X(a, STATIC,   SINGULAR, STRING,   device_callsign,   2)
#define meshtastic_Contact_CALLBACK NULL
#define meshtastic_Contact_DEFAULT NULL

#define meshtastic_PLI_FIELDLIST(X, a) \
X(a, STATIC,   SINGULAR, SFIXED32, latitude_i,        1) \
X(a, STATIC,   SINGULAR, SFIXED32, longitude_i,       2) \
X(a, STATIC,   SINGULAR, INT32,    altitude,          3) \
X(a, STATIC,   SINGULAR, UINT32,   speed,             4) \
X(a, STATIC,   SINGULAR, UINT32,   course,            5)
#define meshtastic_PLI_CALLBACK NULL
#define meshtastic_PLI_DEFAULT NULL

#define meshtastic_AircraftTrack_FIELDLIST(X, a) \
X(a, STATIC,   SINGULAR, STRING,   icao,              1) \
X(a, STATIC,   SINGULAR, STRING,   registration,      2) \
X(a, STATIC,   SINGULAR, STRING,   flight,            3) \
X(a, STATIC,   SINGULAR, STRING,   aircraft_type,     4) \
X(a, STATIC,   SINGULAR, UINT32,   squawk,            5) \
X(a, STATIC,   SINGULAR, STRING,   category,          6) \
X(a, STATIC,   SINGULAR, SINT32,   rssi_x10,          7) \
X(a, STATIC,   SINGULAR, BOOL,     gps,               8) \
X(a, STATIC,   SINGULAR, STRING,   cot_host_id,       9)
#define meshtastic_AircraftTrack_CALLBACK NULL
#define meshtastic_AircraftTrack_DEFAULT NULL

#define meshtastic_CotGeoPoint_FIELDLIST(X, a) \
X(a, STATIC,   SINGULAR, SINT32,   lat_delta_i,       1) \
X(a, STATIC,   SINGULAR, SINT32,   lon_delta_i,       2)
#define meshtastic_CotGeoPoint_CALLBACK NULL
#define meshtastic_CotGeoPoint_DEFAULT NULL

#define meshtastic_DrawnShape_FIELDLIST(X, a) \
X(a, STATIC,   SINGULAR, UENUM,    kind,              1) \
X(a, STATIC,   SINGULAR, UENUM,    style,             2) \
X(a, STATIC,   SINGULAR, UINT32,   major_cm,          3) \
X(a, STATIC,   SINGULAR, UINT32,   minor_cm,          4) \
X(a, STATIC,   SINGULAR, UINT32,   angle_deg,         5) \
X(a, STATIC,   SINGULAR, UENUM,    stroke_color,      6) \
X(a, STATIC,   SINGULAR, FIXED32,  stroke_argb,       7) \
X(a, STATIC,   SINGULAR, UINT32,   stroke_weight_x10,   8) \
X(a, STATIC,   SINGULAR, UENUM,    fill_color,        9) \
X(a, STATIC,   SINGULAR, FIXED32,  fill_argb,        10) \
X(a, STATIC,   SINGULAR, BOOL,     labels_on,        11) \
X(a, STATIC,   SINGULAR, BOOL,     truncated,        13) \
X(a, STATIC,   SINGULAR, UINT32,   bullseye_distance_dm,  14) \
X(a, STATIC,   SINGULAR, UINT32,   bullseye_bearing_ref,  15) \
X(a, STATIC,   SINGULAR, UINT32,   bullseye_flags,   16) \
X(a, STATIC,   SINGULAR, STRING,   bullseye_uid_ref,  17) \
X(a, CALLBACK, REPEATED, SINT32,   vertex_lat_deltas,  18) \
X(a, CALLBACK, REPEATED, SINT32,   vertex_lon_deltas,  19)
#define meshtastic_DrawnShape_CALLBACK pb_default_field_callback
#define meshtastic_DrawnShape_DEFAULT NULL

#define meshtastic_Marker_FIELDLIST(X, a) \
X(a, STATIC,   SINGULAR, UENUM,    kind,              1) \
X(a, STATIC,   SINGULAR, UENUM,    color,             2) \
X(a, STATIC,   SINGULAR, FIXED32,  color_argb,        3) \
X(a, STATIC,   SINGULAR, BOOL,     readiness,         4) \
X(a, STATIC,   SINGULAR, STRING,   parent_uid,        5) \
X(a, STATIC,   SINGULAR, STRING,   parent_type,       6) \
X(a, STATIC,   SINGULAR, STRING,   parent_callsign,   7) \
X(a, STATIC,   SINGULAR, STRING,   iconset,           8)
#define meshtastic_Marker_CALLBACK NULL
#define meshtastic_Marker_DEFAULT NULL

#define meshtastic_RangeAndBearing_FIELDLIST(X, a) \
X(a, STATIC,   OPTIONAL, MESSAGE,  anchor,            1) \
X(a, STATIC,   SINGULAR, STRING,   anchor_uid,        2) \
X(a, STATIC,   SINGULAR, UINT32,   range_cm,          3) \
X(a, STATIC,   SINGULAR, UINT32,   bearing_cdeg,      4) \
X(a, STATIC,   SINGULAR, UENUM,    stroke_color,      5) \
X(a, STATIC,   SINGULAR, FIXED32,  stroke_argb,       6) \
X(a, STATIC,   SINGULAR, UINT32,   stroke_weight_x10,   7)
#define meshtastic_RangeAndBearing_CALLBACK NULL
#define meshtastic_RangeAndBearing_DEFAULT NULL
#define meshtastic_RangeAndBearing_anchor_MSGTYPE meshtastic_CotGeoPoint

#define meshtastic_Route_FIELDLIST(X, a) \
X(a, STATIC,   SINGULAR, UENUM,    method,            1) \
X(a, STATIC,   SINGULAR, UENUM,    direction,         2) \
X(a, STATIC,   SINGULAR, STRING,   prefix,            3) \
X(a, STATIC,   SINGULAR, UINT32,   stroke_weight_x10,   4) \
X(a, STATIC,   REPEATED, MESSAGE,  links,             5) \
X(a, STATIC,   SINGULAR, BOOL,     truncated,         6)
#define meshtastic_Route_CALLBACK NULL
#define meshtastic_Route_DEFAULT NULL
#define meshtastic_Route_links_MSGTYPE meshtastic_Route_Link

#define meshtastic_Route_Link_FIELDLIST(X, a) \
X(a, STATIC,   OPTIONAL, MESSAGE,  point,             1) \
X(a, STATIC,   SINGULAR, STRING,   uid,               2) \
X(a, STATIC,   SINGULAR, STRING,   callsign,          3) \
X(a, STATIC,   SINGULAR, UINT32,   link_type,         4)
#define meshtastic_Route_Link_CALLBACK NULL
#define meshtastic_Route_Link_DEFAULT NULL
#define meshtastic_Route_Link_point_MSGTYPE meshtastic_CotGeoPoint

#define meshtastic_CasevacReport_FIELDLIST(X, a) \
X(a, STATIC,   SINGULAR, UENUM,    precedence,        1) \
X(a, STATIC,   SINGULAR, UINT32,   equipment_flags,   2) \
X(a, STATIC,   SINGULAR, UINT32,   litter_patients,   3) \
X(a, STATIC,   SINGULAR, UINT32,   ambulatory_patients,   4) \
X(a, STATIC,   SINGULAR, UENUM,    security,          5) \
X(a, STATIC,   SINGULAR, UENUM,    hlz_marking,       6) \
X(a, STATIC,   SINGULAR, STRING,   zone_marker,       7) \
X(a, STATIC,   SINGULAR, UINT32,   us_military,       8) \
X(a, STATIC,   SINGULAR, UINT32,   us_civilian,       9) \
X(a, STATIC,   SINGULAR, UINT32,   non_us_military,  10) \
X(a, STATIC,   SINGULAR, UINT32,   non_us_civilian,  11) \
X(a, STATIC,   SINGULAR, UINT32,   epw,              12) \
X(a, STATIC,   SINGULAR, UINT32,   child,            13) \
X(a, STATIC,   SINGULAR, UINT32,   terrain_flags,    14) \
X(a, STATIC,   SINGULAR, STRING,   frequency,        15) \
X(a, CALLBACK, SINGULAR, STRING,   title,            16) \
X(a, CALLBACK, SINGULAR, STRING,   medline_remarks,  17) \
X(a, STATIC,   SINGULAR, UINT32,   urgent_count,     18) \
X(a, STATIC,   SINGULAR, UINT32,   urgent_surgical_count,  19) \
X(a, STATIC,   SINGULAR, UINT32,   priority_count,   20) \
X(a, STATIC,   SINGULAR, UINT32,   routine_count,    21) \
X(a, STATIC,   SINGULAR, UINT32,   convenience_count,  22) \
X(a, CALLBACK, SINGULAR, STRING,   equipment_detail,  23) \
X(a, CALLBACK, SINGULAR, STRING,   zone_protected_coord,  24) \
X(a, CALLBACK, SINGULAR, STRING,   terrain_slope_dir,  25) \
X(a, CALLBACK, SINGULAR, STRING,   terrain_other_detail,  26) \
X(a, CALLBACK, SINGULAR, STRING,   marked_by,        27) \
X(a, CALLBACK, SINGULAR, STRING,   obstacles,        28) \
X(a, CALLBACK, SINGULAR, STRING,   winds_are_from,   29) \
X(a, CALLBACK, SINGULAR, STRING,   friendlies,       30) \
X(a, CALLBACK, SINGULAR, STRING,   enemy,            31) \
X(a, CALLBACK, SINGULAR, STRING,   hlz_remarks,      32) \
X(a, CALLBACK, REPEATED, MESSAGE,  zmist,            33)
#define meshtastic_CasevacReport_CALLBACK pb_default_field_callback
#define meshtastic_CasevacReport_DEFAULT NULL
#define meshtastic_CasevacReport_zmist_MSGTYPE meshtastic_ZMistEntry

#define meshtastic_ZMistEntry_FIELDLIST(X, a) \
X(a, CALLBACK, SINGULAR, STRING,   title,             1) \
X(a, CALLBACK, SINGULAR, STRING,   z,                 2) \
X(a, CALLBACK, SINGULAR, STRING,   m,                 3) \
X(a, CALLBACK, SINGULAR, STRING,   i,                 4) \
X(a, CALLBACK, SINGULAR, STRING,   s,                 5) \
X(a, CALLBACK, SINGULAR, STRING,   t,                 6)
#define meshtastic_ZMistEntry_CALLBACK pb_default_field_callback
#define meshtastic_ZMistEntry_DEFAULT NULL

#define meshtastic_EmergencyAlert_FIELDLIST(X, a) \
X(a, STATIC,   SINGULAR, UENUM,    type,              1) \
X(a, STATIC,   SINGULAR, STRING,   authoring_uid,     2) \
X(a, STATIC,   SINGULAR, STRING,   cancel_reference_uid,   3)
#define meshtastic_EmergencyAlert_CALLBACK NULL
#define meshtastic_EmergencyAlert_DEFAULT NULL

#define meshtastic_TaskRequest_FIELDLIST(X, a) \
X(a, STATIC,   SINGULAR, STRING,   task_type,         1) \
X(a, STATIC,   SINGULAR, STRING,   target_uid,        2) \
X(a, STATIC,   SINGULAR, STRING,   assignee_uid,      3) \
X(a, STATIC,   SINGULAR, UENUM,    priority,          4) \
X(a, STATIC,   SINGULAR, UENUM,    status,            5) \
X(a, STATIC,   SINGULAR, STRING,   note,              6)
#define meshtastic_TaskRequest_CALLBACK NULL
#define meshtastic_TaskRequest_DEFAULT NULL

#define meshtastic_TAKEnvironment_FIELDLIST(X, a) \
X(a, STATIC,   SINGULAR, SINT32,   temperature_c_x10,   1) \
X(a, STATIC,   SINGULAR, UINT32,   wind_direction_deg,   2) \
X(a, STATIC,   SINGULAR, UINT32,   wind_speed_cm_s,   3)
#define meshtastic_TAKEnvironment_CALLBACK NULL
#define meshtastic_TAKEnvironment_DEFAULT NULL

#define meshtastic_SensorFov_FIELDLIST(X, a) \
X(a, STATIC,   SINGULAR, UENUM,    type,              1) \
X(a, STATIC,   SINGULAR, UINT32,   azimuth_deg,       2) \
X(a, STATIC,   OPTIONAL, UINT32,   range_m,           3) \
X(a, STATIC,   SINGULAR, UINT32,   fov_horizontal_deg,   4) \
X(a, STATIC,   SINGULAR, UINT32,   fov_vertical_deg,   5) \
X(a, STATIC,   SINGULAR, SINT32,   elevation_deg,     6) \
X(a, STATIC,   SINGULAR, SINT32,   roll_deg,          7) \
X(a, CALLBACK, SINGULAR, STRING,   model,             8)
#define meshtastic_SensorFov_CALLBACK pb_default_field_callback
#define meshtastic_SensorFov_DEFAULT NULL

#define meshtastic_TakTalkMessage_FIELDLIST(X, a) \
X(a, CALLBACK, SINGULAR, STRING,   text,              1) \
X(a, CALLBACK, SINGULAR, STRING,   chatroom_id,       2) \
X(a, CALLBACK, SINGULAR, STRING,   lang,              3) \
X(a, STATIC,   SINGULAR, BOOL,     from_voice,        4)
#define meshtastic_TakTalkMessage_CALLBACK pb_default_field_callback
#define meshtastic_TakTalkMessage_DEFAULT NULL

#define meshtastic_TakTalkRoomData_FIELDLIST(X, a) \
X(a, CALLBACK, SINGULAR, STRING,   sender_callsign,   1) \
X(a, CALLBACK, SINGULAR, STRING,   room_id,           2) \
X(a, CALLBACK, SINGULAR, STRING,   room_name,         3) \
X(a, CALLBACK, REPEATED, STRING,   participants,      4)
#define meshtastic_TakTalkRoomData_CALLBACK pb_default_field_callback
#define meshtastic_TakTalkRoomData_DEFAULT NULL

#define meshtastic_Marti_FIELDLIST(X, a) \
X(a, CALLBACK, REPEATED, STRING,   dest_callsign,     1)
#define meshtastic_Marti_CALLBACK pb_default_field_callback
#define meshtastic_Marti_DEFAULT NULL

#define meshtastic_TAKPacketV2_FIELDLIST(X, a) \
X(a, STATIC,   SINGULAR, UENUM,    cot_type_id,       1) \
X(a, STATIC,   SINGULAR, UENUM,    how,               2) \
X(a, STATIC,   SINGULAR, STRING,   callsign,          3) \
X(a, STATIC,   SINGULAR, UENUM,    team,              4) \
X(a, STATIC,   SINGULAR, UENUM,    role,              5) \
X(a, STATIC,   SINGULAR, SFIXED32, latitude_i,        6) \
X(a, STATIC,   SINGULAR, SFIXED32, longitude_i,       7) \
X(a, STATIC,   SINGULAR, SINT32,   altitude,          8) \
X(a, STATIC,   SINGULAR, UINT32,   speed,             9) \
X(a, STATIC,   SINGULAR, UINT32,   course,           10) \
X(a, STATIC,   SINGULAR, UINT32,   battery,          11) \
X(a, STATIC,   SINGULAR, UENUM,    geo_src,          12) \
X(a, STATIC,   SINGULAR, UENUM,    alt_src,          13) \
X(a, STATIC,   SINGULAR, STRING,   uid,              14) \
X(a, STATIC,   SINGULAR, STRING,   device_callsign,  15) \
X(a, STATIC,   SINGULAR, UINT32,   stale_seconds,    16) \
X(a, STATIC,   SINGULAR, STRING,   tak_version,      17) \
X(a, STATIC,   SINGULAR, STRING,   tak_device,       18) \
X(a, STATIC,   SINGULAR, STRING,   tak_platform,     19) \
X(a, STATIC,   SINGULAR, STRING,   tak_os,           20) \
X(a, STATIC,   SINGULAR, STRING,   endpoint,         21) \
X(a, STATIC,   SINGULAR, STRING,   phone,            22) \
X(a, STATIC,   SINGULAR, STRING,   cot_type_str,     23) \
X(a, CALLBACK, SINGULAR, STRING,   remarks,          24) \
X(a, STATIC,   OPTIONAL, MESSAGE,  environment,      25) \
X(a, STATIC,   OPTIONAL, MESSAGE,  sensor_fov,       26) \
X(a, STATIC,   OPTIONAL, MESSAGE,  marti,            29) \
X(a, STATIC,   ONEOF,    MESSAGE,  (payload_variant,chat,payload_variant.chat),  31) \
X(a, STATIC,   ONEOF,    MESSAGE,  (payload_variant,aircraft,payload_variant.aircraft),  32) \
X(a, STATIC,   ONEOF,    BYTES,    (payload_variant,raw_detail,payload_variant.raw_detail),  33) \
X(a, STATIC,   ONEOF,    MESSAGE,  (payload_variant,shape,payload_variant.shape),  34) \
X(a, STATIC,   ONEOF,    MESSAGE,  (payload_variant,marker,payload_variant.marker),  35) \
X(a, STATIC,   ONEOF,    MESSAGE,  (payload_variant,rab,payload_variant.rab),  36) \
X(a, STATIC,   ONEOF,    MESSAGE,  (payload_variant,route,payload_variant.route),  37) \
X(a, STATIC,   ONEOF,    MESSAGE,  (payload_variant,casevac,payload_variant.casevac),  38) \
X(a, STATIC,   ONEOF,    MESSAGE,  (payload_variant,emergency,payload_variant.emergency),  39) \
X(a, STATIC,   ONEOF,    MESSAGE,  (payload_variant,task,payload_variant.task),  40) \
X(a, STATIC,   ONEOF,    MESSAGE,  (payload_variant,taktalk,payload_variant.taktalk),  41) \
X(a, STATIC,   ONEOF,    MESSAGE,  (payload_variant,taktalk_room,payload_variant.taktalk_room),  42)
#define meshtastic_TAKPacketV2_CALLBACK pb_default_field_callback
#define meshtastic_TAKPacketV2_DEFAULT NULL
#define meshtastic_TAKPacketV2_environment_MSGTYPE meshtastic_TAKEnvironment
#define meshtastic_TAKPacketV2_sensor_fov_MSGTYPE meshtastic_SensorFov
#define meshtastic_TAKPacketV2_marti_MSGTYPE meshtastic_Marti
#define meshtastic_TAKPacketV2_payload_variant_chat_MSGTYPE meshtastic_GeoChat
#define meshtastic_TAKPacketV2_payload_variant_aircraft_MSGTYPE meshtastic_AircraftTrack
#define meshtastic_TAKPacketV2_payload_variant_shape_MSGTYPE meshtastic_DrawnShape
#define meshtastic_TAKPacketV2_payload_variant_marker_MSGTYPE meshtastic_Marker
#define meshtastic_TAKPacketV2_payload_variant_rab_MSGTYPE meshtastic_RangeAndBearing
#define meshtastic_TAKPacketV2_payload_variant_route_MSGTYPE meshtastic_Route
#define meshtastic_TAKPacketV2_payload_variant_casevac_MSGTYPE meshtastic_CasevacReport
#define meshtastic_TAKPacketV2_payload_variant_emergency_MSGTYPE meshtastic_EmergencyAlert
#define meshtastic_TAKPacketV2_payload_variant_task_MSGTYPE meshtastic_TaskRequest
#define meshtastic_TAKPacketV2_payload_variant_taktalk_MSGTYPE meshtastic_TakTalkMessage
#define meshtastic_TAKPacketV2_payload_variant_taktalk_room_MSGTYPE meshtastic_TakTalkRoomData

extern const pb_msgdesc_t meshtastic_TAKPacket_msg;
extern const pb_msgdesc_t meshtastic_GeoChat_msg;
extern const pb_msgdesc_t meshtastic_Group_msg;
extern const pb_msgdesc_t meshtastic_Status_msg;
extern const pb_msgdesc_t meshtastic_Contact_msg;
extern const pb_msgdesc_t meshtastic_PLI_msg;
extern const pb_msgdesc_t meshtastic_AircraftTrack_msg;
extern const pb_msgdesc_t meshtastic_CotGeoPoint_msg;
extern const pb_msgdesc_t meshtastic_DrawnShape_msg;
extern const pb_msgdesc_t meshtastic_Marker_msg;
extern const pb_msgdesc_t meshtastic_RangeAndBearing_msg;
extern const pb_msgdesc_t meshtastic_Route_msg;
extern const pb_msgdesc_t meshtastic_Route_Link_msg;
extern const pb_msgdesc_t meshtastic_CasevacReport_msg;
extern const pb_msgdesc_t meshtastic_ZMistEntry_msg;
extern const pb_msgdesc_t meshtastic_EmergencyAlert_msg;
extern const pb_msgdesc_t meshtastic_TaskRequest_msg;
extern const pb_msgdesc_t meshtastic_TAKEnvironment_msg;
extern const pb_msgdesc_t meshtastic_SensorFov_msg;
extern const pb_msgdesc_t meshtastic_TakTalkMessage_msg;
extern const pb_msgdesc_t meshtastic_TakTalkRoomData_msg;
extern const pb_msgdesc_t meshtastic_Marti_msg;
extern const pb_msgdesc_t meshtastic_TAKPacketV2_msg;

/* Defines for backwards compatibility with code written before nanopb-0.4.0 */
#define meshtastic_TAKPacket_fields &meshtastic_TAKPacket_msg
#define meshtastic_GeoChat_fields &meshtastic_GeoChat_msg
#define meshtastic_Group_fields &meshtastic_Group_msg
#define meshtastic_Status_fields &meshtastic_Status_msg
#define meshtastic_Contact_fields &meshtastic_Contact_msg
#define meshtastic_PLI_fields &meshtastic_PLI_msg
#define meshtastic_AircraftTrack_fields &meshtastic_AircraftTrack_msg
#define meshtastic_CotGeoPoint_fields &meshtastic_CotGeoPoint_msg
#define meshtastic_DrawnShape_fields &meshtastic_DrawnShape_msg
#define meshtastic_Marker_fields &meshtastic_Marker_msg
#define meshtastic_RangeAndBearing_fields &meshtastic_RangeAndBearing_msg
#define meshtastic_Route_fields &meshtastic_Route_msg
#define meshtastic_Route_Link_fields &meshtastic_Route_Link_msg
#define meshtastic_CasevacReport_fields &meshtastic_CasevacReport_msg
#define meshtastic_ZMistEntry_fields &meshtastic_ZMistEntry_msg
#define meshtastic_EmergencyAlert_fields &meshtastic_EmergencyAlert_msg
#define meshtastic_TaskRequest_fields &meshtastic_TaskRequest_msg
#define meshtastic_TAKEnvironment_fields &meshtastic_TAKEnvironment_msg
#define meshtastic_SensorFov_fields &meshtastic_SensorFov_msg
#define meshtastic_TakTalkMessage_fields &meshtastic_TakTalkMessage_msg
#define meshtastic_TakTalkRoomData_fields &meshtastic_TakTalkRoomData_msg
#define meshtastic_Marti_fields &meshtastic_Marti_msg
#define meshtastic_TAKPacketV2_fields &meshtastic_TAKPacketV2_msg

/* Maximum encoded size of messages (where known) */
/* meshtastic_TAKPacket_size depends on runtime parameters */
/* meshtastic_GeoChat_size depends on runtime parameters */
/* meshtastic_DrawnShape_size depends on runtime parameters */
/* meshtastic_CasevacReport_size depends on runtime parameters */
/* meshtastic_ZMistEntry_size depends on runtime parameters */
/* meshtastic_SensorFov_size depends on runtime parameters */
/* meshtastic_TakTalkMessage_size depends on runtime parameters */
/* meshtastic_TakTalkRoomData_size depends on runtime parameters */
/* meshtastic_Marti_size depends on runtime parameters */
/* meshtastic_TAKPacketV2_size depends on runtime parameters */
#define MESHTASTIC_MESHTASTIC_ATAK_PB_H_MAX_SIZE meshtastic_Route_size
#define meshtastic_AircraftTrack_size            134
#define meshtastic_Contact_size                  242
#define meshtastic_CotGeoPoint_size              12
#define meshtastic_EmergencyAlert_size           100
#define meshtastic_Group_size                    4
#define meshtastic_Marker_size                   191
#define meshtastic_PLI_size                      31
#define meshtastic_RangeAndBearing_size          84
#define meshtastic_Route_Link_size               83
#define meshtastic_Route_size                    1379
#define meshtastic_Status_size                   3
#define meshtastic_TAKEnvironment_size           18
#define meshtastic_TaskRequest_size              132

#ifdef __cplusplus
} /* extern "C" */
#endif

#endif
