302 lines
8.4 KiB
C++
302 lines
8.4 KiB
C++
#ifndef IGALAXYDEVICE_H
|
||
#define IGALAXYDEVICE_H
|
||
|
||
#include <iostream>
|
||
#include <string>
|
||
#include <vector>
|
||
#include <functional>
|
||
|
||
// 设备信息结构
|
||
struct GalaxyDeviceInfo
|
||
{
|
||
std::string serialNumber; // 序列号
|
||
std::string modelName; // 型号名称
|
||
std::string displayName; // 显示名称
|
||
std::string ipAddress; // IP地址(如果是网口相机)
|
||
std::string macAddress; // MAC地址(如果是网口相机)
|
||
std::string deviceClass; // 设备类别(USB/GigE等)
|
||
unsigned int width; // 图像宽度
|
||
unsigned int height; // 图像高度
|
||
};
|
||
|
||
// 图像数据结构
|
||
struct GalaxyImageData
|
||
{
|
||
unsigned char* pData; // 图像数据指针
|
||
unsigned int width; // 图像宽度
|
||
unsigned int height; // 图像高度
|
||
unsigned int dataSize; // 数据大小
|
||
int pixelFormat; // 像素格式
|
||
unsigned long long frameID; // 帧ID
|
||
unsigned long long timestamp; // 时间戳
|
||
};
|
||
|
||
// ROI (Region of Interest) 结构
|
||
struct GalaxyROI
|
||
{
|
||
int offsetX; // X偏移
|
||
int offsetY; // Y偏移
|
||
int width; // ROI宽度
|
||
int height; // ROI高度
|
||
};
|
||
|
||
// 图像回调函数类型
|
||
using GalaxyImageCallback = std::function<void(const GalaxyImageData&)>;
|
||
|
||
/**
|
||
* @brief IGalaxyDevice 接口类
|
||
* 封装大恒Galaxy SDK,提供工业相机采集的C++接口
|
||
*/
|
||
class IGalaxyDevice
|
||
{
|
||
public:
|
||
virtual ~IGalaxyDevice() = default;
|
||
|
||
/**
|
||
* @brief 创建设备对象
|
||
* @param ppDevice 设备对象指针
|
||
* @return 0-成功,其他-失败
|
||
*/
|
||
static int CreateObject(IGalaxyDevice** ppDevice);
|
||
|
||
/**
|
||
* @brief 初始化SDK
|
||
* @return 0-成功,其他-失败
|
||
*/
|
||
virtual int InitSDK() = 0;
|
||
|
||
/**
|
||
* @brief 反初始化SDK(程序退出时调用)
|
||
* @return 0-成功,其他-失败
|
||
*/
|
||
virtual int UninitSDK() = 0;
|
||
|
||
/**
|
||
* @brief 获取SDK版本
|
||
* @param version SDK版本字符串
|
||
* @return 0-成功,其他-失败
|
||
*/
|
||
virtual int GetSDKVersion(std::string& version) = 0;
|
||
|
||
/**
|
||
* @brief 枚举网络中的Galaxy相机
|
||
* @param deviceList 返回的设备列表
|
||
* @param timeout 超时时间(毫秒),默认1000ms
|
||
* @return 0-成功,其他-失败
|
||
*/
|
||
virtual int EnumerateDevices(std::vector<GalaxyDeviceInfo>& deviceList, unsigned int timeout = 1000) = 0;
|
||
|
||
/**
|
||
* @brief 通过序列号打开相机
|
||
* @param serialNumber 相机序列号
|
||
* @return 0-成功,其他-失败
|
||
*/
|
||
virtual int OpenDevice(const std::string& serialNumber) = 0;
|
||
|
||
/**
|
||
* @brief 通过索引打开相机(从枚举列表中的索引)
|
||
* @param index 设备索引(从0开始)
|
||
* @return 0-成功,其他-失败
|
||
*/
|
||
virtual int OpenDeviceByIndex(unsigned int index) = 0;
|
||
|
||
/**
|
||
* @brief 关闭相机
|
||
* @return 0-成功,其他-失败
|
||
*/
|
||
virtual int CloseDevice() = 0;
|
||
|
||
/**
|
||
* @brief 检查是否已打开
|
||
* @return true-已打开,false-未打开
|
||
*/
|
||
virtual bool IsDeviceOpen() = 0;
|
||
|
||
/**
|
||
* @brief 获取已打开相机的设备信息
|
||
* @param deviceInfo 设备信息结构
|
||
* @return 0-成功,其他-失败
|
||
*/
|
||
virtual int GetDeviceInfo(GalaxyDeviceInfo& deviceInfo) = 0;
|
||
|
||
/**
|
||
* @brief 设置触发模式
|
||
* @param enable true-启用触发模式,false-连续采集模式
|
||
* @return 0-成功,其他-失败
|
||
*/
|
||
virtual int SetTriggerMode(bool enable) = 0;
|
||
|
||
/**
|
||
* @brief 软触发一次
|
||
* @return 0-成功,其他-失败
|
||
*/
|
||
virtual int SendSoftTrigger() = 0;
|
||
|
||
/**
|
||
* @brief 开始采集
|
||
* @return 0-成功,其他-失败
|
||
*/
|
||
virtual int StartAcquisition() = 0;
|
||
|
||
/**
|
||
* @brief 停止采集
|
||
* @return 0-成功,其他-失败
|
||
*/
|
||
virtual int StopAcquisition() = 0;
|
||
|
||
/**
|
||
* @brief 检查是否正在采集
|
||
* @return true-正在采集,false-未采集
|
||
*/
|
||
virtual bool IsAcquisitioning() = 0;
|
||
|
||
/**
|
||
* @brief 单次采集图像(触发模式)
|
||
* @param image 图像数据结构
|
||
* @param timeout 超时时间(毫秒),默认5000ms
|
||
* @return 0-成功,其他-失败
|
||
* @note 图像数据内存需要调用者释放
|
||
*/
|
||
virtual int CaptureImage(GalaxyImageData& image, unsigned int timeout = 5000) = 0;
|
||
|
||
/**
|
||
* @brief 注册图像回调(用于连续采集模式)
|
||
* @param callback 图像回调函数
|
||
* @return 0-成功,其他-失败
|
||
*/
|
||
virtual int RegisterImageCallback(GalaxyImageCallback callback) = 0;
|
||
|
||
/**
|
||
* @brief 取消注册图像回调
|
||
* @return 0-成功,其他-失败
|
||
*/
|
||
virtual int UnregisterImageCallback() = 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 roi ROI结构
|
||
* @return 0-成功,其他-失败
|
||
*/
|
||
virtual int SetROI(const GalaxyROI& roi) = 0;
|
||
|
||
/**
|
||
* @brief 获取ROI(感兴趣区域)
|
||
* @param roi ROI结构
|
||
* @return 0-成功,其他-失败
|
||
*/
|
||
virtual int GetROI(GalaxyROI& roi) = 0;
|
||
|
||
/**
|
||
* @brief 设置曝光时间
|
||
* @param exposureTime 曝光时间(微秒)
|
||
* @return 0-成功,其他-失败
|
||
*/
|
||
virtual int SetExposureTime(double exposureTime) = 0;
|
||
|
||
/**
|
||
* @brief 获取曝光时间
|
||
* @param exposureTime 曝光时间(微秒)
|
||
* @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 frameRate 帧率(fps)
|
||
* @return 0-成功,其他-失败
|
||
*/
|
||
virtual int SetFrameRate(double frameRate) = 0;
|
||
|
||
/**
|
||
* @brief 获取帧率
|
||
* @param frameRate 帧率(fps)
|
||
* @return 0-成功,其他-失败
|
||
*/
|
||
virtual int GetFrameRate(double& frameRate) = 0;
|
||
|
||
/**
|
||
* @brief 设置整型特性值
|
||
* @param featureName 特性名称
|
||
* @param value 特性值
|
||
* @return 0-成功,其他-失败
|
||
*/
|
||
virtual int SetIntFeature(const std::string& featureName, int64_t value) = 0;
|
||
|
||
/**
|
||
* @brief 获取整型特性值
|
||
* @param featureName 特性名称
|
||
* @param value 特性值
|
||
* @return 0-成功,其他-失败
|
||
*/
|
||
virtual int GetIntFeature(const std::string& featureName, int64_t& value) = 0;
|
||
|
||
/**
|
||
* @brief 设置浮点型特性值
|
||
* @param featureName 特性名称
|
||
* @param value 特性值
|
||
* @return 0-成功,其他-失败
|
||
*/
|
||
virtual int SetFloatFeature(const std::string& featureName, double value) = 0;
|
||
|
||
/**
|
||
* @brief 获取浮点型特性值
|
||
* @param featureName 特性名称
|
||
* @param value 特性值
|
||
* @return 0-成功,其他-失败
|
||
*/
|
||
virtual int GetFloatFeature(const std::string& featureName, double& value) = 0;
|
||
|
||
/**
|
||
* @brief 设置枚举型特性值
|
||
* @param featureName 特性名称
|
||
* @param value 特性值
|
||
* @return 0-成功,其他-失败
|
||
*/
|
||
virtual int SetEnumFeature(const std::string& featureName, int64_t value) = 0;
|
||
|
||
/**
|
||
* @brief 获取枚举型特性值
|
||
* @param featureName 特性名称
|
||
* @param value 特性值
|
||
* @return 0-成功,其他-失败
|
||
*/
|
||
virtual int GetEnumFeature(const std::string& featureName, int64_t& value) = 0;
|
||
|
||
/**
|
||
* @brief 执行命令特性
|
||
* @param featureName 特性名称
|
||
* @return 0-成功,其他-失败
|
||
*/
|
||
virtual int ExecuteCommand(const std::string& featureName) = 0;
|
||
};
|
||
|
||
#endif // IGALAXYDEVICE_H
|