/*
********************************************************
Copyright 2000 MBARI.
MBARI Proprietary Information. All rights reserved.
NOTE: This file is automatically generated.
DO NOT MODIFY.
********************************************************
*/

#ifndef __Reson6046IF_SK_H
#define __Reson6046IF_SK_H

#include "TaskServer.h"
#include "Reson6046IF.h"
#include "InstrumentIF_SK.h"

class Reson6046IF_SK : public InstrumentIF_SK {

  public:

  // Constructor for server with default name
  Reson6046IF_SK();

  // Constructor for server with specific name
  Reson6046IF_SK(const char *serverName);

  virtual ~Reson6046IF_SK();
  
  protected:

  // These methods must be defined in subclass
  virtual DeviceIF::Status startLogging() = 0;
  virtual DeviceIF::Status stopLogging() = 0;
  virtual DeviceIF::Status start7KCenterLogging() = 0;
  virtual DeviceIF::Status stop7KCenterLogging() = 0;
  virtual DeviceIF::Status startSubsystem(Reson6046IF::ResonSonarSystems sonarSystem) = 0;
  virtual DeviceIF::Status stopSubsystem(Reson6046IF::ResonSonarSystems sonarSystem) = 0;
  virtual DeviceIF::Status pingStatus(Reson6046IF::ResonSonarSystems sonarSystem, unsigned short *pingStatus) = 0;
  virtual DeviceIF::Status setPulseFilename(Reson6046IF::ResonSonarSystems sonarSystem, Reson6046IF::String32 pulseFilename) = 0;
  virtual DeviceIF::Status setPingRange(Reson6046IF::ResonSonarSystems sonarSystem, float pingRange) = 0;
  virtual DeviceIF::Status setPingRate(Reson6046IF::ResonSonarSystems sonarSystem, float pingRate) = 0;
  virtual DeviceIF::Status setPingPower(Reson6046IF::ResonSonarSystems sonarSystem, float pingPower) = 0;
  virtual DeviceIF::Status setRxGain(Reson6046IF::ResonSonarSystems sonarSystem, float gain) = 0;
  virtual DeviceIF::Status setMBBottomDetectionFilters(float minRange, float maxRange, float minDepth, float maxDepth) = 0;
  virtual DeviceIF::Status setMBBottomDetectDepthRangeOn(Boolean d_on_off, Boolean r_on_off) = 0;
  virtual DeviceIF::Status setMBBottomDetectRecalc() = 0;
  virtual DeviceIF::Status setMBBottomDetectRecalcInterval(short seconds) = 0;
  virtual DeviceIF::Status setMBSnippetControl(Boolean on_eq_true, unsigned short window_size) = 0;
  virtual DeviceIF::Status setPulseWidth(Reson6046IF::ResonSonarSystems sonarSystem, float pulseWidth) = 0;
  virtual DeviceIF::Status setMBSpreadingLoss(float spreadingLoss_dB) = 0;
  virtual DeviceIF::Status setMBSoundVelocity(float meters_per_sec) = 0;
  virtual DeviceIF::Status setMBAbsorptionLoss(float absorptionLoss_dB_per_km) = 0;
  virtual DeviceIF::Status setSBPGain(float gain) = 0;
  virtual DeviceIF::Status setSBPDuration(float duration_milliseconds) = 0;
  virtual DeviceIF::Status setTime() = 0;
  virtual DeviceIF::Status setVerboseMode(unsigned short flag) = 0;
  virtual DeviceIF::Status getVersion() = 0;
  virtual DeviceIF::Status getSonarStatus(Reson6046IF::ResonSonarSystems sonarSystem) = 0;
  virtual DeviceIF::Status getModules() = 0;
  virtual DeviceIF::Status getRunList() = 0;
  virtual DeviceIF::Status sonarReboot() = 0;
  virtual DeviceIF::Status sonarSystemReboot() = 0;
  virtual DeviceIF::Status sonarShutdown() = 0;
  virtual DeviceIF::Status sonarSystemShutdown() = 0;
  virtual DeviceIF::Status sonarSystemPowerOn() = 0;
  virtual DeviceIF::Status sonarSystemPowerOff() = 0;
  virtual DeviceIF::Status dataLoggingOn() = 0;
  virtual DeviceIF::Status dataLoggingOff() = 0;
  
  // Declare callbacks corresponding to each method
  Boolean startLoggingCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean stopLoggingCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean start7KCenterLoggingCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean stop7KCenterLoggingCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean startSubsystemCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean stopSubsystemCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean pingStatusCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean setPulseFilenameCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean setPingRangeCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean setPingRateCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean setPingPowerCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean setRxGainCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean setMBBottomDetectionFiltersCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean setMBBottomDetectDepthRangeOnCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean setMBBottomDetectRecalcCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean setMBBottomDetectRecalcIntervalCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean setMBSnippetControlCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean setPulseWidthCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean setMBSpreadingLossCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean setMBSoundVelocityCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean setMBAbsorptionLossCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean setSBPGainCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean setSBPDurationCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean setTimeCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean setVerboseModeCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean getVersionCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean getSonarStatusCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean getModulesCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean getRunListCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean sonarRebootCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean sonarSystemRebootCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean sonarShutdownCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean sonarSystemShutdownCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean sonarSystemPowerOnCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean sonarSystemPowerOffCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean dataLoggingOnCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean dataLoggingOffCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  
  // Message structure pointer for each method
  Reson6046IF::StartLoggingMsg *_startLoggingMsg;
  Reson6046IF::StopLoggingMsg *_stopLoggingMsg;
  Reson6046IF::Start7KCenterLoggingMsg *_start7KCenterLoggingMsg;
  Reson6046IF::Stop7KCenterLoggingMsg *_stop7KCenterLoggingMsg;
  Reson6046IF::StartSubsystemMsg *_startSubsystemMsg;
  Reson6046IF::StopSubsystemMsg *_stopSubsystemMsg;
  Reson6046IF::PingStatusMsg *_pingStatusMsg;
  Reson6046IF::SetPulseFilenameMsg *_setPulseFilenameMsg;
  Reson6046IF::SetPingRangeMsg *_setPingRangeMsg;
  Reson6046IF::SetPingRateMsg *_setPingRateMsg;
  Reson6046IF::SetPingPowerMsg *_setPingPowerMsg;
  Reson6046IF::SetRxGainMsg *_setRxGainMsg;
  Reson6046IF::SetMBBottomDetectionFiltersMsg *_setMBBottomDetectionFiltersMsg;
  Reson6046IF::SetMBBottomDetectDepthRangeOnMsg *_setMBBottomDetectDepthRangeOnMsg;
  Reson6046IF::SetMBBottomDetectRecalcMsg *_setMBBottomDetectRecalcMsg;
  Reson6046IF::SetMBBottomDetectRecalcIntervalMsg *_setMBBottomDetectRecalcIntervalMsg;
  Reson6046IF::SetMBSnippetControlMsg *_setMBSnippetControlMsg;
  Reson6046IF::SetPulseWidthMsg *_setPulseWidthMsg;
  Reson6046IF::SetMBSpreadingLossMsg *_setMBSpreadingLossMsg;
  Reson6046IF::SetMBSoundVelocityMsg *_setMBSoundVelocityMsg;
  Reson6046IF::SetMBAbsorptionLossMsg *_setMBAbsorptionLossMsg;
  Reson6046IF::SetSBPGainMsg *_setSBPGainMsg;
  Reson6046IF::SetSBPDurationMsg *_setSBPDurationMsg;
  Reson6046IF::SetTimeMsg *_setTimeMsg;
  Reson6046IF::SetVerboseModeMsg *_setVerboseModeMsg;
  Reson6046IF::GetVersionMsg *_getVersionMsg;
  Reson6046IF::GetSonarStatusMsg *_getSonarStatusMsg;
  Reson6046IF::GetModulesMsg *_getModulesMsg;
  Reson6046IF::GetRunListMsg *_getRunListMsg;
  Reson6046IF::SonarRebootMsg *_sonarRebootMsg;
  Reson6046IF::SonarSystemRebootMsg *_sonarSystemRebootMsg;
  Reson6046IF::SonarShutdownMsg *_sonarShutdownMsg;
  Reson6046IF::SonarSystemShutdownMsg *_sonarSystemShutdownMsg;
  Reson6046IF::SonarSystemPowerOnMsg *_sonarSystemPowerOnMsg;
  Reson6046IF::SonarSystemPowerOffMsg *_sonarSystemPowerOffMsg;
  Reson6046IF::DataLoggingOnMsg *_dataLoggingOnMsg;
  Reson6046IF::DataLoggingOffMsg *_dataLoggingOffMsg;
  
  // Determine max bytes required for message buffer
  virtual size_t maxRequestBytes();

  // Allocate buffer for messages, set pointers, etc
  virtual void allocateBuffers();

  private:

  // Initializer method called by constructors
  int init();

};

#endif

