/****************************************************************************/
/* Copyright (c) 2000 MBARI                                                 */
/* MBARI Proprietary Information. All rights reserved.                      */
/****************************************************************************/
/* Summary  :                                                               */
/* Filename : SimulatedCrossbow.h                                           */
/* Author   :                                                               */
/* Project  :                                                               */
/* Version  : 1.0                                                           */
/* Created  : 02/07/2000                                                    */
/* Modified :                                                               */
/* Archived :                                                               */
/****************************************************************************/
/* Modification History:                                                    */
/****************************************************************************/
//////////////////////////////////////////////////////////////////////
//
// PURPOSE:  Simulate the Crossbow AHRS
// AUTHOR:   Marsh, Following O'Reilly's Template
// DATE:     99/12/8
//
//////////////////////////////////////////////////////////////////////
//
#ifndef _SIMULATED_CROSSBOW_H
#define _SIMULATED_CROSSBOW_H

#include "AhrsIF_SK.h"
#include "SimulatorIF.h"

class SimulatedCrossbow : public AhrsIF_SK {

public:

  SimulatedCrossbow();
  ~SimulatedCrossbow();

protected:

  // These methods must be defined in subclass
  virtual void name(DeviceIF::Name name);
  virtual void serialNumber(DeviceIF::Name id);
  virtual DeviceIF::Status initialize();
  virtual DeviceIF::Status powerOn();
  virtual DeviceIF::Status powerOff();
  virtual DeviceIF::Status status();
  virtual DeviceIF::Status dataLoggingOn();
  virtual DeviceIF::Status dataLoggingOff();

  virtual DeviceIF::Status getAttitude(AhrsIF::Attitude *attitude, 
				       TimeIF::TimeSpec *sampleTime);

  virtual Boolean magneticCompass();

  virtual DeviceIF::Status acceleration(double *accelX, 
					double *accelY, 
					double *accelZ, 
					TimeIF::TimeSpec *sampleTime);

  virtual DeviceIF::Status magneticVector(double *magX, 
					  double *magY, 
					  double *magZ, 
					  TimeIF::TimeSpec *sampleTime);

  virtual DeviceIF::Status all(AhrsIF::Attitude *attitude, 
			       double *accelX, double *accelY, double *accelZ,
			       double *magX, double *magY, double *magZ, 
			       double *temperature, 
			       TimeIF::TimeSpec *sampleTime);
  


  long getState();

  virtual int spawnAuxTasks();

  SimulatorIF *_simulator;
  
  //
       // Class variables:
       //
     SimulatorIF::Vector _position, _euler;
     SimulatorIF::Vector _velocity, _omega;


};

#endif
