GrabBag/Device/GlLineLaserDevice/_Inc/GlLineLaserDevice.h

156 lines
5.5 KiB
C
Raw Normal View History

#ifndef CGLLINELASERDEVICE_H
#define CGLLINELASERDEVICE_H
#include "IGlLineLaserDevice.h"
#include "phoskey_ss.h"
#include <atomic>
#include <vector>
#include <string>
/**
* @brief CGlLineLaserDevice
*
* gl_linelaser_sdk (phoskey_ss) IVrEyeDevice
* 使 SDK GLX8_2_SetBatchOneTimeDataHandler
*
*
* OpenDevice + SDK回调
* StartDetect GLX8_2_StartMeasureWithCallback
* SDK回调 BatchOneTimeCallback ProcessBatchData
* StopDetect GLX8_2_StopMeasure
* CloseDevice GLX8_2_CommClose
*
* gl_linelaser_sdk int32_t 0.01um
* SVzLaserLineData SVzNL3DPosition mm
*/
class CGlLineLaserDevice : public IGlLineLaserDevice
{
public:
CGlLineLaserDevice();
~CGlLineLaserDevice();
// ============ 实现 IVrEyeDevice 接口 ============
int InitDevice() override;
int SetStatusCallback(VzNL_OnNotifyStatusCBEx fNotify, void *param) override;
int OpenDevice(const char* sIP, bool bRGBD = false, bool bSwing = true, bool bFillLaser = true) override;
int GetVersion(SVzNLVersionInfo& sVersionInfo) override;
int GetDevInfo(SVzNLEyeDeviceInfoEx& sDeviceInfo) override;
int CloseDevice() override;
int StartDetect(VzNL_AutoOutputLaserLineExCB fCallFunc, EVzResultDataType eDataType, void *param) override;
bool IsDetectIng() override;
int StopDetect() override;
int SetDetectROI(SVzNLRect& leftROI, SVzNLRect& rightROI) override;
int GetDetectROI(SVzNLRect& leftROI, SVzNLRect& rightROI) override;
int SetEyeExpose(unsigned int& exposeTime) override;
int GetEyeExpose(unsigned int& exposeTime) override;
int SetEyeGain(unsigned int& gain) override;
int GetEyeGain(unsigned int& gain) override;
int SetFrame(int& frame) override;
int GetFrame(int& frame) override;
bool IsSupport() override;
int SetRGBDExposeThres(float& value) override;
int GetRGBDExposeThres(float& value) override;
int SetFilterHeight(double& dHeight) override;
int GetFilterHeight(double& dHeight) override;
int GetSwingSpeed(float& fSpeed) override;
int SetSwingSpeed(float& fSpeed) override;
int SetSwingAngle(float& fMin, float& fMax) override;
int GetSwingAngle(float& fMin, float& fMax) override;
int SetWorkRange(double& dMin, double& dMax) override;
int GetWorkRange(double& dMin, double& dMax) override;
// ============ 实现 IGlLineLaserDevice 专用接口 ============
int GetProfileDataWidth() override;
double GetXPitch() override;
double GetYPitch() override;
int SetYPitch(double pitch) override;
int SetBatchLines(unsigned int batchLines) override;
unsigned int GetBatchLines() override;
int SwitchProgram(int programNo) override;
int GetModelInfo(char* model, char* serialNumber) override;
int GetMeasureRange(double& xMin, double& xMax, double& zMin, double& zMax) override;
2026-02-11 00:53:51 +08:00
int SetBaseDistance(double distance) override;
private:
// 设备状态
int m_nDeviceId = 0; // 设备ID
bool m_bDeviceOpen = false; // 设备是否打开
std::string m_strDeviceIP; // 设备IP
// 设备信息
GLX8_2_ModelInfo m_modelInfo; // 型号信息
int m_nProfileWidth = 4096; // 轮廓数据宽度
double m_dXPitch = 0.01; // X方向间距 (mm)
double m_dYPitch = 1.0; // Y方向间距 (mm),用户设置
2026-02-11 00:53:51 +08:00
double m_dBaseDistance = 300.0; // 基准距离 (mm)Z偏移校正
// 批处理参数
unsigned int m_nBatchLines = 200; // 批处理行数
// 上层回调相关
VzNL_AutoOutputLaserLineExCB m_pDetectCallback = nullptr;
void* m_pDetectCallbackParam = nullptr;
EVzResultDataType m_eDataType = keResultDataType_Position;
VzNL_OnNotifyStatusCBEx m_pStatusCallback = nullptr;
void* m_pStatusCallbackParam = nullptr;
// 检测状态
std::atomic<bool> m_bDetecting{false};
// 帧计数
unsigned long long m_ullFrameIndex = 0;
// 内部方法
/**
* @brief
*/
int ConfigureBatchMode();
2026-02-06 01:14:27 +08:00
/**
* @brief SDK批处理回调
2026-02-06 01:14:27 +08:00
*/
int RegisterBatchCallback();
2026-02-06 01:14:27 +08:00
/**
* @brief SDK SDK线程调用
* @param info
* @param DataObj //
*/
static void BatchOneTimeCallback(const GLX8_2_STR_CALLBACK_INFO* info, const GLX8_2_Data DataObj);
/**
* @brief
* @param info
* @param DataObj
*/
void ProcessBatchData(const GLX8_2_STR_CALLBACK_INFO* info, const GLX8_2_Data DataObj);
// 静态回调需要通过实例指针访问成员保存this指针供回调使用
static CGlLineLaserDevice* s_pInstance;
};
#endif // CGLLINELASERDEVICE_H