#ifndef _ModtronixMessage_H
#define _ModtronixMessage_H

#include "MessageQueue.h"
#define ModtronixQueueName "ModtronixMsgs"


class ModtronixMsg : public MessageQueue {
  public:
    enum ModtronixMsgs {
      None = 0,
      CameraOn,
      CameraOff,  
      RecorderOn,
      RecorderOff,
      Action,            // Start recording
      Cut,               // Stop  recording
      Sync,              // Sync MVC and AJA clocks
      RecordMode,
      DataMode,
      Timecode,
      AvailableMedia,
      Clipname,
      LightsOn,
      LightsOff,
      LightLevel,
      CtdOn,
      CtdOff,
      EZHome,            // Tell EZ17 to find home location
      EZFStop,           // Move to an F-stop location
      EZAutoFS           // Use the light sensor value to set the iris
    };

    struct Message {
      ModtronixMsgs _msg;
      int   _int;
      float _float;
      char  _str[120];

      Message() {
        _msg = None;
        _int = 0; _float = 0.;
      };

      Message(ModtronixMsgs msg) {
         Message();
        _msg = msg;
      };
      Message(ModtronixMsgs msg, int attr) {
         _msg = msg;
        _int = attr;
      };

      Message(ModtronixMsgs msg, float attr) {
         _msg = msg;
        _float = attr;
      };

      Message(ModtronixMsgs msg, char *attr) {
         _msg = msg;
        strncpy(_str, attr, sizeof(_str) - 1);
        _str[sizeof(_str)] = '\0';
      };
    };

  ModtronixMsg( MessageQueue::Access access = ReadWrite)
    : MessageQueue( ModtronixQueueName, sizeof( Message ), 20, access, False ) {}

  ~ModtronixMsg() {}


  int read( Message *msg ) {return MessageQueue::read((void *)msg);}
  int write( Message *msg ) {return MessageQueue::write((void *)msg);}
};
#endif
