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

#ifndef __OctansIF_H
#define __OctansIF_H

#include "TaskInterface.h"

#include "AhrsIF.h"
#include "TimeIF.h"

#define OctansIFServerName "OctansIFServer"

class OctansIF : public AhrsIF {

  friend class OctansIF_SK;

  public:

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

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

  ~OctansIF();

  ////////////////////////////////////////////////////////////
  // Gets all three axes of acceleration (G)
  // [output] accelX: X acceleration
  // [output] accelY: Y acceleration
  // [output] accelZ: Z acceleration
  DeviceIF::Status acceleration(double *accelX, double *accelY, double *accelZ, TimeIF::TimeSpec *sampleTime);

  ////////////////////////////////////////////////////////////
  // Get everything
  // [output] roll, pitch, heading
  // [output] rollRate, pitchRate, headingRate
  // [output] accelX, accelY, accelZ
  DeviceIF::Status all(AhrsIF::Attitude *attitude, double *accelX, double *accelY, double *accelZ, long *status, TimeIF::TimeSpec *sampleTime);

  
  protected:

  // Message codes for each method
  enum OctansIFMsgCode {
    AccelerationMsgCode = 10,
    AllMsgCode
  };

  // Define message structure for each method
  struct AccelerationMsg : Request, Reply {
    DeviceIF::Status returnVal;
    double accelX;
    double accelY;
    double accelZ;
    TimeIF::TimeSpec sampleTime;
  
  } _accelerationMsg;

  struct AllMsg : Request, Reply {
    DeviceIF::Status returnVal;
    AhrsIF::Attitude attitude;
    double accelX;
    double accelY;
    double accelZ;
    long status;
    TimeIF::TimeSpec sampleTime;
  
  } _allMsg;

};

#endif

