89 lines
2.7 KiB
C++
89 lines
2.7 KiB
C++
#ifndef CIKAPDEVICE_H
|
|
#define CIKAPDEVICE_H
|
|
|
|
#include "IIKapDevice.h"
|
|
#include "IKapC.h"
|
|
#include "IKapCDef.h"
|
|
#include <mutex>
|
|
#include <thread>
|
|
#include <atomic>
|
|
#include <vector>
|
|
|
|
/**
|
|
* @brief IKapDevice 实现类
|
|
* 封装 IKapLibrary C 接口,实现相机操作功能
|
|
*/
|
|
class CIKapDevice : public IIKapDevice
|
|
{
|
|
public:
|
|
CIKapDevice();
|
|
~CIKapDevice();
|
|
|
|
// 初始化/释放库
|
|
int InitLibrary() override;
|
|
int TerminateLibrary() override;
|
|
|
|
// 枚举设备
|
|
int EnumerateDevices(unsigned int& nCount) override;
|
|
int GetDeviceInfo(unsigned int nIndex, IKapDeviceInfo& deviceInfo) override;
|
|
|
|
// 打开/关闭设备
|
|
int OpenDevice(unsigned int nIndex, int accessMode = 4) override;
|
|
int CloseDevice() override;
|
|
int IsConnected(bool& bConnected) override;
|
|
|
|
// 采集图像
|
|
int GrabSingleFrame(ImageData& imageData, unsigned int nTimeout = 5000) override;
|
|
int StartGrabbing(ImageCallback callback, void* pUser = nullptr) override;
|
|
int StopGrabbing() override;
|
|
bool IsGrabbing() override;
|
|
|
|
// 设置相机参数
|
|
int SetExposureTime(double exposureTime) override;
|
|
int GetExposureTime(double& exposureTime) override;
|
|
int SetGain(double gain) override;
|
|
int GetGain(double& gain) override;
|
|
int SetTriggerMode(bool bEnable) override;
|
|
int ExecuteSoftwareTrigger() override;
|
|
|
|
// 获取图像信息
|
|
int GetWidth(unsigned int& width) override;
|
|
int GetHeight(unsigned int& height) override;
|
|
int SetROI(unsigned int offsetX, unsigned int offsetY,
|
|
unsigned int width, unsigned int height) override;
|
|
|
|
// 获取版本信息
|
|
int GetLibraryVersion(unsigned int& version) override;
|
|
|
|
private:
|
|
// 内部辅助函数
|
|
int CreateStreamAndBuffer();
|
|
int ReleaseStreamAndBuffer();
|
|
void GrabbingThread(); // 采集线程函数
|
|
int CopyImageData(ITKBUFFER hBuffer, ImageData& imageData);
|
|
|
|
// IKapC 句柄
|
|
ITKDEVICE m_hDevice; // 设备句柄
|
|
ITKSTREAM m_hStream; // 数据流句柄
|
|
|
|
// 采集相关
|
|
std::atomic<bool> m_bIsGrabbing; // 是否正在采集
|
|
std::atomic<bool> m_bLibInitialized; // 库是否已初始化
|
|
std::thread m_grabbingThread; // 采集线程
|
|
ImageCallback m_imageCallback; // 图像回调函数
|
|
void* m_pUserData; // 用户数据
|
|
|
|
// Buffer 管理
|
|
const unsigned int m_nBufferCount = 3; // Buffer 数量
|
|
std::vector<ITKBUFFER> m_vecBuffers; // Buffer 列表
|
|
|
|
// 线程安全
|
|
std::mutex m_mutex;
|
|
|
|
// 设备信息
|
|
unsigned int m_nDeviceIndex; // 当前打开的设备索引
|
|
bool m_bDeviceOpened; // 设备是否已打开
|
|
};
|
|
|
|
#endif // CIKAPDEVICE_H
|