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

#ifndef __DeltaTIF_SK_H
#define __DeltaTIF_SK_H

#include "TaskServer.h"
#include "DeltaTIF.h"

class DeltaTIF_SK : public TaskServer {

  public:

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

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

  virtual ~DeltaTIF_SK();
  
  protected:

  // These methods must be defined in subclass
  virtual DeviceIF::Status set_profile_point_filter(DeltaTIF::Sonar sonar, short ppf) = 0;
  virtual DeviceIF::Status set_trigger_delay(DeltaTIF::Sonar sonar, long delay) = 0;
  virtual DeviceIF::Status set_trigger_edge(DeltaTIF::Sonar sonar, short edge) = 0;
  virtual DeviceIF::Status set_trigger_enable(DeltaTIF::Sonar sonar, short trig) = 0;
  virtual DeviceIF::Status set_profile_min_range(DeltaTIF::Sonar sonar, short pmr) = 0;
  virtual DeviceIF::Status set_averaging(DeltaTIF::Sonar sonar, short avg) = 0;
  virtual DeviceIF::Status set_beam_width(DeltaTIF::Sonar sonar, short width) = 0;
  virtual DeviceIF::Status set_sector_size(DeltaTIF::Sonar sonar, short size) = 0;
  virtual DeviceIF::Status set_nbeams(DeltaTIF::Sonar sonar, short nbeams) = 0;
  virtual DeviceIF::Status set_sos(DeltaTIF::Sonar sonar, float sos) = 0;
  virtual DeviceIF::Status set_auto_sos(Boolean automatic) = 0;
  virtual DeviceIF::Status update_sos(float *sos) = 0;
  virtual DeviceIF::Status set_range(DeltaTIF::Sonar sonar, short range) = 0;
  virtual DeviceIF::Status set_gain(DeltaTIF::Sonar sonar, short gain) = 0;
  virtual DeviceIF::Status set_gain_eq(DeltaTIF::Sonar sonar, Boolean on) = 0;
  virtual DeviceIF::Status set_idt_logging(DeltaTIF::Sonar sonar, Boolean on) = 0;
  virtual double range(DeltaTIF::Sonar sonar) = 0;
  virtual unsigned short nbeams(DeltaTIF::Sonar sonar) = 0;
  virtual unsigned short interval(DeltaTIF::Sonar sonar) = 0;
  virtual Boolean enabled(DeltaTIF::Sonar sonar) = 0;
  virtual void update_time(DeltaTIF::Sonar sonar, TimeIF::TimeSpec *timestamp) = 0;
  virtual void get(DeltaTIF::Sonar sonar, DeltaTIF::Data *data) = 0;
  virtual void get_mounting_angles(DeltaTIF::Sonar sonar, double *phi, double *theta, double *psi) = 0;
  virtual void start(DeltaTIF::Sonar sonar) = 0;
  virtual void stop(DeltaTIF::Sonar sonar) = 0;
  
  // Declare callbacks corresponding to each method
  Boolean set_profile_point_filterCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  
  // Message structure pointer for each method
  DeltaTIF::Set_profile_point_filterMsg *_set_profile_point_filterMsg;
  DeltaTIF::Set_trigger_delayMsg *_set_trigger_delayMsg;
  DeltaTIF::Set_trigger_edgeMsg *_set_trigger_edgeMsg;
  DeltaTIF::Set_trigger_enableMsg *_set_trigger_enableMsg;
  DeltaTIF::Set_profile_min_rangeMsg *_set_profile_min_rangeMsg;
  DeltaTIF::Set_averagingMsg *_set_averagingMsg;
  DeltaTIF::Set_beam_widthMsg *_set_beam_widthMsg;
  DeltaTIF::Set_sector_sizeMsg *_set_sector_sizeMsg;
  DeltaTIF::Set_nbeamsMsg *_set_nbeamsMsg;
  DeltaTIF::Set_sosMsg *_set_sosMsg;
  DeltaTIF::Set_auto_sosMsg *_set_auto_sosMsg;
  DeltaTIF::Update_sosMsg *_update_sosMsg;
  DeltaTIF::Set_rangeMsg *_set_rangeMsg;
  DeltaTIF::Set_gainMsg *_set_gainMsg;
  DeltaTIF::Set_gain_eqMsg *_set_gain_eqMsg;
  DeltaTIF::Set_idt_loggingMsg *_set_idt_loggingMsg;
  DeltaTIF::RangeMsg *_rangeMsg;
  DeltaTIF::NbeamsMsg *_nbeamsMsg;
  DeltaTIF::IntervalMsg *_intervalMsg;
  DeltaTIF::EnabledMsg *_enabledMsg;
  DeltaTIF::Update_timeMsg *_update_timeMsg;
  DeltaTIF::GetMsg *_getMsg;
  DeltaTIF::Get_mounting_anglesMsg *_get_mounting_anglesMsg;
  DeltaTIF::StartMsg *_startMsg;
  DeltaTIF::StopMsg *_stopMsg;
  
  // 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

