GrabBag/SDK/Device/VzNLSDK/Inc/VZNL_Utils.h
2026-03-17 22:27:58 +08:00

576 lines
22 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef __VIZUM_UTILS_HEADER__
#define __VIZUM_UTILS_HEADER__
/*****************************************************************************
* Vizum Detect SDK Utils *
* Copyright (C) 2022 Vizum Technology. *
* *
* This file is part of VizumSDK. *
* * *
* *
* @file VZNL_Utils.h *
* @brief 包含部分图像生成的方式 *
* Details. *
* *
* @author Vizum *
* @email *
* @date 2022/07/03 *
* *
*----------------------------------------------------------------------------*
* Remark : Description *
*----------------------------------------------------------------------------*
* Change History : *
* <Date> | <Version> | <Author> | <Description> *
*----------------------------------------------------------------------------*
* 2022/07/03 | 3.6.17.10 | Vizum | 增加了2D图生成工具 *
*----------------------------------------------------------------------------*
* *
*****************************************************************************/
#include "VZNL_Export.h"
#include "VZNL_Types.h"
typedef struct
{
union {
struct
{
unsigned int bNoFirewallToken : 1; //< 是否有防火墙权限
unsigned int bNetWork100M : 1; //< 设备中含有 100M 网络
unsigned int bSameMACDevice : 1; //< 有相同MAC的设备
unsigned int bVLANError : 1; //< IP不在同网段
unsigned int bIsAdmin : 1; //< 是否管理员权限
unsigned int bOpenJumboFrame : 1; //< 是否开启了巨型帧
unsigned int bIPConflict : 1; //< 是否存在IP地址冲突
};
unsigned int nCheckMask; //< 当为0时表示都符合要求
};
unsigned int nHostNetCardCnt; //本机网卡数量
SVzNetCardInfo* sHostNetCard; //本机网卡列表
unsigned int nSameMACDeviceCnt; //有相同MAC的设备数量
SVzNLEyeCBInfo* sSameMACDevice; //相同MAC的设备IP列表
unsigned int nVLANErrorDeviceCnt; //IP不在同网段的设备数量
SVzNLEyeCBInfo* sVLANErrorDevice; //IP不在同网段的设备IP列表
unsigned int nIPConflictDeviceCnt; //IP地址冲突的设备数量
SVzNLEyeCBInfo* sIPConflictDevice; //IP地址冲突的设备IP列表
} SVzCheckPlatformInfo;
/**
* @brief 检测运行环境
* @param psPlatformInfo 环境信息
* @return 返回VzTrue说明一切正常返回VzFalse表示有信息不匹配的地方
*/
VZNLAPI int VzNL_CheckPlatform(SVzCheckPlatformInfo* psPlatformInfo);
/// @name 静态相机图像生成工具集
/// @{
/**
* @brief 使用固定点云数据生成深度图
* @param eDataType 数据类型
* @param p3DPoint 3D点云数组
* @param nPointCount 点的个数
* @param sDepthMapParam 深度图参数
* @param ppImageData 图像
* @return 返回0表示正常
*/
VZNLAPI int VzNL_CreateDepthMapImage(EVzResultDataType eDataType, void* p3DPoint, unsigned int nPointCount, SVzDepthMapImgCtlPara* sDepthMapParam, SVzNLImageData** ppImageData);
/**
* @brief 使用固定点云生成灰度图
* @param eDataType 数据类型
* @param p3DPoint 3D点云数组
* @param nPointCount 点的个数
* @param fXYScale XY比例
* @param ppImageData 图像
* @return 返回0表示正常
*/
VZNLAPI int VzNL_CreateGrayImage(EVzResultDataType eDataType, void* p3DPoint, unsigned int nPointCount, float fXYScale, SVzNLImageData** ppImageData);
/// @}
/**
* @brief 读取图像
* @param szFileName [in] 要读取的文件全路径
* @param ppImageData [out] 无压缩图像实例
* @return 返回0表明正确
*/
VZNLAPI int VzNL_LoadImageFromFile(const char* szFileName, SVzNLImageData** ppImageData);
/**
* @brief 从tif文件中加载3D点云
* @param lpszFile 文件全路径
* @param nImageWidth 图像宽
* @param nImageHeight 图像高
* @param eDataType 数据类型
* @param p3DPoint 3D点指针
* @return 返回0表示正常
*/
VZNLAPI int VzNL_LoadDepthMapTiffImage(const char* lpszFile, unsigned int* nImageWidth, unsigned int* nImageHeight, SVzNL3DPointF* p3DPoint, unsigned int* nPointCount);
/**
* @brief 将3D点云数据存储为Tif深度图
* @param lpszFile 文件全路径
* @param nImageWidth 图像宽
* @param nImageHeight 图像高
* @param eDataType 数据类型
* @param p3DPoint 3D点指针
* @return 返回0表示正常
*/
VZNLAPI int VzNL_SaveDepthMapTiffImage(const char* lpszFile, unsigned int nImageWidth, unsigned int nImageHeight, EVzResultDataType eDataType, void* p3DPoint);
/// @name 点云后处理工具
/// @{
/**
* @brief 深度图图像回调
* @param pImageData 传出处理后的图像 [输出参数]
* @param pParam 回调传递的数据 [输出参数]
*/
typedef void(*VzNL_OnOutputCloudPointAPData)(const SVzNLImageData* psImageData, const SVz3DPointMapTable* psPointMapTable, void* pParam);
/**
* @brief 创建点云后处理工具Handle
* @return 返回深度图的句柄
*/
VZNLAPI VZNLPOINTCLOUDHANDLE VzNL_CreateCloudPointAPTool();
/**
* @brief 当配置自适应参数时,选择绑定设备Handle
*/
VZNLAPI int VzNL_AttachHandleForCloudPointAP(VZNLPOINTCLOUDHANDLE hCloudPointTool, VZNLHANDLE hDevice);
/**
* @brief 当配置自适应参数时,可以选择绑定检测工具Handle
*/
VZNLAPI int VzNL_AttachDetectToolForCloudPointAP(VZNLPOINTCLOUDHANDLE hCloudPointTool, VZNLDETECTHANDLE hDetectHandle);
/**
* @brief 当配置自适应参数时,绑定设备Handle
*/
VZNLAPI int VzNL_DetachHandleForCloudPointAP(VZNLPOINTCLOUDHANDLE hCloudPointTool);
/**
* @brief 设置3D点云基准激光线(当生成灰度/深度图时需要配置), 配置后内部的图像参数会进行改变,若查看参数信息请调用 VzNL_GetCloudPointAPParam
* @param hCloudPointTool 点云工具句柄
* @param p3DPosition 3D数据
* @param nPointCount 3D点的个数
*/
VZNLAPI int VzNL_SetCloudPointAPBaseLine(VZNLPOINTCLOUDHANDLE hCloudPointTool, SVzNL3DPosition* p3DPosition, unsigned int nPointCount);
/**
* @brief 设置深度图/灰度图配置参数(当生成灰度/深度图时需要配置)
* @param hCloudPointTool 点云工具句柄
* @param psDepthMapParam 深度图配置参数
*/
VZNLAPI int VzNL_SetCloudPointAPParam(VZNLPOINTCLOUDHANDLE hCloudPointTool, SVzDepthMapImgCtlPara* psDepthMapParam);
/**
* @brief 启用基准线深度值计算模式(当生成灰度/深度图时需要配置)
* @param hCloudPointTool 点云工具句柄
* @param bEnable VzTrue 启用 / VzFalse 禁用
* @note 基准线模式:bEnable = VzTrue 当深度计算需要用当前一条线作为高度基准时,配置为此模式,例如激光线照射U型皮带会形成高低不等的一条激光线这个时候
* U型皮带上的各个点均为自身位置的0点位置
*/
VZNLAPI int VzNL_EnableCloudPointAPBaseLineMode(VZNLPOINTCLOUDHANDLE hCloudPointTool, VzBool bEnable);
VZNLAPI VzBool VzNL_IsEnableCloudPointAPBaseLineMode(VZNLPOINTCLOUDHANDLE hCloudPointTool);
/**
* @brief 设置输出图像的最小宽度(当生成灰度 / 深度图时需要配置)
* @paramhCloudPointTool 点云工具句柄
* @paramnMinImageWidth 输出图像的最小宽度
*/
VZNLAPI int VzNL_SetCloudPointAPImageWidth(VZNLPOINTCLOUDHANDLE hCloudPointTool, unsigned int nMinImageWidth);
/**
* @brief 获取点云配置
* @paramhCloudPointTool 点云工具句柄
* @psDepthMapParam [out] 点云配置
*/
VZNLAPI int VzNL_GetCloudPointAPParam(VZNLPOINTCLOUDHANDLE hCloudPointTool, SVzDepthMapImgCtlPara* psDepthMapParam);
/**
* @brief 获取输出图像的最小宽度(当生成灰度 / 深度图时需要配置)
* @paramhCloudPointTool 点云工具句柄
* @pnImageHeight [out] 输出图像高度
*/
VZNLAPI int VzNL_GetCloudPointAPImageHeight(VZNLPOINTCLOUDHANDLE hCloudPointTool, int* pnImageHeight);
/**
* @brief 开始点云处理(目前仅支持 keResultDataType_Position)
* @param hCloudPointTool 点云工具句柄
* @param eAfterProcType 图像后处理类型 kePointAfterProcType_DepthMap(深度图) kePointAfterProcType_GrayPic(灰度图)
* @param eDataType 激光线数据 SVzLaserLineData 的数据类型
* @param eDirect 激光线扫描方向
* @param pDepthMap 深度图的回调
* @param pParam 回调函数的参数
* @return 返回0则为正确返回非0为错误可通过VzNL_GetErrorInfo 获取错误信息
*/
VZNLAPI int VzNL_BeginCloudPointAfterProc(VZNLPOINTCLOUDHANDLE hCloudPointTool, EVzPointAfterProcType eAfterProcType, EVzResultDataType eDataType, EVzObjRunDirect eDirect, VzNL_OnOutputCloudPointAPData pDepthMap, void* pParam);
/**
* @brief 点云处理(目前仅支持 keResultDataType_Position)
* @param hCloudPointTool 点云工具句柄
* @param psLineData 激光线数据
*/
VZNLAPI int VzNL_CloudPointAfterProc(VZNLPOINTCLOUDHANDLE hCloudPointTool, SVzLaserLineData* psLineData);
/**
* @brief 结束点云处理
* @param hCloudPointTool 点云工具句柄
*/
VZNLAPI int VzNL_EndCloudPointAfterProc(VZNLPOINTCLOUDHANDLE hCloudPointTool);
/**
* @brief 销毁点云处理工具
* @param hCloudPointTool 点云工具句柄
*/
VZNLAPI int VzNL_DestroyCloudPointAPTool(VZNLPOINTCLOUDHANDLE hCloudPointTool);
/// @}
/// @name 图像生成工具
/// @{
/**
* @brief 创建图像生成工具
* @param hDevice 设备句柄
*/
VZNLAPI VZNLIMAGEGENERATOR VzNL_CreateImageGenerator(VZNLHANDLE hDevice);
/**
* @brief 开始送入点云数据
* @param hImageGenerator 图像生成工具
* @param eDataType 送入数据的类型,目前仅支持 keResultDataType_PointXYZRGBA 与 keResultDataType_PointGray
* keResultDataType_PointGray 输出图像为 8 bit 灰度图
* keResultDataType_PointGray 输出图像为 24 bit 彩色图
*/
VZNLAPI int VzNL_BeginPushPointToImageGenerator(VZNLIMAGEGENERATOR hImageGenerator, EVzResultDataType eDataType);
/**
* @brief 送入点云数据进行处理
* @param hImageGenerator 图像生成工具
* @param psLineData 激光线数据
*/
VZNLAPI int VzNL_PushPointToImageGenerator(VZNLIMAGEGENERATOR hImageGenerator, SVzLaserLineData* psLineData);
/**
* @brief 结束点云传送
* @param hImageGenerator 图像生成工具
*/
VZNLAPI int VzNL_EndPushPointToImageGenerator(VZNLIMAGEGENERATOR hImageGenerator);
/**
* @brief 通过图像生成工具,生成图像
* @param hImageGenerator 图像生成工具
* @param psLineData 图像数据
*/
VZNLAPI int VzNL_GetImageFromImageGenerator(VZNLIMAGEGENERATOR hImageGenerator, SVzNLImageData** ppImageData);
/**
* @brief 通过图像生成工具,生成图像
* @param hImageGenerator 图像生成工具
* @param lpszFile 文件名 tif
*/
VZNLAPI int VzNL_SaveDepthMapImageFromImageGenerator(VZNLIMAGEGENERATOR hImageGenerator, const char* lpszFile);
/**
* @brief 通过2D位置找3D点
* @param hImageGenerator 图像生成工具
* @param psLineData 3D数据
*/
VZNLAPI int VzNL_Find3DPointFrom2DPosForImageGenerator(VZNLIMAGEGENERATOR hImageGenerator, int nX, int nY, SVzNLPointXYZ* p3DPoint);
/**
* @brief 销毁图像创建工具
* @param hImageGenerator 图像生成工具
*/
VZNLAPI int VzNL_DestroyImageGenerator(VZNLIMAGEGENERATOR hImageGenerator);
/*
* 功能:将输入的点云数据转换为指定分辨率的 2D 伪彩图像输出
* 参数说明:
* EVzResultDataType eDataType: 输入点数据类型,内部根据数据类型解析数据;
* unsigned int nPointCnt: 输入 pPointList 中点数据个数;
* void* pPointList: 输入点数据列表。
* unsigned int nImageWidth: 输入希望输出的图像宽度;
* unsigned int nImageHeight: 输入希望输出的图像高度;
* unsigned int nColorGradient: 输出点数据颜色梯度
* unsigned int nEdgeMargin: 输入图像边缘的留白宽度(像素值,四边留白);
* SVzNLImageData* pImage: 输出的图像数据;
* SVzPColorImageConvertInfo* pConvertInfo: 转换信息,用于从图像回算到点云;
*/
VZNLAPI int VzNL_PointCloudTo2DFixedSizeImage(EVzResultDataType eDataType,
unsigned int nPointCnt,
void* pPointList,
unsigned int nImageWidth,
unsigned int nImageHeight,
unsigned int nColorGradient,
unsigned int nEdgeMargin,
SVzNLImageData* pImage,
SVzPColorImageConvertInfo* pConvertInfo);
/*
* 功能:将输入的点云数据转换为指定像素精度的 2D 伪彩图像输出
* 参数说明:
* EVzResultDataType eDataType: 输入点数据类型,内部根据数据类型解析数据;
* unsigned int nPointCnt: 输入 pPointList 中点数据个数;
* void* pPointList: 输入点数据列表。
* float fWHPixelResolution: 输入图像像素精度代表每个像素对应的实际物理距离例如0.1 表示像素间隔为0.1毫米;
* unsigned int nColorGradient: 输出点数据颜色梯度
* unsigned int nEdgeMargin: 输入图像边缘的留白宽度(像素值,四边留白);
* SVzNLImageData* pImage: 输出的图像数据;
* SVzPColorImageConvertInfo* pConvertInfo: 转换信息,用于从图像回算到点云;
*/
VZNLAPI int VzNL_PointCloudTo2DFixedResolutionImage(EVzResultDataType eDataType,
unsigned int nPointCnt,
void* pPointList,
float fWHPixelResolution,
unsigned int nColorGradient,
unsigned int nEdgeMargin,
SVzNLImageData* pImage,
SVzPColorImageConvertInfo* pConvertInfo);
/*
* 释放输出的图像数据
*/
VZNLAPI int VzNL_PointCloudTo2DImageRelease(SVzNLImageData* pImage);
/*
* 功能基于伪彩图像上的点坐标回算3D点云点坐标(输出点云中距离最近的点坐标)
* 参数说明:
* SVzNLImageData* pImage: 输入由点云生成的伪彩图像;
* EVzResultDataType eDataType: 输入点数据类型,内部根据数据类型解析数据;
* unsigned int nPointCntIn: 输入 pPointList 中点数据个数;
* void* pPointListIn: 输入点数据列表。
* SVzPColorImageConvertInfo* pConvertInfo: 转换信息,生成伪彩图时的信息
* SVzPColorImageTo3DPointMethod eConvertMethod: 回算点输出方法
* unsigned int n2DPointCntIn: 输入伪彩图像上的2D点坐标个数
* SVzNL2DPoint* p2DPointListIn: 输入伪彩图上的2D 点坐标列表
* double dSearchDis: 从点云中搜索目标点的搜索范围
* SVzNL3DPoint* p3DPointList: 输出2D坐标列表回算到3D 点的坐标列表,外部分配好空间
*/
VZNLAPI int VzNL_Get3DPointsFrom2DPseudoColorImagePoints(SVzNLImageData* pImage,
EVzResultDataType eDataType,
unsigned int nPointCntIn,
void* pPointListIn,
SVzPColorImageConvertInfo* pConvertInfo,
SVzPColorImageTo3DPointMethod eConvertMethod,
unsigned int n2DPointCntIn,
SVzNL2DPoint* p2DPointListIn,
double dSearchDis,
SVzNL3DPoint* p3DPointList);
/*
* 功能基于伪彩图像上的ROI区域获取对应区域的点云数据点数据类型与输入一致
* 参数说明:
* SVzNLImageData* pImage: 输入由点云生成的伪彩图像;
* EVzResultDataType eDataType: 输入点数据类型,内部根据数据类型解析数据;
* unsigned int nPointCntIn: 输入 pPointList 中点数据个数;
* void* pPointListIn: 输入点数据列表。
* SVzPColorImageConvertInfo* pConvertInfo: 转换信息,生成伪彩图时的信息
* SVzNL2DRect s2DRect: 输入伪彩图上的目标区域;
* unsigned int* pPointCntOut: 输出目标区域内的3D 点云数据点个数;
* void** ppPointListOut: 输出目标区域内的3D 点云数据列表,点数据类型与输入一致
*/
VZNLAPI int VzNL_Get3DPointListFrom2DPseudoColorImageRect(SVzNLImageData* pImage,
EVzResultDataType eDataType,
unsigned int nPointCntIn,
void* pPointListIn,
SVzPColorImageConvertInfo* pConvertInfo,
SVzNL2DRect s2DRect,
unsigned int* pPointCntOut,
void** ppPointListOut);
/*
* 释放从2D 伪彩图回算得到的3D 点坐标列表,适用于如下函数生成的点列表:
* VzNL_Get3DPointListFrom2DPseudoColorImageRect()
*/
VZNLAPI int VzNL_2DPseudoColorImage3DPointListRelease(unsigned int* pPointCnt, void** ppPointList);
/**
* @brief 创建RGB点云处理工具
* @param hDevice 设备句柄
*/
VZNLAPI VZNLRGBCLOUDPOINTTOOL VzNL_CreateRGBCloudPointTool(VZNLHANDLE hDevice);
/**
* @brief 开始送入点云数据
* @param hRGBCloudPointTool RGB点云处理工具
* @param eDataType 送入数据的类型,目前仅支持 keResultDataType_PointXYZRGBA 与keResultDataType_PointRGBA_D
*/
VZNLAPI int VzNL_BeginPushPointToRGBCloudPointTool(VZNLRGBCLOUDPOINTTOOL hRGBCloudPointTool, EVzResultDataType eDataType);
/**
* @brief 送入点云数据进行处理
* @param hRGBCloudPointTool RGB点云处理工具
* @param psLineData 激光线数据
*/
VZNLAPI int VzNL_PushPointToRGBCloudPointTool(VZNLRGBCLOUDPOINTTOOL hRGBCloudPointTool, SVzLaserLineData* psLineData);
/**
* @brief 通过2D位置找3D点
* @param hRGBCloudPointTool RGB点云工处理工具
* @param s2DPoint 2D数据
* @param p3DPoint 3D数据
*/
VZNLAPI int VzNL_Find3DPointFrom2DPosForRGBCloudPointTool(VZNLRGBCLOUDPOINTTOOL hRGBCloudPointTool, const SVzNL2DPoint s2DPoint, SVzNL3DPoint* p3DPoint);
/**
* @brief 通过3D点找2D位置
* @param hRGBCloudPointTool RGB点云工处理工具
* @param s3DPoint 3D数据
* @param p2DPoint 2D数据
*/
VZNLAPI int VzNL_Find2DPosFrom3DPointForRGBCloudPointTool(VZNLRGBCLOUDPOINTTOOL hRGBCloudPointTool, const SVzNL3DPoint s3DPoint, SVzNL2DPoint* p2DPoint);
/**
* @brief 结束RGB点云处理
* @param hRGBCloudPointTool RGB点云工处理工具
*/
VZNLAPI int VzNL_EndPushPointToRGBCloudPointTool(VZNLRGBCLOUDPOINTTOOL hRGBCloudPointTool);
/**
* @brief 销毁RGB点云工处理工具
* @param hRGBCloudPointTool RGB点云工处理工具
*/
VZNLAPI int VzNL_DestroyRGBCloudPointTool(VZNLRGBCLOUDPOINTTOOL hRGBCloudPointTool);
/**
* @brief 通过双目校正图2D 坐标计算3D 点坐标,根据当前设备内部参数计算
* @param hDevice 输入设备句柄
* @param nPointCnt 输入点个数
* @param p2DPointList 输入双目校正图2D 点坐标列表
* @param p3DPointList 输出计算得到的3D 点列表
*/
VZNLAPI int VzNL_Cal3DPointsFromStereo2DPoints(VZNLHANDLE hDevice, unsigned int nPointCnt, SVzNL2DLRPoint* p2DPointList, SVzNL3DPoint* p3DPointList);
/**
* @brief 输入2D RGB图像数据 + 扫描点云数据(静态RGBD扫描)获取映射后的2D RGB图像数据和同分辨率的点云序列
* @param hDevice 输入设备句柄
* @param pRGBImage 输入与点云匹配的RGB 图像
* @param eDataType 输入点云数据类型,同样也为输出的点云数据类型
* @param nLineCnt 输入激光线数据条数
* @param pLineDataList 输入激光线数据列表
* @param bEnableClip 输入是否进行有效图像裁剪true输出点云实际对应的有效图像区域及映射点云false输出原始图像及映射点云
* @param ppOutImage 输出处理后的图像(参考 bEnableClip 标志决定是否裁剪图像)
* @param pPointCnt 输出点云数据中的点个数
* @param ppMappedPointList 输出映射后与ppOutImage 相同分辨率的点云数据点数据类型为eDataType
*/
VZNLAPI int VzNL_GetMappedRGBImageAndPointCloud(VZNLHANDLE hDevice,
SVzNLImageData* pRGBImage,
EVzResultDataType eDataType,
unsigned int nLineCnt,
SVzLaserLineData* pLineDataList,
bool bEnableClip,
SVzNLImageData** ppOutImage,
unsigned int* pPointCnt,
void** ppMappedPointList);
/**
* @brief 输入左目或右目图像数据 + 扫描点云数据(静态非RGBD扫描)获取映射后的2D 左目或右目图像数据和同分辨率的点云序列
* @param hDevice 输入设备句柄
* @param bIsRightImage 输入当前图像是否为右目图像
* @param pImage 输入与点云匹配的左目或右目图像数据
* @param eDataType 输入点云数据类型,同样也为输出的点云数据类型
* @param nLineCnt 输入激光线数据条数
* @param pLineDataList 输入激光线数据列表
* @param bEnableClip 输入是否进行有效图像裁剪true输出点云实际对应的有效图像区域及映射点云false输出原始图像及映射点云;
* @param ppOutImage 输出处理后的图像(参考 bEnableClip 标志决定是否裁剪图像)
* @param pPointCnt 输出点云数据中的点个数
* @param ppMappedPointList 输出映射后与ppOutImage 相同分辨率的点云数据点数据类型为eDataType
*/
VZNLAPI int VzNL_GetMappedLRImageAndPointCloud(VZNLHANDLE hDevice,
bool bIsRightImage,
SVzNLImageData* pImage,
EVzResultDataType eDataType,
unsigned int nLineCnt,
SVzLaserLineData* pLineDataList,
bool bEnableClip,
SVzNLImageData** ppOutImage,
unsigned int* pPointCnt,
void** ppMappedPointList);
/**
* @brief 释放VzNL_GetMappedRGBImageAndPointCloud()/VzNL_GetMappedLRImageAndPointCloud() 函数返回的图像和3D 点数据
*/
VZNLAPI int VzNL_ReleaseImageAndPointCloudMappedResult(SVzNLImageData** ppImage, void** ppPointList);
/**
* @brief USB 串口继电器设备搜索
* @param pDeviceNum 返回搜索到的设备个数
* @param ppDeviceInfoList 返回搜索到的设备名称列表
*/
VZNLAPI int VzNL_SearchUSBSerialRelay(unsigned int* pDeviceNum, SVzSerialPortInfo** ppDeviceInfoList);
/**
* @brief 获取指定USB 串口继电器设备的配置信息
* @param pDeviceName 输入设备名称(搜索函数返回)
* @param pCfgPara 返回设备配置信息
*/
VZNLAPI int VzNL_GetUSBSerialRelayCfgPara(char* pDeviceName, SVzUSBSerialRelayCfgPara* pCfgPara);
/**
* @brief 查看指定USB 串口继电器设备是否打开
* @param pDeviceName 输入设备名称(搜索函数返回)
*/
VZNLAPI bool VzNL_IsUSBSerialRelayOpen(char* pDeviceName);
/**
* @brief 打开指定端口的USB 串口继电器设备,按配置参数打开指定设备
* @param pDeviceName 输入设备名称(搜索函数返回)
* @param sCfgPara 输入设备配置信息
*/
VZNLAPI int VzNL_OpenUSBSerialRelay(char* pDeviceName, SVzUSBSerialRelayCfgPara sCfgPara);
/**
* @brief 关闭指定端口的USB 串口继电器设备
* @param pDeviceName 输入设备名称(搜索函数返回)
*/
VZNLAPI int VzNL_CloseUSBSerialRelay(char* pDeviceName);
/**
* @brief 获取所有打开的USB 串口继电器设备端口列表
* @param pDeviceName 输入设备名称(搜索函数返回)
* @param ppDeviceInfoList 返回已打开设备的名称列表
*/
VZNLAPI int VzNL_GetOpenedUSBSerialRelayList(unsigned int* pDeviceNum, SVzSerialPortInfo** ppDeviceInfoList);
/**
* @brief 获取指定USB继电器通道当前开关状态
* @param pDeviceName 输入设备名称(搜索函数返回)
* @param nChannelIdx 输入继电器通道索引
* @param pState 返回该通道当前开关状态
*/
VZNLAPI int VzNL_GetUSBSerialRelayChannelOnOffState(char* pDeviceName, unsigned int nChannelIdx, bool* pState);
/**
* @brief 打开/关闭指定继电器通道pState 返回操作后该通道状态
* @param pDeviceName 输入设备名称(搜索函数返回)
* @param bOn 输入需要设置的开关状态
* @param nChannelIdx 输入继电器通道索引
* @param pState 不为null时返回该通道当前开关状态
*/
VZNLAPI int VzNL_SetUSBSerialRelayChannelOnOff(char* pDeviceName, bool bOn, unsigned int nChannelIdx, bool* pState);
/**
* @brief 获取所有继电器通道开关状态unsigned int* pState: 低位开始,每位代表一个通道;
* @param pDeviceName 输入设备名称(搜索函数返回)
* @param pState 返回该通道当前开关状态
*/
VZNLAPI int VzNL_GetUSBSerialRelayAllChannelOnOffState(char* pDeviceName, unsigned int* pState);
/**
* @brief 打开/关闭所有继电器通道pState 返回操作后所有继电器通道状态(低位开始,每位代表一个通道)
* @param pDeviceName 输入设备名称(搜索函数返回)
* @param bOn 输入需要设置的开关状态
* @param pState 不为null时返回所有通道当前开关状态
*/
VZNLAPI int VzNL_SetUSBSerialRelayAllChannelOnOff(char* pDeviceName, bool bOn, unsigned int* pState);
#endif