/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2016 Raytrix GmbH. All rights reserved.
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#pragma once

#include "Rx.Camera.INativeDeviceDo.h"

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// namespace: Rx.Interop.Runtime30.Camera
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
namespace Rx
{
	namespace Interop
	{
		namespace Runtime30
		{
			namespace Camera
			{
				/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
				/// <summary>
				/// 	Interface to be implemented by CameraLink NativeDeviceDrivers. Provides functions only needed by CamLink Devices. For
				/// 	more detail on the procedures involved in CamLink+FrameGrabber devices please refer to $/RxSW/Documents/CamDriver.
				/// </summary>
				/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
				class INativeDeviceCameraLink
				{
				protected:

					virtual ~INativeDeviceCameraLink() { };

				public:

					/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					/// <summary>
					/// 	Sets a frame grabber NativeDevice pointer in the NativeDeviceDriver instance for the camera. The camera needs that for
					/// 	some functions (e.g. StartCapture). For more information see $/RxSW/Documents/CamDriver.
					/// </summary>
					///
					/// <param name="pDevice"> [in] The NativeDeviceControl instance pointer to the associated frame grabber. </param>
					/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					virtual void SetFrameGrabber(INativeDeviceControl* pDevice) = 0;
				};
			}
		}
	}
}

#pragma make_public(Rx::Interop::Runtime30::Camera::INativeDeviceCameraLink)
