Skip to main content

minimal.flex

// MAVLink is available under the MIT-license
module MAVLink::v23.minimal

import MAVLink::v23.tangramcustom (MessageFrame)


// Micro air vehicle / autopilot classes. This identifies the individual model.
enum MavAutopilot uint8 {
    MavAutopilotGeneric = 0;
    MavAutopilotReserved = 1;
    MavAutopilotSlugs = 2;
    MavAutopilotArdupilotmega = 3;
    MavAutopilotOpenpilot = 4;
    MavAutopilotGenericWaypointsOnly = 5;
    MavAutopilotGenericWaypointsAndSimpleNavigationOnly = 6;
    MavAutopilotGenericMissionFull = 7;
    MavAutopilotInvalid = 8;
    MavAutopilotPpz = 9;
    MavAutopilotUdb = 10;
    MavAutopilotFp = 11;
    MavAutopilotPx4 = 12;
    MavAutopilotSmaccmpilot = 13;
    MavAutopilotAutoquad = 14;
    MavAutopilotArmazila = 15;
    MavAutopilotAerob = 16;
    MavAutopilotAsluav = 17;
    MavAutopilotSmartap = 18;
    MavAutopilotAirrails = 19;
    MavAutopilotReflex = 20;
}

// Component ids (values) for the different types and instances of onboard hardware/software that might make
// up a MAVLink system (autopilot, cameras, servos, GPS systems, avoidance systems etc.). Components must
// use the appropriate ID in their source address when sending messages. Components can also use IDs to determine
// if they are the intended recipient of an incoming message. The MAV_COMP_ID_ALL value is used to indicate
// messages that must be processed by all components. When creating new entries, components that can have
// multiple instances (e.g. cameras, servos etc.) should be allocated sequential values. An appropriate number
// of values should be left free after these components to allow the number of instances to be expanded.
enum MavComponent uint32 {
    MavCompIdAll = 0;
    MavCompIdAutopilot1 = 1;
    MavCompIdUser1 = 25;
    MavCompIdUser2 = 26;
    MavCompIdUser3 = 27;
    MavCompIdUser4 = 28;
    MavCompIdUser5 = 29;
    MavCompIdUser6 = 30;
    MavCompIdUser7 = 31;
    MavCompIdUser8 = 32;
    MavCompIdUser9 = 33;
    MavCompIdUser10 = 34;
    MavCompIdUser11 = 35;
    MavCompIdUser12 = 36;
    MavCompIdUser13 = 37;
    MavCompIdUser14 = 38;
    MavCompIdUser15 = 39;
    MavCompIdUser16 = 40;
    MavCompIdUser17 = 41;
    MavCompIdUser18 = 42;
    MavCompIdUser19 = 43;
    MavCompIdUser20 = 44;
    MavCompIdUser21 = 45;
    MavCompIdUser22 = 46;
    MavCompIdUser23 = 47;
    MavCompIdUser24 = 48;
    MavCompIdUser25 = 49;
    MavCompIdUser26 = 50;
    MavCompIdUser27 = 51;
    MavCompIdUser28 = 52;
    MavCompIdUser29 = 53;
    MavCompIdUser30 = 54;
    MavCompIdUser31 = 55;
    MavCompIdUser32 = 56;
    MavCompIdUser33 = 57;
    MavCompIdUser34 = 58;
    MavCompIdUser35 = 59;
    MavCompIdUser36 = 60;
    MavCompIdUser37 = 61;
    MavCompIdUser38 = 62;
    MavCompIdUser39 = 63;
    MavCompIdUser40 = 64;
    MavCompIdUser41 = 65;
    MavCompIdUser42 = 66;
    MavCompIdUser43 = 67;
    MavCompIdTelemetryRadio = 68;
    MavCompIdUser45 = 69;
    MavCompIdUser46 = 70;
    MavCompIdUser47 = 71;
    MavCompIdUser48 = 72;
    MavCompIdUser49 = 73;
    MavCompIdUser50 = 74;
    MavCompIdUser51 = 75;
    MavCompIdUser52 = 76;
    MavCompIdUser53 = 77;
    MavCompIdUser54 = 78;
    MavCompIdUser55 = 79;
    MavCompIdUser56 = 80;
    MavCompIdUser57 = 81;
    MavCompIdUser58 = 82;
    MavCompIdUser59 = 83;
    MavCompIdUser60 = 84;
    MavCompIdUser61 = 85;
    MavCompIdUser62 = 86;
    MavCompIdUser63 = 87;
    MavCompIdUser64 = 88;
    MavCompIdUser65 = 89;
    MavCompIdUser66 = 90;
    MavCompIdUser67 = 91;
    MavCompIdUser68 = 92;
    MavCompIdUser69 = 93;
    MavCompIdUser70 = 94;
    MavCompIdUser71 = 95;
    MavCompIdUser72 = 96;
    MavCompIdUser73 = 97;
    MavCompIdUser74 = 98;
    MavCompIdUser75 = 99;
    MavCompIdCamera = 100;
    MavCompIdCamera2 = 101;
    MavCompIdCamera3 = 102;
    MavCompIdCamera4 = 103;
    MavCompIdCamera5 = 104;
    MavCompIdCamera6 = 105;
    MavCompIdServo1 = 140;
    MavCompIdServo2 = 141;
    MavCompIdServo3 = 142;
    MavCompIdServo4 = 143;
    MavCompIdServo5 = 144;
    MavCompIdServo6 = 145;
    MavCompIdServo7 = 146;
    MavCompIdServo8 = 147;
    MavCompIdServo9 = 148;
    MavCompIdServo10 = 149;
    MavCompIdServo11 = 150;
    MavCompIdServo12 = 151;
    MavCompIdServo13 = 152;
    MavCompIdServo14 = 153;
    MavCompIdGimbal = 154;
    MavCompIdLog = 155;
    MavCompIdAdsb = 156;
    MavCompIdOsd = 157;
    MavCompIdPeripheral = 158;
    MavCompIdQx1Gimbal = 159;
    MavCompIdFlarm = 160;
    MavCompIdParachute = 161;
    MavCompIdGimbal2 = 171;
    MavCompIdGimbal3 = 172;
    MavCompIdGimbal4 = 173;
    MavCompIdGimbal5 = 174;
    MavCompIdGimbal6 = 175;
    MavCompIdBattery = 180;
    MavCompIdBattery2 = 181;
    MavCompIdMissionplanner = 190;
    MavCompIdOnboardComputer = 191;
    MavCompIdOnboardComputer2 = 192;
    MavCompIdOnboardComputer3 = 193;
    MavCompIdOnboardComputer4 = 194;
    MavCompIdPathplanner = 195;
    MavCompIdObstacleAvoidance = 196;
    MavCompIdVisualInertialOdometry = 197;
    MavCompIdPairingManager = 198;
    MavCompIdImu = 200;
    MavCompIdImu2 = 201;
    MavCompIdImu3 = 202;
    MavCompIdGps = 220;
    MavCompIdGps2 = 221;
    MavCompIdOdidTxrx1 = 236;
    MavCompIdOdidTxrx2 = 237;
    MavCompIdOdidTxrx3 = 238;
    MavCompIdUdpBridge = 240;
    MavCompIdUartBridge = 241;
    MavCompIdTunnelNode = 242;
    MavCompIdSystemControl = 250;
}

// These flags encode the MAV mode.
enum MavModeFlag uint8 {
    MavModeFlagSafetyArmed = 128;
    MavModeFlagManualInputEnabled = 64;
    MavModeFlagHilEnabled = 32;
    MavModeFlagStabilizeEnabled = 16;
    MavModeFlagGuidedEnabled = 8;
    MavModeFlagAutoEnabled = 4;
    MavModeFlagTestEnabled = 2;
    MavModeFlagCustomModeEnabled = 1;
}

// These values encode the bit positions of the decode position. These values can be used to read the value
// of a flag bit by combining the base_mode variable with AND with the flag position value. The result will
// be either 0 or 1, depending on if the flag is set or not.
enum MavModeFlagDecodePosition uint32 {
    MavModeFlagDecodePositionSafety = 128;
    MavModeFlagDecodePositionManual = 64;
    MavModeFlagDecodePositionHil = 32;
    MavModeFlagDecodePositionStabilize = 16;
    MavModeFlagDecodePositionGuided = 8;
    MavModeFlagDecodePositionAuto = 4;
    MavModeFlagDecodePositionTest = 2;
    MavModeFlagDecodePositionCustomMode = 1;
}

enum MavState uint8 {
    MavStateUninit = 0;
    MavStateBoot = 1;
    MavStateCalibrating = 2;
    MavStateStandby = 3;
    MavStateActive = 4;
    MavStateCritical = 5;
    MavStateEmergency = 6;
    MavStatePoweroff = 7;
    MavStateFlightTermination = 8;
}

// MAVLINK component type reported in HEARTBEAT message. Flight controllers must report the type of the vehicle
// on which they are mounted (e.g. MAV_TYPE_OCTOROTOR). All other components must report a value appropriate
// for their type (e.g. a camera must use MAV_TYPE_CAMERA).
enum MavType uint8 {
    MavTypeGeneric = 0;
    MavTypeFixedWing = 1;
    MavTypeQuadrotor = 2;
    MavTypeCoaxial = 3;
    MavTypeHelicopter = 4;
    MavTypeAntennaTracker = 5;
    MavTypeGcs = 6;
    MavTypeAirship = 7;
    MavTypeFreeBalloon = 8;
    MavTypeRocket = 9;
    MavTypeGroundRover = 10;
    MavTypeSurfaceBoat = 11;
    MavTypeSubmarine = 12;
    MavTypeHexarotor = 13;
    MavTypeOctorotor = 14;
    MavTypeTricopter = 15;
    MavTypeFlappingWing = 16;
    MavTypeKite = 17;
    MavTypeOnboardController = 18;
    MavTypeVtolDuorotor = 19;
    MavTypeVtolQuadrotor = 20;
    MavTypeVtolTiltrotor = 21;
    MavTypeVtolReserved2 = 22;
    MavTypeVtolReserved3 = 23;
    MavTypeVtolReserved4 = 24;
    MavTypeVtolReserved5 = 25;
    MavTypeGimbal = 26;
    MavTypeAdsb = 27;
    MavTypeParafoil = 28;
    MavTypeDodecarotor = 29;
    MavTypeCamera = 30;
    MavTypeChargingStation = 31;
    MavTypeFlarm = 32;
    MavTypeServo = 33;
    MavTypeOdid = 34;
    MavTypeDecarotor = 35;
    MavTypeBattery = 36;
    MavTypeParachute = 37;
    MavTypeLog = 38;
    MavTypeOsd = 39;
    MavTypeImu = 40;
    MavTypeGps = 41;
}

message struct Heartbeat extends MessageFrame {
    // Vehicle or component type. For a flight controller component the vehicle type (quadrotor, helicopter,
    // etc.). For other components the component type (e.g. camera, gimbal, etc.). This should be used in preference
    // to component id for identifying the component type.
    Type: MavType;
    // Autopilot type / class. Use MAV_AUTOPILOT_INVALID for components that are not flight controllers.
    Autopilot: MavAutopilot;
    // System mode bitmap.
    BaseMode: MavModeFlagBitmask;
    // A bitfield for use for autopilot-specific flags
    CustomMode: uint32;
    // System status flag.
    SystemStatus: MavState;
    // MAVLink version, not writable by user, gets added by protocol because of magic data type: uint8_t_mavlink_version
    MavlinkVersion: uint8;
}



struct MavModeFlagBitmask {
    MavModeFlagBitmaskFieldSet: MavModeFlag[];
}

struct MavModeFlagDecodePositionBitmask {
    MavModeFlagDecodePositionBitmaskFieldSet: MavModeFlagDecodePosition[];
}