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

/*
CLASS
SonardyneServer

DESCRIPTION
Usbl Server Implementation for Sonardyne Scout transceiver

AUTHOR
Rich Henthorn

*/
class SonardyneServer : public UsblIF_SK {

public:

  SonardyneServer(SerialParameters *serialParams);
  ~SonardyneServer();
  

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

  virtual int spawnAuxTasks();
  
  /////////////////////////////////////////////////////////
  // Return true if device is ready to go, otherwise false
  virtual Boolean ready();

  /////////////////////////////////////////////////////////
  // Get all Data from USBL Simultaneously
  // Range, X, Y, and Z reading from transceiver
  // Turn-around time from request to response in milliseconds
  // Timestamp of last successful reading
  // Status of data (see UsblDataStatus enum)
  //
  DeviceIF::Status get_range_data(float *range, float *x, float *y, float *z,
                                  short *turnAroundTime,
                                  TimeIF::TimeSpec *sampleTime, UsblIF::UsblDataStatus *status);

  DeviceIF::Status set_beacon(UsblIF::String32 newBeaconName);
  
  SonardyneOutput *_output;
  SonardyneCommand *_command;
  SerialParameters *_serialParams;
};


