<?xml version="1.0" encoding="utf-8"?>
<!-- $Id: ais_msg_19.xml 11860 2009-05-09 20:42:35Z schwehr $ -->
<!-- $Revision: 11860 $ -->
<!-- $Date: 2009-05-09 16:42:35 -0400 (Sat, 09 May 2009) $ -->

<!-- AUTHOR: Kurt Schwehr -->

<ais-binary-message version="1.0" xmlns:xi="http://www.w3.org/2001/XInclude">

  <xi:include href="structs-inc.xml"/>

  <!-- ============================================================ -->

  <message name="b_pos_and_shipdata" aismsgnum="19" titlefield="UserID">
    <note>I tried this on one message and got garbage in the name field and nonsense for the dimensions</note>
    <description>Extended Class B equipment position report - NOT WORKING IN NOAADATA</description>
    <note>Page 116, Table 68 in ITU-R.M.1371-3</note>
    <!-- This next block of messages will get ignored... -->

    <messagesize>312</messagesize>
    <nmea_first_char>C</nmea_first_char>

    <!-- FIX: update these... they are probably wrong... -->
    <!--
    <category>F</category>-->
    <priority>1</priority>
<!--    <operationmode>AU</operationmode>
    <operationmode>AS</operationmode>-->
    <accessscheme>ITDMA</accessscheme>
    <comstate>N/A</comstate>

    <stationtype>mobile</stationtype>

    <!-- Back to tags that the compiler knows about -->

    <field name="MessageID" numberofbits="6" type="uint">
      <description>AIS message number.  Must be 19</description>
      <required>19</required>
    </field>

    <field name="RepeatIndicator" numberofbits="2" type="uint">
      <description>Indicated how many times a message has been repeated</description>
      <unavailable>0</unavailable>
      <lookuptable>
	<entry key="0">default</entry>
	<entry key="3">do not repeat any more</entry>
      </lookuptable>
      <testvalue>1</testvalue>
    </field>

    <field name="UserID" numberofbits="30" type="uint">
      <description>Unique ship identification number (MMSI)</description>
      <testvalue>1193046</testvalue> <!-- Default value for all NAUTICAST devices -->
    </field>

    <field name="Spare" numberofbits="8" type="uint">
      <description>Reseverd for definition by a compentent regional or local authority.  Should be set to zero.</description>
      <required>0</required>
    </field>

    <field name="SOG" numberofbits="10" type="udecimal">
      <description>Speed over ground</description>
      <unavailable>102.3</unavailable>
      <lookuptable>
	<entry key="102.2">102.2 knots or higher</entry>
      </lookuptable>
      <units>knots</units>
      <scale>10</scale> 
      <decimalplaces>1</decimalplaces>
      <testvalue>101.9</testvalue>
    </field>

    <field name="PositionAccuracy" numberofbits="1" type="uint">
      <description>Accuracy of positioning fixes</description>
      <lookuptable>
	<entry key="0">low (greater than 10 m)</entry>
	<entry key="1">high (less than 10 m)</entry>
      </lookuptable>
      <testvalue>1</testvalue>
    </field>

    <include-struct name="Position" struct="position2d">
      <do_not_mangle_name/>
      <description>Location of the vessel</description>
    </include-struct>

    <field name="COG" numberofbits="12" type="udecimal">
      <description>Course over ground</description>
      <range min="0" max="359.9"/>
      <unavailable>360</unavailable>
      <units>degrees</units>
      <scale>10</scale>
      <decimalplaces>1</decimalplaces>
      <testvalue>34.5</testvalue>
    </field>

    <field name="TrueHeading" numberofbits="9" type="uint">
      <description>True heading (relative to true North)</description>
      <range min="0" max="359"/>
      <unavailable>511</unavailable>
      <units>degrees</units>
      <testvalue>41</testvalue>
    </field>

    <field name="TimeStamp" numberofbits="6" type="uint">
      <description>UTC second when the report was generated</description>
      <range min="0" max="59"/>
      <unavailable>60</unavailable>
      <lookuptable>
	<entry key="60">not available/default</entry>
	<entry key="61">manual input</entry>
	<entry key="62">dead reckoning</entry>
	<entry key="63">inoperative</entry>
      </lookuptable>
      <units>seconds</units>
      <testvalue>35</testvalue>
    </field>

    <field name="Spare2" numberofbits="4" type="uint">
      <description>Not used.  Should be set to zero.  Researched for future use.</description>
      <required>0</required>
    </field>

    <field name="name" numberofbits="6" arraylength="20" type="aisstr6"> 
      <description>Vessel name</description>
      <unavailable>@@@@@@@@@@@@@@@@@@@@</unavailable>
      <testvalue>BLACK PEARL@@@@@@@@@</testvalue>
    </field>

    <field name="shipandcargo" numberofbits="8" type="uint"> 
      <alias>what</alias>
      <description>Type of ship and cargo type</description>
      <note>  FIX: need to verify that I got this lookup table right.  Also need to handle entryranges in the lookup table</note>
      <note>
	http://www.imo.org/Environment/mainframe.asp?topic_id=236

	* Category A - Noxious liquid substances which if discharged
	into the sea from tank cleaning or deballasting operations
	would present a major hazard to either marine resources or
	human health or cause serious harm to amenities or other
	legitimate uses of the sea and therefore justify the
	application of stringent anti-pollution measures.  Examples
	are acetone cyanohydrin, carbon disulphide, cresols,
	naphthalene and tetraethyl lead.

	* Category B - Noxious liquid substances which if discharged
	into the sea from tank cleaning or deballasting operations
	would present a hazard to either marine resources or human
	health or cause harm to amenities or other legitimate uses of
	the sea and therefore justify the application of special
	anti-pollution measures.  Examples are acrylonitrile, carbon
	tetrachloride, ethylene dichloride and phenol.

	* Category C - Noxious liquid substances which if discharged
	into the sea from tank cleaning or deballasting operations
	would present a minor hazard to either marine resources or
	human health or cause minor harm to amenities or other
	legitimate uses of the sea and therefore require special
	operational conditions.  Examples are benzene, styrene,
	toluene and xylene.

	* Category D - Noxious liquid substances which if discharged
	into the sea from tank cleaning or deballasting operations
	would present a recognizable hazard to either marine resources
	or human health or cause minimal harm to amenities or other
	legitimate uses of the sea and therefore require some
	attention in operational conditions.  Examples are acetone,
	phosphoric acid and tallow.
      </note>

      <range min="0" max="99"/>
      <unavailable>0</unavailable>
      <!-- FIX: use table 3.3.8.2.3.2 to build lookuptable -->
      <!-- 100-199 preserved for regional use -->
      <!-- 200-255 preserved for future use -->
      <lookuptable>
	<!-- FIX: what about 0..9?? -->
	<entryrange start="10" end="19">Reserved for future use</entryrange>

	<!-- http://www.navcen.uscg.gov/mwv/regulations/wig/wig.htm -->
	<entry key="20">Wing in ground (WIG), all ships of this type</entry>
	<entry key="21">Wing in ground (WIG), Hazardous catagory A</entry>
	<entry key="22">Wing in ground (WIG), Hazardous catagory B</entry>
	<entry key="23">Wing in ground (WIG), Hazardous catagory C</entry>
	<entry key="24">Wing in ground (WIG), Hazardous catagory D</entry>
	<entry key="25">Wing in ground (WIG), Reserved for future use</entry>
	<entry key="26">Wing in ground (WIG), Reserved for future use</entry>
	<entry key="27">Wing in ground (WIG), Reserved for future use</entry>
	<entry key="28">Wing in ground (WIG), Reserved for future use</entry>
	<entry key="29">Wing in ground (WIG), No additional information</entry>

	<entry key="30">fishing</entry>
	<entry key="31">towing</entry>
	<entry key="32">towing length exceeds 200m or breadth exceeds 25m</entry>
	<entry key="33">dredging or underwater ops</entry>
	<entry key="34">diving ops</entry>
	<entry key="35">military ops</entry>
	<entry key="36">sailing</entry>
	<entry key="37">pleasure craft</entry>
	<entry key="38">reserved</entry>
	<entry key="39">reserved</entry>

	<entry key="40">High speed craft (HSC), all ships of this type</entry>
	<entry key="41">High speed craft (HSC), Hazardous catagory A</entry>
	<entry key="42">High speed craft (HSC), Hazardous catagory B</entry>
	<entry key="43">High speed craft (HSC), Hazardous catagory C</entry>
	<entry key="44">High speed craft (HSC), Hazardous catagory D</entry>
	<entry key="45">High speed craft (HSC), Reserved for future use</entry>
	<entry key="46">High speed craft (HSC), Reserved for future use</entry>
	<entry key="47">High speed craft (HSC), Reserved for future use</entry>
	<entry key="48">High speed craft (HSC), Reserved for future use</entry>
	<entry key="49">High speed craft (HSC), No additional information</entry>

	<entry key="50">pilot vessel</entry>
	<entry key="51">search and rescue vessel</entry>
	<entry key="52">tug</entry>
	<entry key="53">port tender</entry>
	<entry key="54">anti-polution equipment</entry>
	<entry key="55">law enforcement</entry>
	<entry key="56">spare - local vessel</entry>
	<entry key="57">spare - local vessel</entry>
	<entry key="58">medical transport</entry>
	<!-- http://www.icrc.org/ihl.nsf/COM/470-750140?OpenDocument
	     Protection of Victims of International Armed Conflicts -->
	<entry key="59">ship according to RR Resolution No. 18</entry>

	<entry key="60">passenger, all ships of this type</entry>
	<entry key="61">passenger, Hazardous catagory A</entry>
	<entry key="62">passenger, Hazardous catagory B</entry>
	<entry key="63">passenger, Hazardous catagory C</entry>
	<entry key="64">passenger, Hazardous catagory D</entry>
	<entry key="65">passenger, Reserved for future use</entry>
	<entry key="66">passenger, Reserved for future use</entry>
	<entry key="67">passenger, Reserved for future use</entry>
	<entry key="68">passenger, Reserved for future use</entry>
	<entry key="69">passenger, No additional information</entry>
	<entry key="70">cargo, all ships of this type</entry>
	<entry key="71">cargo, Hazardous catagory A</entry>
	<entry key="72">cargo, Hazardous catagory B</entry>
	<entry key="73">cargo, Hazardous catagory C</entry>
	<entry key="74">cargo, Hazardous catagory D</entry>
	<entry key="75">cargo, Reserved for future use</entry>
	<entry key="76">cargo, Reserved for future use</entry>
	<entry key="77">cargo, Reserved for future use</entry>
	<entry key="78">cargo, Reserved for future use</entry>
	<entry key="79">cargo, No additional information</entry>
	<entry key="80">tanker, all ships of this type</entry>
	<entry key="81">tanker, Hazardous catagory A</entry>
	<entry key="82">tanker, Hazardous catagory B</entry>
	<entry key="83">tanker, Hazardous catagory C</entry>
	<entry key="84">tanker, Hazardous catagory D</entry>
	<entry key="85">tanker, Reserved for future use</entry>
	<entry key="86">tanker, Reserved for future use</entry>
	<entry key="87">tanker, Reserved for future use</entry>
	<entry key="88">tanker, Reserved for future use</entry>
	<entry key="89">tanker, No additional information</entry>
	<entry key="90">other type, all ships of this type</entry>
	<entry key="91">other type, Hazardous catagory A</entry>
	<entry key="92">other type, Hazardous catagory B</entry>
	<entry key="93">other type, Hazardous catagory C</entry>
	<entry key="94">other type, Hazardous catagory D</entry>
	<entry key="95">other type, Reserved for future use</entry>
	<entry key="96">other type, Reserved for future use</entry>
	<entry key="97">other type, Reserved for future use</entry>
	<entry key="98">other type, Reserved for future use</entry>
	<entry key="99">other type, No additional information</entry>

	<entryrange start="100" end="199">Reserved for regional use</entryrange> <!-- FIX: does this seem good for ranges? -->
	<entryrange start="200" end="255">Reserved for future use</entryrange> <!-- FIX: does this seem good for ranges? -->
      </lookuptable>
      <testvalue>55</testvalue>
    </field>

    <!-- See figure 17 in section 3.3.8.2.3.3 on page 48-->
    <!-- FIX: make sure that dim for Class B is the same as dim for Class A -->
    <field name="dimA" numberofbits="9" type="uint">
      <description>Distance from bow to reference position</description>
      <note>See 3.3.8.2.3.3 Figure 17 page 48 of ITU-R M.1371-1</note>
      <note>See 3.3.3 Figure 42  of ITU-R M.1371-3</note>
      <units>m</units>
      <unavailable>0</unavailable>
      <testvalue>10</testvalue>
    </field>

    <field name="dimB" numberofbits="9" type="uint">
      <description>Distance from reference position to stern</description>
      <note>See 3.3.8.2.3.3 Figure 17 page 48 of ITU-R M.1371-1</note>
      <units>m</units>
      <unavailable>0</unavailable>
      <testvalue>11</testvalue>
    </field>

    <field name="dimC" numberofbits="6" type="uint">
      <description>Distance from port side to reference position</description>
      <note>See 3.3.8.2.3.3 Figure 17 page 48 of ITU-R M.1371-1</note>
      <units>m</units>
      <unavailable>0</unavailable>
      <lookuptable>
	<entry key="63">63 m or greater</entry>
      </lookuptable>
      <testvalue>12</testvalue>
    </field>

    <field name="dimD" numberofbits="6" type="uint">
      <description>Distance from reference position to starboard side</description>
      <note>See 3.3.8.2.3.3 Figure 17 page 48 of ITU-R M.1371-1</note>
      <units>m</units>
      <unavailable>0</unavailable>
      <lookuptable>
	<entry key="63">63 m or greater</entry>
      </lookuptable>
      <testvalue>13</testvalue>
    </field>

    <field name="fixtype" numberofbits="4" type="uint">
      <description>Method used for positioning</description>
      <range min="0" max="7"/>
      <unavailable>0</unavailable>
      <lookuptable>
	<entry key="0">undefined</entry>
	<entry key="1">GPS</entry>
	<entry key="2">GLONASS</entry>
	<entry key="3">combined GPS/GLONASS</entry>
	<entry key="4">Loran-C</entry>
	<entry key="5">Chayka</entry>
	<entry key="6">integrated navigation system</entry>
	<entry key="7">surveyed</entry>
	<!-- <entry startkey="8" endkey="15">not used</entry> -->
      </lookuptable>
      <testvalue>1</testvalue>
    </field>

    <field name="RAIM" numberofbits="1" type="bool">
      <description>Receiver autonomous integrity monitoring flag</description>
      <lookuptable>
	<entry key="False">not in use</entry>
	<entry key="True">in use</entry>
      </lookuptable>
      <testvalue>0</testvalue>
    </field>

    <field name="DTE" numberofbits="1" type="uint">
      <description>Data terminal ready</description>
      <unavailableraw>1</unavailableraw>
      <default>1</default>
      <lookuptable>
	<entry key="0">available</entry>
	<entry key="1">not available</entry>
      </lookuptable>
      <testvalue>0</testvalue>
    </field>

    <field name="Spare3" numberofbits="5" type="uint">
      <description>Not used. Should be set to zero</description>
      <required>0</required>
    </field>


  </message> <!-- position -->

</ais-binary-message>
