//////////////////////////////////////////////////////////////// 
//
// PURPOSE: This contains SensorModule parameters for Tethys class vehicles.
//
// NOTES:   All values (except "strings") must be followed by
//          a unit abbreviation (or one of the unit-like
//          abbreviations: n/a, bool, enum, count). 
//
////////////////////////////////////////////////////////////////

   AHRS_M2.loadAtStartup                         = 1 bool;
   AHRS_M2.simulateHardware                      = 1 bool;
   AHRS_M2.boresightMatrix                       = "f0.0 f0.0 f-1.0 f0.0 f-1.0 f0.0 f-1.0 f0.0 f0.0" // default LRAUV vertical mounting configuration (connector down, flat-rib back)
   AHRS_M2.magDeviation                          = 0.0 degree;
   AHRS_M2.minNumPointsCal                       = 4 count; // Number of cal points required for the field calibration to start (4-32)
   AHRS_M2.power                                 = 0.06 watt;
   AHRS_M2.readAccelerations                     = 0 bool;
   AHRS_M2.readAngularVelocities                 = 0 bool;
   AHRS_M2.readMagnetics                         = 0 bool;
   AHRS_M2.verbosity                             = 0 count;

   AMEcho.loadAtStartup                          = 0 bool;
   AMEcho.simulateHardware                       = 1 bool;
   AMEcho.enabled                                = 1 bool;
   AMEcho.depthThreshold                         = 20.0 meter; // don't run altimeter above this depth

   AcousticModem_Benthos_ATM900.loadAtStartup      = 0 bool;
   AcousticModem_Benthos_ATM900.simulateHardware   = 1 bool;
   AcousticModem_Benthos_ATM900.txPower            = 8 enum;
   AcousticModem_Benthos_ATM900.localAddress       = 0 count;
   AcousticModem_Benthos_ATM900.sbdAddress         = -1 enum;
   AcousticModem_Benthos_ATM900.transponderAddress = 0 enum;
   AcousticModem_Benthos_ATM900.sendExpress        = 0 bool;
   AcousticModem_Benthos_ATM900.surfaceThreshold   = 0.5 m;
   AcousticModem_Benthos_ATM900.verbosity          = 1 count;

   BackseatComponent.loadAtStartup        = 0 bool;
   BackseatComponent.simulateHardware     = 0 bool;
   BackseatComponent.shutdownCmd          = "shutdown";
   BackseatComponent.lcmListenerTimeout   = 2.5 second;
   BackseatComponent.verbosity            = 0 count;
   BackseatComponent.alwaysOn             = 0 bool;  // Keeps BSC powered when true
   BackseatComponent.needs24v             = 0 bool;  // Requests 24v power when true

   // The second generation 4 chan mux to the Ocean Server IBPS
   BPC1.loadAtStartup                            = 1 bool;
   BPC1.simulateHardware                         = 1 bool;
   BPC1.batteryMissingStickThreshold             = 0 count;   // Number of missing sticks allowed (set to 0, to require ALL batt sticks report in)
   BPC1.batteryMuxCycleTime                      = 10 minute; // Time it takes OceanServer to mux over all battry banks
   BPC1.batterySamplingInterval                  = 1 hour;    // Time between battery status checks
   BPC1.batteryStickCommsTimeout                 = 6 hour;    // Max time allowed between batt stick check-ins (comp. will throw a fault if it
                                                  // doesn't hear from a batt stick after timeout is exceeded)
                                                  
   BR_Ping1D.loadAtStartup                       = 0 bool;
   BR_Ping1D.interval                            = 500 millisecond;
   BR_Ping1D.simulateHardware                    = 0 bool;
   BR_Ping1D.verbosity                           = 0 count;
   BR_Ping1D.minRange                            = 0 meter;
   BR_Ping1D.maxRange                            = 30 meter;
   BR_Ping1D.soundSpeed                          = 1500 m/s;
   BR_Ping1D.autoMode                            = 1 bool;
   BR_Ping1D.gainIndex                           = 4 count;
   BR_Ping1D.minConfidence                       = 100 percent;
   BR_Ping1D.pingEnable                          = 1 bool;
   BR_Ping1D.writeUniversal                      = 0 bool;

   DataOverHttps.loadAtStartup                   = 1 bool;
   DataOverHttps.connectionTimeout               = 30 second;  // If transaction takes this long, try again.
   DataOverHttps.period                          = 30 second;  // How often to check in with server.
   DataOverHttps.power                           = 0.001 watt; // Not actual hardware
   DataOverHttps.timeout                         = 3 minute;   // If not connected for this period of time, fall over to the next comms channel.
   DataOverHttps.verbosity                       = 0 count;    // Actually more like a volume control: >2 logs debug messages as IMPORTANT, 2 as INFO, 1 as DEBUG, and <1 as NONE

   DAT.loadAtStartup                             = 0 bool;
   DAT.simulateHardware                          = 1 bool;
   DAT.maxAckTimeouts                            = 4 count;
   DAT.convertPhaseDataToDirection               = 0 bool;
   DAT.ignoreElevationAngle                      = 0 bool;
   DAT.txPower                                   = 8 enum;
   DAT.localAddress                              = 0 count;
   DAT.sbdAddress                                = -1 enum;
   DAT.transponderAddress                        = 0 enum;
   DAT.sendExpress                               = 0 bool;
   DAT.surfaceThreshold                          = 0.5 m;
   DAT.verbosity                                 = 0 count;

   DDM.loadAtStartup                             = 0 bool;
   DDM.simulateHardware                          = 0 bool;
   DDM.currentLimit                              = 60 count; // 0x60 (1.125A)
   DDM.PWMLimit                                  = 60 count; // 0x60
   DDM.verbosity                                 = 0 count;

   DUSBL_Hydroid.loadAtStartup                   = 0 bool;
   DUSBL_Hydroid.simulateHardware                = 1 bool;
   DUSBL_Hydroid.defaultTurnAroundTime           = .05 s; // Turn around time of the transponder being used
   DUSBL_Hydroid.defaultSoundSpeed               = 1500 m/s; // Speed of sound in water if not measured
   DUSBL_Hydroid.detectionThreshold              = 75 count; // Ignore singals lower than this value. Max ~64 count", Units::COUNT );
   DUSBL_Hydroid.recieveTimeout                  = 2048 ms;  // Time after transmit to listen for replies. Max 4095 ms", Units::MILLISECOND );
   DUSBL_Hydroid.transmitLockout                 = 40 ms;    // Time after transmit to ignore replies. Max 50 ms", Units::MILLISECOND );
   DUSBL_Hydroid.transponderCode                 = 2 enum;   // Transponder code: 2 for DR1-A, 3 for DR1-B, etc", Units::ENUM );
   DUSBL_Hydroid.numberOfPingsRequested          = 1 count; // How many pings to request
   DUSBL_Hydroid.verbosity                       = 0 enum;   // Verbosity: 0                      =concise to 3                      =most verbose
   DUSBL_Hydroid.xCenter                         = 0 arcdeg; // X-axis offset, up to +/- 6.35 arcdeg
   DUSBL_Hydroid.yCenter                         = 0 arcdeg; // Y-axis offset, up to +/- 6.35 arcdeg

   Depth_Keller.loadAtStartup                    = 1 bool;
   Depth_Keller.simulateHardware                 = 1 bool;
   Depth_Keller.maxPressBound                    = 500 decibar;
   Depth_Keller.minPressBound                    = -10 decibar;
   Depth_Keller.offset                           = 0 decibar;
   Depth_Keller.power                            = 0.006 watt;        // Assumes 1mA + A/D overhead
   Depth_Keller.scale                            = 27.72 micropascal; // per count of A/D

   DepthKeller33X.loadAtStartup                  = 0 bool;
   DepthKeller33X.simulateHardware               = 1 bool;
   DepthKeller33X.maxPressBound                  = 500 decibar;
   DepthKeller33X.minPressBound                  = -10 decibar;
   DepthKeller33X.offset                         = 0 decibar;

   DropWeight.loadAtStartup                      = 1 bool;
   DropWeight.simulateHardware                   = 1 bool;

   DVL_micro.loadAtStartup                       = 0 bool;
   DVL_micro.simulateHardware                    = 1 bool;
   DVL_micro.magDeviation                        = 0.0 degree;
   DVL_micro.pitchOffset                         = 0.0 degree;
   DVL_micro.power                               = 5.436 watt; // Assumes 75 meter altitude, 2.5 Hz
   DVL_micro.rollOffset                          = 0.0 degree;
   //DVL_micro.power_platform_orientation          = 0.94 watt;
   //DVL_micro.power_platform_magnetic_orientation = 0.94 watt;
   //DVL_micro.power_platform_pitch_angle          = 0.94 watt;
   //DVL_micro.power_platform_roll_angle           = 0.94 watt;

   GobyModem.loadAtStartup                       = 0 bool;
   GobyModem.simulateHardware                    = 1 bool;
   GobyModem.modemType                           = "benthos_atm900"; // Either benthos_atm900 or whoi_micromodem
   GobyModem.networkIds                          = "0"; // Comma separated list of IDs of all deployed vehicles with modems
                                     // This must match in all simulataneously deployed vehicles
                                     // Used to allocate transmission time slots
   GobyModem.maxDistance                         = 5 km;   // Maximum distance of transmission, used in simulation
   GobyModem.transBaud                           = 30 bps; // Baud rate of transmission, used in simulation

   Micromodem.verbosity                          = 4 enum;
   Micromodem.loadAtStartup                      = 0 bool;
   Micromodem.simulateHardware                   = 1 bool;
   Micromodem.localAddress                       = 0 enum;
   Micromodem.destinationAddress                 = -1 enum;
   Micromodem.dataRate                           = 1 enum;
   Micromodem.sendExpress                        = 0 bool;
   Micromodem.acousticResponseTimeout            = 20 second; // How long to wait for external responses
   Micromodem.resendPeriod                       = 1 minute; // How long to wait between resend ping
   Micromodem.surfaceThreshold                   = 0.5 m;  // Closer to the surface than VerticalControl.surfaceThreshold
   Micromodem.pwrampTXLevel                      = 0 enum; // Set to 3 for test tank, -1 for version 1 modems
   Micromodem.centerFrequency                    = 14500 Hz;
   Micromodem.bandwidth                          = 4000 Hz;
   Micromodem.dusblPingCode                      = "";
   Micromodem.rangeTxSeqCode                     = "";
   Micromodem.rangeTxFreq                        = 10000 Hz;
   Micromodem.rangeTxTime                        = 10 ms;
   Micromodem.rangeRxTime                        = 10 ms;
   Micromodem.rangeTAT                           = 50 ms;
   Micromodem.trans1Channel                      = -1 enum;
   Micromodem.trans2Channel                      = -1 enum;
   Micromodem.trans3Channel                      = -1 enum;
   Micromodem.trans4Channel                      = -1 enum;

   NAL9602.loadAtStartup                         = 1 bool;
   NAL9602.simulateHardware                      = 1 bool;
   NAL9602.gpsFailTimeout                        = 10 min; // Time to wait for GPS prior to throwing a failure
                                                   // Based on worst case outside of 5 min 26 seconds for
                                                   // acquisition without a backup battery.
   NAL9602.iridiumMTQueueTimeout                 = 5 min;  // How long to wait for an Iridium session to check for waiting MT SBD messages in the queue
   NAL9602.power                                 = 0.35 watt;
   NAL9602.power_platform_communications         = 0.90 watt;
   NAL9602.requestGGA                            = 0 bool; // If false recommended minimum data will be requested
   NAL9602.fastGPSFix                            = 1 bool; // Leaves the power applied to the NAL in order to allow for faster GPS fixes
   NAL9602.maxDownlinkMsgSize                    = 340 byte; // Maximum size of SBD packets sent from vehicle to shore (no more than 340 byte)
   NAL9602.maxUplinkMsgSize                      = 270 byte; // Maximum size of SBD packets sent from shore to vehicle (no more than 270 byte)

   NanoDVR.loadAtStartup                         = 0 bool;
   NanoDVR.simulateHardware                      = 1 bool;
   NanoDVR.sampleTime                            = 90 second;

   Onboard.loadAtStartup                         = 1 bool;
   Onboard.simulateHardware                      = 1 bool;
   OnboardBattery.mainBatterySysNode             = "ds2782-0";
   OnboardBattery.backupBatterySysNode           = "ds2782-1";
   OnboardPressure.coefA0                        = 1827.50 none;
   OnboardPressure.coefB1                        = -2.088623 none;
   OnboardPressure.coefB2                        = -1.041687 none;
   OnboardPressure.coefC12                       = 0.000710 none;

   Onboard.power                                 = 0.010 watt; // Guess
   OnboardPressure.intercept                     = 0.0 psi;
   OnboardPressure.slope                         = 172.62 psi/V;

   Power24vConverter.loadAtStartup               = 1 bool;
   Power24vConverter.simulateHardware            = 0 bool;

   PowerOnly.loadAtStartup                       = 0 bool;
   PowerOnly.simulateHardware                    = 1 bool;
   PowerOnly.sampleTime                          = 90 second;

   PNI_TCM.loadAtStartup                         = 0 bool;
   PNI_TCM.simulateHardware                      = 1 bool;
   PNI_TCM.magDeviation                          = 0.0 degree;
   PNI_TCM.pitchOffset                           = 0.0 degree;
   PNI_TCM.power                                 = 0.08 watt;
   PNI_TCM.readMagnetics                         = 1 bool;
   PNI_TCM.rollOffset                            = 0.0 degree;
   PNI_TCM.verbosity                             = 0 count;

   Radio_Surface.loadAtStartup                   = 1 bool;
   Radio_Surface.simulateHardware                = 1 bool;
   Radio_Surface.power                           = 3.50 watt;

   RDI_Pathfinder.loadAtStartup                  = 0 bool;
   RDI_Pathfinder.simulateHardware               = 1 bool;

   RDI_PathfinderUp.loadAtStartup                = 0 bool;
   RDI_PathfinderUp.simulateHardware             = 0 bool;

   Rowe_600.loadAtStartup                        = 0 bool;
   Rowe_600.simulateHardware                     = 0 bool;
   Rowe_600.acousticBlankingDistance             = 0.5 meter;
   Rowe_600.altitudeAccuracy                     = 0.01 m;
   Rowe_600.bottomTrackVelocityAccuracy          = 0.002 m/s;
   Rowe_600.headingOffset                        = 45.0 degree;
   Rowe_600.maxSpeed                             = 1.75 m/s;
   Rowe_600.numberOfBeams                        = 4 count;
   Rowe_600.numberOfBins                         = 1 count;
   Rowe_600.pausePeriod                          = 400 ms;
   Rowe_600.pitchOffset                          = 0.0 degree;
   Rowe_600.rollOffset                           = 0.0 degree;
   Rowe_600.sampleTime                           = 15 second; // do we really need this for the rowe?
   Rowe_600.verbosity                            = 0 count;
   Rowe_600.waterReferenceLayerBin               = 2 count;
   Rowe_600.waterTrackVelocityAccuracy           = 0.05 m/s;
   Rowe_600.writeAmplitudeProfile                = 0 bool;
   Rowe_600.writeBeamVelocityProfile             = 0 bool;
   Rowe_600.writeCorrelationProfile              = 0 bool;
   Rowe_600.writeEarthVelocityProfile            = 0 bool;
   Rowe_600.writeGoodBeamPingsProfile            = 0 bool;   // Don't bother enabling this, it is not yet implemented for output to slate.
   Rowe_600.writeGoodEarthPingsProfile           = 0 bool;   // Don't bother enabling this, it is not yet implemented for output to slate.
   Rowe_600.writeInstrumentVelocityProfile       = 0 bool;
   Rowe_600.writeRawEnsemble                     = 1 bool;

   SCPI.loadAtStartup                            = 0 bool;
   SCPI.simulateHardware                         = 1 bool;
   SCPI.sampleTime                               = 420 second;