/****************************************************************************/
/* Copyright (c) 2000 MBARI                                                 */
/* MBARI Proprietary Information. All rights reserved.                      */
/****************************************************************************/
/* Summary  :                                                               */
/* Filename : SimulatedUsbl.h                                        */
/* Author   :                                                               */
/* Project  :                                                               */
/* Version  : 1.0                                                           */
/* Created  : 02/07/2000                                                    */
/* Modified :                                                               */
/* Archived :                                                               */
/****************************************************************************/
/* Modification History:                                                    */
/****************************************************************************/
//////////////////////////////////////////////////////////////////////
//
// PURPOSE:  Simulate the Sonardyne Inverted Usbl.  
// AUTHOR:   McEwen.
// DATE:     2005/11/28
//
//////////////////////////////////////////////////////////////////////
//
#ifndef _SimulatedUsbl_H
#define _SimulatedUsbl_H
#include "UsblIF_SK.h"
#include "SimulatorIF.h"
#include "sonardyne/SonardyneLog.h"

#ifndef PI
#define PI          3.14159265358979323846
#endif


class SimulatedUsbl : public UsblIF_SK {

   friend class SonardyneLog;

public:

   SimulatedUsbl();
  ~SimulatedUsbl();

protected:

  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 enable();
  virtual DeviceIF::Status disable();
  virtual DeviceIF::Status start();
  virtual DeviceIF::Status stop();

  virtual DeviceIF::Status get_range_data(
                     float *range, float *x, float *y,
		     float *z, short *turnAroundTime,
		     TimeIF::TimeSpec *sampleTime, 
		     UsblIF::UsblDataStatus *status);

  virtual Boolean ready();

  virtual DeviceIF::Status set_beacon( char *newBeaconName );

  virtual int spawnAuxTasks();

  SimulatorIF *_simulator;

  SonardyneLog *_log;
  //
  // Class variables:
  //
  float _r, _x, _y, _z;
  short _tat;
  double _sigLevel, _detectLevel, _quality;
  int _doppler, _acceptance;
  double _beaconUTM[3];
  char _beaconAddress[32];

  Boolean _flipflop;
  Boolean _running;
  UsblIF::UsblDataStatus _status;
  //Attributes _attributes;
  long _idum, *_pIdum;
  enum DensityEnum  { None=0, Gaussian, Uniform };
  DensityEnum _density;

  double _missDist;

};

#endif
