#ifndef _VSENSORDEFINE_H
#define _VSENSORDEFINE_H
//相机分辨率结构体
typedef struct
{
	int	Width;  //相机输出的图像的宽度
	int	Height;	//相机输出的图像的高度
}VSensorImageResolution;
//点云重建结果结构体
typedef struct
{
	float* pointx;				               //有序点云x坐标的缓冲区地址,面模式下大小为相机分辨率宽度*相机分辨率高度,线模式下大小为相机分辨率高度
	float* pointy;				               //有序点云y坐标的缓冲区地址,面模式下大小为相机分辨率宽度*相机分辨率高度,线模式下大小为相机分辨率高度
	float* pointz;				               //有序点云x坐标的缓冲区地址,面模式下大小为相机分辨率宽度*相机分辨率高度,线模式下大小为相机分辨率高度
	unsigned char* pointr;		               //有序点云r的缓冲区地址,面模式下大小为相机分辨率宽度*相机分辨率高度,线模式下大小为相机分辨率高度
	unsigned char* pointg;		               //有序点云g的缓冲区地址,面模式下大小为相机分辨率宽度*相机分辨率高度,线模式下大小为相机分辨率高度
	unsigned char* pointb;		               //有序点云b的缓冲区地址,面模式下大小为相机分辨率宽度*相机分辨率高度,线模式下大小为相机分辨率高度
	bool* mask;				                   //图像掩模的缓冲区地址,面模式下大小为相机分辨率宽度*相机分辨率高度,线模式下大小为相机分辨率高度
	unsigned short* DepthMap;                  //深度图的缓冲区地址,大小为相机分辨率宽度*相机分辨率高度
	unsigned char* GraySrcMap;	               //原始灰度图的缓冲区地址,大小为相机分辨率宽度*相机分辨率高度*2
	unsigned char* GrayCorMap;	               //矫正灰度图的缓冲区地址,大小为相机分辨率宽度*相机分辨率高度*2
	unsigned char* RGBMap;		               //原始彩色图的缓冲区地址,大小为彩色相机分辨率宽度*彩色相机分辨率高度*3
	int nPointNum;				               //点云数量
	int nFrameNum;                             //采集帧数
	VSensorImageResolution ImageResolution;    //相机输出的分辨率
	VSensorImageResolution ImageResolutionRgb; //彩色相机输出的分辨率
	unsigned long uTimeStamp;                  //采集时间戳(单位微秒)
	int* posx;								   //有序点云在灰度左图上像素x坐标的缓冲区地址,大小为相机分辨率高度
	int* posy;				                   //有序点云在灰度左图上像素y坐标的缓冲区地址,大小为相机分辨率高度
	int iRestructionMode;                      //0:面模式 1:线模式
}VSensorResult;
//相机信息结构体
typedef struct
{
	char CameraName[32];    //相机名称
	char Address[32];       //相机地址
	unsigned int uInstance; //相机索引
}VSensorCameraInfo;
//相机内参结构体
typedef struct
{
	double LPara[9]; //左相机参数 CMOS畸变参数：K1 K2 K3 P1 P2  CMOS内部参数：fx fy cx cy
	double RPara[9]; //右相机参数 CMOS畸变参数：K1 K2 K3 P1 P2  CMOS内部参数：fx fy cx cy
}VSensorCameraInternelPara;
//光机信息结构体
typedef struct
{
	int Edition;                //光机固件版本号
	unsigned char IntensityThd; //光机光强阈值
	unsigned char Intensity;	//光机光强值
}VSensorLaserInfo;
//相机后台运行状态
typedef struct
{
	unsigned int CapturedCount;    //采集总数量
	unsigned int PendingCount;     //采集待处理数量
}VSensorCameraRunningStatus;
//相机类型枚举
typedef enum
{
	TYPE_GRAY = 0,		//灰度相机
	TYPE_RGB = 1,		//彩色相机
	TYPE_GRAYVIEW = 2   //灰度相机(预览)
}emVSensorCameraType;
//相机采集模式枚举
typedef enum
{
	MODE_VIEW = 0,	   //预览模式
	MODE_CAPTURE = 1,  //采集点云模式
	MODE_EXTERNAL = 2  //硬件触发采集点云模式(仅支持线扫模式)
}emVSensorCaptureMode;
//相机采集输出模式枚举
typedef enum
{
	OUTPUT_MODE_ALL = 0,	         //全量输出
	OUTPUT_MODE_POINT = 1,           //输出点云
	OUTPUT_MODE_POINT_AND_DEPTH = 2, //输出点云和深度图
	OUTPUT_MODE_POINT_AND_GRAY = 3,  //输出点云和灰度图
	OUTPUT_MODE_POINT_AND_RGB = 4    //输出点云和彩色图
}emVSensorCaptureOutputMode;
//保存灰度图类型枚举
typedef enum
{
	GRAY_TYPR_UNCORRECT = 0, //原始图
	GRAY_TYPR_CORRECT = 1    //矫正图
}emVSensorGrayType;
//保存点云类型枚举
typedef enum
{
	POINT_TYPR_DISORDER = 0, //无序点云
	POINT_TYPR_ORDER = 1     //有序点云
}emVSensorPointType;
//补光灯状态枚举
typedef enum
{
	DARK = 0,        //暗
	HALF_BRIGHT = 1, //半亮
	FULL_BRIGHT = 2  //全亮
}emVSensorLight;
//自动HDR模式枚举
typedef enum
{
	MODE_BRIGHT = 0, //亮场
	MODE_DARK = 1,   //暗场
	MODE_MIX = 2     //混合场
}emVSensorHDRMode;
//用户设置模式枚举
typedef enum
{
	MODE_NOVICE = 0,   //新手
	MODE_EXPERT = 1    //专家
}emVSensorUserSettingMode;
//相机重建模式枚举
typedef enum
{
	MODE_AREA = 0,	 //面模式
	MODE_LINE = 1    //线模式
}emVSensorRestructionMode;
//重建算法类型枚举
typedef enum
{
	ALGO_NORMAL = 0, //常规算法
	ALGO_ARC = 1	 //抗弧光算法
}emVSensorAlgoMode;
//扫描时间间隔枚举
typedef enum
{
	INTERVAL_500 = 0,  //500ms
	INTERVAL_1000 = 1, //1000ms
	INTERVAL_1500 = 2, //1500ms
	INTERVAL_2000 = 3, //2000ms
	INTERVAL_2500 = 4, //2500ms
	INTERVAL_3000 = 5  //3000ms
}emVSensorScanTimeInterval;
//录制点云模式枚举
typedef enum
{
	RECORD_CLOSE = 0, //无点云录制
	RECORD_DIS = 1,   //以固定距离点云录制
	RECORD_SPEED = 2  //以移动速度点云录制
}emVSensorRecordCloudMode;
//外部触发模式枚举
typedef enum
{
	EXT_TRIG_MODE_EXTERNAL = 0, //外触发模式
	EXT_TRIG_MODE_COUNTER = 1   //计数器模式
}emVSensorExternalTriggerMode;
//外部触发种类枚举
typedef enum
{
	EXT_TRIG_TYPE_LEADING_EDGE = 0, //上升沿触发
	EXT_TRIG_TYPE_TRAILING_EDGE = 1 //下降沿触发
}emVSensorExternalTriggerType;
//错误码
#define CAMERA_STATUS_SUCCESS                           0    //操作成功
#define CAMERA_STATUS_FAILED                           -1    //操作失败
#define CAMERA_STATUS_INTERNAL_ERROR                   -2    //内部错误
#define CAMERA_STATUS_UNKNOW                           -3    //未知错误
#define CAMERA_STATUS_NOT_SUPPORTED                    -4    //不支持该功能
#define CAMERA_STATUS_NOT_INITIALIZED                  -5    //初始化未完成
#define CAMERA_STATUS_PARAMETER_INVALID                -6    //参数无效
#define CAMERA_STATUS_PARAMETER_OUT_OF_BOUND           -7    //参数越界
#define CAMERA_STATUS_UNENABLED                        -8    //未使能
#define CAMERA_STATUS_USER_CANCEL                      -9    //用户手动取消了，比如roi面板点击取消，返回
#define CAMERA_STATUS_PATH_NOT_FOUND                   -10   //注册表中没有找到对应的路径
#define CAMERA_STATUS_SIZE_DISMATCH                    -11   //获得图像数据长度和定义的尺寸不匹配
#define CAMERA_STATUS_TIME_OUT                         -12   //超时错误
#define CAMERA_STATUS_IO_ERROR                         -13   //硬件IO错误
#define CAMERA_STATUS_COMM_ERROR                       -14   //通讯错误
#define CAMERA_STATUS_BUS_ERROR                        -15   //总线错误
#define CAMERA_STATUS_NO_DEVICE_FOUND                  -16   //没有发现设备
#define CAMERA_STATUS_NO_LOGIC_DEVICE_FOUND            -17   //未找到逻辑设备
#define CAMERA_STATUS_DEVICE_IS_OPENED                 -18   //设备已经打开
#define CAMERA_STATUS_DEVICE_IS_CLOSED                 -19   //设备已经关闭
#define CAMERA_STATUS_DEVICE_VEDIO_CLOSED              -20   //没有打开设备视频，调用录像相关的函数时，如果相机视频没有打开，则会返回该错误
#define CAMERA_STATUS_NO_MEMORY                        -21   //没有足够系统内存
#define CAMERA_STATUS_FILE_CREATE_FAILED               -22   //创建文件失败
#define CAMERA_STATUS_FILE_INVALID                     -23   //文件格式无效
#define CAMERA_STATUS_WRITE_PROTECTED                  -24   //写保护，不可写
#define CAMERA_STATUS_GRAB_FAILED                      -25   //数据采集失败
#define CAMERA_STATUS_LOST_DATA                        -26   //数据丢失，不完整
#define CAMERA_STATUS_EOF_ERROR                        -27   //未接收到帧结束符
#define CAMERA_STATUS_BUSY                             -28   //正忙(上一次操作还在进行中)，此次操作不能进行
#define CAMERA_STATUS_WAIT                             -29   //需要等待(进行操作的条件不成立)，可以再次尝试
#define CAMERA_STATUS_IN_PROCESS                       -30   //正在进行，已经被操作过
#define CAMERA_STATUS_IIC_ERROR                        -31   //IIC传输错误
#define CAMERA_STATUS_SPI_ERROR                        -32   //SPI传输错误
#define CAMERA_STATUS_USB_CONTROL_ERROR                -33   //USB控制传输错误
#define CAMERA_STATUS_USB_BULK_ERROR                   -34   //USB BULK传输错误
#define CAMERA_STATUS_SOCKET_INIT_ERROR                -35   //网络传输套件初始化失败
#define CAMERA_STATUS_GIGE_FILTER_INIT_ERROR           -36   //网络相机内核过滤驱动初始化失败，请检查是否正确安装了驱动，或者重新安装
#define CAMERA_STATUS_NET_SEND_ERROR                   -37   //网络数据发送错误
#define CAMERA_STATUS_DEVICE_LOST                      -38   //与网络相机失去连接，心跳检测超时
#define CAMERA_STATUS_DATA_RECV_LESS                   -39   //接收到的字节数比请求的少
#define CAMERA_STATUS_FUNCTION_LOAD_FAILED             -40   //从文件中加载程序失败
#define CAMERA_STATUS_CRITICAL_FILE_LOST               -41   //程序运行所必须的文件丢失
#define CAMERA_STATUS_SENSOR_ID_DISMATCH               -42   //固件和程序不匹配，原因是下载了错误的固件
#define CAMERA_STATUS_OUT_OF_RANGE                     -43   //参数超出有效范围
#define CAMERA_STATUS_REGISTRY_ERROR                   -44   //安装程序注册错误。请重新安装程序，或者运行安装目录Setup/Installer.exe
#define CAMERA_STATUS_ACCESS_DENY                      -45   //禁止访问。指定相机已经被其他程序占用时，再申请访问该相机，会返回该状态。(一个相机不能被多个程序同时访问)
#define CAMERA_STATUS_CAMERA_NEED_RESET                -46   //表示相机需要复位后才能正常使用，此时请让相机断电重启，或者重启操作系统后，便可正常使用
#define CAMERA_STATUS_ISP_MOUDLE_NOT_INITIALIZED       -47   //ISP模块未初始化
#define CAMERA_STATUS_ISP_DATA_CRC_ERROR               -48   //数据校验错误
#define CAMERA_STATUS_MV_TEST_FAILED                   -49   //数据测试失败
#define CAMERA_STATUS_INTERNAL_ERR1                    -50   //内部错误1
#define CAMERA_STATUS_U3V_NO_CONTROL_EP			       -51   //U3V控制端点未找到
#define CAMERA_STATUS_U3V_CONTROL_ERROR			       -52   //U3V控制通讯错误
#define CAMERA_STATUS_INVALID_FRIENDLY_NAME		       -53   //无效的设备名，名字里不能包含以下字符(\/:*?"<>|")
#define CAMERA_STATUS_FORMAT_ERROR				       -54   //格式错误
#define CAMERA_STATUS_PCIE_OPEN_ERROR			       -55   //PCIE设备打开失败
#define CAMERA_STATUS_PCIE_COMM_ERROR			       -56   //PCIE设备通讯失败
#define CAMERA_STATUS_PCIE_DDR_ERROR			       -57   //PCIE DDR错误
#define CAMERA_STATUS_IP_ERROR					       -58   //IP错误
#define CAMERA_AIA_PACKET_RESEND                       256   //该帧需要重传
#define CAMERA_AIA_NOT_IMPLEMENTED                     32769 //设备不支持的命令
#define CAMERA_AIA_INVALID_PARAMETER                   32770 //命令参数非法
#define CAMERA_AIA_INVALID_ADDRESS                     32771 //不可访问的地址
#define CAMERA_AIA_WRITE_PROTECT                       32772 //访问的对象不可写
#define CAMERA_AIA_BAD_ALIGNMENT                       32773 //访问的地址没有按照要求对齐
#define CAMERA_AIA_ACCESS_DENIED                       32774 //没有访问权限
#define CAMERA_AIA_BUSY                                32775 //命令正在处理中
#define CAMERA_AIA_DEPRECATED                          32776 //0x8008-0x0800B  0x800F该指令已经废弃
#define CAMERA_AIA_PACKET_UNAVAILABLE                  32780 //包无效
#define CAMERA_AIA_DATA_OVERRUN                        32781 //数据溢出，通常是收到的数据比需要的多
#define CAMERA_AIA_INVALID_HEADER                      32782 //数据包头部中某些区域与协议不匹配
#define CAMERA_AIA_PACKET_NOT_YET_AVAILABLE            32784 //图像分包数据还未准备好，多用于触发模式，应用程序访问超时
#define CAMERA_AIA_PACKET_AND_PREV_REMOVED_FROM_MEMORY 32785 //需要访问的分包已经不存在。多用于重传时数据已经不在缓冲区中
#define CAMERA_AIA_PACKET_REMOVED_FROM_MEMORY          32786 //CAMERA_AIA_PACKET_AND_PREV_REMOVED_FROM_MEMORY
#define CAMERA_AIA_NO_REF_TIME                         2067  //没有参考时钟源。多用于时间同步的命令执行时
#define CAMERA_AIA_PACKET_TEMPORARILY_UNAVAILABLE      2068  //由于信道带宽问题，当前分包暂时不可用，需稍后进行访问
#define CAMERA_AIA_OVERFLOW                            2069  //设备端数据溢出，通常是队列已满
#define CAMERA_AIA_ACTION_LATE                         2070  //命令执行已经超过有效的指定时间
#define CAMERA_AIA_ERROR                               36863 //错误
#define VSENSOR_STATUS_NO_DEVICE_FOUND				   -100  //未连接设备
#define VSENSOR_STATUS_SEND_INSTRUTION_FAILED		   -101  //串口发送指令失败
#define VSENSOR_STATUS_RECEIVE_INSTRUTION_FAILED	   -102  //串口接收指令失败
#define VSENSOR_STATUS_PARA_RECEIVE_FAILED			   -103  //读取标定文件失败
#define VSENSOR_STATUS_SERIAL_NUMBER_ERROR             -104  //暂不支持该型号设备
#define VSENSOR_STATUS_JUMBOFRAME_CONNECT_FAILED       -105  //未打开巨型帧
#define VSENSOR_STATUS_GIGE_CONNECT_FAILED             -106  //非千兆网通信
#define VSENSOR_STATUS_USB3_CONNECT_FAILED             -107  //未连接USB3.0接口
#define VSENSOR_STATUS_PREVIEW_IMAGE_FAILED			   -108  //预览图采集失败
#define VSENSOR_STATUS_CAPTURE_IMAGE_FAILED			   -109  //采集条纹图失败
#define VSENSOR_STATUS_CONTINUOUS_MODE_FAILED		   -110  //非连续采集模式
#define VSENSOR_STATUS_CONTINUOUSCAPTURE_TIMEOUT	   -111  //连续采集获取点云超时
#define VSENSOR_STATUS_FILE_SAVE_FAILED				   -112  //文件保存出错
#define VSENSOR_STATUS_FILE_FORMAT_FAILED			   -113  //保存文件格式有误
#define VSENSOR_STATUS_PARA_OUTOF_RANGE				   -114  //参数不在范围内
#define VSENSOR_STATUS_CAPTURING_FAILED				   -115  //相机正在采集
#define VSENSOR_STATUS_CAPTUREMODE_FAILED	           -116  //相机采集模式有误
#define VSENSOR_STATUS_FUNCTION_NOTSUPPERT			   -117  //该设备不支持该功能
#define VSENSOR_STATUS_DOWNSAMPLING_FAILED			   -118  //降采样打开失败，请先关闭ROI模式
#define VSENSOR_STATUS_ROI_FAILED					   -119  //ROI打开失败，请先关闭降采样模式
#define VSENSOR_STATUS_NET_INIT_ERROR   		       -120  //网络通信创建失败
#define VSENSOR_STATUS_NET_SEND_ERROR   		       -121  //网络通信发送失败
#define VSENSOR_STATUS_NET_REV_ERROR   		           -122  //网络通信接收失败
#define VSENSOR_STATUS_SENSORTEMP_OVERTHRESHOLD        -123  //传感器温度超过阈值
#define VSENSOR_STATUS_FILEPATH_READ_FAILED            -124  //文件路径读取失败
#define VSENSOR_STATUS_FILECOMMENT_READ_FAILED         -125  //文件内容读取失败
#define VSENSOR_STATUS_COM_INIT_ERROR   		       -126  //串口通信创建失败
#define VSENSOR_STATUS_COM_SEND_ERROR   		       -127  //串口通信发送失败
#define VSENSOR_STATUS_COM_REV_ERROR   		           -128  //串口通信接收失败
#define VSENSOR_STATUS_CAMERA_MEMORY_ERR               -129  //相机存储空间错误
#define VSENSOR_STATUS_CAPTURE_DATA_OVERRUN            -130  //数据溢出，通常是场景复杂导致
#define VSENSOR_STATUS_EXCEPTION_HANDING               -140  //运行异常捕获
#define VSENSOR_STATUS_UNKNOWN_EXCEPTION               -141  //运行未知错误
#define MODULE_STATUS_VOLTAGE_ERROR 			       -200	 //供电电压异常
#define MODULE_STATUS_NO_PD_ERROR                      -201	 //无PD信号
#define MODULE_STATUS_PD_ERROR 					       -202	 //PD信号异常
#define MODULE_STATUS_OVERHEATING_ERROR 			   -203	 //模组过热
#define MODULE_STATUS_REGISTER12_ERROR 				   -204	 //12寄存器异常
#define MODULE_STATUS_REGISTER13_ERROR 				   -205	 //13寄存器异常
#define MODULE_STATUS_REGISTER33_ERROR 				   -206	 //33寄存器异常
#define MODULE_STATUS_TRIGGER_ERROR 				   -207	 //触发信号幅值异常
#define MODULE_STATUS_NO_TRIGGER_ERROR 				   -208	 //无硬件触发信号
#define MODULE_STATUS_UART_ERROR 					   -209	 //UART返回值异常
#define MODULE_STATUS_LASER_DAMPING_ERROR 			   -210	 //激光器衰减异常
#define MODULE_STATUS_MEMS_ERROR 					   -211	 //MEMS频率异常
#define MODULE_STATUS_I2C_ERROR                        -212  //I2C通信错误
#endif