#ifndef __VIZUM_DETECTED_GRAINS_HEADER__
#define __VIZUM_DETECTED_GRAINS_HEADER__
#include "VZNL_Export.h"
#include "VZNL_Types.h"
/// @brief
/// 获取自动检测结果
/// [in]未处理的激光线(没有偏移)
/// [in]处理后的激光线
/// [in]检测状态
/// [in]检测结果
/// [in]传入参数
typedef int(*VzNL_GetAutoDetectGrainsResultCB)(SVzDetectGrainsLaserResult* pLaserResult, SVzDetectGrainsLaserResult* pProcLaserResult, EVzGrainLaserStatus eStatus, SVzDetectGrainResult* pResult, void* pParam);
/// @brief
/// 开始激光检测
/// [in]设备句柄
/// @return 返回0为正确,失败返回错误码
VZNLAPI int VzNL_BeginDetectGrains(VZNLHANDLE hDevice);
/// @brief
/// 激光检测
/// [in]设备句柄
/// [in]点的间隔
/// @return 返回0为正确,失败返回错误码
VZNLAPI int VzNL_DetectGrainLaser(VZNLHANDLE hDevice);
/// @brief
/// 获取激光线结果点的个数
/// [in]设备句柄
/// @return 点的个数
VZNLAPI int VzNL_GetGrainLaserResultPointCount(VZNLHANDLE hDevice);
/// @brief
/// 获取激光线2D结果
/// [in]设备句柄
/// [out]2D点,内存空间由用户分配
/// [in/out]传入:用户分配的SVzNL2DPoint的结构个数;传出:用户需要分配多少个SVzNL2DPoint
/// @return 成功返回0,失败返回错误码。
VZNLAPI int VzNL_GetGrainLaser2DResult(VZNLHANDLE hDevice, SVzNL2DPosition* p2DPoint, int* pnCount);
/// @brief
/// 获取激光线3D结果
/// [in]设备句柄
/// [out]3D点,内存空间由用户分配
/// [in/out]传入:用户分配的SVzNL3DPosition的结构个数;传出:用户需要分配多少个SVzNL3DPosition
/// @return 成功返回0,失败返回错误码。
VZNLAPI int VzNL_GetGrainLaser3DResult(VZNLHANDLE hDevice, SVzNL3DPosition* p3DPoint, int* pnCount);
/// @brief
/// 获取结果图像
/// [in]设备句柄
/// [in]图像数据
VZNLAPI int VzNL_GetGrainImageResult(VZNLHANDLE hDevice, SVzNLImageData** ppLeftImageData, SVzNLImageData** ppRightImageData);
/// @brief
/// 设置过滤高度
/// [in]设备句柄
/// [in]过滤高度
/// @return 成功返回0,失败返回错误码。
VZNLAPI int VzNL_ConfigGrainsFilterHeight(VZNLHANDLE hDevice, double dHeight);
/// @brief
/// 设置传送带速度值
/// [in]设备句柄
/// [in]运行方向
/// [in]速度
/// @return 成功返回0,失败返回错误码。
VZNLAPI int VzNL_ConfigGrainRunSpeed(VZNLHANDLE hDevice, EVzObjRunDirect eDirect, double dSpeed);
/// @brief
/// 设置正确的个数
/// [in]设备句柄
/// [in]正确的谷物个数
/// @return 成功返回0,失败返回错误码。
VZNLAPI int VzNL_ConfigGrainValidCount(VZNLHANDLE hDevice, unsigned int nValidCount);
/// @brief
/// 设置两边空余的线的个数
/// [in]设备句柄
/// [in]排除的线的个数
/// @return 成功返回0,失败返回错误码。
VZNLAPI int VzNL_ConfigGrainExcludeLineCount(VZNLHANDLE hDevice, unsigned int nLineCount);
/// @brief
/// 开始自动检测谷物
/// [in]设备
/// [in]谷物回调
/// [in]回调参数
/// @return 成功返回0,失败返回错误码。
VZNLAPI int VzNL_StartAutoDetectGrains(VZNLHANDLE hDevice, EVzFlipType eFlipType, VzNL_GetAutoDetectGrainsResultCB pResultCB, void* pParam);
/// @brief
/// 停止自动检测
/// [in]设备句柄
/// @return 成功返回0,失败返回错误码。
VZNLAPI int VzNL_StopAutoDetectGrains(VZNLHANDLE hDevice);
/// @brief
/// 结束激光检测
/// [in]设备句柄
/// @return 成功返回0,失败返回错误码。
VZNLAPI void VzNL_EndDetectGrains(VZNLHANDLE hDevice);
#endif //__VIZUM_DETECTED_GRAINS_HEADER__