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

#ifndef __AvTrakIF_SK_H
#define __AvTrakIF_SK_H

#include "TaskServer.h"
#include "AvTrakIF.h"

class AvTrakIF_SK : public TaskServer {

  public:

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

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

  virtual ~AvTrakIF_SK();
  
  protected:

  // These methods must be defined in subclass
  virtual Boolean ready() = 0;
  virtual DeviceIF::Status set_time(AvTrakIF::AvTrakString str, TimeIF::TimeSpec *time) = 0;
  virtual DeviceIF::Status sendStatus(short address) = 0;
  virtual DeviceIF::Status getSANFix(AvTrakIF::SCL_SAN_RECORD *sanFix, Boolean *newData) = 0;
  virtual DeviceIF::Status getSCLCmd(AvTrakIF::SCL_CMD_TYPE *cmd, Boolean *newCmd) = 0;
  virtual DeviceIF::Status sendSMS(short address, AvTrakIF::AvTrakString msg, short nbytes) = 0;
  virtual DeviceIF::Status sendSCLCmd(short address, AvTrakIF::SCL_CMD_TYPE cmd) = 0;
  virtual DeviceIF::Status measureRange(short address) = 0;
  virtual DeviceIF::Status requestStatus(short address) = 0;
  virtual DeviceIF::Status requestLocalStatus() = 0;
  
  // Declare callbacks corresponding to each method
  Boolean readyCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

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

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

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

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

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

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

  
  // Message structure pointer for each method
  AvTrakIF::ReadyMsg *_readyMsg;
  AvTrakIF::Set_timeMsg *_set_timeMsg;
  AvTrakIF::SendStatusMsg *_sendStatusMsg;
  AvTrakIF::GetSANFixMsg *_getSANFixMsg;
  AvTrakIF::GetSCLCmdMsg *_getSCLCmdMsg;
  AvTrakIF::SendSMSMsg *_sendSMSMsg;
  AvTrakIF::SendSCLCmdMsg *_sendSCLCmdMsg;
  AvTrakIF::MeasureRangeMsg *_measureRangeMsg;
  AvTrakIF::RequestStatusMsg *_requestStatusMsg;
  AvTrakIF::RequestLocalStatusMsg *_requestLocalStatusMsg;
  
  // 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

