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

#ifndef __EdgetechFSDWIF_SK_H
#define __EdgetechFSDWIF_SK_H

#include "TaskServer.h"
#include "EdgetechFSDWIF.h"
#include "InstrumentIF_SK.h"

class EdgetechFSDWIF_SK : public InstrumentIF_SK {

  public:

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

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

  virtual ~EdgetechFSDWIF_SK();
  
  protected:

  // These methods must be defined in subclass
  virtual DeviceIF::Status startEdgetechStorage(Boolean bUpdate) = 0;
  virtual DeviceIF::Status stopEdgetechStorage(Boolean bUpdate) = 0;
  virtual DeviceIF::Status startSubsystem(EdgetechFSDWIF::EdgetechFSDWSonarSystems sonarSystem, Boolean bUpdate) = 0;
  virtual DeviceIF::Status stopSubsystem(EdgetechFSDWIF::EdgetechFSDWSonarSystems sonarSystem, Boolean bUpdate) = 0;
  virtual DeviceIF::Status pingStatus(EdgetechFSDWIF::EdgetechFSDWSonarSystems sonarSystem, unsigned short *pingStatus, Boolean bUpdate) = 0;
  virtual DeviceIF::Status setPulseFilename(EdgetechFSDWIF::EdgetechFSDWSonarSystems sonarSystem, EdgetechFSDWIF::String32 pulseFilename, Boolean bUpdate) = 0;
  virtual DeviceIF::Status setPingRange(EdgetechFSDWIF::EdgetechFSDWSonarSystems sonarSystem, float pingRange, Boolean bUpdate) = 0;
  virtual DeviceIF::Status setPingRate(EdgetechFSDWIF::EdgetechFSDWSonarSystems sonarSystem, float pingRate, Boolean bUpdate) = 0;
  virtual DeviceIF::Status setPingPower(EdgetechFSDWIF::EdgetechFSDWSonarSystems sonarSystem, float pingPower, Boolean bUpdate) = 0;
  virtual DeviceIF::Status setSBPGain(float gain, Boolean bUpdate) = 0;
  virtual DeviceIF::Status setSBPDuration(float duration_milliseconds, Boolean bUpdate) = 0;
  virtual DeviceIF::Status relaySituation(EdgetechFSDWIF::sSituation *compSituation) = 0;
  virtual DeviceIF::Status relayCompositeSituation(EdgetechFSDWIF::sCompositeSituation *situation) = 0;
  virtual DeviceIF::Status relayPressureRecord(EdgetechFSDWIF::sPressureRecord *pressureRecord) = 0;
  virtual DeviceIF::Status relayAltitudeRecord(EdgetechFSDWIF::sAltitudeRecord *altitudeRecord) = 0;
  virtual DeviceIF::Status setTime(Boolean bUpdate) = 0;
  virtual DeviceIF::Status setVerboseMode(unsigned short flag) = 0;
  virtual DeviceIF::Status getVersion() = 0;
  virtual DeviceIF::Status getSonarStatus(EdgetechFSDWIF::EdgetechFSDWSonarSystems sonarSystem, Boolean bUpdate) = 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;
  
  // Declare callbacks corresponding to each method
  Boolean startEdgetechStorageCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean stopEdgetechStorageCallback(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 setSBPGainCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

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

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

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

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

  Boolean relayAltitudeRecordCallback(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 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);

  
  // Message structure pointer for each method
  EdgetechFSDWIF::StartEdgetechStorageMsg *_startEdgetechStorageMsg;
  EdgetechFSDWIF::StopEdgetechStorageMsg *_stopEdgetechStorageMsg;
  EdgetechFSDWIF::StartSubsystemMsg *_startSubsystemMsg;
  EdgetechFSDWIF::StopSubsystemMsg *_stopSubsystemMsg;
  EdgetechFSDWIF::PingStatusMsg *_pingStatusMsg;
  EdgetechFSDWIF::SetPulseFilenameMsg *_setPulseFilenameMsg;
  EdgetechFSDWIF::SetPingRangeMsg *_setPingRangeMsg;
  EdgetechFSDWIF::SetPingRateMsg *_setPingRateMsg;
  EdgetechFSDWIF::SetPingPowerMsg *_setPingPowerMsg;
  EdgetechFSDWIF::SetSBPGainMsg *_setSBPGainMsg;
  EdgetechFSDWIF::SetSBPDurationMsg *_setSBPDurationMsg;
  EdgetechFSDWIF::RelaySituationMsg *_relaySituationMsg;
  EdgetechFSDWIF::RelayCompositeSituationMsg *_relayCompositeSituationMsg;
  EdgetechFSDWIF::RelayPressureRecordMsg *_relayPressureRecordMsg;
  EdgetechFSDWIF::RelayAltitudeRecordMsg *_relayAltitudeRecordMsg;
  EdgetechFSDWIF::SetTimeMsg *_setTimeMsg;
  EdgetechFSDWIF::SetVerboseModeMsg *_setVerboseModeMsg;
  EdgetechFSDWIF::GetVersionMsg *_getVersionMsg;
  EdgetechFSDWIF::GetSonarStatusMsg *_getSonarStatusMsg;
  EdgetechFSDWIF::SonarRebootMsg *_sonarRebootMsg;
  EdgetechFSDWIF::SonarSystemRebootMsg *_sonarSystemRebootMsg;
  EdgetechFSDWIF::SonarShutdownMsg *_sonarShutdownMsg;
  EdgetechFSDWIF::SonarSystemShutdownMsg *_sonarSystemShutdownMsg;
  EdgetechFSDWIF::SonarSystemPowerOnMsg *_sonarSystemPowerOnMsg;
  EdgetechFSDWIF::SonarSystemPowerOffMsg *_sonarSystemPowerOffMsg;
  
  // 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

