//=========================================================================
// Summary  : Reson 6046 Server
// Filename : Reson6046Server.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 _RESON6046SERVER_H_
#define _RESON6046SERVER_H_

// General headers.
#include "System.h"
#include "Syslog.h"
#include "VehicleConfigurator.h"
#include "DeviceInterface.h"
#include "SharedData.h"
#include "TimeIF.h"
// Reson6046 Specific headers.
#include "Reson6046IF_SK.h"
#include "Reson6046IF.h"
#include "Reson6046Command.h"
#include "Reson6046Output.h"
// System headers.
#include <signal.h>
#include <process.h>
#include <string.h> // memcpy

// Defines
#define Reson6046ServerName "reson6046"

/// CLASS Reson6046Server
class Reson6046Server : public Reson6046IF_SK{

 public:

    Reson6046Server(const char *configFile);
    ~Reson6046Server();

    // Interfaces from DeviceIF.idl
    virtual void name(DeviceIF::Name name);
    virtual DeviceIF::Status dataLoggingOn();
    virtual DeviceIF::Status dataLoggingOff();
    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 Reson6046IF.idl
    virtual DeviceIF::Status startLogging();
    virtual DeviceIF::Status stopLogging();
    virtual DeviceIF::Status startSubsystem( Reson6046IF::ResonSonarSystems sonarSystem );
    virtual DeviceIF::Status stopSubsystem( Reson6046IF::ResonSonarSystems sonarSystem );
    virtual DeviceIF::Status pingStatus( Reson6046IF::ResonSonarSystems sonarSystem, 
					 unsigned short *pingStatus);
    virtual DeviceIF::Status setPulseFilename( Reson6046IF::ResonSonarSystems sonarSystem, 
					       Reson6046IF::String32 pulseFilename);
    virtual DeviceIF::Status setPingRange( Reson6046IF::ResonSonarSystems sonarSystem, 
					   float pingRange );
    virtual DeviceIF::Status setPingRate( Reson6046IF::ResonSonarSystems sonarSystem, 
					  float pingRate );
    virtual DeviceIF::Status setPingPower( Reson6046IF::ResonSonarSystems sonarSystem, 
					   float pingPower );
    virtual DeviceIF::Status setTime();

    // Doesn't look like the following 3 are implemented in Phase I of the 6046.exe program.
    virtual DeviceIF::Status setVerboseMode( unsigned short flag );
    virtual DeviceIF::Status getVersion();
    virtual DeviceIF::Status getSonarStatus( Reson6046IF::ResonSonarSystems sonarSystem );
    virtual DeviceIF::Status getModules();
    virtual DeviceIF::Status getRunList();

    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 DeviceIF::Status dataLoggingOn();
    virtual DeviceIF::Status dataLoggingOff();
 protected:

    Reson6046Command *_command;
    Reson6046Output *_output;

    // Debug variable.
    debug_t debug;

 private:

};

#endif
