#ifndef _IVIEW_H
#define _IVIEW_H

#include <mbari/types.h>

#define IviewPeriod 20000
#define MaxControlSources 32
#define MaxControlNameLen 32
#define MaxHostnameLen 32
#define MaxMessageLen 32

#define IviewNoChange -999.

// Data manager items for reading pan/tilt values

#define IVIEW_PORT_CAMERA_PAN_DM \
"TIBURON.PAN_TILT.PORT.CAMERA.PAN.IVIEW_POSITION"

#define IVIEW_PORT_CAMERA_TILT_DM \
"TIBURON.PAN_TILT.PORT.CAMERA.TILT.IVIEW_POSITION"

#define IVIEW_STBD_CAMERA_PAN_DM \
"TIBURON.PAN_TILT.STBD.CAMERA.PAN.IVIEW_POSITION"

#define IVIEW_STBD_CAMERA_TILT_DM \
"TIBURON.PAN_TILT.STBD.CAMERA.TILT.IVIEW_POSITION"

#define IVIEW_PORT_LIGHT_PAN_DM \
"TIBURON.PAN_TILT.PORT.LIGHT.PAN.IVIEW_POSITION"

#define IVIEW_PORT_LIGHT_TILT_DM \
"TIBURON.PAN_TILT.PORT.LIGHT.TILT.IVIEW_POSITION"

#define IVIEW_STBD_LIGHT_PAN_DM \
"TIBURON.PAN_TILT.STBD.LIGHT.PAN.IVIEW_POSITION"

#define IVIEW_STBD_LIGHT_TILT_DM \
"TIBURON.PAN_TILT.STBD.LIGHT.TILT.IVIEW_POSITION"

///////////////////////////////////////////////////////////////////
// Bitmask of IviewAxis enumerated values
typedef unsigned short IviewAxisMask;

///////////////////////////////////////////////////////////////////
// Bitmask of IviewDevice enumerated values
typedef unsigned short IviewDeviceMask;

///////////////////////////////////////////////////////////////////
// Enumeration of role types
enum IviewRole
{
  IviewNoRole, 
  IviewServerRole, 
  IviewClientRole, 
  IviewMonitorRole
};



///////////////////////////////////////////////////////////////////
// Request status codes
enum IviewStatusCode
{
  IviewSuccess = 0, 
  IviewError,
  IviewInvalidDevice,
  IviewDmError,
  IviewNoControlSources,
  IviewInvalidRequest,
  IviewMissedStatus,
  IviewTimedOut,
  IviewNoSemaphore,
  IviewNotStarted,
  IviewNoClient,
  IviewClientChanged
};


///////////////////////////////////////////////////////////////////
// Message codes
enum IviewMessageCode
{
  IviewClientStarted,
  IviewServerStarted,
  IviewDeviceListModified,
  IviewPanoramicModeOn,
  IviewPanoramicModeOff,
  IviewFocusCaptureOn,
  IviewFocusCaptureOff,
  IviewClientFinished,
  IviewServerFinished
};

  
///////////////////////////////////////////////////////////////////
// Enumeration specifying devices to be controlled
enum IviewDevice
{
  IviewNoDevice = 0,
  IviewPortCamera = 01, IviewPortLight = 02, 
  IviewStbdCamera = 04, IviewStbdLight = 010
};


///////////////////////////////////////////////////////////////////
// Enumeration specifying axes/controller types
enum IviewAxis
{
  IviewPan = 01, IviewTilt = 02, IviewFocus = 04,
  IviewIris = 010, IviewZoom = 020,

  IviewPanRate = 040, IviewTiltRate = 0100, IviewFocusRate = 0200,
  IviewIrisRate = 0400, IviewZoomRate = 01000

};

///////////////////////////////////////////////////////////////////
// Iview request types
enum IviewRequestType
{
  IviewStartRequest,        // Client is starting
  IviewDeviceRequest,       // Get control of IviewDevices
  IviewRateRequest,         // Set pan, tilt, focus rates 
  IviewPositionRequest,     // Set pan, tilt, focus
  IviewOffsetRequest,       // Set pan/tilt offsets 
  IviewFinishRequest        // Client is finished (quitting)
};


///////////////////////////////////////////////////////////////////
// Device motion sensitivities
enum IviewSensitivity
{
  IviewLowSensitivity,
  IviewMediumSensitivity,
  IviewHighSensitivity,
  IviewDefaultSensitivity,
  IviewAutoSensitivity
};



#endif


