GrabBag/Device/IKapDevice/Inc/IIKapDevice.h

200 lines
5.6 KiB
C
Raw Normal View History

2025-12-10 00:01:32 +08:00
#ifndef IIKAPDEVICE_H
#define IIKAPDEVICE_H
#include <iostream>
#include <functional>
// 前向声明,避免直接暴露 IKapC 的类型给外部
struct ImageData
{
unsigned char* pData; // 图像数据指针
unsigned int width; // 图像宽度
unsigned int height; // 图像高度
unsigned int pixelFormat; // 像素格式
unsigned int imageSize; // 图像数据大小
uint64_t timestamp; // 时间戳
uint64_t frameID; // 帧ID
};
// 设备信息结构
struct IKapDeviceInfo
{
char vendorName[256]; // 厂商名称
char modelName[256]; // 型号名称
char serialNumber[256]; // 序列号
char userDefinedName[256]; // 用户定义名称
char ipAddress[256]; // IP地址网络相机
char macAddress[256]; // MAC地址网络相机
};
// 图像回调函数类型
using ImageCallback = std::function<void(const ImageData& imageData, void* pUser)>;
/**
* @brief IKapDevice
* IKapLibrary C C++
*/
class IIKapDevice
{
public:
virtual ~IIKapDevice() = default;
/**
* @brief
* @param ppDevice
* @return 0--
*/
static int CreateObject(IIKapDevice** ppDevice);
/**
* @brief IKapC
* @return 0--
*/
virtual int InitLibrary() = 0;
/**
* @brief IKapC
* @return 0--
*/
virtual int TerminateLibrary() = 0;
/**
* @brief
* @param nCount
* @return 0--
*/
virtual int EnumerateDevices(unsigned int& nCount) = 0;
/**
* @brief
* @param nIndex 0 nCount-1
* @param deviceInfo
* @return 0--
*/
virtual int GetDeviceInfo(unsigned int nIndex, IKapDeviceInfo& deviceInfo) = 0;
/**
* @brief
* @param nIndex
* @param accessMode 访
* @return 0--
*/
virtual int OpenDevice(unsigned int nIndex, int accessMode = 4) = 0; // 默认独占模式
/**
* @brief
* @return 0--
*/
virtual int CloseDevice() = 0;
/**
* @brief
* @param bConnected
* @return 0--
*/
virtual int IsConnected(bool& bConnected) = 0;
/**
* @brief
* @param imageData
* @param nTimeout 5000ms
* @return 0--
*/
virtual int GrabSingleFrame(ImageData& imageData, unsigned int nTimeout = 5000) = 0;
/**
* @brief
* @param callback
* @param pUser
* @return 0--
*/
virtual int StartGrabbing(ImageCallback callback, void* pUser = nullptr) = 0;
/**
* @brief
* @return 0--
*/
virtual int StopGrabbing() = 0;
/**
* @brief
* @return true-false-
*/
virtual bool IsGrabbing() = 0;
/**
* @brief
* @param exposureTime us
* @return 0--
*/
virtual int SetExposureTime(double exposureTime) = 0;
/**
* @brief
* @param exposureTime us
* @return 0--
*/
virtual int GetExposureTime(double& exposureTime) = 0;
/**
* @brief
* @param gain
* @return 0--
*/
virtual int SetGain(double gain) = 0;
/**
* @brief
* @param gain
* @return 0--
*/
virtual int GetGain(double& gain) = 0;
/**
* @brief
* @param bEnable true-false-
* @return 0--
*/
virtual int SetTriggerMode(bool bEnable) = 0;
/**
* @brief
* @return 0--
*/
virtual int ExecuteSoftwareTrigger() = 0;
/**
* @brief
* @param width
* @return 0--
*/
virtual int GetWidth(unsigned int& width) = 0;
/**
* @brief
* @param height
* @return 0--
*/
virtual int GetHeight(unsigned int& height) = 0;
/**
* @brief ROI
* @param offsetX X偏移
* @param offsetY Y偏移
* @param width
* @param height
* @return 0--
*/
virtual int SetROI(unsigned int offsetX, unsigned int offsetY,
unsigned int width, unsigned int height) = 0;
/**
* @brief
* @param version
* @return 0--
*/
virtual int GetLibraryVersion(unsigned int& version) = 0;
};
#endif // IIKAPDEVICE_H