/****************************************************************************/
/* Copyright (c) 2005 MBARI                                                 */
/* MBARI Proprietary Information. All rights reserved.                      */
/****************************************************************************/
/* Summary  :                                                               */
/* Filename : EchoSounderServer.h                                             */
/* Author   :                                                               */
/* Project  :                                                               */
/* Version  : 1.0                                                           */
/* Created  : 11/28/2005                                                    */
/* Modified :                                                               */
/* Archived :                                                               */
/****************************************************************************/
/* Modification History:                                                    */
/****************************************************************************/
#include "EchoSounderIF_SK.h"
#include "EchoSounderOutput.h"
#include "EchoSounderCommand.h"
#include "SerialParameters.h"

/*
CLASS
EchoSounderServer

DESCRIPTION
Server Implementation for EchoSounder 

AUTHOR
Rob McEwen; Rich Henthorn

*/
class EchoSounderServer : public EchoSounderIF_SK {

public:

  EchoSounderServer(SerialParameters *serialParams);
  ~EchoSounderServer();
  

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 headAngleCmd(double trainCmd);
  virtual DeviceIF::Status scanSectorCmd(double sector);

  virtual int spawnAuxTasks();

  DeviceIF::Status range( Boolean *echoReceived, 
			  double  *range,
			  TimeIF::TimeSpec *sampleTime);

  DeviceIF::Status get( EchoSounderIF::Data *data );

  //
  // Get the current head angle.
  virtual double getHeadAngle( );
  //
  // Get the head angle specified by tindx, which is related to the train
  // angle by the _toffset and *8.  See the driver code also.
  virtual double getHeadAngle(short tindx );

  virtual void xzAngle(double *radians);
  virtual Boolean isScanning(void);
  virtual void maxRange (double *meters);

  //DeviceIF::Status set_beacon(UsblIF::String32 newBeaconName);
  
  EchoSounderOutput *_output;
  EchoSounderCommand *_command;
  SerialParameters *_serialParams;
  char _ip[16];
  Boolean _scanning;
};


