<?xml version="1.0" encoding="utf-8"?>
<Mission xmlns="Tethys"
        xmlns:Control="Tethys/Control"
        xmlns:Estimation="Tethys/Estimation"
        xmlns:Dock="Tethys/Dock"
        xmlns:Guidance="Tethys/Guidance" 
        xmlns:Units="Tethys/Units"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="Tethys http://okeanids.mbari.org/tethys/Xml/Tethys.xsd
                            Tethys/Control http://okeanids.mbari.org/tethys/Xml/Control.xsd
                            Tethys/Estimation http://okeanids.mbari.org/tethys/Xml/Estimation.xsd
                            Tethys/Dock http://okeanids.mbari.org/tethys/Xml/Dock.xsd
                            Tethys/Guidance http://okeanids.mbari.org/tethys/Xml/Guidance.xsd                            
                            Tethys/Units http://okeanids.mbari.org/tethys/Xml/Units.xsd"
        Id="transitUnder">

    <Description>
        Vehicle transits to desired waypoint and can be commanded to use/hold
        mass or buoyancy. Designed for under ice.
    </Description>

    <DefineArg Name="MissionTimeout"><Description>
        Maximum duration of mission
    </Description><Units:minute/><Value>60</Value></DefineArg>

    <DefineArg Name="DetachTimeout"><Description>
        Maximum time to spend getting off the dock
    </Description><Units:minute/><Value>20</Value></DefineArg>

    <DefineArg Name="Latitude"><Description>
        Latitude of waypoint to seek. If set to NaN, uses latitude at mission
        initialization.
    </Description><Units:degree/><Value>NaN</Value></DefineArg>

    <DefineArg Name="Longitude"><Description>
        Longitude of waypoint to seek. If set to NaN, uses longitude at mission
        initialization.
    </Description><Units:degree/><Value>NaN</Value></DefineArg>

    <DefineArg Name="Northings"><Description>
        Northward distance of the waypoint to seek. If combined with Latitude
        and/or Longitude, this is an offset from the specified Latitude and/or
        Longitude.
    </Description><Units:meter/><Value>0</Value></DefineArg>

    <DefineArg Name="Eastings"><Description>
        Eastward distance of the waypoint to seek. If combined with Latitude
        and/or Longitude, this is an offset from the specified Latitude and/or
        Longitude.
    </Description><Units:meter/><Value>0</Value></DefineArg>

    <DefineArg Name="Depth"><Description>
        Depth of flat and level flight during the mission.
    </Description><Units:meter /><Value>10</Value></DefineArg>

    <DefineArg Name="Speed"><Description>
        Speed of vehicle (relative to water) during the mission.
    </Description><Units:meter_per_second/><Value>1</Value></DefineArg>

    <DefineArg Name="MaxDepth"><Description>
        Maximum depth for the entire mission.
    </Description><Units:meter/><Value>20</Value></DefineArg>

    <DefineArg Name="MinOffshore"><Description>
        Minimum distance offshore for the entire mission.
    </Description><Units:kilometer/><Value>1</Value></DefineArg>

    <DefineArg Name="MinAltitude"><Description>
        Minimum height above the sea floor for the entire mission.
    </Description><Units:meter/><Value>7</Value></DefineArg>

    <DefineArg Name="MassHold"><Description>
        Set to True in order to hold mass at default position, False to allow
        mass to run on its own.
    </Description><True/></DefineArg>

    <DefineArg Name="BuoyancyHold"><Description>
        Set to True in order to hold buoyancy at neutral position, False to
        allow buoyancy to run on its own.
    </Description><True/></DefineArg>

    <Timeout Duration="MissionTimeout"/>

    <DefineArg Name="MicromodemCommsInterval"><Description>
        How often to trigger Umodem communications
    </Description><Units:minute/><Value>2</Value></DefineArg>

    <DefineArg Name="DetachDepth"><Description>
        Desired vehicle depth when leaving the dock.
    </Description><Units:meter/><Value>4.5</Value></DefineArg>

    <DefineArg Name="DetachBounceTimeout"><Description>
        Time duration to keep the thruster engaged to bounce/slingshot off the
        dock.
    </Description><Units:second/><Value>20</Value></DefineArg>

    <DefineArg Name="TransponderCode"><Description>
        Transponder Address.
    </Description><Units:count/><Value>2</Value></DefineArg>

    <DefineArg Name="TrackingUpdatePeriod"><Description>
        How long to wait between acoustic queries.
    </Description><Units:second/><Value>2.5</Value></DefineArg>

    <DefineArg Name="NumberOfPings"><Description>
        Number of pings requested each time.
    </Description><Units:count/><Value>1</Value></DefineArg>

    <Insert Filename="Insert/StandardEnvelopes.xml"/>

    <Assign><Sequence/><Arg Name="StandardEnvelopes:MinAltitude"/><Arg Name="MinAltitude"/></Assign>

    <Assign><Sequence/><Arg Name="StandardEnvelopes:MaxDepth"/><Arg Name="MaxDepth"/></Assign>

    <Assign><Sequence/><Arg Name="StandardEnvelopes:MinOffshore"/><Arg Name="MinOffshore"/></Assign>

    <Aggregate Id="Detach">

        <Sequence/>

        <Timeout Duration="DetachTimeout">
            <Syslog Severity="Important">Timed out trying to detach from dock. Stopping mission.</Syslog>
            <Guidance:Execute>
                <Sequence/>
                <Setting><Guidance:Execute.command/><String>stop</String></Setting>
            </Guidance:Execute>
        </Timeout>

        <Syslog Severity="Important">Detaching from dock.</Syslog>

<!-- Turn on tracking so we get some ranges to see how far we are from the dock -->

        <Estimation:TrackAcousticContact>
            <Parallel/>
            <Setting><Estimation:TrackAcousticContact.contactLabelSetting/><Arg Name="TransponderCode"/></Setting>
            <Setting><Estimation:TrackAcousticContact.numberOfSamplesSetting/><Arg Name="NumberOfPings"/></Setting>
            <Setting><Estimation:TrackAcousticContact.updatePeriodSetting/><Arg Name="TrackingUpdatePeriod"/></Setting>
        </Estimation:TrackAcousticContact>

<!-- Time to leave the dock! -->

        <Dock:Undock>
            <Sequence/>
        </Dock:Undock>

    </Aggregate>

    <Guidance:Buoyancy Id="BuoyancyHold">
        <While>
            <Arg Name="BuoyancyHold"/>
        </While>
        <Setting><Guidance:Buoyancy.position/><Control:VerticalControl.buoyancyNeutral/></Setting>
    </Guidance:Buoyancy>

    <Guidance:Pitch Id="MassHold">
        <While>
            <Arg Name="MassHold"/>
        </While>
        <Setting><Guidance:Pitch.massPosition/><Control:VerticalControl.massDefault/></Setting>
    </Guidance:Pitch>

    <Aggregate Id="Transit">

        <Sequence/>

        <Insert Filename="Insert/MicromodemComms.xml" Id="MicromodemComms">
            <RedefineArg Name="CommsInterval"><Arg Name="MicromodemCommsInterval"/></RedefineArg>
        </Insert>

        <Guidance:Pitch>
            <Parallel/>
            <Setting><Guidance:Pitch.depth/><Arg Name="Depth"/></Setting>
        </Guidance:Pitch>

        <Guidance:SetSpeed>
            <Parallel/>
            <Setting><Guidance:SetSpeed.speed/><Arg Name="Speed"/></Setting>
        </Guidance:SetSpeed>

        <Guidance:Waypoint Id="Wpt1">
            <Sequence/>
            <Setting><Guidance:Waypoint.latitude/><Arg Name="Latitude"/></Setting>
            <Setting><Guidance:Waypoint.longitude/><Arg Name="Longitude"/></Setting>
            <Setting><Guidance:Waypoint.northingsDelta/><Arg Name="Northings"/></Setting>
            <Setting><Guidance:Waypoint.eastingsDelta/><Arg Name="Eastings"/></Setting>
        </Guidance:Waypoint>

    </Aggregate>

</Mission>
