/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2016 Raytrix GmbH. All rights reserved.
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#pragma once
#include "DLLInterface.h"

#include "Rx.Interop.Runtime30/Rx.Camera.INativeDeviceIPv4Do.h"
#include "Rx.Core.Network/RxIPv4.h"
#include "Rx.Core.Network/RxIPv4Subnetmask.h"
#include "Rx.Core.Network/RxMAC.h"

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// namespace: Rx.LFR
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
namespace Rx
{
	namespace LFR
	{
		/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		/// <summary>
		/// 	CUDA data: Images.
		/// </summary>
		/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		class RX_API IIPCamera
		{
		public:

			/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
			virtual Interop::Runtime30::Camera::ESetIpCode::ID ForceValidIP() = 0;

			/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
			virtual Interop::Runtime30::Camera::ESetIpCode::ID SetIPConfig() = 0;

			/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
			virtual Interop::Runtime30::Camera::ESetIpCode::ID SetIPConfig(const Core::Network::CRxIPv4& xCamIP, const Core::Network::CRxIPv4Subnetmask& xCamSubnet, const Core::Network::CRxIPv4& xCamGateway = Core::Network::CRxIPv4(0), bool bIsPersistent = false) = 0;

			/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
			virtual void GetIPConfig(Core::Network::CRxIPv4& xCamIP, Core::Network::CRxIPv4Subnetmask& xCamSubnet, Core::Network::CRxIPv4& xCamGateway, Interop::Runtime30::EThreeState::ID& eIsPersistent, Interop::Runtime30::EThreeState::ID& eIsDHCP, Core::Network::CRxMAC& xCamMAC) = 0;

			/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
			virtual void GetIPConfig(Core::Network::CRxIPv4& xCamIP, Core::Network::CRxIPv4Subnetmask& xCamSubnet, Core::Network::CRxMAC& xCamMAC) = 0;

			/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
			virtual void GetIPConfig(Core::Network::CRxIPv4& xCamIP, Core::Network::CRxIPv4Subnetmask& xCamSubnet, Core::Network::CRxIPv4& xCamGateway) = 0;

		protected:

			IIPCamera() { }
			virtual ~IIPCamera() { }
		};
	}
}
