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

#ifndef __AcousticModemIF_SK_H
#define __AcousticModemIF_SK_H

#include "TaskServer.h"
#include "AcousticModemIF.h"

class AcousticModemIF_SK : public TaskServer {

  public:

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

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

  virtual ~AcousticModemIF_SK();
  
  protected:

  // These methods must be defined in subclass
  virtual DeviceIF::Status setRegister(short reg_number, short value) = 0;
  virtual DeviceIF::Status power(short powerLevel) = 0;
  virtual DeviceIF::Status transpond(short tenths_of_kHz) = 0;
  virtual DeviceIF::Status range(short remoteModem, float *meters) = 0;
  virtual DeviceIF::Status dopplerCorrection(Boolean on_off) = 0;
  virtual DeviceIF::Status writeString(AcousticModemIF::modemString mstr) = 0;
  virtual DeviceIF::Status sendStatus() = 0;
  virtual DeviceIF::Status getSANFix(AcousticModemIF::SMAC_SAN_RECORD *sanFix, Boolean *newData) = 0;
  virtual DeviceIF::Status getSMACCmd(AcousticModemIF::SMAC_CMD_TYPE *cmd, Boolean *newCmd) = 0;
  
  // Declare callbacks corresponding to each method
  Boolean setRegisterCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

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

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

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

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

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

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

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

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

  
  // Message structure pointer for each method
  AcousticModemIF::SetRegisterMsg *_setRegisterMsg;
  AcousticModemIF::PowerMsg *_powerMsg;
  AcousticModemIF::TranspondMsg *_transpondMsg;
  AcousticModemIF::RangeMsg *_rangeMsg;
  AcousticModemIF::DopplerCorrectionMsg *_dopplerCorrectionMsg;
  AcousticModemIF::WriteStringMsg *_writeStringMsg;
  AcousticModemIF::SendStatusMsg *_sendStatusMsg;
  AcousticModemIF::GetSANFixMsg *_getSANFixMsg;
  AcousticModemIF::GetSMACCmdMsg *_getSMACCmdMsg;
  
  // 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

