data/method/mavlink/pymavlink/generator/mavschema.xsd

348 lines
15 KiB
XML
Raw Normal View History

2024-07-24 18:30:46 +08:00
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- definition of simple elements -->
<xs:element name="include" type="xs:anyURI"/>
<xs:element name="version" type="xs:unsignedByte"/>
<xs:element name="dialect" type="xs:unsignedByte"/>
<xs:element name="description" type="xs:string"/>
<!-- definition of attributes -->
<xs:attribute name="name"> <!-- used in enum,entry,message,field elements -->
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[\w_]+"/> <!-- Force only word characters in names (a-zA-Z0-9_ and many unicode). No whitespace -->
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="id" type="mavlinkMsgId"/> <!-- used in message elements -->
<xs:attribute name="print_format" type="xs:string"/> <!-- used in field elements -->
<xs:attribute name="enum" type="xs:string"/> <!-- used in field,param elements -->
<xs:attribute name="display" type="xs:string"/> <!-- used in field elements -->
<xs:attribute name="units" type="SI_Unit"/> <!-- this will get changed on the fly to xs:string if no strict-units command line option is used -->
<xs:attribute name="multiplier" type="factor"/>
<xs:attribute name="instance" type="xs:boolean"/>
<xs:attribute name="invalid" type="xs:string"/> <!-- used in message field elements -->
<xs:attribute name="value"> <!-- used in entry elements -->
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="\d{1,20}"/> <!-- base 10 int -->
<xs:pattern value="0[xX][0-9a-fA-F]{1,16}"/> <!-- base 16 -->
<xs:pattern value="0[bB][0-1]{1,64}"/> <!-- base 2 -->
<xs:pattern value="2\*\*\d{1,2}"/> <!-- power of 2 -->
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="default"> <!-- used in enum field elements -->
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="\d{1,20}"/> <!-- base 10 int -->
<xs:pattern value="0[xX][0-9a-fA-F]{1,16}"/> <!-- base 16 -->
<xs:pattern value="0[bB][0-1]{1,64}"/> <!-- base 2 -->
<xs:pattern value="2\*\*\d{1,2}"/> <!-- power of 2 -->
<xs:pattern value="NaN"/> <!-- Allow not-a-number as a default (for params) -->
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="type"> <!-- used in field elements -->
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="float(\[([0-9])+\])?"/>
<xs:pattern value="double(\[([0-9])+\])?"/>
<xs:pattern value="char(\[([0-9])+\])?"/>
<xs:pattern value="int8_t(\[([0-9])+\])?"/>
<xs:pattern value="uint8_t(\[([0-9])+\])?"/>
<xs:pattern value="uint8_t_mavlink_version"/>
<xs:pattern value="int16_t(\[([0-9])+\])?"/>
<xs:pattern value="uint16_t(\[([0-9])+\])?"/>
<xs:pattern value="int32_t(\[([0-9])+\])?"/>
<xs:pattern value="uint32_t(\[([0-9])+\])?"/>
<xs:pattern value="int64_t(\[([0-9])+\])?"/>
<xs:pattern value="uint64_t(\[([0-9])+\])?"/>
<xs:pattern value="array\[[0-9]+\]"/> <!-- 0.9 compatibility -->
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="since"> <!-- used in deprecated elements -->
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="(20)\d{2}-(0[1-9]|1[012])"/> <!-- restrict dates to 20YY-MM format -->
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="replaced_by" type="xs:string"/> <!-- used in deprecated elements -->
<!-- mavlink message IDs are unsigned 24-bit values. -->
<xs:simpleType name="mavlinkMsgId" id="mavlinkMsgId">
<xs:restriction base="xs:unsignedInt">
<xs:maxInclusive value="16777215" id="mavlinkMsgId.maxInclusive"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="SI_Unit">
<xs:restriction base="xs:string">
<!-- time -->
<xs:enumeration value="s"/> <!-- seconds -->
<xs:enumeration value="ds"/> <!-- deciseconds -->
<xs:enumeration value="cs"/> <!-- centiseconds -->
<xs:enumeration value="ms"/> <!-- milliseconds -->
<xs:enumeration value="us"/> <!-- microseconds -->
<xs:enumeration value="ns"/> <!-- nanoseconds -->
<xs:enumeration value="Hz"/> <!-- Herz -->
<xs:enumeration value="MHz"/> <!-- Mega-Herz -->
<!-- distance -->
<xs:enumeration value="km"/> <!-- kilometres -->
<xs:enumeration value="dam"/> <!-- decametres -->
<xs:enumeration value="m"/> <!-- metres -->
<xs:enumeration value="m/s"/> <!-- metres per second -->
<xs:enumeration value="m/s/s"/> <!-- metres per second per second -->
<xs:enumeration value="m/s*5"/> <!-- metres per second * 5 required from dagar for HIGH_LATENCY2 message -->
<xs:enumeration value="dm"/> <!-- decimetres -->
<xs:enumeration value="dm/s"/> <!-- decimetres per second -->
<xs:enumeration value="cm"/> <!-- centimetres -->
<xs:enumeration value="cm^2"/> <!-- centimetres squared (typically used in variance) -->
<xs:enumeration value="cm/s"/> <!-- centimetres per second -->
<xs:enumeration value="mm"/> <!-- millimetres -->
<xs:enumeration value="mm/s"/> <!-- millimetres per second -->
<xs:enumeration value="mm/h"/> <!-- millimetres per hour -->
<!-- temperature -->
<xs:enumeration value="K"/> <!-- Kelvin -->
<xs:enumeration value="degC"/> <!-- degrees Celsius -->
<xs:enumeration value="cdegC"/> <!-- centi degrees Celsius -->
<!-- angle -->
<xs:enumeration value="rad"/> <!-- radians -->
<xs:enumeration value="rad/s"/> <!-- radians per second -->
<xs:enumeration value="mrad/s"/> <!-- milli-radians per second -->
<xs:enumeration value="deg"/> <!-- degrees -->
<xs:enumeration value="deg/2"/> <!-- degrees/2 required from dagar for HIGH_LATENCY2 message-->
<xs:enumeration value="deg/s"/> <!-- degrees per second -->
<xs:enumeration value="cdeg"/> <!-- centidegrees -->
<xs:enumeration value="cdeg/s"/> <!-- centidegrees per second -->
<xs:enumeration value="degE5"/> <!-- degrees * 1E5 -->
<xs:enumeration value="degE7"/> <!-- degrees * 1E7 -->
<xs:enumeration value="rpm"/> <!-- rotations per minute -->
<!-- electricity -->
<xs:enumeration value="V"/> <!-- Volt -->
<xs:enumeration value="cV"/> <!-- centi-Volt -->
<xs:enumeration value="mV"/> <!-- milli-Volt -->
<xs:enumeration value="A"/> <!-- Ampere -->
<xs:enumeration value="cA"/> <!-- centi-Ampere -->
<xs:enumeration value="mA"/> <!-- milli-Ampere -->
<xs:enumeration value="mAh"/> <!-- milli-Ampere hour -->
<xs:enumeration value="Ah"/> <!-- Ampere hour -->
<!-- magnetism -->
<xs:enumeration value="mT"/> <!-- milli-Tesla -->
<xs:enumeration value="gauss"/> <!-- Gauss -->
<xs:enumeration value="mgauss"/> <!-- milli-Gauss -->
<!-- energy -->
<xs:enumeration value="hJ"/> <!-- hecto-Joule -->
<!-- power -->
<xs:enumeration value="W"/> <!-- Watt -->
<!-- force -->
<xs:enumeration value="mG"/> <!-- milli-G -->
<!-- mass -->
<xs:enumeration value="g"/> <!-- grams -->
<xs:enumeration value="kg"/> <!-- kilograms -->
<!-- pressure -->
<xs:enumeration value="Pa"/> <!-- Pascal -->
<xs:enumeration value="hPa"/> <!-- hecto-Pascal -->
<xs:enumeration value="kPa"/> <!-- kilo-Pascal -->
<xs:enumeration value="mbar"/> <!-- millibar -->
<!-- ratio -->
<xs:enumeration value="%"/> <!-- percent -->
<xs:enumeration value="d%"/> <!-- decipercent -->
<xs:enumeration value="c%"/> <!-- centipercent -->
<xs:enumeration value="dB"/> <!-- Deci-Bell -->
<xs:enumeration value="dBm"/> <!-- Deci-Bell-milliwatts-->
<!-- digital -->
<xs:enumeration value="KiB"/> <!-- Kibibyte (1024 bytes) -->
<xs:enumeration value="KiB/s"/> <!-- Kibibyte (1024 bytes) per second -->
<xs:enumeration value="MiB"/> <!-- Mebibyte (1024*1024 bytes) -->
<xs:enumeration value="MiB/s"/> <!-- Mebibyte (1024*1024 bytes) per second -->
<xs:enumeration value="bytes"/> <!-- bytes -->
<xs:enumeration value="bytes/s"/> <!-- bytes per second-->
<xs:enumeration value="bits/s"/> <!-- bits per second -->
<xs:enumeration value="pix"/> <!-- pixels -->
<xs:enumeration value="dpix"/> <!-- decipixels -->
<!-- flow -->
<xs:enumeration value="g/min"/> <!-- grams/minute -->
<xs:enumeration value="cm^3/min"/> <!-- cubic centimetres/minute -->
<!-- volume -->
<xs:enumeration value="cm^3"/> <!-- cubic centimetres -->
<xs:enumeration value="l"/> <!-- litres -->
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="factor">
<xs:restriction base="xs:string">
<xs:enumeration value="1E-2"/> <!-- actual value = stated value / 100 -->
<xs:enumeration value="360/255"/> <!-- actual value = stated value * 360/255, as used for GPS_STATUS.satellite_azimuth -->
</xs:restriction>
</xs:simpleType>
<!-- definition param elements attributes (like the ones used on MAV_CMD for example) -->
<xs:attribute name="index" type="xs:unsignedByte"/> <!-- parameter index -->
<xs:attribute name="label" type="xs:string"/> <!-- parameter label (name) -->
<xs:attribute name="decimalPlaces" type="xs:unsignedByte"/> <!-- parameter number of decimal places to be displayed in the GUI -->
<xs:attribute name="increment" type="xs:float"/> <!-- parameter increment -->
<xs:attribute name="minValue" type="xs:float"/> <!-- parameter minimum value -->
<xs:attribute name="maxValue" type="xs:float"/> <!-- parameter maximum value -->
<xs:attribute name="reserved" type="xs:boolean" default="false"/> <!-- parameter is reserved -->
<!-- definition entry elements attributes (like the ones used on MAV_CMD for example) -->
<xs:attribute name="hasLocation" type="xs:boolean" default="true"/> <!-- entry has lat/lon/alt location -->
<xs:attribute name="isDestination" type="xs:boolean" default="true"/> <!-- entry is a destination -->
<xs:attribute name="missionOnly" type="xs:boolean" default="true"/> <!-- entry only makes sense in missions, not commands -->
<!-- definition of complex elements -->
<xs:element name="param">
<xs:complexType mixed="true">
<xs:attribute ref="index" use="required"/>
<xs:attribute ref="label"/>
<xs:attribute ref="units"/>
<xs:attribute ref="multiplier"/>
<xs:attribute ref="instance"/>
<xs:attribute ref="enum" />
<xs:attribute ref="decimalPlaces"/>
<xs:attribute ref="increment"/>
<xs:attribute ref="minValue"/>
<xs:attribute ref="maxValue"/>
<xs:attribute ref="reserved"/>
<xs:attribute ref="default"/>
</xs:complexType>
</xs:element>
<xs:element name="deprecated">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element ref="description" minOccurs="0"/>
</xs:sequence>
<xs:attribute ref="since" use="required"/>
<xs:attribute ref="replaced_by" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="wip">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element ref="description" minOccurs="0"/>
</xs:sequence>
<xs:attribute ref="since" />
</xs:complexType>
</xs:element>
<xs:element name="field">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element ref="description" minOccurs="0"/>
</xs:sequence>
<xs:attribute ref="type" use="required"/>
<xs:attribute ref="name" use="required"/>
<xs:attribute ref="print_format" />
<xs:attribute ref="enum" />
<xs:attribute ref="display" />
<xs:attribute ref="units" />
<xs:attribute ref="increment"/>
<xs:attribute ref="minValue"/>
<xs:attribute ref="maxValue"/>
<xs:attribute ref="multiplier"/>
<xs:attribute ref="default" />
<xs:attribute ref="instance" />
<xs:attribute ref="invalid" />
</xs:complexType>
</xs:element>
<xs:element name="extensions">
</xs:element>
<xs:element name="entry">
<xs:complexType>
<xs:sequence>
<xs:choice minOccurs="0" maxOccurs="1">
<xs:element ref="deprecated"/>
<xs:element ref="wip"/>
</xs:choice>
<xs:element ref="description" minOccurs="0"/>
<xs:element ref="param" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute ref="value" />
<xs:attribute ref="name" use="required"/>
<xs:attribute ref="hasLocation"/>
<xs:attribute ref="isDestination"/>
<xs:attribute ref="missionOnly"/>
</xs:complexType>
</xs:element>
<!-- definition entry elements attributes (like the ones used on MAV_CMD for example) -->
<xs:attribute name="bitmask" type="xs:boolean" default="false"/>
<xs:element name="enum">
<xs:complexType>
<xs:sequence>
<xs:choice minOccurs="0" maxOccurs="1">
<xs:element ref="deprecated"/>
<xs:element ref="wip"/>
</xs:choice>
<xs:element ref="description" minOccurs="0"/>
<xs:element ref="entry" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute ref="name" use="required"/>
<xs:attribute ref="bitmask"/>
</xs:complexType>
</xs:element>
<xs:element name="message">
<xs:complexType>
<xs:sequence>
<xs:sequence minOccurs="1" maxOccurs="1">
<xs:choice minOccurs="0" maxOccurs="1">
<xs:element ref="deprecated"/>
<xs:element ref="wip"/>
</xs:choice>
<xs:element ref="description" minOccurs="1" maxOccurs="1"/>
<xs:element ref="field" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
<!-- MavLink 2.0 extensions are optional hence minOccurs="0" -->
<xs:sequence minOccurs="0" maxOccurs="1">
<xs:element ref="extensions" minOccurs="1" maxOccurs="1"/>
<xs:element ref="field" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:sequence>
<xs:attribute ref="id" use="required"/>
<xs:attribute ref="name" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="enums">
<xs:complexType>
<xs:sequence>
<xs:element ref="enum" maxOccurs="unbounded" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="messages">
<xs:complexType>
<xs:sequence>
<xs:element ref="message" maxOccurs="unbounded" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="mavlink">
<xs:complexType>
<xs:sequence>
<xs:element ref="include" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="version" minOccurs="0"/>
<xs:element ref="dialect" minOccurs="0"/>
<xs:element ref="enums" minOccurs="0"/>
<xs:element ref="messages"/>
</xs:sequence>
<xs:attribute name="file" type="xs:anyURI"/>
</xs:complexType>
</xs:element>
</xs:schema>