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

#ifndef __WatchdogIF_SK_H
#define __WatchdogIF_SK_H

#include "TaskServer.h"
#include "WatchdogIF.h"
#include "InstrumentIF_SK.h"

class WatchdogIF_SK : public InstrumentIF_SK {

  public:

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

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

  virtual ~WatchdogIF_SK();
  
  protected:

  // These methods must be defined in subclass
  virtual DeviceIF::Status keepAlive(WatchdogIF::WD_Time_Struct *time_struct) = 0;
  virtual DeviceIF::Status keepAlive(short time_in_minutes) = 0;
  virtual DeviceIF::Status Deadman_On(WatchdogIF::WD_Time_Struct *time_struct) = 0;
  virtual DeviceIF::Status Deadman_On(short time_in_minutes) = 0;
  virtual DeviceIF::Status Deadman_On() = 0;
  virtual DeviceIF::Status Deadman_Off() = 0;
  virtual DeviceIF::Status raiseAntenna() = 0;
  virtual DeviceIF::Status lowerAntenna() = 0;
  virtual DeviceIF::Status resetMVC() = 0;
  virtual DeviceIF::Status rebootMVC() = 0;
  virtual DeviceIF::Status sleepMVC() = 0;
  
  // Declare callbacks corresponding to each method
  Boolean keepAliveCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

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

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

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

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

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

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

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

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

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

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

  
  // Message structure pointer for each method
  WatchdogIF::KeepAliveMsg *_keepAliveMsg;
  WatchdogIF::KeepAlive01Msg *_keepAlive01Msg;
  WatchdogIF::Deadman_OnMsg *_Deadman_OnMsg;
  WatchdogIF::Deadman_On01Msg *_Deadman_On01Msg;
  WatchdogIF::Deadman_On02Msg *_Deadman_On02Msg;
  WatchdogIF::Deadman_OffMsg *_Deadman_OffMsg;
  WatchdogIF::RaiseAntennaMsg *_raiseAntennaMsg;
  WatchdogIF::LowerAntennaMsg *_lowerAntennaMsg;
  WatchdogIF::ResetMVCMsg *_resetMVCMsg;
  WatchdogIF::RebootMVCMsg *_rebootMVCMsg;
  WatchdogIF::SleepMVCMsg *_sleepMVCMsg;
  
  // 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

