//=========================================================================
// Summary  : EdgeTech FSDW Server
// Filename : EdgetechFSDWServer.h
// Author   : Reed Christenson reed@bluefinrobotics.com
// Project  : Reson 6046 Driver
// Revision : 0.0
// Created  : 2002.03.21
// Modified : 2002.03.21
//=========================================================================
// Description : Reson 6046 Server
//=========================================================================

#ifndef _EDGETECHFSDWSERVER_H_
#define _EDGETECHFSDWSERVER_H_

// General headers.
#include "System.h"
#include "Syslog.h"
//#include "VehicleConfigurator.h"
#include "DeviceInterface.h"
#include "SharedData.h"
#include "TimeIF.h"
// EdgetechFSDW Specific headers.
#include "EdgetechFSDWIF_SK.h"
#include "EdgetechFSDWIF.h"
// Removed for single process conversion
//#include "EdgetechFSDWCommand.h"
#include "EdgetechFSDWDriver.h"
#include "EdgetechFSDWOutput.h"

// System headers.
#include <signal.h>
#include <process.h>
#include <string.h> // memcpy

// Defines
#define EdgetechFSDWServerName "edgetechFSDW"

/// CLASS EdgetechFSDWServer
class EdgetechFSDWServer : public EdgetechFSDWIF_SK{

 public:

    EdgetechFSDWServer(const char *configFile);
    ~EdgetechFSDWServer();

    // Interfaces from DeviceIF.idl
    virtual void name(DeviceIF::Name name);
    virtual DeviceIF::Status dataLoggingOn(void);
    virtual DeviceIF::Status dataLoggingOff(void);
    virtual DeviceIF::Status status();
    // From DeviceIF_SK
    virtual void name(DeviceIF::Name name) {};
    virtual void serialNumber(DeviceIF::Name id) {};
    virtual DeviceIF::Status initialize() { return DeviceIF::Ok; };
    virtual DeviceIF::Status status();
    virtual DeviceIF::Status powerOn() { return DeviceIF::Ok; };
    virtual DeviceIF::Status powerOff() { return DeviceIF::Ok; };

    // Interfaces from EdgetechFSDWIF.idl
    virtual DeviceIF::Status startEdgetechStorage(Boolean bUpdate);
    virtual DeviceIF::Status stopEdgetechStorage(Boolean bUpdate);
    virtual DeviceIF::Status startSubsystem( EdgetechFSDWIF::EdgetechFSDWSonarSystems sonarSystem, Boolean bUpdate );
    virtual DeviceIF::Status stopSubsystem( EdgetechFSDWIF::EdgetechFSDWSonarSystems sonarSystem, Boolean bUpdate );
    virtual DeviceIF::Status pingStatus( EdgetechFSDWIF::EdgetechFSDWSonarSystems sonarSystem,
					 unsigned short *pingStatus, Boolean bUpdate);
    virtual DeviceIF::Status setPulseFilename( EdgetechFSDWIF::EdgetechFSDWSonarSystems sonarSystem,
					       EdgetechFSDWIF::String32 pulseFilename, Boolean bUpdate);
    virtual DeviceIF::Status setPingRange( EdgetechFSDWIF::EdgetechFSDWSonarSystems sonarSystem,
					   float pingRange, Boolean bUpdate );
    virtual DeviceIF::Status setPingRate( EdgetechFSDWIF::EdgetechFSDWSonarSystems sonarSystem,
					  float pingRate , Boolean bUpdate);
    virtual DeviceIF::Status setPingPower( EdgetechFSDWIF::EdgetechFSDWSonarSystems sonarSystem,
					   float pingPower , Boolean bUpdate);
	virtual DeviceIF::Status setSBPGain(float gain, Boolean bUpdate);
	virtual DeviceIF::Status setSBPDuration(float duration_milliseconds,Boolean bUpdate);

	virtual DeviceIF::Status relayCompositeSituation(EdgetechFSDWIF::sCompositeSituation * compSituation);
	virtual DeviceIF::Status relaySituation(EdgetechFSDWIF::sSituation * situation);
	virtual DeviceIF::Status relayPressureRecord(EdgetechFSDWIF::sPressureRecord * pressureRecord);
	virtual DeviceIF::Status relayAltitudeRecord(EdgetechFSDWIF::sAltitudeRecord * altitudeRecord);


    virtual DeviceIF::Status setTime(Boolean bUpdate);
    virtual DeviceIF::Status setVerboseMode( unsigned short flag );
    virtual DeviceIF::Status getVersion();
    virtual DeviceIF::Status getSonarStatus( EdgetechFSDWIF::EdgetechFSDWSonarSystems sonarSystem , Boolean bUpdate);
    virtual DeviceIF::Status sonarReboot();
    virtual DeviceIF::Status sonarSystemReboot();
    virtual DeviceIF::Status sonarShutdown();
    virtual DeviceIF::Status sonarSystemShutdown();
    virtual DeviceIF::Status sonarSystemPowerOn();
    virtual DeviceIF::Status sonarSystemPowerOff();
    virtual int spawnAuxTasks();
 protected:

//    EdgetechFSDWCommand *_command;
    EdgetechFSDWDriver *_driver;
    EdgetechFSDWOutput *_output;
    pid_t  _driverPid;

    // Debug variable.
    debug_t debug;

 private:

};

#endif
