protected override void InitMetadata()
        {
            mMetadata = new UasMessageMetadata() {
                Description = "This message is emitted as response to MISSION_REQUEST_LIST by the MAV and to initiate a write transaction. The GCS can then request the individual mission item based on the knowledge of the total number of MISSIONs."
            };

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Count",
                Description = "Number of mission items in the sequence",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "TargetSystem",
                Description = "System ID",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "TargetComponent",
                Description = "Component ID",
                NumElements = 1,
            });

        }
        protected override void InitMetadata()
        {
            mMetadata = new UasMessageMetadata() {
                Description = "Setpoint in roll, pitch, yaw and thrust from the operator"
            };

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "TimeBootMs",
                Description = "Timestamp in milliseconds since system boot",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Roll",
                Description = "Desired roll rate in radians per second",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Pitch",
                Description = "Desired pitch rate in radians per second",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Yaw",
                Description = "Desired yaw rate in radians per second",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Thrust",
                Description = "Collective thrust, normalized to 0 .. 1",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "ModeSwitch",
                Description = "Flight mode switch position, 0.. 255",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "ManualOverrideSwitch",
                Description = "Override mode switch position, 0.. 255",
                NumElements = 1,
            });

        }
        protected override void InitMetadata()
        {
            mMetadata = new UasMessageMetadata() {
                Description = "The offset in X, Y, Z and yaw between the LOCAL_POSITION_NED messages of MAV X and the global coordinate frame in NED coordinates. Coordinate frame is right-handed, Z-axis down (aeronautical frame, NED / north-east-down convention)"
            };

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "TimeBootMs",
                Description = "Timestamp (milliseconds since system boot)",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "X",
                Description = "X Position",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Y",
                Description = "Y Position",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Z",
                Description = "Z Position",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Roll",
                Description = "Roll",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Pitch",
                Description = "Pitch",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Yaw",
                Description = "Yaw",
                NumElements = 1,
            });

        }
        protected override void InitMetadata()
        {
            mMetadata = new UasMessageMetadata() {
                Description = "Metrics typically displayed on a HUD for fixed wing aircraft"
            };

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Airspeed",
                Description = "Current airspeed in m/s",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Groundspeed",
                Description = "Current ground speed in m/s",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Alt",
                Description = "Current altitude (MSL), in meters",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Climb",
                Description = "Current climb rate in meters/second",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Heading",
                Description = "Current heading in degrees, in compass units (0..360, 0=north)",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Throttle",
                Description = "Current throttle setting in integer percent, 0 to 100",
                NumElements = 1,
            });

        }
        protected override void InitMetadata()
        {
            mMetadata = new UasMessageMetadata() {
                Description = "Report status of a command. Includes feedback wether the command was executed."
            };

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Command",
                Description = "Command ID, as defined by MAV_CMD enum.",
                NumElements = 1,
                EnumMetadata = UasSummary.GetEnumMetadata("MavCmd"),
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Result",
                Description = "See MAV_RESULT enum",
                NumElements = 1,
                EnumMetadata = UasSummary.GetEnumMetadata("MavResult"),
            });

        }
        protected override void InitMetadata()
        {
            mMetadata = new UasMessageMetadata() {
                Description = ""
            };

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "ReqMessageRate",
                Description = "The requested interval between two messages of this type.",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "TargetSystem",
                Description = "The target requested to send the message stream.",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "TargetComponent",
                Description = "The target requested to send the message stream.",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "ReqStreamId",
                Description = "The ID of the requested data stream. MAV_DATA_STREAM enum.",
                NumElements = 1,
                EnumMetadata = UasSummary.GetEnumMetadata("MavDataStream"),
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "StartStop",
                Description = "1 to start sending, 0 to stop sending.",
                NumElements = 1,
            });

        }
        protected override void InitMetadata()
        {
            mMetadata = new UasMessageMetadata() {
                Description = "This message provides an API for manually controlling the vehicle using standard joystick axes nomenclature, along with a joystick-like input device. Unused axes can be disabled an buttons are also transmit as boolean values of their "
            };

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "X",
                Description = "X-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to forward(1000)-backward(-1000) movement on a joystick and the pitch of a vehicle.",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Y",
                Description = "Y-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to left(-1000)-right(1000) movement on a joystick and the roll of a vehicle.",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Z",
                Description = "Z-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a separate slider movement with maximum being 1000 and minimum being -1000 on a joystick and the thrust of a vehicle.",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "R",
                Description = "R-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a twisting of the joystick, with counter-clockwise being 1000 and clockwise being -1000, and the yaw of a vehicle.",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Buttons",
                Description = "A bitfield corresponding to the joystick buttons' current state, 1 for pressed, 0 for released. The lowest bit corresponds to Button 1.",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Target",
                Description = "The system to be controlled.",
                NumElements = 1,
            });

        }
        protected override void InitMetadata()
        {
            mMetadata = new UasMessageMetadata() {
                Description = "Set the setpoint for a local position controller. This is the position in local coordinates the MAV should fly to. This message is sent by the path/MISSION planner to the onboard position controller. As some MAVs have a degree of freedom in yaw (e.g. all helicopters/quadrotors), the desired yaw angle is part of the message."
            };

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "X",
                Description = "x position",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Y",
                Description = "y position",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Z",
                Description = "z position",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Yaw",
                Description = "Desired yaw angle",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "TargetSystem",
                Description = "System ID",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "TargetComponent",
                Description = "Component ID",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "CoordinateFrame",
                Description = "Coordinate frame - valid values are only MAV_FRAME_LOCAL_NED or MAV_FRAME_LOCAL_ENU",
                NumElements = 1,
                EnumMetadata = UasSummary.GetEnumMetadata("MavFrame"),
            });

        }
        protected override void InitMetadata()
        {
            mMetadata = new UasMessageMetadata() {
                Description = "Transmit the current local setpoint of the controller to other MAVs (collision avoidance) and to the GCS."
            };

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "X",
                Description = "x position",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Y",
                Description = "y position",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Z",
                Description = "z position",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Yaw",
                Description = "Desired yaw angle",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "CoordinateFrame",
                Description = "Coordinate frame - valid values are only MAV_FRAME_LOCAL_NED or MAV_FRAME_LOCAL_ENU",
                NumElements = 1,
                EnumMetadata = UasSummary.GetEnumMetadata("MavFrame"),
            });

        }
        protected override void InitMetadata()
        {
            mMetadata = new UasMessageMetadata() {
                Description = "As local waypoints exist, the global MISSION reference allows to transform between the local coordinate frame and the global (GPS) coordinate frame. This can be necessary when e.g. in- and outdoor settings are connected and the MAV should move from in- to outdoor."
            };

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Latitude",
                Description = "Latitude (WGS84), in degrees * 1E7",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Longitude",
                Description = "Longitude (WGS84, in degrees * 1E7",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Altitude",
                Description = "Altitude (WGS84), in meters * 1000 (positive for up)",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "TargetSystem",
                Description = "System ID",
                NumElements = 1,
            });

        }
        protected override void InitMetadata()
        {
            mMetadata = new UasMessageMetadata() {
                Description = "Once the MAV sets a new GPS-Local correspondence, this message announces the origin (0,0,0) position"
            };

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Latitude",
                Description = "Latitude (WGS84), in degrees * 1E7",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Longitude",
                Description = "Longitude (WGS84), in degrees * 1E7",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Altitude",
                Description = "Altitude (WGS84), in meters * 1000 (positive for up)",
                NumElements = 1,
            });

        }
        protected override void InitMetadata()
        {
            mMetadata = new UasMessageMetadata() {
                Description = "Ack message during MISSION handling. The type field states if this message is a positive ack (type=0) or if an error happened (type=non-zero)."
            };

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "TargetSystem",
                Description = "System ID",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "TargetComponent",
                Description = "Component ID",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Type",
                Description = "See MAV_MISSION_RESULT enum",
                NumElements = 1,
                EnumMetadata = UasSummary.GetEnumMetadata("MavMissionResult"),
            });

        }
        protected override void InitMetadata()
        {
            mMetadata = new UasMessageMetadata() {
                Description = "A certain mission item has been reached. The system will either hold this position (or circle on the orbit) or (if the autocontinue on the WP was set) continue to the next MISSION."
            };

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Seq",
                Description = "Sequence",
                NumElements = 1,
            });

        }
        protected override void InitMetadata()
        {
            mMetadata = new UasMessageMetadata() {
                Description = "Delete all mission items at once."
            };

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "TargetSystem",
                Description = "System ID",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "TargetComponent",
                Description = "Component ID",
                NumElements = 1,
            });

        }
        protected override void InitMetadata()
        {
            mMetadata = new UasMessageMetadata() {
                Description = "Setpoint for up to four quadrotors in a group / wing"
            };

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Roll",
                Description = "Desired roll angle in radians +-PI (+-INT16_MAX)",
                NumElements = 4,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Pitch",
                Description = "Desired pitch angle in radians +-PI (+-INT16_MAX)",
                NumElements = 4,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Yaw",
                Description = "Desired yaw angle in radians, scaled to int16 +-PI (+-INT16_MAX)",
                NumElements = 4,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Thrust",
                Description = "Collective thrust, scaled to uint16 (0..UINT16_MAX)",
                NumElements = 4,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Group",
                Description = "ID of the quadrotor group (0 - 255, up to 256 groups supported)",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Mode",
                Description = "ID of the flight mode (0 - 255, up to 256 modes supported)",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "LedRed",
                Description = "RGB red channel (0-255)",
                NumElements = 4,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "LedBlue",
                Description = "RGB green channel (0-255)",
                NumElements = 4,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "LedGreen",
                Description = "RGB blue channel (0-255)",
                NumElements = 4,
            });

        }
        protected override void InitMetadata()
        {
            mMetadata = new UasMessageMetadata() {
                Description = "Set the current global position setpoint."
            };

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Latitude",
                Description = "Latitude (WGS84), in degrees * 1E7",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Longitude",
                Description = "Longitude (WGS84), in degrees * 1E7",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Altitude",
                Description = "Altitude (WGS84), in meters * 1000 (positive for up)",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Yaw",
                Description = "Desired yaw angle in degrees * 100",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "CoordinateFrame",
                Description = "Coordinate frame - valid values are only MAV_FRAME_GLOBAL or MAV_FRAME_GLOBAL_RELATIVE_ALT",
                NumElements = 1,
                EnumMetadata = UasSummary.GetEnumMetadata("MavFrame"),
            });

        }
        protected override void InitMetadata()
        {
            mMetadata = new UasMessageMetadata() {
                Description = "Corrects the systems state by adding an error correction term to the position and velocity, and by rotating the attitude by a correction angle."
            };

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Xerr",
                Description = "x position error",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Yerr",
                Description = "y position error",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Zerr",
                Description = "z position error",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Rollerr",
                Description = "roll error (radians)",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Pitcherr",
                Description = "pitch error (radians)",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Yawerr",
                Description = "yaw error (radians)",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Vxerr",
                Description = "x velocity",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Vyerr",
                Description = "y velocity",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Vzerr",
                Description = "z velocity",
                NumElements = 1,
            });

        }
        protected override void InitMetadata()
        {
            mMetadata = new UasMessageMetadata() {
                Description = "Set a safety zone (volume), which is defined by two corners of a cube. This message can be used to tell the MAV which setpoints/MISSIONs to accept and which to reject. Safety areas are often enforced by national or competition regulations."
            };

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "P1x",
                Description = "x position 1 / Latitude 1",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "P1y",
                Description = "y position 1 / Longitude 1",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "P1z",
                Description = "z position 1 / Altitude 1",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "P2x",
                Description = "x position 2 / Latitude 2",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "P2y",
                Description = "y position 2 / Longitude 2",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "P2z",
                Description = "z position 2 / Altitude 2",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "TargetSystem",
                Description = "System ID",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "TargetComponent",
                Description = "Component ID",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Frame",
                Description = "Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down.",
                NumElements = 1,
                EnumMetadata = UasSummary.GetEnumMetadata("MavFrame"),
            });

        }
        protected override void InitMetadata()
        {
            mMetadata = new UasMessageMetadata() {
                Description = ""
            };

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "MessageRate",
                Description = "The requested interval between two messages of this type.",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "StreamId",
                Description = "The ID of the requested data stream. MAV_DATA_STREAM enum.",
                NumElements = 1,
                EnumMetadata = UasSummary.GetEnumMetadata("MavDataStream"),
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "OnOff",
                Description = "1 stream is enabled, 0 stream is stopped.",
                NumElements = 1,
            });

        }
        protected override void InitMetadata()
        {
            mMetadata = new UasMessageMetadata() {
                Description = "Read out the safety zone the MAV currently assumes."
            };

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "P1x",
                Description = "x position 1 / Latitude 1",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "P1y",
                Description = "y position 1 / Longitude 1",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "P1z",
                Description = "z position 1 / Altitude 1",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "P2x",
                Description = "x position 2 / Latitude 2",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "P2y",
                Description = "y position 2 / Longitude 2",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "P2z",
                Description = "z position 2 / Altitude 2",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Frame",
                Description = "Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down.",
                NumElements = 1,
                EnumMetadata = UasSummary.GetEnumMetadata("MavFrame"),
            });

        }
        protected override void InitMetadata()
        {
            mMetadata = new UasMessageMetadata() {
                Description = "The RAW values of the RC channels sent to the MAV to override info received from the RC radio. A value of UINT16_MAX means no change to that channel. A value of 0 means control of that channel should be released back to the RC radio. The standard PPM modulation is as follows: 1000 microseconds: 0%, 2000 microseconds: 100%. Individual receivers/transmitters might violate this specification."
            };

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Chan1Raw",
                Description = "RC channel 1 value, in microseconds. A value of UINT16_MAX means to ignore this field.",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Chan2Raw",
                Description = "RC channel 2 value, in microseconds. A value of UINT16_MAX means to ignore this field.",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Chan3Raw",
                Description = "RC channel 3 value, in microseconds. A value of UINT16_MAX means to ignore this field.",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Chan4Raw",
                Description = "RC channel 4 value, in microseconds. A value of UINT16_MAX means to ignore this field.",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Chan5Raw",
                Description = "RC channel 5 value, in microseconds. A value of UINT16_MAX means to ignore this field.",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Chan6Raw",
                Description = "RC channel 6 value, in microseconds. A value of UINT16_MAX means to ignore this field.",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Chan7Raw",
                Description = "RC channel 7 value, in microseconds. A value of UINT16_MAX means to ignore this field.",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Chan8Raw",
                Description = "RC channel 8 value, in microseconds. A value of UINT16_MAX means to ignore this field.",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "TargetSystem",
                Description = "System ID",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "TargetComponent",
                Description = "Component ID",
                NumElements = 1,
            });

        }
        protected override void InitMetadata()
        {
            mMetadata = new UasMessageMetadata() {
                Description = "Set roll, pitch and yaw."
            };

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "RollSpeed",
                Description = "Desired roll angular speed in rad/s",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "PitchSpeed",
                Description = "Desired pitch angular speed in rad/s",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "YawSpeed",
                Description = "Desired yaw angular speed in rad/s",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Thrust",
                Description = "Collective thrust, normalized to 0 .. 1",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "TargetSystem",
                Description = "System ID",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "TargetComponent",
                Description = "Component ID",
                NumElements = 1,
            });

        }
        protected override void InitMetadata()
        {
            mMetadata = new UasMessageMetadata() {
                Description = "Send a command with up to seven parameters to the MAV"
            };

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Param1",
                Description = "Parameter 1, as defined by MAV_CMD enum.",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Param2",
                Description = "Parameter 2, as defined by MAV_CMD enum.",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Param3",
                Description = "Parameter 3, as defined by MAV_CMD enum.",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Param4",
                Description = "Parameter 4, as defined by MAV_CMD enum.",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Param5",
                Description = "Parameter 5, as defined by MAV_CMD enum.",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Param6",
                Description = "Parameter 6, as defined by MAV_CMD enum.",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Param7",
                Description = "Parameter 7, as defined by MAV_CMD enum.",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Command",
                Description = "Command ID, as defined by MAV_CMD enum.",
                NumElements = 1,
                EnumMetadata = UasSummary.GetEnumMetadata("MavCmd"),
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "TargetSystem",
                Description = "System which should execute the command",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "TargetComponent",
                Description = "Component which should execute the command, 0 for all components",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Confirmation",
                Description = "0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command)",
                NumElements = 1,
            });

        }
        protected override void InitMetadata()
        {
            mMetadata = new UasMessageMetadata() {
                Description = "Setpoint in rollspeed, pitchspeed, yawspeed currently active on the system."
            };

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "TimeBootMs",
                Description = "Timestamp in milliseconds since system boot",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "RollSpeed",
                Description = "Desired roll angular speed in rad/s",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "PitchSpeed",
                Description = "Desired pitch angular speed in rad/s",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "YawSpeed",
                Description = "Desired yaw angular speed in rad/s",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Thrust",
                Description = "Collective thrust, normalized to 0 .. 1",
                NumElements = 1,
            });

        }
        protected override void InitMetadata()
        {
            mMetadata = new UasMessageMetadata() {
                Description = "Setpoint in roll, pitch, yaw rates and thrust currently active on the system."
            };

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "TimeBootMs",
                Description = "Timestamp in milliseconds since system boot",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "RollRate",
                Description = "Desired roll rate in radians per second",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "PitchRate",
                Description = "Desired pitch rate in radians per second",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "YawRate",
                Description = "Desired yaw rate in radians per second",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Thrust",
                Description = "Collective thrust, normalized to 0 .. 1",
                NumElements = 1,
            });

        }
        protected override void InitMetadata()
        {
            mMetadata = new UasMessageMetadata() {
                Description = "Setpoint in the four motor speeds"
            };

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "MotorFrontNw",
                Description = "Front motor in + configuration, front left motor in x configuration",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "MotorRightNe",
                Description = "Right motor in + configuration, front right motor in x configuration",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "MotorBackSe",
                Description = "Back motor in + configuration, back right motor in x configuration",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "MotorLeftSw",
                Description = "Left motor in + configuration, back left motor in x configuration",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "TargetSystem",
                Description = "System ID of the system that should set these motor commands",
                NumElements = 1,
            });

        }
        protected override void InitMetadata()
        {
            mMetadata = new UasMessageMetadata() {
                Description = "The heartbeat message shows that a system is present and responding. The type of the MAV and Autopilot hardware allow the receiving system to treat further messages from this system appropriate (e.g. by laying out the user interface based on the autopilot)."
            };

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "CustomMode",
                Description = "A bitfield for use for autopilot-specific flags.",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Type",
                Description = "Type of the MAV (quadrotor, helicopter, etc., up to 15 types, defined in MAV_TYPE ENUM)",
                NumElements = 1,
                EnumMetadata = UasSummary.GetEnumMetadata("MavType"),
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Autopilot",
                Description = "Autopilot type / class. defined in MAV_AUTOPILOT ENUM",
                NumElements = 1,
                EnumMetadata = UasSummary.GetEnumMetadata("MavAutopilot"),
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "BaseMode",
                Description = "System mode bitfield, see MAV_MODE_FLAGS ENUM in mavlink/include/mavlink_types.h",
                NumElements = 1,
                EnumMetadata = UasSummary.GetEnumMetadata("MavModeFlag"),
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "SystemStatus",
                Description = "System status flag, see MAV_STATE ENUM",
                NumElements = 1,
                EnumMetadata = UasSummary.GetEnumMetadata("MavState"),
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "MavlinkVersion",
                Description = "MAVLink version, not writable by user, gets added by protocol because of magic data type: uint8_t_mavlink_version",
                NumElements = 1,
            });

        }
        protected override void InitMetadata()
        {
            mMetadata = new UasMessageMetadata() {
                Description = "Outputs of the APM navigation controller. The primary use of this message is to check the response and signs of the controller before actual flight and to assist with tuning controller parameters."
            };

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "NavRoll",
                Description = "Current desired roll in degrees",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "NavPitch",
                Description = "Current desired pitch in degrees",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "AltError",
                Description = "Current altitude error in meters",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "AspdError",
                Description = "Current airspeed error in meters/second",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "XtrackError",
                Description = "Current crosstrack error on x-y plane in meters",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "NavBearing",
                Description = "Current desired heading in degrees",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "TargetBearing",
                Description = "Bearing to current MISSION/target in degrees",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "WpDist",
                Description = "Distance to active MISSION in meters",
                NumElements = 1,
            });

        }
        protected override void InitMetadata()
        {
            mMetadata = new UasMessageMetadata() {
                Description = "DEPRECATED PACKET! Suffers from missing airspeed fields and singularities due to Euler angles. Please use HIL_STATE_QUATERNION instead. Sent from simulation to autopilot. This packet is useful for high throughput applications such as hardware in the loop simulations."
            };

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "TimeUsec",
                Description = "Timestamp (microseconds since UNIX epoch or microseconds since system boot)",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Roll",
                Description = "Roll angle (rad)",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Pitch",
                Description = "Pitch angle (rad)",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Yaw",
                Description = "Yaw angle (rad)",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Rollspeed",
                Description = "Body frame roll / phi angular speed (rad/s)",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Pitchspeed",
                Description = "Body frame pitch / theta angular speed (rad/s)",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Yawspeed",
                Description = "Body frame yaw / psi angular speed (rad/s)",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Lat",
                Description = "Latitude, expressed as * 1E7",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Lon",
                Description = "Longitude, expressed as * 1E7",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Alt",
                Description = "Altitude in meters, expressed as * 1000 (millimeters)",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Vx",
                Description = "Ground X Speed (Latitude), expressed as m/s * 100",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Vy",
                Description = "Ground Y Speed (Longitude), expressed as m/s * 100",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Vz",
                Description = "Ground Z Speed (Altitude), expressed as m/s * 100",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Xacc",
                Description = "X acceleration (mg)",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Yacc",
                Description = "Y acceleration (mg)",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "Zacc",
                Description = "Z acceleration (mg)",
                NumElements = 1,
            });

        }
        protected override void InitMetadata()
        {
            mMetadata = new UasMessageMetadata() {
                Description = "Request the overall list of mission items from the system/component."
            };

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "TargetSystem",
                Description = "System ID",
                NumElements = 1,
            });

            mMetadata.Fields.Add(new UasFieldMetadata() {
                Name = "TargetComponent",
                Description = "Component ID",
                NumElements = 1,
            });

        }