/* 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
} 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;
} 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;
    /* Vertex list for polyline/polygon/rectangle shapes. Capped at 32 by
 the nanopb pool; senders MUST truncate longer inputs and set
 `truncated = true`. */
    pb_size_t vertices_count;
    meshtastic_CotGeoPoint vertices[32];
    /* True if the sender truncated `vertices` 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];
} 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;

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) */
    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;
    pb_size_t which_payload_variant;
    union {
        /* Position report (true = PLI, no extra fields beyond the common ones above) */
        bool pli;
        /* 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;
    } 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_t_s
#define _meshtastic_CotType_ARRAYSIZE ((meshtastic_CotType)(meshtastic_CotType_CotType_t_s+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}
#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, {meshtastic_CotGeoPoint_init_default, meshtastic_CotGeoPoint_init_default, meshtastic_CotGeoPoint_init_default, meshtastic_CotGeoPoint_init_default, meshtastic_CotGeoPoint_init_default, meshtastic_CotGeoPoint_init_default, meshtastic_CotGeoPoint_init_default, meshtastic_CotGeoPoint_init_default, meshtastic_CotGeoPoint_init_default, meshtastic_CotGeoPoint_init_default, meshtastic_CotGeoPoint_init_default, meshtastic_CotGeoPoint_init_default, meshtastic_CotGeoPoint_init_default, meshtastic_CotGeoPoint_init_default, meshtastic_CotGeoPoint_init_default, meshtastic_CotGeoPoint_init_default, meshtastic_CotGeoPoint_init_default, meshtastic_CotGeoPoint_init_default, meshtastic_CotGeoPoint_init_default, meshtastic_CotGeoPoint_init_default, meshtastic_CotGeoPoint_init_default, meshtastic_CotGeoPoint_init_default, meshtastic_CotGeoPoint_init_default, meshtastic_CotGeoPoint_init_default, meshtastic_CotGeoPoint_init_default, meshtastic_CotGeoPoint_init_default, meshtastic_CotGeoPoint_init_default, meshtastic_CotGeoPoint_init_default, meshtastic_CotGeoPoint_init_default, meshtastic_CotGeoPoint_init_default, meshtastic_CotGeoPoint_init_default, meshtastic_CotGeoPoint_init_default}, 0, 0, 0, 0, ""}
#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_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, 0, {0}}
#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}
#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, {meshtastic_CotGeoPoint_init_zero, meshtastic_CotGeoPoint_init_zero, meshtastic_CotGeoPoint_init_zero, meshtastic_CotGeoPoint_init_zero, meshtastic_CotGeoPoint_init_zero, meshtastic_CotGeoPoint_init_zero, meshtastic_CotGeoPoint_init_zero, meshtastic_CotGeoPoint_init_zero, meshtastic_CotGeoPoint_init_zero, meshtastic_CotGeoPoint_init_zero, meshtastic_CotGeoPoint_init_zero, meshtastic_CotGeoPoint_init_zero, meshtastic_CotGeoPoint_init_zero, meshtastic_CotGeoPoint_init_zero, meshtastic_CotGeoPoint_init_zero, meshtastic_CotGeoPoint_init_zero, meshtastic_CotGeoPoint_init_zero, meshtastic_CotGeoPoint_init_zero, meshtastic_CotGeoPoint_init_zero, meshtastic_CotGeoPoint_init_zero, meshtastic_CotGeoPoint_init_zero, meshtastic_CotGeoPoint_init_zero, meshtastic_CotGeoPoint_init_zero, meshtastic_CotGeoPoint_init_zero, meshtastic_CotGeoPoint_init_zero, meshtastic_CotGeoPoint_init_zero, meshtastic_CotGeoPoint_init_zero, meshtastic_CotGeoPoint_init_zero, meshtastic_CotGeoPoint_init_zero, meshtastic_CotGeoPoint_init_zero, meshtastic_CotGeoPoint_init_zero, meshtastic_CotGeoPoint_init_zero}, 0, 0, 0, 0, ""}
#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_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, 0, {0}}

/* 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_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_vertices_tag       12
#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_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_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_pli_tag           30
#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

/* 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)
#define meshtastic_GeoChat_CALLBACK NULL
#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,   REPEATED, MESSAGE,  vertices,         12) \
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)
#define meshtastic_DrawnShape_CALLBACK NULL
#define meshtastic_DrawnShape_DEFAULT NULL
#define meshtastic_DrawnShape_vertices_MSGTYPE meshtastic_CotGeoPoint

#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_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,   ONEOF,    BOOL,     (payload_variant,pli,payload_variant.pli),  30) \
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)
#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_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

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_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_TAKPacketV2_fields &meshtastic_TAKPacketV2_msg

/* Maximum encoded size of messages (where known) */
/* meshtastic_CasevacReport_size depends on runtime parameters */
/* meshtastic_ZMistEntry_size depends on runtime parameters */
/* meshtastic_SensorFov_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_DrawnShape_size               553
#define meshtastic_EmergencyAlert_size           100
#define meshtastic_GeoChat_size                  495
#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_TAKPacket_size                756
#define meshtastic_TaskRequest_size              132

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

#endif
