GrabBag/Device/IKapDevice/_Inc/IKapDevice.h

89 lines
2.7 KiB
C
Raw Normal View History

2025-12-10 00:01:32 +08:00
#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