#ifndef _DOCKCOMMAND_H
#define _DOCKCOMMAND_H

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

class DockCommand : public MessageQueue {
  public:
  DockCommand( MessageQueue::Access access = NoAccess );
  ~DockCommand();

    enum DockCommands {
       None,
       SetState,
       SetPower,
       ReadStatus,
       MoveProbe,
       QueryProbe,
       QueryResolver,
       ContinuousQueryOn,
       ContinuousQueryOff,
	   OpenPort,
	   ClosePort,
	   Ping,
       SetBeacon
    };
    //
    // This is a class.  Note that it has overloaded constructors.  I'm not
    // sure why it was declared as a struct.
    //
    struct Command {
      DockCommands _cmd;
      DockIF::String32 string;
	  int integer;

      Command() {
        _cmd = DockCommand::None;
      };

      Command(DockCommand::DockCommands cmd) {
		 _cmd = cmd;
      };

      Command(DockCommand::DockCommands cmd, DockIF::String32 in_string) {
		 _cmd = cmd;
        strncpy(string, in_string, 32);
      };

      Command(DockCommand::DockCommands cmd, int in_integer) {
		 _cmd = cmd;
		 integer = in_integer;
      };

      Command(DockIF::String32 beacon) {
        _cmd = DockCommand::SetBeacon;
        strncpy(string, beacon, 32);
      };
    };
    
  int read( Command *cmd );
  int write( Command *cmd );

  protected:

  private:

};

#endif
