GrabBag/Device/GalaxyDevice/_Inc/GalaxyDevice.h
2025-12-20 16:18:12 +08:00

138 lines
5.1 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef CGALAXYDEVICE_H
#define CGALAXYDEVICE_H
#include "IGalaxyDevice.h"
#include <mutex>
#include <string>
#include <atomic>
// Galaxy SDK 头文件
#ifdef _WIN32
// Windows 平台使用 C++ API
#define _WINSOCKAPI_ // 防止winsock.h被包含避免与winsock2.h冲突
#include "GXIAPIBase.h"
#include "IGXFactory.h"
#include "IGXDevice.h"
#include "IGXStream.h"
#include "IGXFeatureControl.h"
#include "IImageData.h"
using namespace GxIAPICPP;
#else
// Linux/ARM 平台使用 C API
#include "GxIAPI.h"
#include "DxImageProc.h"
#endif
/**
* @brief CGalaxyDevice 实现类
* 封装大恒Galaxy SDK实现工业相机采集功能
*/
class CGalaxyDevice : public IGalaxyDevice
{
public:
CGalaxyDevice();
~CGalaxyDevice();
// SDK初始化
int InitSDK() override;
int UninitSDK() override;
int GetSDKVersion(std::string& version) override;
// 设备枚举和连接
int EnumerateDevices(std::vector<GalaxyDeviceInfo>& deviceList, unsigned int timeout = 1000) override;
int OpenDevice(const std::string& serialNumber) override;
int OpenDeviceByIndex(unsigned int index) override;
int CloseDevice() override;
bool IsDeviceOpen() override;
// 设备信息
int GetDeviceInfo(GalaxyDeviceInfo& deviceInfo) override;
int GetWidth(unsigned int& width) override;
int GetHeight(unsigned int& height) override;
// 触发和采集控制
int SetTriggerMode(bool enable) override;
int SendSoftTrigger() override;
int StartAcquisition() override;
int StopAcquisition() override;
bool IsAcquisitioning() override;
// 图像采集
int CaptureImage(GalaxyImageData& image, unsigned int timeout = 5000) override;
int RegisterImageCallback(GalaxyImageCallback callback) override;
int UnregisterImageCallback() override;
// ROI控制
int SetROI(const GalaxyROI& roi) override;
int GetROI(GalaxyROI& roi) override;
// 相机参数
int SetExposureTime(double exposureTime) override;
int GetExposureTime(double& exposureTime) override;
int SetGain(double gain) override;
int GetGain(double& gain) override;
int SetFrameRate(double frameRate) override;
int GetFrameRate(double& frameRate) override;
// 通用特性访问
int SetIntFeature(const std::string& featureName, int64_t value) override;
int GetIntFeature(const std::string& featureName, int64_t& value) override;
int SetFloatFeature(const std::string& featureName, double value) override;
int GetFloatFeature(const std::string& featureName, double& value) override;
int SetEnumFeature(const std::string& featureName, int64_t value) override;
int GetEnumFeature(const std::string& featureName, int64_t& value) override;
int ExecuteCommand(const std::string& featureName) override;
private:
#ifdef _WIN32
// Windows 平台:采集事件处理类
class CCaptureEventHandler : public ICaptureEventHandler
{
public:
CCaptureEventHandler(CGalaxyDevice* pDevice) : m_pDevice(pDevice) {}
void DoOnImageCaptured(CImageDataPointer& objImageDataPointer, void* pUserParam) override;
private:
CGalaxyDevice* m_pDevice;
};
// 处理采集到的图像
void ProcessCapturedImage(CImageDataPointer& objImageDataPointer);
// 内部成员Windows C++ API
CGXDevicePointer m_objDevicePtr; // 设备句柄
CGXStreamPointer m_objStreamPtr; // 流对象
CGXFeatureControlPointer m_objFeatureControlPtr; // 远程属性控制器
CCaptureEventHandler* m_pCaptureEventHandler; // 采集事件处理器
gxdeviceinfo_vector m_vectorDeviceInfo; // 设备信息缓存
#else
// Linux/ARM 平台:使用 C API
GX_DEV_HANDLE m_hDevice; // 设备句柄
void* m_pCaptureEventHandler; // 采集事件处理器(未使用)
GX_DEVICE_BASE_INFO* m_pDeviceInfo; // 设备信息缓存
uint32_t m_nDeviceNum; // 设备数量
// 静态回调函数SDK 回调)
static void GX_STDC OnFrameCallbackFun(GX_FRAME_CALLBACK_PARAM* pFrame);
#endif
GalaxyDeviceInfo m_deviceInfo; // 当前设备信息
bool m_bSDKInitialized; // SDK是否已初始化
bool m_bDeviceOpen; // 设备是否已打开
std::atomic<bool> m_bAcquisitioning; // 是否正在采集
GalaxyImageCallback m_imageCallback; // 图像回调函数
std::mutex m_callbackMutex; // 回调互斥锁
// 用于CaptureImage的同步
std::mutex m_captureMutex; // 采集互斥锁
bool m_bNewImageReady; // 新图像是否就绪
GalaxyImageData m_capturedImage; // 捕获的图像
std::mutex m_deviceMutex; // 设备操作互斥锁
};
#endif // CGALAXYDEVICE_H