//////////////////////////////////////////////////////////////// 
//
// 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_3DMGX3.loadAtStartup                     = 0 bool;
   AHRS_3DMGX3.simulateHardware                  = 1 bool;
   AHRS_3DMGX3.magDeviation                      = 0.0 degree;
   AHRS_3DMGX3.pitchOffset                       = 0.0 degree;
   AHRS_3DMGX3.power                             = 0.400 watt; // Per datasheet, at 5V
   AHRS_3DMGX3.rollOffset                        = 0.0 degree;

   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;

   AHRS_sp3003D.loadAtStartup                    = 0 bool;
   AHRS_sp3003D.simulateHardware                 = 1 bool;
   AHRS_sp3003D.magDeviation                     = 0.0 degree;
   AHRS_sp3003D.pitchOffset                      = 0.0 degree;
   AHRS_sp3003D.power                            = 0.08 watt;
   AHRS_sp3003D.readAccelerations                = 0 bool;
   AHRS_sp3003D.readMagnetics                    = 0 bool;
   AHRS_sp3003D.rollOffset                       = 0.0 degree;
   AHRS_sp3003D.verticalMounting                 = 0 bool;

   AcousticModem_Benthos_ATM900.loadAtStartup    = 0 bool;
   AcousticModem_Benthos_ATM900.simulateHardware = 1 bool;
   AcousticModem_Benthos_ATM900.localAddress     = 0 count;
   AcousticModem_Benthos_ATM900.verbosity        = 1 count;

   // The first generation non-muxed battery controller interface
   Batt_Ocean_Server.loadAtStartup               = 0 bool;

   // 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)

   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.convertPhaseDataToDirection               = 0 bool;
   DAT.ignoreElevationAngle                      = 0 bool;
   DAT.localAddress                              = 0 count;
   DAT.powerLoadControl                          = "null"; // Set to null when 24V Power Converter LCB is NOT installed onboard. Provide /dev/loadXX address when present.
   DAT.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              = 32 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                 = 14 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

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

   DVL_micro.loadAtStartup                       = 1 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

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

   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.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.dusblPingCode                      = "";

   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)
 
   Onboard.loadAtStartup                         = 1 bool;
   Onboard.simulateHardware                      = 1 bool;
   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;

   PowerOnly.loadAtStartup                       = 0 bool;
   PowerOnly.simulateHardware                    = 1 bool;
   PowerOnly.sampleTime                          = 60 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;

   Rowe_600LCM.loadAtStartup                     = 0 bool;
   Rowe_600LCM.simulateHardware                  = 1 bool;
   Rowe_600LCM.altitudeAccuracy                  = 0.01 m;
   Rowe_600LCM.bottomTrackVelocityAccuracy       = 0.002 m/s;
   Rowe_600LCM.waterTrackVelocityAccuracy        = 0.05 m/s;

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

   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                       = 50 percent;
   BR_Ping1D.pingenable                          = 1 bool;