#ifndef _LAPBOXUIDM_H
#define _LAPBOXUIDM_H

#include "DataManager.h"

#define LAPBOX_JOYSTICK_X_DATA_DM "JOYSTICK_X"
#define LAPBOX_JOYSTICK_Y_DATA_DM "JOYSTICK_Y"
#define LAPBOX_ZOOM_DATA_DM "ZOOM"
#define LAPBOX_FOCUS_DATA_DM "FOCUS"
#define LAPBOX_IRIS_DATA_DM "IRIS"

#define LAPBOX_IRIS_MODE_EVENT_DM "IRIS_MODE_EVENT"
#define LAPBOX_PANORAMIC_EVENT_DM "PANORAMIC_EVENT"
#define LAPBOX_ENABLE_EVENT_DM "ENABLE_EVENT"
#define LAPBOX_PORT_CAMERA_SELECT_EVENT_DM "PORT_CAMERA_SELECT_EVENT"
#define LAPBOX_STBD_CAMERA_SELECT_EVENT_DM "STBD_CAMERA_SELECT_EVENT"
#define LAPBOX_PORT_LIGHT_EVENT_DM "PORT_LIGHT_EVENT"
#define LAPBOX_PORT_CAMERA_EVENT_DM "PORT_CAMERA_EVENT"
#define LAPBOX_STBD_LIGHT_EVENT_DM "STBD_LIGHT_EVENT"
#define LAPBOX_STBD_CAMERA_EVENT_DM "STBD_CAMERA_EVENT"

#define LAPBOX_IRIS_MODE_SETTING_DM "IRIS_MODE_SETTING"
#define LAPBOX_PANORAMIC_SETTING_DM "PANORAMIC_SETTING"
#define LAPBOX_ENABLE_SETTING_DM "ENABLE_SETTING"
#define LAPBOX_PORT_CAMERA_SELECT_SETTING_DM "PORT_CAMERA_SELECT_SETTING"
#define LAPBOX_STBD_CAMERA_SELECT_SETTING_DM "STBD_CAMERA_SELECT_SETTING"
#define LAPBOX_PORT_LIGHT_SETTING_DM "PORT_LIGHT_SETTING"
#define LAPBOX_PORT_CAMERA_SETTING_DM "PORT_CAMERA_SETTING"
#define LAPBOX_STBD_LIGHT_SETTING_DM "STBD_LIGHT_SETTING"
#define LAPBOX_STBD_CAMERA_SETTING_DM "STBD_CAMERA_SETTING"

struct LapBoxUiData 
{
  LapBoxUiData(const char *dmPrefix, DmRoleFlags role,
	       SEM_ID wakeupSem = SEM_NULL);

  DmInt16Object *zoom;
  DmInt16Object *focus;
  DmInt16Object *iris;
  DmInt16Object *pan;
  DmInt16Object *tilt;
};


struct LapBoxUiEvents
{
  LapBoxUiEvents(const char *dmPrefix, DmRoleFlags role,
		 SEM_ID wakeupSem = SEM_NULL);
  
  // Device buttons for pan/tilt
  DmEmptyObject *portLight;
  DmEmptyObject *portCamera;
  DmEmptyObject *stbdLight;
  DmEmptyObject *stbdCamera;

  DmEmptyObject *panoramic;
  DmEmptyObject *enable;

  // Camera buttons for zoom/focus/iris
  DmEmptyObject *portCameraSelect;
  DmEmptyObject *stbdCameraSelect;

  DmEmptyObject *autoIris;
};

  
typedef enum
{
  LapBoxButtonOff, LapBoxButtonOn, LapBoxButtonError

} LapBoxButtonState;


struct LapBoxUiSettings
{
  LapBoxUiSettings(const char *dmPrefix, DmRoleFlags role,
		   SEM_ID wakeupSem = SEM_NULL);

  // Device buttons for pan/tilt
  DmNat16Object *portLight;
  DmNat16Object *portCamera;
  DmNat16Object *stbdLight;
  DmNat16Object *stbdCamera;

  DmNat16Object *panoramic;
  DmNat16Object *enable;

  // Camera buttons for zoom/focus/iris
  DmNat16Object *portCameraSelect;
  DmNat16Object *stbdCameraSelect;

  DmNat16Object *autoIris;

  static Nat16 encode(LapBoxButtonState state, MBool flash);

  static void decode(Nat16 value, LapBoxButtonState *state, MBool *flash);
};





#endif
