<?xml version="1.0" encoding="utf-8"?>
<!--
  ==========================================================================

    GENERATED FILE - DO NOT EDIT.

    This document is written by `keel` from the YAML database in database/.
    Editing it achieves nothing: the next `make generated` overwrites it,
    and CI fails the build on the resulting diff.

    To change a PGN, a lookup or a field type, edit the YAML:

        database/pgns/<pgn>-<id>.yaml     one file per PGN variant
        database/lookups/<NAME>.yaml      one file per enumeration
        database/fieldtypes.yaml          the field-type hierarchy

    then regenerate and check it in:

        make generated

    See keel/DESIGN.md, or run `keel edit` for the browser editor.

  ==========================================================================
-->
<!--
CANboat version v9.2.0

(C) 2009-2026, Kees Verruijt, Harlingen, The Netherlands.
For more information see https://github.com/canboat/canboat

This file is part of CANboat.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.


-->
<?xml-stylesheet type="text/xsl" href="canboat.xsl"?>
<PGNDefinitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <SchemaVersion>2.8.0</SchemaVersion>
  <Comment>GENERATED FILE - DO NOT EDIT. Generated by keel from the YAML database in database/; edit database/pgns/*.yaml and run 'make generated'. See https://github.com/canboat/canboat for the full source code</Comment>
  <CreatorCode>Canboat NMEA2000 Analyzer</CreatorCode>
  <License>Apache License Version 2.0</License>
  <Version>9.2.0</Version>
  <Copyright>CANboat version v9.2.0

(C) 2009-2026, Kees Verruijt, Harlingen, The Netherlands.
For more information see https://github.com/canboat/canboat

This file is part of CANboat.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.


</Copyright>
  <Protocol>quick</Protocol>
  <PhysicalQuantities>
    <PhysicalQuantity Name="ELECTRICAL_CURRENT">
      <Description>Electrical current</Description>
      <URL>https://en.wikipedia.org/wiki/Electric_current</URL>
      <UnitDescription>Ampere</UnitDescription>
      <Unit>A</Unit>
    </PhysicalQuantity>
    <PhysicalQuantity Name="ELECTRICAL_CHARGE">
      <Description>Electrical charge</Description>
      <URL>https://en.wikipedia.org/wiki/Electric_charge</URL>
      <UnitDescription>Coulomb</UnitDescription>
      <Unit>C</Unit>
    </PhysicalQuantity>
    <PhysicalQuantity Name="ELECTRICAL_ENERGY">
      <Description>Electrical energy</Description>
      <Comment>The amount of electricity used or stored. The base unit used in NMEA 2000 is the Kilo Watt Hour (kWh) which is equivalent to 3.6e6 J (Joules).</Comment>
      <URL>https://en.wikipedia.org/wiki/Electrical_energy</URL>
      <UnitDescription>Kilo Watt Hour</UnitDescription>
      <Unit>kWh</Unit>
    </PhysicalQuantity>
    <PhysicalQuantity Name="ELECTRICAL_POWER">
      <Description>Electrical power</Description>
      <Comment>The amount of energy transferred or converted per unit time.</Comment>
      <URL>https://en.wikipedia.org/wiki/Electrical_power</URL>
      <UnitDescription>Watt</UnitDescription>
      <Unit>W</Unit>
    </PhysicalQuantity>
    <PhysicalQuantity Name="ELECTRICAL_APPARENT_POWER">
      <Description>AC apparent power</Description>
      <Comment>The amount of power transferred where the current and voltage are in phase.</Comment>
      <URL>https://en.wikipedia.org/wiki/Volt-ampere</URL>
      <UnitDescription>Volt Ampere</UnitDescription>
      <Unit>VA</Unit>
    </PhysicalQuantity>
    <PhysicalQuantity Name="ELECTRICAL_REACTIVE_POWER">
      <Description>AC reactive power</Description>
      <Comment>The amount of power transferred where the current and voltage are not in phase.</Comment>
      <URL>https://en.wikipedia.org/wiki/Volt-ampere#Reactive</URL>
      <UnitDescription>Volt Ampere Reactive</UnitDescription>
      <Unit>VAR</Unit>
    </PhysicalQuantity>
    <PhysicalQuantity Name="POTENTIAL_DIFFERENCE">
      <Description>Potential difference</Description>
      <URL>https://en.wikipedia.org/wiki/Voltage</URL>
      <UnitDescription>Volt</UnitDescription>
      <Unit>V</Unit>
    </PhysicalQuantity>
    <PhysicalQuantity Name="POWER_FACTOR">
      <Description>Power Factor</Description>
      <Comment>Used in AC circuits only, the ratio of the real power absorbed by the load to the apparent power flowing in the circuit. If less than one, the voltage and current are not in phase.</Comment>
      <URL>https://en.wikipedia.org/wiki/Power_factor</URL>
      <UnitDescription>Cos(Phi)</UnitDescription>
      <Unit>Cos Phi</Unit>
    </PhysicalQuantity>
    <PhysicalQuantity Name="LENGTH">
      <Description>Length</Description>
      <Comment>The physical size in one dimension of an object.</Comment>
      <URL>https://en.wikipedia.org/wiki/Length</URL>
      <UnitDescription>Meter</UnitDescription>
      <Unit>m</Unit>
    </PhysicalQuantity>
    <PhysicalQuantity Name="DISTANCE">
      <Description>Distance</Description>
      <Comment>The amount of separation between two objects.</Comment>
      <URL>https://en.wikipedia.org/wiki/Distance</URL>
      <UnitDescription>meter</UnitDescription>
      <Unit>m</Unit>
    </PhysicalQuantity>
    <PhysicalQuantity Name="SPEED">
      <Description>Speed</Description>
      <Comment>The velocity, or length per unit of time.</Comment>
      <URL>https://en.wikipedia.org/wiki/Speed</URL>
      <UnitDescription>meter per second</UnitDescription>
      <Unit>m/s</Unit>
    </PhysicalQuantity>
    <PhysicalQuantity Name="ANGLE">
      <Description>Angle</Description>
      <Comment>All standardized PGNs seen so far all use radians, but some manufacturer specific PGNs use degrees (deg).</Comment>
      <URL>https://en.wikipedia.org/wiki/Angle</URL>
      <UnitDescription>radian</UnitDescription>
      <Unit>rad</Unit>
    </PhysicalQuantity>
    <PhysicalQuantity Name="ANGULAR_VELOCITY">
      <Description>Angular velocity</Description>
      <Comment>The speed at which a measured angle changes</Comment>
      <URL>https://en.wikipedia.org/wiki/Angular_velocity</URL>
      <UnitDescription>radians per second</UnitDescription>
      <Unit>rad/s</Unit>
    </PhysicalQuantity>
    <PhysicalQuantity Name="VOLUME">
      <Description>Volume</Description>
      <Comment>A measure of occupied three-dimensional space.</Comment>
      <URL>https://en.wikipedia.org/wiki/Volume</URL>
      <UnitDescription>liter</UnitDescription>
      <Unit>L</Unit>
    </PhysicalQuantity>
    <PhysicalQuantity Name="VOLUMETRIC_FLOW">
      <Description>Volumetric flow</Description>
      <Comment>The volume of fluid which passes per unit time.</Comment>
      <URL>https://en.wikipedia.org/wiki/Volumetric_flow_rate</URL>
      <UnitDescription>liter per hour</UnitDescription>
      <Unit>L/h</Unit>
    </PhysicalQuantity>
    <PhysicalQuantity Name="MAGNETIC_FIELD">
      <Description>Magnetic field</Description>
      <URL>https://en.wikipedia.org/wiki/Magnetic_field</URL>
      <UnitDescription>Tesla</UnitDescription>
      <Unit>T</Unit>
    </PhysicalQuantity>
    <PhysicalQuantity Name="FREQUENCY">
      <Description>Frequency</Description>
      <URL>https://en.wikipedia.org/wiki/Radio_frequency</URL>
      <UnitDescription>Hertz</UnitDescription>
      <Unit>Hz</Unit>
    </PhysicalQuantity>
    <PhysicalQuantity Name="DATE">
      <Description>Date</Description>
      <Comment>A calendar date is a reference to a particular day in time, in NMEA 2000 expressed as the number of days since 1970-01-01 (UNIX epoch).</Comment>
      <URL>https://en.wikipedia.org/wiki/Calendar_date</URL>
      <UnitDescription>days</UnitDescription>
      <Unit>d</Unit>
    </PhysicalQuantity>
    <PhysicalQuantity Name="TIME">
      <Description>Time</Description>
      <Comment>Time is what clocks measure. We use time to place events in sequence one after the other, and we use time to compare how long events last. Absolute times in NMEA2000 are expressed as seconds since midnight(in an undefined timezone)</Comment>
      <URL>https://en.wikipedia.org/wiki/Time</URL>
      <UnitDescription>Second</UnitDescription>
      <Unit>s</Unit>
    </PhysicalQuantity>
    <PhysicalQuantity Name="DURATION">
      <Description>Duration of an event or interval between two points in time</Description>
      <UnitDescription>Second</UnitDescription>
      <Unit>s</Unit>
    </PhysicalQuantity>
    <PhysicalQuantity Name="GEOGRAPHICAL_LATITUDE">
      <Description>Geographical latitude</Description>
      <Comment>Combined with a geographical longitude the two fields form a unique point on earth, when height is disregarded.</Comment>
      <URL>https://en.wikipedia.org/wiki/Geographic_coordinate_system</URL>
      <UnitDescription>degree</UnitDescription>
      <Unit>deg</Unit>
    </PhysicalQuantity>
    <PhysicalQuantity Name="GEOGRAPHICAL_LONGITUDE">
      <Description>Geographical longitude</Description>
      <Comment>Combined with a geographical latitude the two fields form a unique point on earth, when height is disregarded.</Comment>
      <URL>https://en.wikipedia.org/wiki/Geographic_coordinate_system</URL>
      <UnitDescription>degree</UnitDescription>
      <Unit>deg</Unit>
    </PhysicalQuantity>
    <PhysicalQuantity Name="TEMPERATURE">
      <Description>Temperature</Description>
      <URL>https://en.wikipedia.org/wiki/Temperature</URL>
      <UnitDescription>Kelvin</UnitDescription>
      <Unit>K</Unit>
    </PhysicalQuantity>
    <PhysicalQuantity Name="PRESSURE">
      <Description>Pressure</Description>
      <URL>https://en.wikipedia.org/wiki/Pressure</URL>
      <UnitDescription>Pascal</UnitDescription>
      <Unit>Pa</Unit>
    </PhysicalQuantity>
    <PhysicalQuantity Name="PRESSURE_RATE">
      <Description>Pressure rate</Description>
      <Comment>How the pressure changes over time.</Comment>
      <URL>https://en.wikipedia.org/wiki/Pressure</URL>
      <UnitDescription>Pascal per hour</UnitDescription>
      <Unit>Pa/hr</Unit>
    </PhysicalQuantity>
    <PhysicalQuantity Name="CONCENTRATION">
      <Description>Concentration of one substance in another, in this marine context usually the amount of salts in water</Description>
      <URL>https://www.engineeringtoolbox.com/water-salinity-d_1251.html</URL>
      <UnitDescription>parts per million</UnitDescription>
      <Unit>ppm</Unit>
    </PhysicalQuantity>
    <PhysicalQuantity Name="DIMENSIONLESS_RATIO">
      <Description>Dimensionless ratio</Description>
      <Comment>A ratio of two quantities with the same dimension, yielding a unitless number. Includes percentages, eccentricity (m/m), clock drift (s/s), and similar.</Comment>
      <URL>https://en.wikipedia.org/wiki/Dimensionless_quantity</URL>
      <UnitDescription>ratio</UnitDescription>
      <Unit>ratio</Unit>
    </PhysicalQuantity>
    <PhysicalQuantity Name="SQUARE_ROOT_LENGTH">
      <Description>Square root of length</Description>
      <Comment>Used in GPS/GNSS almanac data for the square root of the semi-major axis of satellite orbits.</Comment>
      <URL>https://en.wikipedia.org/wiki/Semi-major_and_semi-minor_axes</URL>
      <UnitDescription>sqrt(m)</UnitDescription>
      <Unit>sqrt(m)</Unit>
    </PhysicalQuantity>
    <PhysicalQuantity Name="SIGNAL_STRENGTH">
      <Description>Signal strength expressed in dB with respect to 1 uV/m</Description>
      <URL>https://en.wikipedia.org/wiki/Signal_strength_in_telecommunications</URL>
      <UnitDescription>decibel</UnitDescription>
      <Unit>dB</Unit>
    </PhysicalQuantity>
    <PhysicalQuantity Name="SIGNAL_TO_NOISE_RATIO">
      <Description>Signal-to-noise ratio</Description>
      <URL>https://en.wikipedia.org/wiki/Signal-to-noise_ratio</URL>
      <UnitDescription>decibel</UnitDescription>
      <Unit>dB</Unit>
    </PhysicalQuantity>
  </PhysicalQuantities>
  <FieldTypes>
    <FieldType Name="NUMBER">
      <Description>Number</Description>
      <EncodingDescription>Binary numbers are little endian. Number fields that are at least two bits in length use the highest positive value to represent unknown. Number fields with at least 7 as maximum (3 bits unsigned, 4 bits signed) use the highest value minus one as an error indicator. This is likely also true for numbers where 3 is the maximum value, but there are few fields that have this length -- certainly as a number, there are a lot of lookup fields of two bits length.  For signed numbers the maximum values are the maximum positive value and that minus 1, not the all-ones bit encoding which is the maximum negative value.</EncodingDescription>
      <URL>https://en.wikipedia.org/wiki/Binary_number</URL>
      <Sentinels>TopOfRange</Sentinels>
    </FieldType>
    <FieldType Name="FLOAT">
      <Description>32 bit IEEE-754 floating point number</Description>
      <URL>https://en.wikipedia.org/wiki/IEEE_754</URL>
      <Bits>32</Bits>
      <Signed>true</Signed>
      <Sentinels>NaN</Sentinels>
    </FieldType>
    <FieldType Name="DECIMAL">
      <Description>An unsigned numeric value where each byte holds the binary value of two decimal digits (0..99)</Description>
      <EncodingDescription>Each byte contains the binary value of two decimal digits, so 1234 is represented by 2 bytes containing 0x0c (=12) and 0x22 (=34). This is NOT BCD. A value with an odd number of digits is padded with a trailing zero, e.g. the 9-digit MMSI 512000953 is encoded as 5120009530 (5 bytes), as a DSC call sends it (ITU-R M.585); a trailing zero is taken as that padding and dropped, so it decodes as 512000953, the same as an MMSI field. The leading zeros of a group (0MIDXXXXX) or coast station (00MIDXXXX) MMSI are part of it and stay. A decoder must not drop the trailing zero when the field has TrailingZeroIsDigitField and TrailingZeroIsDigitValue and the field with that order holds that value, as the last digit is then part of the value. PGN 129808's DSC Message Address does this for a call to a geographical area (DSC Format 102), whose ten digits all count. A byte that is not a digit pair (above 99), or a field the packet ends inside, makes the whole value not available.</EncodingDescription>
      <Signed>false</Signed>
      <Sentinels>None</Sentinels>
    </FieldType>
    <FieldType Name="LOOKUP">
      <Description>Number value where each value encodes for a distinct meaning</Description>
      <EncodingDescription>Each lookup has a LookupEnumeration defining what the possible values mean</EncodingDescription>
      <Comment>For almost all lookups the list of values is known with some precision, but it is quite possible that a value occurs that has no corresponding textual explanation. Generally the same special values for Error (max value - 1) and Unknown (max value) that are used for plain numbers are also valid for lookups, but some lookups define a lookup key/value pair for the maximum possible value in that field. In fact, recent additions to PGNs such as alerts have two bit lookup fields that specify four actual valid values. This makes it impossible to send an unknown value for these fields. </Comment>
      <Signed>false</Signed>
      <Sentinels>TopOfRange</Sentinels>
    </FieldType>
    <FieldType Name="INDIRECT_LOOKUP">
      <Description>Number value where each value encodes for a distinct meaning but the meaning also depends on the value in another field</Description>
      <EncodingDescription>Each lookup has a LookupIndirectEnumeration defining what the possible values mean</EncodingDescription>
      <Comment>For almost all lookups the list of values is known with some precision, but it is quite possible that a value occurs that has no corresponding textual explanation.</Comment>
      <Signed>false</Signed>
      <Sentinels>TopOfRange</Sentinels>
    </FieldType>
    <FieldType Name="BITLOOKUP">
      <Description>Number value where each bit value encodes for a distinct meaning</Description>
      <EncodingDescription>Each LookupBit has a LookupBitEnumeration defining what the possible values mean. A bitfield can have any combination of bits set.</EncodingDescription>
      <Comment>For almost all lookups the list of values is known with some precision, but it is quite possible that a value occurs that has no corresponding textual explanation.</Comment>
      <Sentinels>None</Sentinels>
    </FieldType>
    <FieldType Name="DYNAMIC_FIELD_KEY">
      <Description>Number value where each value encodes for a distinct meaning including a fieldtype of the next variable field; generally followed by an optional DYNAMIC_FIELD_LENGTH and a DYNAMIC_FIELD_VALUE field; when there is no DYNAMIC_FIELD_LENGTH field the length is contained in the lookup table</Description>
      <EncodingDescription>Each lookup has a LookupFieldTypeEnumeration defining what the possible values mean</EncodingDescription>
      <Comment>These values have been determined by reverse engineering, given the known values it is anticipated that there are unknown enumeration values and some known values have incorrect datatypes</Comment>
      <Signed>false</Signed>
      <Sentinels>TopOfRange</Sentinels>
    </FieldType>
    <FieldType Name="DYNAMIC_FIELD_LENGTH">
      <Description>Number value that indicates the length of the following DYNAMIC_FIELD_VALUE field</Description>
      <Signed>false</Signed>
      <Sentinels>TopOfRange</Sentinels>
    </FieldType>
    <FieldType Name="DYNAMIC_FIELD_VALUE">
      <Description>Variable field whose type and length is dynamic</Description>
      <EncodingDescription>The type definition of the field is defined by an earlier LookupFieldTypeEnumeration field. The length is defined by the preceding length field or the length determined by the lookup value.</EncodingDescription>
      <Sentinels>Variable</Sentinels>
    </FieldType>
    <FieldType Name="TIME">
      <Description>Time</Description>
      <URL>https://en.wikipedia.org/wiki/Time</URL>
      <Unit>s</Unit>
      <Sentinels>TopOfRange</Sentinels>
    </FieldType>
    <FieldType Name="DURATION">
      <Description>Duration</Description>
      <Unit>s</Unit>
      <Sentinels>TopOfRange</Sentinels>
    </FieldType>
    <FieldType Name="DATE">
      <Description>Date</Description>
      <EncodingDescription>The date, in days since 1 January 1970.</EncodingDescription>
      <URL>https://en.wikipedia.org/wiki/Calendar_date</URL>
      <Bits>16</Bits>
      <Unit>d</Unit>
      <Signed>false</Signed>
      <Sentinels>TopOfRange</Sentinels>
    </FieldType>
    <FieldType Name="PGN">
      <Description>Parameter Group Number</Description>
      <EncodingDescription>A 24 bit number referring to a PGN</EncodingDescription>
      <Sentinels>None</Sentinels>
    </FieldType>
    <FieldType Name="ISO_NAME">
      <Description>ISO NAME field</Description>
      <EncodingDescription>A 64 bit field containing the ISO name, e.g. all fields produced by PGN 60928. Use the definition of PGN 60928 to explain the subfields.</EncodingDescription>
      <Bits>64</Bits>
      <Signed>false</Signed>
      <Sentinels>None</Sentinels>
    </FieldType>
    <FieldType Name="STRING_FIX">
      <Description>A fixed length string containing single byte codepoints.</Description>
      <EncodingDescription>This always takes up as many bytes as defined in the field definition. Three end-of-string characters are seen: 0xff (255), the standard NMEA 2000 &quot;Unknown&quot; value. '@', the standard AIS &quot;Unknown&quot; value for strings. 0x00, the standard C end-of-string marker. It is encouraged to stop the string at the first such character (and not make it part of the string). An empty string can be considered to make the entire field &quot;Unknown&quot;.</EncodingDescription>
      <Comment>The character encoding is not defined by NMEA 2000. Bytes below 0x80 are ASCII, but above that devices differ, so CANboat decodes the content as UTF-8 when the bytes form well-formed UTF-8 and as ISO 8859-1 (Latin-1) otherwise. See the STRING_LAU comment for the observations behind this.</Comment>
      <Sentinels>EmptyString</Sentinels>
    </FieldType>
    <FieldType Name="STRING_LZ">
      <Description>A varying length string containing single byte codepoints encoded with a length byte and terminating zero.</Description>
      <EncodingDescription>The length of the string is determined by a starting length byte. It also contains a terminating zero byte. The length byte includes neither the zero byte or itself, and it counts bytes rather than characters, so a multi-byte character contributes more than one. For the character encoding see the comment.</EncodingDescription>
      <Comment>This type of string is found only in SonicHub and Fusion brand specific PGNs. SonicHub is no longer produced. The use of the Fusion specific PGNs is no longer very prevalent now that there are generic PGNs for audio/media devices. Fusion devices have been observed sending UTF-8 here, including characters that ISO 8859-1 cannot represent at all (see samples/fusion-130820-utf8.raw). CANboat decodes the content as UTF-8 when the bytes form well-formed UTF-8 and as ISO 8859-1 (Latin-1) otherwise.</Comment>
      <VariableSize>true</VariableSize>
      <Sentinels>EmptyString</Sentinels>
    </FieldType>
    <FieldType Name="STRING_LAU">
      <Description>A varying length string containing double or single byte codepoints encoded with a length byte.</Description>
      <EncodingDescription>The length of the string is determined by a starting length byte. This count includes the length and type bytes, so any empty string contains count 2. The 2nd byte contains 0 for UNICODE (UTF-16) or 1 for ASCII. In practice the ASCII encoding is not restricted to 7-bit ASCII; bytes above 0x7f do occur, and what they mean depends on the sending device. See the comment.</EncodingDescription>
      <Comment>Observed on a single bus: a Fusion sends UTF-8 under control byte 1 (bytes C5 AB for U+016B, see samples/fusion-126998-utf8.raw) while a B&amp;G sends ISO 8859-1 (byte E6 for U+00E6, see samples/bandg-129285-latin1.raw) -- the same field type under the same control byte. The encoding therefore follows from neither the field type nor the control byte, and CANboat decodes the content as UTF-8 when the bytes form well-formed UTF-8 and as ISO 8859-1 (Latin-1) otherwise. The two devices also frame the field differently: the B&amp;G appends a zero byte and counts it in the length, the Fusion does neither. Control byte 0 has so far only been seen on fields that were empty.</Comment>
      <VariableSize>true</VariableSize>
      <Sentinels>EmptyString</Sentinels>
    </FieldType>
    <FieldType Name="BINARY">
      <Description>Binary field</Description>
      <EncodingDescription>Unspecified content consisting of any number of bits.</EncodingDescription>
      <Sentinels>None</Sentinels>
    </FieldType>
    <FieldType Name="RESERVED">
      <Description>Reserved field</Description>
      <EncodingDescription>All reserved bits shall be 1</EncodingDescription>
      <Comment>NMEA reserved for future expansion and/or to align next data on byte boundary</Comment>
      <Sentinels>None</Sentinels>
    </FieldType>
    <FieldType Name="SPARE">
      <Description>Spare field</Description>
      <EncodingDescription>All spare bits shall be 0</EncodingDescription>
      <Comment>This is like a reserved field but originates from other sources where unused fields shall be 0, like the AIS ITU-1371 standard.</Comment>
      <Sentinels>None</Sentinels>
    </FieldType>
    <FieldType Name="MMSI">
      <Description>MMSI</Description>
      <EncodingDescription>The MMSI is encoded as a 32 bit number, but is always printed as a 9 digit number and should be considered as a string. The first three or four digits are special, see the USCG link for a detailed explanation. The top three 32-bit values are reserved, as for any number (see below); in addition 0 is not a valid MMSI (no station holds MID 000) and devices send it for &quot;none&quot;, so 0 is also treated as not available.</EncodingDescription>
      <URL>https://navcen.uscg.gov/maritime-mobile-service-identity</URL>
      <Bits>32</Bits>
      <Signed>false</Signed>
      <Sentinels>TopOfRange</Sentinels>
    </FieldType>
    <FieldType Name="VARIABLE">
      <Description>Variable</Description>
      <EncodingDescription>The definition of the field is that of the reference PGN and reference field, this is totally variable.</EncodingDescription>
      <VariableSize>true</VariableSize>
      <Sentinels>None</Sentinels>
    </FieldType>
    <FieldType Name="FIELD_INDEX">
      <Description>Field Index</Description>
      <EncodingDescription>Index of the specified field in the PGN referenced.</EncodingDescription>
      <Bits>8</Bits>
      <Signed>false</Signed>
      <Sentinels>TopOfRange</Sentinels>
    </FieldType>
    <FieldType Name="ADDRESS">
      <Description>NMEA 2000 / J1939 network address</Description>
      <EncodingDescription>One byte holding the bus address of a device. Every value is meaningful, so there are no top-of-range sentinels -- 0..253 are claimable device addresses, 254 is the null address (a device that has not claimed, or cannot claim, an address) and 255 is the global address, meaning broadcast / all devices.</EncodingDescription>
      <URL>https://en.wikipedia.org/wiki/SAE_J1939</URL>
      <Bits>8</Bits>
      <Signed>false</Signed>
      <Sentinels>None</Sentinels>
    </FieldType>
  </FieldTypes>
  <MissingEnumerations>
    <MissingAttribute Name="Fields">The list of fields is incomplete; some fields maybe be missing or their attributes may be incorrect</MissingAttribute>
    <MissingAttribute Name="FieldLengths">The length of one or more fields is likely incorrect</MissingAttribute>
    <MissingAttribute Name="Resolution">The resolution of one or more fields is likely incorrect</MissingAttribute>
    <MissingAttribute Name="Lookups">One or more of the lookup fields contain missing or incorrect values</MissingAttribute>
    <MissingAttribute Name="SampleData">The PGN has not been seen in any logfiles yet</MissingAttribute>
    <MissingAttribute Name="Interval">The default transmission interval is not known</MissingAttribute>
    <MissingAttribute Name="MissingCompanyFields">The manufacturer specific PGN seems to not contain the mandatory Company and Industry fields; this is likely a bug or at least incompatibility in the device</MissingAttribute>
  </MissingEnumerations>
  <LookupEnumerations>
    <LookupEnumeration Name="ACTISENSE_OPERATING_MODE" MaxValue="65535">
      <EnumPair Value="0" Name="Undefined" />
      <EnumPair Value="1" Name="NGT Transfer Normal Mode" />
      <EnumPair Value="2" Name="NGT Transfer Rx All Mode" />
      <EnumPair Value="3" Name="NGT Transfer Raw Mode" />
      <EnumPair Value="4" Name="NGW Convert Normal Mode" />
      <EnumPair Value="5" Name="CAN Packet Mode" />
      <EnumPair Value="6" Name="CAN Packet ASCII Mode" />
      <EnumPair Value="16" Name="Buffer Mode 1" />
      <EnumPair Value="17" Name="Buffer Mode 2" />
      <EnumPair Value="18" Name="Buffer Mode 3" />
      <EnumPair Value="19" Name="Autoswitch Direct Mode" />
      <EnumPair Value="20" Name="Autoswitch Smart Mode" />
      <EnumPair Value="21" Name="Combine Slow Mode" />
      <EnumPair Value="22" Name="Combine Fast Mode" />
      <EnumPair Value="23" Name="Test Mode 1" />
      <EnumPair Value="24" Name="NSI Mode 1" />
      <EnumPair Value="25" Name="IEC 61162-450 Mode 1" />
      <EnumPair Value="512" Name="Normal" />
      <EnumPair Value="40000" Name="Predefined Mode 1" />
      <EnumPair Value="40001" Name="Predefined Mode 2" />
    </LookupEnumeration>
    <LookupEnumeration Name="CERTIFICATION_LEVEL" MaxValue="255">
      <EnumPair Value="0" Name="Level A" />
      <EnumPair Value="1" Name="Level B" />
    </LookupEnumeration>
    <LookupEnumeration Name="QUICK_CHAIN_UNITS" MaxValue="65535">
      <EnumPair Value="2" Name="Feet" />
    </LookupEnumeration>
  </LookupEnumerations>
  <LookupIndirectEnumerations>
  </LookupIndirectEnumerations>
  <LookupBitEnumerations>
  </LookupBitEnumerations>
  <LookupFieldTypeEnumerations>
  </LookupFieldTypeEnumerations>
  <PGNs>
    <PGNInfo>
      <PGN>0</PGN>
      <Id>standardCanFrame</Id>
      <Description>11-bit CAN frame</Description>
      <Explanation>An 11-bit CAN identifier with no definition. An 11-bit identifier is only a message type and carries no manufacturer, so nothing says which device or protocol sent it; its payload is shown as is.</Explanation>
      <Type>Single</Type>
      <Complete>true</Complete>
      <Fallback>true</Fallback>
      <FieldCount>1</FieldCount>
      <Length>8</Length>
      <TransmissionIrregular>true</TransmissionIrregular>
      <Fields>
        <Field>
          <Order>1</Order>
          <Id>data</Id>
          <Name>Data</Name>
          <BitLength>64</BitLength>
          <BitOffset>0</BitOffset>
          <BitStart>0</BitStart>
          <Resolution>1</Resolution>
          <FieldType>BINARY</FieldType>
        </Field>
      </Fields>
    </PGNInfo>
    <PGNInfo>
      <PGN>1728</PGN>
      <Id>quickUnknown6c0</Id>
      <Description>Quick: Unknown 0x6C0</Description>
      <Explanation>Sent by a Quick windlass alongside Chain Count (0x6C1). Its payload did not change in the one capture we have, so what it carries is not known.</Explanation>
      <Type>Single</Type>
      <Complete>false</Complete>
      <Missing>
        <MissingAttribute>Fields</MissingAttribute>
        <MissingAttribute>FieldLengths</MissingAttribute>
        <MissingAttribute>Resolution</MissingAttribute>
        <MissingAttribute>Interval</MissingAttribute>
      </Missing>
      <FieldCount>2</FieldCount>
      <Length>8</Length>
      <Fields>
        <Field>
          <Order>1</Order>
          <Id>talkerId</Id>
          <Name>Talker ID</Name>
          <Description>The same 16 bits start every Quick message from a device; see Chain Count</Description>
          <BitLength>16</BitLength>
          <BitOffset>0</BitOffset>
          <BitStart>0</BitStart>
          <Resolution>1</Resolution>
          <Signed>false</Signed>
          <RangeMin>0</RangeMin>
          <RangeMax>65532</RangeMax>
          <UnknownValue>65535</UnknownValue>
          <OutOfRangeValue>65534</OutOfRangeValue>
          <ReservedValue>65533</ReservedValue>
          <FieldType>NUMBER</FieldType>
        </Field>
        <Field>
          <Order>2</Order>
          <Id>data</Id>
          <Name>Data</Name>
          <BitLength>48</BitLength>
          <BitOffset>16</BitOffset>
          <BitStart>0</BitStart>
          <Resolution>1</Resolution>
          <FieldType>BINARY</FieldType>
        </Field>
      </Fields>
    </PGNInfo>
    <PGNInfo>
      <PGN>1729</PGN>
      <Id>quickChainCount</Id>
      <Description>Quick: Chain Count</Description>
      <Explanation>A Quick windlass's chain counter, about twice a second.</Explanation>
      <Type>Single</Type>
      <Complete>false</Complete>
      <Missing>
        <MissingAttribute>Resolution</MissingAttribute>
        <MissingAttribute>Lookups</MissingAttribute>
        <MissingAttribute>Interval</MissingAttribute>
      </Missing>
      <FieldCount>3</FieldCount>
      <Length>8</Length>
      <Fields>
        <Field>
          <Order>1</Order>
          <Id>talkerId</Id>
          <Name>Talker ID</Name>
          <Description>The same 16 bits start every Quick message from a device</Description>
          <BitLength>16</BitLength>
          <BitOffset>0</BitOffset>
          <BitStart>0</BitStart>
          <Resolution>1</Resolution>
          <Signed>false</Signed>
          <RangeMin>0</RangeMin>
          <RangeMax>65532</RangeMax>
          <UnknownValue>65535</UnknownValue>
          <OutOfRangeValue>65534</OutOfRangeValue>
          <ReservedValue>65533</ReservedValue>
          <FieldType>NUMBER</FieldType>
        </Field>
        <Field>
          <Order>2</Order>
          <Id>chainCounter</Id>
          <Name>Chain Counter</Name>
          <Description>Chain paid out, counted in the unit that Units names</Description>
          <BitLength>32</BitLength>
          <BitOffset>16</BitOffset>
          <BitStart>0</BitStart>
          <Resolution>1</Resolution>
          <Signed>false</Signed>
          <RangeMin>0</RangeMin>
          <RangeMax>4294967292</RangeMax>
          <UnknownValue>4294967295</UnknownValue>
          <OutOfRangeValue>4294967294</OutOfRangeValue>
          <ReservedValue>4294967293</ReservedValue>
          <FieldType>NUMBER</FieldType>
        </Field>
        <Field>
          <Order>3</Order>
          <Id>units</Id>
          <Name>Units</Name>
          <Description>The unit Chain Counter counts in</Description>
          <BitLength>16</BitLength>
          <BitOffset>48</BitOffset>
          <BitStart>0</BitStart>
          <Resolution>1</Resolution>
          <Signed>false</Signed>
          <RangeMin>0</RangeMin>
          <RangeMax>65532</RangeMax>
          <UnknownValue>65535</UnknownValue>
          <OutOfRangeValue>65534</OutOfRangeValue>
          <ReservedValue>65533</ReservedValue>
          <FieldType>LOOKUP</FieldType>
          <LookupEnumeration>QUICK_CHAIN_UNITS</LookupEnumeration>
        </Field>
      </Fields>
    </PGNInfo>
    <PGNInfo>
      <PGN>1730</PGN>
      <Id>quickUnknown6c2</Id>
      <Description>Quick: Unknown 0x6C2</Description>
      <Explanation>Sent by a Quick windlass alongside Chain Count (0x6C1). Its payload did not change in the one capture we have, so what it carries is not known.</Explanation>
      <Type>Single</Type>
      <Complete>false</Complete>
      <Missing>
        <MissingAttribute>Fields</MissingAttribute>
        <MissingAttribute>FieldLengths</MissingAttribute>
        <MissingAttribute>Resolution</MissingAttribute>
        <MissingAttribute>Interval</MissingAttribute>
      </Missing>
      <FieldCount>2</FieldCount>
      <Length>8</Length>
      <Fields>
        <Field>
          <Order>1</Order>
          <Id>talkerId</Id>
          <Name>Talker ID</Name>
          <Description>The same 16 bits start every Quick message from a device; see Chain Count</Description>
          <BitLength>16</BitLength>
          <BitOffset>0</BitOffset>
          <BitStart>0</BitStart>
          <Resolution>1</Resolution>
          <Signed>false</Signed>
          <RangeMin>0</RangeMin>
          <RangeMax>65532</RangeMax>
          <UnknownValue>65535</UnknownValue>
          <OutOfRangeValue>65534</OutOfRangeValue>
          <ReservedValue>65533</ReservedValue>
          <FieldType>NUMBER</FieldType>
        </Field>
        <Field>
          <Order>2</Order>
          <Id>data</Id>
          <Name>Data</Name>
          <BitLength>48</BitLength>
          <BitOffset>16</BitOffset>
          <BitStart>0</BitStart>
          <Resolution>1</Resolution>
          <FieldType>BINARY</FieldType>
        </Field>
      </Fields>
    </PGNInfo>
    <PGNInfo>
      <PGN>1731</PGN>
      <Id>quickUnknown6c3</Id>
      <Description>Quick: Unknown 0x6C3</Description>
      <Explanation>Sent by a Quick windlass alongside Chain Count (0x6C1). Its payload did not change in the one capture we have, so what it carries is not known.</Explanation>
      <Type>Single</Type>
      <Complete>false</Complete>
      <Missing>
        <MissingAttribute>Fields</MissingAttribute>
        <MissingAttribute>FieldLengths</MissingAttribute>
        <MissingAttribute>Resolution</MissingAttribute>
        <MissingAttribute>Interval</MissingAttribute>
      </Missing>
      <FieldCount>2</FieldCount>
      <Length>8</Length>
      <Fields>
        <Field>
          <Order>1</Order>
          <Id>talkerId</Id>
          <Name>Talker ID</Name>
          <Description>The same 16 bits start every Quick message from a device; see Chain Count</Description>
          <BitLength>16</BitLength>
          <BitOffset>0</BitOffset>
          <BitStart>0</BitStart>
          <Resolution>1</Resolution>
          <Signed>false</Signed>
          <RangeMin>0</RangeMin>
          <RangeMax>65532</RangeMax>
          <UnknownValue>65535</UnknownValue>
          <OutOfRangeValue>65534</OutOfRangeValue>
          <ReservedValue>65533</ReservedValue>
          <FieldType>NUMBER</FieldType>
        </Field>
        <Field>
          <Order>2</Order>
          <Id>data</Id>
          <Name>Data</Name>
          <BitLength>48</BitLength>
          <BitOffset>16</BitOffset>
          <BitStart>0</BitStart>
          <Resolution>1</Resolution>
          <FieldType>BINARY</FieldType>
        </Field>
      </Fields>
    </PGNInfo>
  </PGNs>
</PGNDefinitions>
