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

   AHRS_M2.loadAtStartup = 0 bool;
   AHRS_M2.simulateHardware = 1 bool;
   AHRS_M2.power = 0.06 watt;
   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.readAccelerations = 0 bool;
   AHRS_M2.readMagnetics = 0 bool;
   AHRS_M2.verbosity = 0 count;

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

   AcousticModem_Benthos_ATM900.loadAtStartup = 0 bool;
   AcousticModem_Benthos_ATM900.simulateHardware = 1 bool;
   AcousticModem_Benthos_ATM900.verbosity = 1 count;
   AcousticModem_Benthos_ATM900.localAddress = 0 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.batterySamplingInterval = 1 hour;       // Time between battery status checks
   BPC1.batteryMissingStickThreshold = 0 count; // Number of missing sticks allowed (set to 0, to require ALL batt sticks report in)
   BPC1.batteryCommsTimeout = 6 hour;           // Max time allowed between batt stick check-ins

   DataOverHttps.loadAtStartup = 1 bool;
   DataOverHttps.power = 0.001 watt; // Not actual hardware
   DataOverHttps.connectionTimeout = 30 second;  // If transaction takes this long, try again.
   DataOverHttps.period = 60 second;  // How often to check in with server.
   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 = 1 bool;
   DAT.simulateHardware = 1 bool;
   DAT.localAddress = 0 count;
   DAT.verbosity = 0 count;
   DAT.powerLoadControl = "null"; // Set to null when 24V Power Converter LCB is NOT installed onboard. Provide /dev/loadXX address when present.

   DUSBL_Hydroid.loadAtStartup = 0 bool;
   DUSBL_Hydroid.simulateHardware = 1 bool;
   DUSBL_Hydroid.verbosity = 0 enum;            // Verbosity: 0=concise to 3=most verbose
   DUSBL_Hydroid.transponderCode = 2 bool;      // Transponder code: 2 for DR1-A, 3 for DR1-B, etc", Units::ENUM );
   DUSBL_Hydroid.transmitLockout = 40 ms;       // Time after transmit to ignore replies. Max 50 ms", Units::MILLISECOND );
   DUSBL_Hydroid.recieveTimeout = 2048 ms;      // Time after transmit to listen for replies. Max 4095 ms", Units::MILLISECOND );
   DUSBL_Hydroid.detectionThreshold = 32 count; // Ignore singals lower than this value. Max ~64 count", Units::COUNT );
   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
   DUSBL_Hydroid.defaultSoundSpeed = 1500 m/s;  // Speed of sound in water if not measured

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

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

   DVL_micro.loadAtStartup = 1 bool;
   DVL_micro.simulateHardware = 1 bool;
   DVL_micro.power = 5.436 watt;   // Assumes 75 meter altitude, 2.5 Hz
   DVL_micro.magDeviation = 0.0 degree;
   DVL_micro.pitchOffset = 0.0 degree;
   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 



   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.requestGGA = 0 bool;     // If false recommended minimum data will be requested
   NAL9602.loadAtStartup = 1 bool;
   NAL9602.simulateHardware = 1 bool;
   NAL9602.power = 0.35 watt;
   NAL9602.power_platform_communications = 0.90 watt;

   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;

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

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

   Radio_Surface.loadAtStartup = 1 bool;
   Radio_Surface.simulateHardware = 1 bool;
   Radio_Surface.power = 3.50 watt;
   Radio_Surface.maxDepth = 0.5 meter;    // Turn off power below this depth

   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.verbosity = 0 count;
   Rowe_600.pausePeriod = 400 ms;
   Rowe_600.writeBeamVelocityProfile = 0 bool;
   Rowe_600.writeInstrumentVelocityProfile = 0 bool;
   Rowe_600.writeEarthVelocityProfile = 0 bool;
   Rowe_600.writeAmplitudeProfile = 0 bool;
   Rowe_600.writeCorrelationProfile = 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.writeRawEnsemble = 1 bool;
   Rowe_600.acousticBlankingDistance = 0.5 meter;
   Rowe_600.numberOfBeams = 4 count;
   Rowe_600.numberOfBins = 1 count;
   Rowe_600.sampleTime = 15 second; // do we really need this for the rowe?
   Rowe_600.bottomTrackVelocityAccuracy = 0.002 m/s;
   Rowe_600.waterTrackVelocityAccuracy = 0.05 m/s;
   Rowe_600.altitudeAccuracy = 0.01 m;
   Rowe_600.rollOffset = 0.0 degree;
   Rowe_600.pitchOffset = 0.0 degree;
   Rowe_600.headingOffset = 45.0 degree;
   Rowe_600.maxSpeed = 1.75 m/s;
   Rowe_600.waterReferenceLayerBin = 2 count;

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

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