/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// \brief
/// 	Camera property enum can be used for getting and setting camera properties.
///
/// 	\attention The order of properties is \b not allowed to be changed.
/// 			   If further properties are needed, they must be appended.
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#ifdef RX_MANAGED_ENUM
	public enum class EProperty
#else
	namespace EProperty
	{
		/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		/// \brief
		/// 	\copybrief Rx::Interop::Runtime30::Camera::EProperty
		/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		enum ID
#endif
{
	/// <summary> No property. </summary>
	None = 0,

	////////////////////////////////////////////////////////////////////////////////////////////////
	// General Camera Data.

	/// <summary> The name the hardware reports as its own. </summary>
	InternalModelName = 0x00010000,
	/// <summary> The internal serial nr. of the hardware. </summary>
	InternalSerialNr,
	/// <summary> The firmware version of the hardware. </summary>
	VersionFirmware,
	/// <summary> Get the Raytrix camera model name. </summary>
	RaytrixModelName,
	/// <summary> Get the Raytrix camera model name. </summary>
	RaytrixSerial,
	/// <summary> Property for getting temperature of camera. </summary>
	Temperature,
	/// <summary> Raytrix camera type name. E.g. 'TypeD' or 'TypeE'. </summary>
	DriverName,
	/// <summary> Unique hardware ID. </summary>
	HardwareId,

	////////////////////////////////////////////////////////////////////////////////////////////////
	// Camera State

	/// The Camera is initialized
	IsInitialized = 0x00020000,
	/// The Camera is connected
	IsConnected,
	/// The Camera is opened
	IsOpen,
	/// The Camera is capturing
	IsCapturing,
	/// The Camera is a color camera
	IsColor,
	/// The Camera is a bayer camera
	IsBayer,
	/// Property for getting and setting the video mode. The supported modes are listed in Rx::Interop::Runtime30::Canera::EriggerMode
	TriggerMode,
	/// The Camera is suspended
	IsSuspended,

	////////////////////////////////////////////////////////////////////////////////////////////////
	// Capture Timing

	/// Property for getting and setting exposure of camera.
	Exposure = 0x00030000,
	/// Property for getting and setting frame rate of camera.
	Framerate,
	/// Property for getting current acquisition frame rate.
	ActualFramerate,
	/// Property for getting and setting PixelClock for IDS Cameras.
	PixelClock,
	/// Property for getting and setting the number of video buffers.
	VideoBufCnt,

	////////////////////////////////////////////////////////////////////////////////////////////////
	// Capture Intensity

	/// Property for getting and setting global gain value of camera.
	Gain = 0x00040000,
	/// Property for getting and setting red gain value of camera.
	GainRed,
	/// Property for getting and setting green gain value of camera.
	GainGreen,
	/// Property for getting and setting blue gain value of camera.
	GainBlue,
	/// Property for getting and setting TapBalance.
	TapBalance,
	/// Property for getting and setting TapBalanceMode.
	TapBalanceMode,

	////////////////////////////////////////////////////////////////////////////////////////////////
	// Capture Area

	/// Property for getting and setting x offset of image. This is the x coordinate on sensor where the image starts.
	OffsetX = 0x00050000,
	/// Property for getting and setting y offset of image. This is the y coordinate on sensor where the image starts.
	OffsetY,
	/// Property for getting and setting image width. This is the width of acquisition image, not of image sensor.
	Width,
	/// Property for getting and setting image height. This is the height of acquisition image, not of image sensor.
	Height,
	/// Property for getting and setting the bit depth of the acquisition image.
	Bitdepth,

	////////////////////////////////////////////////////////////////////////////////////////////////
	// Capture Auto Modes

	/// Property for getting and setting auto luminance mode of camera.
	AutoLuminanceMode = 0x00060000,
	/// Property for getting and setting auto exposure mode of camera.
	AutoExposureMode,
	/// Property for getting and setting auto gain mode of camera.
	AutoGainMode,

	////////////////////////////////////////////////////////////////////////////////////////////////
	// Hardware Auto focus and Auto Iris

	///	Property for getting availability of a software controllable main lens.
	HasMainLensControl = 0x00070000,
	///	Property for getting and setting Focus.
	Focus,
	///	Property for getting and setting Iris.
	Iris,
	///	Property for getting and setting IrisValue.
	IrisFValue,

	////////////////////////////////////////////////////////////////////////////////////////////////
	// PIV settings

	///	Property for getting and setting PIV mode. [unsigned] [0,1]
	PIVMode = 0x00100000,

	////////////////////////////////////////////////////////////////////////////////////////////////
	// Camera Link Properties

	/// Property for getting and setting the board topology.
	TapGeometry = 0x00110000,
	/// <summary> DEPRICATED: The identifier of the grabber board. </summary>
	GrabberBoardID = 0x00110001,
	/// <summary> A string representing the camera link port ID of the grabber or the camera link camera. Example: "EURESYS#Euresys Grablink Full#0". </summary>
	GrabberPortIdString = 0x00110002,

	////////////////////////////////////////////////////////////////////////////////////////////////
	// Virtual Camera: Read image from Disk

	/// The current source image folder of the virtual camera
	SourceImageFolder = 0x00120000,

	/// Read mode of image files of the virtual camera
	ImageFileReadMode,

	////////////////////////////////////////////////////////////////////////////////////////////////
	// External Trigger Mode Location

	/// Mode of the external trigger. The supported modes are listed in Rx::Interop::Runtime30::Canera::EExternalTriggerMode
	ExternalTriggerMode = 0x00130000,

	//////////////////////////////////////////////////////////////////////////////////////////////////
	// Available features for IP Config
	// Is true if a valid ip interface is available
	HasIPConfig = 0x00140000,

	//////////////////////////////////////////////////////////////////////////////////////////////////
	// R42/RayCam Specifics
	// Feature for R42 cameras to start capturing on all lines at the same time. Module cameras use their shutter in this mode.
	GlobalStart = 0x00150000,
	// Turn off/on strobe. 0 = strobe off, 1 = single strobe on [d1 and L1 only], 2 = dual strobe on [(int)(RW)(always)(R42)]
	StrobeOn = 0x00150001,
	// Represents length of the first pulse. Valid values: depends on resolution [(double)(RW)(always)(R42)]
	StrobeLength1 = 0x00150002,
	// Represents length of the second pulse. Valid Values: 0 to 3.413ms, 52.083ns step size [(double)(RW)(always)(R42)]
	StrobeLength2 = 0x00150003,
	// Represents length to the first pulse. Valid Values: 0 to 3.413ms, 52.083ns step size [(double)(RW)(always)(R42)]
	StrobeDelay1 = 0x00150004,
	// Represents length to the second pulse. Valid Values: 0 to 3.413ms, 52.083ns step size [(double)(RW)(always)(R42)]
	StrobeDelay2 = 0x00150005,
	// Set the Binning mode to 0 = averaging (default) or 1 = additive binning [(int)(RW)(always)(R42)]
	BinningMode = 0x00150006,

	/************************************************************************/
	/* Frame grabber                                                        */
	/************************************************************************/

	/// <summary> Enable (1) or disable (0) the strobe output channel of the frame grabber. Only available in external trigger mode (unsigned,[0,1],RW). </summary>
	FrameGrabberStrobeOn = 0x00160000,
	/// <summary> The length of the strobe signal given in percentage of the camera exposure time. A value of 50 % means that the duration of the strobe pulse is half the duration of the exposure period. (unsigned,[0,100],RW). </summary>
	FrameGrabberStrobeLength,
	/// <summary> The position of the strobe signal given in percentage of the strobe length. A value of 0 % establishes the earliest position. A value of 100 % establishes the latest position. A value of 50 % means that the strobe pulse is located in the middle of the exposure period. This parameter refers to the middle of the strobe pulse (unsigned,[0,100],RW). </summary>
	FrameGrabberStrobePosition,
};

#ifndef RX_MANAGED_ENUM
	}
#endif
