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

#ifndef __OdysseyTailConeIF_H
#define __OdysseyTailConeIF_H

#include "TaskInterface.h"

#include "TailConeIF.h"
#include "TimeIF.h"

#define OdysseyTailConeIFServerName "OdysseyTailConeIFServer"

class OdysseyTailConeIF : public TailConeIF {

  friend class OdysseyTailConeIF_SK;

  public:

  
  
  
  OdysseyTailConeIF(const char *name, int timeout = 10);

  OdysseyTailConeIF(const char *name, const char *serverName, int timeout = 10);

  ~OdysseyTailConeIF();

  /*
  CLASS 
  TailConeIF
  
  DESCRIPTION
  TaskInterface to Odyssey TailCone device driver
  
  AUTHOR
  Tom O'Reilly
  */
  /////////////////////////////////////////////////////////
  // Get status word
  // [output] statusWord: health status word
  // [output] time: Sample time
  DeviceIF::Status health(long *statusWord, TimeIF::TimeSpec *time);

  /////////////////////////////////////////////////////////
  // Get temperatures
  // [output] motor: Motor temperature (deg C)
  // [output] actuator: Actuator temperature (deg C)
  // [output] time: Sample time
  DeviceIF::Status temperatures(float *motor, float *actuator, TimeIF::TimeSpec *time);

  /////////////////////////////////////////////////////////
  // Get currents
  // [output] motor: Motor current
  // [output] actuator: Actuator current
  // [output] time: Sample time
  DeviceIF::Status currents(float *motor, float *actuator, TimeIF::TimeSpec *time);

  /////////////////////////////////////////////////////////
  // Ground-fault current
  // [output] current: Ground-fault current
  DeviceIF::Status groundFault(float *current);

  
  protected:

  // Message codes for each method
  enum OdysseyTailConeIFMsgCode {
    HealthMsgCode = 20,
    TemperaturesMsgCode,
    CurrentsMsgCode,
    GroundFaultMsgCode
  };

  // Define message structure for each method
  struct HealthMsg : Request, Reply {
    DeviceIF::Status returnVal;
    long statusWord;
    TimeIF::TimeSpec time;
  
  } _healthMsg;

  struct TemperaturesMsg : Request, Reply {
    DeviceIF::Status returnVal;
    float motor;
    float actuator;
    TimeIF::TimeSpec time;
  
  } _temperaturesMsg;

  struct CurrentsMsg : Request, Reply {
    DeviceIF::Status returnVal;
    float motor;
    float actuator;
    TimeIF::TimeSpec time;
  
  } _currentsMsg;

  struct GroundFaultMsg : Request, Reply {
    DeviceIF::Status returnVal;
    float current;
  
  } _groundFaultMsg;

};

#endif

