#ifndef _VSENSORLASER_H
#define _VSENSORLASER_H
#ifdef __linux__
#define VSENSORLASER_API
#else
#ifdef  DLL_EXPORT
#define VSENSORLASER_API  __declspec(dllexport)
#else
#define VSENSORLASER_API  __declspec(dllimport)
#endif
#endif
#include <functional>
#include <string>
#include <array>
#include <vector>
#include <memory>
#include "VSensorLaserDefine.h"
namespace VSENSORLASER
{
	extern "C" class VSENSORLASER_API VSensorLaser
	{
	public:
		VSensorLaser();
		~VSensorLaser();
		/*******************************************************************
		*名称：              GetSdkVersionString
		*功能：              获取SDK版本号
		*入口参数：
		version		         SDK版本号
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int GetSdkVersionString(std::string& version);
		/*******************************************************************
		*名称：              GetDeviceList
		*功能：              获取参数列表
		*入口参数：
		pCameraList          相机列表信息
		piNums               相机个数
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int GetDeviceList(VSensorLaserCameraInfo* pCameraList, int* piNums);
		/*******************************************************************
		*名称：              GetDeviceIP
		*功能：              获取设备网络地址
		*入口参数：
		deviceName           相机名称      
		addr				 相机IP
		mask               	 相机子网掩码
		gateWay				 相机网关
		etAddr				 网卡IP
		etMask				 网卡子网掩码
		etGateWay			 网卡网关
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int GetDeviceIP(const std::string& deviceName, std::string& addr, std::string& mask, std::string& gateWay, std::string& etAddr, std::string& etMask, std::string& etGateWay);
		/*******************************************************************
		*名称：              SetDeviceIP
		*功能：              设置设备网络地址(该函数仅在相机断连时可调用)
		*入口参数：
		deviceName           相机名称
		addr				 相机IP(如:192.168.1.100)
		mask               	 相机子网掩码(如:255.255.255.0)
		gateWay				 相机网关(如:192.168.1.1)
		bPersistent          true:设置相机为固定IP   false:设置相机自动分配IP(忽略参数addr，mask，gateWay)
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int SetDeviceIP(const std::string& deviceName, const std::string& addr, const std::string& mask, const std::string& gateWay, const bool& bPersistent);
		/*******************************************************************
		*名称：              SetDeviceSysOption
		*功能：              配置系统选项(需要在DeviceConnect连接设备之前配置)
		*入口参数：
		optionName           选项
		value                值
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int SetDeviceSysOption(char const* optionName, char const* value);
		/*******************************************************************
		*名称：              DeviceConnect
		*功能：              设备连接
		*入口参数：
		iDeviceIndex         需要连接的相机索引
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int DeviceConnect(const int& iDeviceIndex);
		/*******************************************************************
		*名称：              GetDeviceCustomSN
		*功能：              获取设备自定义序列号
		*入口参数：
		serialNumber         自定义序列号
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int GetDeviceCustomSN(std::string& serialNumber);
		/*******************************************************************
		*名称：              SetDeviceCustomSN
		*功能：              设置设备自定义序列号
		*入口参数：
		serialNumber         自定义序列号
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int SetDeviceCustomSN(const std::string& serialNumber);	
		/*******************************************************************
		*名称：              GetCamInternelParameter
		*功能：              获取相机内参
		*入口参数：
		pCameraInternelPara  相机内参
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int GetCamInternelParameter(VSensorLaserCameraInternelPara* pCameraInternelPara);
		/*******************************************************************
		*名称：              GetPara
		*功能：              获取标定参数
		*入口参数：
		para                 相机标定参数
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int GetPara(std::vector<double>& para);
		/*******************************************************************
		*名称：              ResetUserSettingData
		*功能：              重置用户设置数据
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int ResetUserSettingData();
		/*******************************************************************
		*名称：              LoadUserSettingData
		*功能：              加载用户设置数据
		*入口参数：
		filePath			 加载路径，支持格式ini(加载该路径下的用户设置文件至当前连接设备内部并生效设置参数)
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int LoadUserSettingData(const std::string& filePath);
		/*******************************************************************
		*名称：              SaveUserSettingData
		*功能：              保存用户设置数据
		*入口参数：
		filePath			 保存路径，支持格式ini(保存前连接设备内部的用户设置数据至该路径)
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int SaveUserSettingData(const std::string& filePath);
		/*******************************************************************
		*名称：              SetZaxisRange
		*功能：              设置当前Z轴范围
		*入口参数：
		min					 最小值
		max					 最大值
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int SetZaxisRange(const int& min, const int& max);
		/*******************************************************************
		*名称：              GetZaxisRange
		*功能：              获取当前Z轴范围
		*入口参数：
		min					 最小值
		max					 最大值
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int GetZaxisRange(int& min, int& max);
		/*******************************************************************
		*名称：              SetProjectLight
		*功能：              设置投影等级
		*入口参数：
		level                投影等级，范围0 - 2，等级越高投影越亮(注:激光器在15min之内未采集点云投影等级会自动设置为0，PSN3000系列投影等级范围0 - 1)
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int SetProjectLight(const int& level);
		/*******************************************************************
		*名称：              GetProjectLight
		*功能：              获取投影等级
		*入口参数：
		level                投影等级
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int GetProjectLight(int& level);
		/*******************************************************************
		*名称：              GetExposureTime
		*功能：              获取曝光时间
		*入口参数：
		exposureTime         曝光时间，单位为ms
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int GetExposureTime(double& exposureTime);
		/*******************************************************************
		*名称：              SetExposureTime
		*功能：              设置曝光时间
		*入口参数：
		exposureTime         曝光时间，单位为ms，范围0.01 - 20.00，采集预览模式 MODE_SPSOFT 下范围0.01 - 500.00
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int SetExposureTime(const double& exposureTime);
		/*******************************************************************
		*名称：              SetAutoExposureTime
		*功能：              设置自动曝光(功能预留暂不支持)
		*入口参数：
		isOpen               自动曝光开关
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int SetAutoExposureTime(const bool& isOpen);
		/*******************************************************************
		*名称：              SetFrameRate
		*功能：              设置帧速率，该接口设置连续采集下的帧率等级，该等级为当前理论输出的最大帧率的百分比，最大帧率非固定值受曝光和ROI设置共同影响
		*入口参数：
		level                帧率等级，范围1 - 100
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int SetFrameRate(const int& level);
		/*******************************************************************
		*名称：              SetAlgoMode
		*功能：              设置算法模式(此接口仅支持部分设备如有需要联系相关销售人员)
		*入口参数：
		flag                 0:常规算法  1:抗弧光算法。取值范围参见@link #emVSensorLaserAlgoMode @endlink的定义。
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int SetAlgoMode(const int& flag);
		/*******************************************************************
		*名称：              SetLineSelectMode
		*功能：              设置光条筛选模式
		*入口参数：
		minLight		     最低亮度，范围0 - 255
		maxLight             最高亮度，范围0 - 255
		minWidth			 最小线宽，范围1 - 50
		maxWidth			 最大线宽，范围1 - 50
		mode			     0:标准  1:亮度优先(选择亮度最高)  2:线宽优先(选择线宽最小)  3:距离最近  4:距离最远。取值范围参见@link #emVSensorLaserSelectMode @endlink的定义。
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int SetLineSelectMode(const int& minLight, const int& maxLight, const int& minWidth, const int& maxWidth, const int& mode);
		/*******************************************************************
		*名称：              SetHDR
		*功能：              设置高动态采集模式
		*入口参数：
		exposureTime1		 曝光时间1，单位为ms，范围0.01 - 20.00
		exposureTime2        曝光时间2，单位为ms，范围0.01 - 20.00
		isOpen			     HDR开关
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int SetHDR(const double& exposureTime1, const double& exposureTime2, const bool& isOpen);
		/*******************************************************************
		*名称：              GetHDR
		*功能：              获取高动态采集模式曝光参数
		*入口参数：
		exposureTime1		 曝光时间1，单位为ms
		exposureTime2        曝光时间2，单位为ms
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int GetHDR(double& exposureTime1, double& exposureTime2);
		/******************************************************************
		* 名称：			 SetOutlierDetect
		* 功能：			 设置离散点
		* 入口参数：		    
		* window			 离散窗口，范围2 - 7，取值越小离散点去除越弱
		* threshold			 离散阈值，范围1.0 - 10.0，取值越小离散点去除越强
		* isOpen			 离散开关
		* 出口参数：		 成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		* *****************************************************************/
		int SetOutlierDetect(const int& window, const float& threshold, const bool& isOpen);
		/******************************************************************
		* 名称：			 SetFilter1
		* 功能：			 设置滤波1
		* 入口参数：		    
		* window			 滤波窗口，范围2 - 7
		* isOpen			 滤波开关
		* 出口参数：		 成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		* *****************************************************************/
		int SetFilter1(const int& window, const bool& isOpen);
		/******************************************************************
		* 名称：			 SetFilter2
		* 功能：			 设置滤波2
		* 入口参数：		    
		* window			 滤波窗口，范围2 - 7
		* isOpen			 滤波开关
		* 出口参数：		 成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		* *****************************************************************/
		int SetFilter2(const int& window, const bool& isOpen);
		/******************************************************************
		* 名称：			 CloudOutlierDetect
		* 功能：			 点云离散点
		* 入口参数：		    
		* presult			 点云数据
		* window			 离散窗口，范围2 - 7，取值越小离散点去除越弱
		* threshold			 离散阈值，范围1.0 - 10.0，取值越小离散点去除越强
		* 出口参数：		 成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		* *****************************************************************/
		int CloudOutlierDetect(VSensorLaserResult* presult, const int& window, const float& threshold);
		/******************************************************************
		* 名称：			 CloudFilter1
		* 功能：			 点云滤波1
		* 入口参数：		    
		* presult			 点云数据
		* window			 滤波窗口，范围2 - 7
		* 出口参数：		 成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		* *****************************************************************/
		int CloudFilter1(VSensorLaserResult* presult, const int& window);
		/******************************************************************
		* 名称：			 CloudFilter2
		* 功能：			 点云滤波2
		* 入口参数：		    
		* presult			 点云数据
		* window			 滤波窗口，范围2 - 7
		* 出口参数：		 成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		* *****************************************************************/
		int CloudFilter2(VSensorLaserResult* presult, const int& window);
		/******************************************************************
		* 名称：			 SetDownsampling
		* 功能：			 设置降采样
		* 入口参数：		 
		* rate				 采样间隔，单位为mm，范围0.1 - 2.0，如每隔0.2mm采一个点，rate = 0.2(注:PSN3000系列采样间隔范围0.1 - 10.0)
		* isOpen			 降采样开关
		* 出口参数：		 成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		* *****************************************************************/
		int SetDownsampling(const float& rate, const bool& isOpen);
		/*******************************************************************
		*名称：              GetImageResolution
		*功能：              获取输出图像分辨率
		*入口参数：			 
		pImageResolution     图像分辨率
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int GetImageResolution(VSensorLaserImageResolution* pImageResolution);
		/*******************************************************************
		*名称：              GetDevTemperature
		*功能：              获取传感器温度
		*入口参数：		    
		devTemperature       传感器温度
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int GetDevTemperature(float& devTemperature);
		/*******************************************************************
		*名称：              GetLaserTemperature
		*功能：              获取激光器温度
		*入口参数：
		laserTemperature     激光器温度
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int GetLaserTemperature(float& laserTemperature);
		/*******************************************************************
		*名称：              SetROI
		*功能：              设置ROI感兴趣区域
		*入口参数：			 
		offsetX		         起始坐标X，仅支持32倍数
		offsetY              起始坐标Y
		width			     区域宽，仅支持32倍数，最小宽度为32
		height				 区域高，仅支持16倍数，最小高度为32
		isOpen			     ROI开关
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int SetROI(const int& offsetX, const int& offsetY, const int& width, const int& height, const bool& isOpen);
		/*******************************************************************
		*名称：              ResetFrameTimeStamp
		*功能：              复位图像采集时间戳
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int ResetFrameTimeStamp();
		/*******************************************************************
		*名称：              SetCaptureMode
		*功能：              设置相机采集模式
		*入口参数：			 
		flag                 0:采集预览模式(输出预览图的分辨率随设置改变)  1:软件触发采集点云模式  2:硬件触发采集点云模式  3:采集预览模式(输出预览图为满分辨率)，默认为采集预览模式(输出预览图的分辨率随设置改变)。取值范围参见@link #emVSensorLaserCaptureMode @endlink的定义。
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int SetCaptureMode(const int& flag);
		/*******************************************************************
		*名称：              GetRunningStatus
		*功能：              获取相机后台运行状态
		*入口参数：
		pRunningStatus       相机后台运行状态结构体
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int GetRunningStatus(VSensorLaserCameraRunningStatus* pRunningStatus);
		/*******************************************************************
		*名称：              SingleRestruction
		*功能：              单次重建
		*入口参数：			 
		presult              获取的点云数据结果
		flag                 0:全量输出(预留接口)
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int SingleRestruction(VSensorLaserResult* presult, const int& flag);
		/*******************************************************************
		*名称：              ContinuousRestructionStart      
		*功能：              开始3D重建连续模式
		*入口参数：			 
		flag                 0:全量输出(预留接口)
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int ContinuousRestructionStart(const int& flag);
		/*******************************************************************
		*名称：              ContinuousRestructionStop
		*功能：              结束3D重建连续模式
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int ContinuousRestructionStop();
		/*******************************************************************
		*名称：              CaptureFrame
		*功能：              获取一帧点云数据
		*入口参数：			 
		presult              点云数据结果
		ctime                最大延时时间，单位ms
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int CaptureFrame(VSensorLaserResult* presult, const int& ctime);
		/*******************************************************************
		*名称：              SetExternalTriggerMode
		*功能：              设置外部触发模式
		*入口参数：
		flag                 0:外触发模式  1:计数器模式。取值范围参见@link #emVSensorLaserExternalTriggerMode @endlink的定义
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int SetExternalTriggerMode(const int& flag);
		/*******************************************************************
		*名称：              SetExternalTriggerDelay
		*功能：              设置外部触发延时
		*入口参数：
		delayTime            延迟时间，单位为us，范围0 - 1000
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int SetExternalTriggerDelay(const int& delayTime);
		/*******************************************************************
		*名称：              SetExternalTriggerType
		*功能：              设置外部触发种类
		*入口参数：
		flag                 0:上升沿触发  1:下降沿触发。取值范围参见@link #emVSensorLaserExternalTriggerType @endlink的定义
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int SetExternalTriggerType(const int& flag);
		/*******************************************************************
		*名称：              SetExternalTriggerCounterTriggers
		*功能：              设置外部触发计数器触发数量设定值
		*入口参数：
		value                计数器触发数量设定值，范围1 - 1024
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int SetExternalTriggerCounterTriggers(const int& value);
		/*******************************************************************
		*名称：              GetExternalTriggerCurrentCounterTriggers
		*功能：              获取外部触发计数器实时触发数量
		*入口参数：
		count                计数器触发数量
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int GetExternalTriggerCurrentCounterTriggers(int& count);
		/*******************************************************************
		*名称：              ResetExternalTriggerCounterTriggers
		*功能：              复位外部触发计数器
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int ResetExternalTriggerCounterTriggers();
		/*******************************************************************
		*名称：              SetCloudBufferNum
		*功能：              设置点云缓存区数量
		*入口参数：			 
		num                  点云缓存区数量，默认10
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int SetCloudBufferNum(const int& num);
		/*******************************************************************
		*名称：              ClearCloudBuffer
		*功能：              清空点云缓存区
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int ClearCloudBuffer();
		/*******************************************************************
		*名称：              GetCloudBuffer
		*功能：              获取缓存区点云
		*入口参数：		      
		result               缓存区的点云数据数组
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int GetCloudBuffer(std::vector<VSensorLaserResult>& result);
		/*******************************************************************
		*名称：              Record3DCloud
		*功能：              录制点云
		*入口参数：			 
		filePath             保存点云文件路径，支持格式pcd、ply、txt。(注:最多能录制5000帧点云数据，错误路径默认不保存点云)
		flag				 0:无点云录制  1:以固定距离点云录制  2:以移动速度点云录制。取值范围参见@link #emVSensorLaserRecordCloudMode @endlink的定义。
		para                 以固定距离点云录制模式下为间隔距离，以移动速度点云录制模式下为移动速度
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int Record3DCloud(const std::string& filePath, const int& flag, const float& para);
		/*******************************************************************
		*名称：              GetRecord3DCloud
		*功能：              获取录制点云
		*入口参数：
		cloud                录制点云，x y z
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int GetRecord3DCloud(std::vector<std::array<float, 3>>& cloud);
		/*******************************************************************
		*名称：              Save3DCloud
		*功能：              保存点云
		*入口参数：			 
		filePath             保存点云文件路径，支持格式pcd、ply、txt
		presult              点云数据结果
		flag                 0:无序点云  1:有序点云。取值范围参见@link #emVSensorLaserPointType @endlink的定义。
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int Save3DCloud(const std::string& filePath, VSensorLaserResult* presult, const int& flag);
		/*******************************************************************
		*名称：              SaveGrayMap
		*功能：              保存灰度图
		*入口参数：			 
		filePath             保存灰度图文件路径，支持格式png、jpg、bmp
		presult              点云数据结果
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int SaveGrayMap(const std::string& filePath, VSensorLaserResult* presult);
		/*******************************************************************
		*名称：              CameraOut
		*功能：              获取相机采集
		*入口参数：			 
		imgBuffer            存储采集的灰度图像数据，分辨率为相应相机的输出分辨率
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int CameraOut(unsigned char* imgBuffer);
		/*******************************************************************
		*名称：              RegisterCallbackFuncGetResult
		*功能：              注册获取重建结果回调函数
		*入口参数：
		event                回调函数事件，当相应的事件发生时，所指向的函数会被调用
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int RegisterCallbackFuncGetResult(const std::function<void(VSensorLaserResult*)>& event);
		/*******************************************************************
		*名称：              DeviceUnInit
		*功能：              设备反初始化
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorLaserDefine.h中错误码的定义
		*******************************************************************/
		int DeviceUnInit();
	private:
		class VSensorLaserSDK;
		std::unique_ptr<VSensorLaserSDK> pVSensorLaserSDK;
	};
}
#endif
