Files
hcanview/include/device/DeviceManager.h

107 lines
2.4 KiB
C
Raw Permalink Normal View History

/**
* @file DeviceManager.h
* @brief
*/
#ifndef USB2CAN_DEVICE_MANAGER_H
#define USB2CAN_DEVICE_MANAGER_H
#include "Usb2CanDevice.h"
#include "../platform/Platform.h"
#include <vector>
#include <memory>
namespace usb2can {
namespace device {
/**
* @brief
*/
class DeviceManager {
public:
/**
* @brief
* @param platform
*/
explicit DeviceManager(platform::Platform* platform);
/**
* @brief
*/
~DeviceManager();
/**
* @brief USB2CAN设备
* @return
*/
int scanDevices();
/**
* @brief
* @return
*/
int getDeviceCount() const;
/**
* @brief
* @param deviceIndex
* @param[out] info
* @return truefalse
*/
bool getDeviceInfo(int deviceIndex, Usb2CanDeviceInfo& info);
/**
* @brief
* @param deviceIndex
* @return nullptr
*/
Usb2CanDevice* openDevice(int deviceIndex);
/**
* @brief
* @param device
*/
void closeDevice(Usb2CanDevice* device);
/**
* @brief
* @return
*/
std::vector<Usb2CanDeviceInfo> getAllDevicesInfo() const;
/**
* @brief
* @param callback
* @return truefalse
*/
bool registerHotplugCallback(void (*callback)(void));
/**
* @brief
* @return truefalse
*/
bool unregisterHotplugCallback();
private:
platform::Platform* platform_; ///< 平台实例
std::vector<Usb2CanDeviceInfo> deviceInfos_; ///< 设备信息列表
std::vector<std::unique_ptr<Usb2CanDevice>> openedDevices_; ///< 已打开的设备列表
void (*hotplugCallback_)(void); ///< 热插拔回调函数
bool hotplugCallbackRegistered_; ///< 热插拔回调是否已注册
/**
* @brief
*/
static void hotplugEventHandler(void* context);
/**
* @brief
*/
void updateDeviceList();
};
} // namespace device
} // namespace usb2can
#endif // USB2CAN_DEVICE_MANAGER_H