/****************************************************************************/
/* Copyright (c) 2000 MBARI                                                 */
/* MBARI Proprietary Information. All rights reserved.                      */
/****************************************************************************/
/* Summary  :                                                               */
/* Filename : CrossbowIF.idl                                                */
/* Author   :                                                               */
/* Project  :                                                               */
/* Version  : 1.0                                                           */
/* Created  : 02/07/2000                                                    */
/* Modified :                                                               */
/* Archived :                                                               */
/****************************************************************************/
/* Modification History:                                                    */
/****************************************************************************/
/*------------------------------------------------------------------------*
  CLASS: CrossbowIF

  DESCRIPTION : TaskInterface to Crossbow DMU-AHRS Attitude Heading Reference 
       System

  AUTHOR: Aaron Marsh / Tom O'Reilly

  $Id: CrossbowIF.idl,v 1.4 2000/03/24 14:27:03 marsh Exp $
*-------------------------------------------------------------------------
*/

#include "AhrsIF.idl"

interface CrossbowIF : AhrsIF {

  enum Mode {
    Voltage, Scaled, Angle
  };

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

  ////////////////////////////////////////////////////////////
  // Gets all three axes of magnetic vector (gauss)
  // [output] magX: mag vector in the X axis
  // [output] magY: mag vector in the Y axis
  // [output] magZ: mag vector in the Z axis
  Status magneticVector( out double magX,
                         out double magY,
                         out double magZ ,
                         out TimeIF::TimeSpec sampleTime);

     
  ////////////////////////////////////////////////////////////
  // Get everything
  // [output] roll, pitch, heading
  // [output] rollRate, pitchRate, headingRate
  // [output] accelX, accelY, accelZ
  // [output] magX, magY, magZ,
  // [output] temp (deg C)
  Status all( out Attitude attitude,
              out double accelX, out double accelY, out double accelZ,
	      out double magX, out double magY, out double magZ,
	      out double temperature,
              out TimeIF::TimeSpec sampleTime );
	       
     ////////////////////////////////////////////////////////////
     // Put the crossbow in calibration mode
     DeviceIF::Status startCalibration( );

     ////////////////////////////////////////////////////////////
     // Take the crossbow out of calibration mode
     DeviceIF::Status stopCalibration( );

     ////////////////////////////////////////////////////////////
     // Clear the current calibration (back to factory defaults)
     DeviceIF::Status clearCalibration();


};
