#ifndef _SUPERVISORCOMMAND_H
#define _SUPERVISORCOMMAND_H

#include "MessageQueue.h"
#include <string.h>

class SupervisorCommand : public MessageQueue {
 public:
    enum SupervisorCommands {
	None = 0,

	StartMission,

	AbortMission,
	KillMission,
	
	StopSupervisor,

	MissionCompleted,
	
	SetDriverCommand,

	SetMission,
	SetFlags,

	ReloadConfig,

	DeviceFailed
    };

    struct Command {
	SupervisorCommands cmd;
	char missionPlan[256];
	char abortPlan[256];
	char deviceName[64];
	char driverName[256];
	Boolean turnOn;
	Boolean simulated;
	Boolean realTailCone;

	Command( )
	{ cmd = None; }

	Command( SupervisorCommand::SupervisorCommands inCmd )
	{
	    cmd = inCmd;
	}

	Command( SupervisorCommand::SupervisorCommands inCmd,
		 char * devName )
	{
	    cmd = inCmd;
	    strcpy( deviceName, devName );
	}


	Command( SupervisorCommand::SupervisorCommands inCmd,
		 char * missionP,
		 char * abortP )
	{
	    cmd = inCmd;
	    strcpy( missionPlan, missionP );
	    strcpy( abortPlan, abortP );
	}

	Command( SupervisorCommand::SupervisorCommands inCmd,
		 char* dName, Boolean tOn){
	    cmd = inCmd;
	    strcpy(driverName, dName);
	    turnOn = tOn;
	}

	Command( SupervisorCommand::SupervisorCommands inCmd,
		 Boolean sim,
		 Boolean rtc)
	{
	    cmd = inCmd;
	    simulated = sim;
	    realTailCone = rtc;
	}
    };

    SupervisorCommand( MessageQueue::Access access = NoAccess );
    ~SupervisorCommand();

    int read( Command *cmd );
    int write( Command *cmd );

 protected:

 private:

};

#endif
