/****************************************************************************/
/* Copyright (c) 2005 MBARI                                                 */
/* MBARI Proprietary Information. All rights reserved.                      */
/****************************************************************************/
/* Summary  :                                                               */
/* Filename : DockServer.h                                             */
/* Author   :                                                               */
/* Project  :                                                               */
/* Version  : 1.0                                                           */
/* Created  : 11/28/2005                                                    */
/* Modified :                                                               */
/* Archived :                                                               */
/****************************************************************************/
/* Modification History:                                                    */
/****************************************************************************/
#include "VehicleOutput.h"
#include "VehicleCommand.h"
#include "DockCommand.h"
#include "DockOutput.h"
#include "SerialParameters.h"
#include "DockIF_SK.h"

/*
CLASS
DockServer

DESCRIPTION Server Implementation for the dock.  This server manages two
drivers; one for the on-board PIC, and the other for the corresponding PIC in
the dock.

AUTHOR
rsm

*/
class DockServer : public DockIF_SK {

public:

  DockServer(SerialParameters *serialParamsVehicle,
	     SerialParameters *serialParamsDock);
  ~DockServer();
  

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 request_vehicle_status();
  virtual DeviceIF::Status read_vehicle_PIC( DockIF::String512 pic_status, 
											 TimeIF::TimeSpec *sampleTime  );

  virtual DeviceIF::Status request_dock_status();
  virtual DeviceIF::Status set_dock_state( DockIF::String32 State );
  virtual DeviceIF::Status read_dock_PIC( DockIF::String512 pic_status, 
										  TimeIF::TimeSpec *sampleTime  );
  virtual DeviceIF::Status query_resolver();
  virtual DeviceIF::Status read_resolver(DockIF::String32 State,
										 TimeIF::TimeSpec *sampleTime  );
  virtual DeviceIF::Status query_probe();
  virtual DeviceIF::Status read_probe(DockIF::String32 State,
									  TimeIF::TimeSpec *sampleTime  );
  virtual DeviceIF::Status set_continuous_query(Boolean State,
												short pingTimeOut);
  virtual DeviceIF::Status read_continuous_query( Boolean *networkPresent,
											DockIF::String32 probeStatus,
											DockIF::String32 resolverStatus,
											double *sampleTime);
  
  virtual DeviceIF::Status move_probe( DockIF::String32 probeCmd );
  virtual DeviceIF::Status open_port();
  virtual DeviceIF::Status close_port();
  virtual DeviceIF::Status ping( short timeOut );
  virtual DeviceIF::Status ping_result( short *pingError,
										double *sampleTime);
  

  virtual int spawnAuxTasks();
  
  /////////////////////////////////////////////////////////
  // Return true if device is ready to go, otherwise false
  virtual Boolean ready();
  
  VehicleOutput  *_vehicleOutput;
  VehicleCommand *_vehicleCommand;
  DockOutput     *_dockOutput;
  DockCommand    *_dockCommand;

  SerialParameters *_serialParamsVehicle, *_serialParamsDock;
};


