#ifndef _PILOTTRAYUIDM_H
#define _PILOTTRAYUIDM_H

#include "DataManager.h"

#define PILOTTRAY_JOYSTICK_X_DATA_DM "PILOT_PAN"
#define PILOTTRAY_JOYSTICK_Y_DATA_DM "PILOT_TILT"
#define PILOTTRAY_ZOOM_DATA_DM "ZOOM_PEDAL"
#define PILOTTRAY_FOCUS_DATA_DM "FOCUS_PEDAL"

#define PILOTTRAY_PORT_CAMERA_SELECT_EVENT_DM "BAR_SWITCH"
#define PILOTTRAY_STBD_CAMERA_SELECT_EVENT_DM "BAR_SWITCH"
#define PILOTTRAY_PORT_LIGHT_EVENT_DM "LEFT_T_SWITCH_UP_LEFT"
#define PILOTTRAY_PORT_CAMERA_EVENT_DM "LEFT_T_SWITCH_DOWN_LEFT"
#define PILOTTRAY_STBD_LIGHT_EVENT_DM "LEFT_T_SWITCH_UP_RIGHT"
#define PILOTTRAY_STBD_CAMERA_EVENT_DM "LEFT_T_SWITCH_DOWN_RIGHT"

#define PILOTTRAY_PORT_CAMERA_SELECT_SETTING_DM "BAR_SWITCH_STATE"
#define PILOTTRAY_STBD_CAMERA_SELECT_SETTING_DM "BAR_SWITCH_STATE"

#define PILOTTRAY_PORT_LIGHT_SETTING_DM "LEFT_T_SWITCH_UP_LEFT_STATE"
#define PILOTTRAY_PORT_CAMERA_SETTING_DM "LEFT_T_SWITCH_DOWN_LEFT_STATE"
#define PILOTTRAY_STBD_LIGHT_SETTING_DM "LEFT_T_SWITCH_UP_RIGHT_STATE"
#define PILOTTRAY_STBD_CAMERA_SETTING_DM "LEFT_T_SWITCH_DOWN_RIGHT_STATE"

struct PilotTrayUiData
{
  PilotTrayUiData(const char *dmPrefix, DmRoleFlags role,
               SEM_ID wakeupSem = SEM_NULL);

  DmInt16Object *zoom;
  DmInt16Object *focus;
  DmInt16Object *pan;
  DmInt16Object *tilt;
};


struct PilotTrayUiEvents
{
  PilotTrayUiEvents(const char *dmPrefix, DmRoleFlags role,
                 SEM_ID wakeupSem = SEM_NULL);

  // Device buttons for pan/tilt
  DmBooleanObject *portLight;
  DmBooleanObject *portCamera;
  DmBooleanObject *stbdLight;
  DmBooleanObject *stbdCamera;

  // Camera buttons for zoom/focus/iris
  DmBooleanObject *portCameraSelect;
  DmBooleanObject *stbdCameraSelect;

};


typedef enum
{
  PilotTrayButtonOff, PilotTrayButtonOn, PilotTrayButtonError

} PilotTrayButtonState;


struct PilotTrayUiSettings
{
  PilotTrayUiSettings(const char *dmPrefix, DmRoleFlags role,
                   SEM_ID wakeupSem = SEM_NULL);

  // Device buttons for pan/tilt
  DmBooleanObject *portLight;
  DmBooleanObject *portCamera;
  DmBooleanObject *stbdLight;
  DmBooleanObject *stbdCamera;

  // Camera buttons for zoom/focus/iris
  DmBooleanObject *portCameraSelect;
  DmBooleanObject *stbdCameraSelect;

  static Nat16 encode(MBool state, MBool flash);

  static void decode(Nat16 value, MBool *state, MBool *flash);
};





#endif
