#ifndef _DeltaTMessage_H
#define _DeltaTMessage_H

#include "MessageQueue.h"
#define DeltaTMessageQueueName "DeltaTMessages"


class DeltaTMessage : public MessageQueue {
  public:
    enum DeltaTMessages {
      None = 0,
      StartMVCLogging,
      StopMVCLogging,
      SetLogging,
      SetGain,
      SetGainEq,
      SetProfileMinRange,
      SetTiltAngle,
      SetTriggerEnable,
      SetTriggerEdge,
      SetTriggerDelay,
      SetXducerOrientation,
      SetProfilePointFilter,
      SetSOS,
      SetAutoSOS,
      SetNBeams,
      SetSectorSize,
      SetBeamWidth,
      SetAveraging,
      SetRange
    };

    struct Message {
      DeltaTMessages _msg;
      int   _int;
      float _float;

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

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

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

  DeltaTMessage( MessageQueue::Access access, const char* q_name )
    : MessageQueue( q_name, sizeof( Message ), 20, access, False ) {}

  ~DeltaTMessage() {}

  // A single function to build a unique name for the memory.
  // User passes in a suffix to append to DeltaTMessageQueueName, a buffer
  // to place the resulting name, and the length of the buffer.
  // Returns a pointer to the buffer as well.
  // Usage:
  //  char buf[100];
  //  _input = new DeltaTMessage(DeltaTMessage::makeName("suf",buf,sizeof(buf)));
  //
  static char* makeName(char* dest, char* suffix, int destlen)
  {
    strncat(strncpy(dest, DeltaTMessageQueueName, destlen), suffix, destlen);
    return (char*)dest;
  }


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