#ifndef _VSENSORLASERDEFINE_H
#define _VSENSORLASERDEFINE_H
//相机分辨率结构体
typedef struct
{
	int	Width;  //相机输出的图像的宽度
	int	Height;	//相机输出的图像的高度
}VSensorLaserImageResolution;
//点云重建结果结构体
typedef struct
{
	float* pointx;				                 //有序点云x坐标的缓冲区地址,大小为相机分辨率宽度
	float* pointy;				                 //有序点云y坐标的缓冲区地址,大小为相机分辨率宽度
	float* pointz;				                 //有序点云x坐标的缓冲区地址,大小为相机分辨率宽度
	bool* mask;				                     //图像掩模的缓冲区地址,大小为相机分辨率宽度
	int* posx;									 //有序点云在灰度图上像素x坐标的缓冲区地址,大小为相机分辨率宽度
	int* posy;				                     //有序点云在灰度图上像素y坐标的缓冲区地址,大小为相机分辨率宽度
	unsigned char* GraySrcMap;					 //原始灰度图的缓冲区地址,大小为相机分辨率宽度*相机分辨率高度
	int nPointNum;				                 //点云数量
	int nFrameNum;                               //采集帧数
	unsigned long uTimeStamp;                    //采集时间戳(单位微秒)
	VSensorLaserImageResolution ImageResolution; //相机输出的分辨率
}VSensorLaserResult;
//相机信息结构体
typedef struct
{
	char CameraName[32];    //相机名称
	char Address[32];       //相机地址
	unsigned int uInstance; //相机索引
}VSensorLaserCameraInfo;
//相机内参结构体
typedef struct
{
	double Para[9]; //相机参数 CMOS畸变参数：K1 K2 K3 P1 P2  CMOS内部参数：fx fy cx cy
}VSensorLaserCameraInternelPara;
//相机后台运行状态
typedef struct
{
	unsigned int CapturedCount;    //采集总数量
	unsigned int PendingCount;     //采集待处理数量
}VSensorLaserCameraRunningStatus;
//相机采集模式枚举
typedef enum
{
	MODE_CONTINUE = 0, //采集预览模式(输出预览图的分辨率随设置改变)
	MODE_SOFT = 1,     //软件触发采集点云模式
	MODE_EXTERNAL = 2, //硬件触发采集点云模式
	MODE_SPSOFT = 3    //采集预览模式(输出预览图为满分辨率)
}emVSensorLaserCaptureMode;
//相机采集输出模式枚举
typedef enum
{
	OUTPUT_MODE_ALL = 0 //全量输出
}emVSensorLaserCaptureOutputMode;
//保存点云类型枚举
typedef enum
{
	POINT_TYPR_DISORDER = 0, //无序点云
	POINT_TYPR_ORDER = 1     //有序点云
}emVSensorLaserPointType;
//重建算法类型枚举
typedef enum
{
	ALGO_NORMAL = 0, //常规算法
	ALGO_ARC = 1	 //抗弧光算法
}emVSensorLaserAlgoMode;
//录制点云模式枚举
typedef enum
{
	RECORD_CLOSE = 0, //无点云录制
	RECORD_DIS = 1,   //以固定距离点云录制
	RECORD_SPEED = 2  //以移动速度点云录制
}emVSensorLaserRecordCloudMode;
//光条筛选模式枚举
typedef enum
{
	SELECT_MODE_NORMAL = 0, //标准
	SELECT_MODE_LIGHT = 1,  //亮度优先(选择亮度最高)
	SELECT_MODE_WIDTH = 2,  //线宽优先(选择线宽最小)
	SELECT_MODE_NEAR = 3,   //距离最近
	SELECT_MODE_FAR = 4     //距离最远
}emVSensorLaserSelectMode;
//外部触发模式枚举
typedef enum
{
	EXT_TRIG_MODE_EXTERNAL = 0, //外触发模式
	EXT_TRIG_MODE_COUNTER = 1   //计数器模式
}emVSensorLaserExternalTriggerMode;
//外部触发种类枚举
typedef enum
{
	EXT_TRIG_TYPE_LEADING_EDGE = 0, //上升沿触发
	EXT_TRIG_TYPE_TRAILING_EDGE = 1 //下降沿触发
}emVSensorLaserExternalTriggerType;
//错误码
#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_SERIAL_NUMBER_ERROR             -104  //暂不支持该型号设备
#define VSENSOR_STATUS_JUMBOFRAME_CONNECT_FAILED       -105  //未打开巨型帧
#define VSENSOR_STATUS_GIGE_CONNECT_FAILED             -106  //非千兆网通信
#define VSENSOR_STATUS_PREVIEW_IMAGE_FAILED			   -108  //预览图采集失败
#define VSENSOR_STATUS_CAPTURE_IMAGE_FAILED			   -109  //采集条纹图失败
#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_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  //运行未知错误
#endif