#ifndef _CAMERADMOBJECTS_H
#define _CAMERADMOBJECTS_H

#include "DataManager.h"
#include "ErrorHandler.h"
#include "CameraIF.h"

// Names and periods (microsec) for Camera data manager items
#define GainRequestName "Gain.Request"
#define GainStatusName "Gain.Status"
#define GainPeriod DM_ASYNC

#define ColorBarsRequestName "ColorBars.Request"
#define ColorBarsStatusName "ColorBars.Status"
#define ColorBarsPeriod DM_ASYNC

#define ZoomRequestName "Zoom.Request"
#define ZoomStatusName "Zoom.Status"
#define ZoomPeriod CameraPeriod

#define FocusRequestName "Focus.Request"
#define FocusStatusName "Focus.Status"
#define FocusPeriod CameraPeriod

#define IrisRequestName "Iris.Request"
#define IrisStatusName "Iris.Status"
#define IrisPeriod CameraPeriod

#define AutoIrisRequestName "AutoIris.Request"
#define AutoIrisStatusName "AutoIris.Status"
#define AutoIrisPeriod DM_ASYNC

#define RedPedestalRequestName "RedPedestal.Request"
#define RedPedestalStatusName "RedPedestal.Request"
#define RedPedestalPeriod DM_ASYNC

#define BluePedestalRequestName "BluePedestal.Request"
#define BluePedestalStatusName "BluePedestal.Request"
#define BluePedestalPeriod DM_ASYNC

#define TotalPedestalRequestName "TotalPedestal.Request"
#define TotalPedestalStatusName "TotalPedestal.Request"
#define TotalPedestalPeriod DM_ASYNC

#define RedGainRequestName "RedGain.Request"
#define RedGainStatusName "RedGain.Request"
#define RedGainPeriod DM_ASYNC

#define BlueGainRequestName "BlueGain.Request"
#define BlueGainStatusName "BlueGain.Request"
#define BlueGainPeriod DM_ASYNC

#define ServerAliveName "ServerAlive"
#define ServerAlivePeriod DM_ASYNC


class CameraDmObjects : public ErrorHandler
{
  public:
  CameraDmObjects(const char *cameraDmPrefix);
  ~CameraDmObjects();
  
  MBool serverIsAlive();

  static int periodMicroSec()
  {
    return CameraPeriod;
  }
  
  DmEnumObject *gainRequest;
  DmEnumObject *gainStatus;
  
  DmBooleanObject *colorBarsRequest;
  DmBooleanObject *colorBarsStatus;

  DmInt16Object *zoomRequest;
  DmInt16Object *zoomStatus;        

  DmInt16Object *focusRequest;
  DmInt16Object *focusStatus;        

  DmInt16Object *irisRequest; 
  DmInt16Object *irisStatus;

  DmInt16Object *redPedestalRequest; 
  DmInt16Object *redPedestalStatus; 

  DmInt16Object *bluePedestalRequest; 
  DmInt16Object *bluePedestalStatus; 

  DmInt16Object *totalPedestalRequest; 
  DmInt16Object *totalPedestalStatus; 

  DmInt16Object *redGainRequest; 
  DmInt16Object *redGainStatus; 

  DmInt16Object *blueGainRequest; 
  DmInt16Object *blueGainStatus; 

  DmBooleanObject *autoIrisRequest;
  DmBooleanObject *autoIrisStatus;
  
  // This is provided by server
  DmEmptyObject *serverAlive;
};


#endif




