/** * @file UsbDevice.h * @brief USB设备抽象接口定义 */ #ifndef USB2CAN_USB_DEVICE_H #define USB2CAN_USB_DEVICE_H #include #include #include #include "../platform/Platform.h" namespace usb2can { namespace usb { /** * @brief USB设备信息结构体 */ struct UsbDeviceInfo { uint16_t vendorId; ///< 供应商ID uint16_t productId; ///< 产品ID std::string manufacturer; ///< 制造商 std::string productName; ///< 产品名称 std::string serialNumber; ///< 序列号 std::string devicePath; ///< 设备路径 }; /** * @brief USB设备抽象接口类 */ class UsbDevice { public: virtual ~UsbDevice() = default; /** * @brief 打开USB设备 * @param devicePath 设备路径 * @return 操作成功返回true,否则返回false */ virtual bool open(const std::string& devicePath) = 0; /** * @brief 关闭USB设备 */ virtual void close() = 0; /** * @brief 检查设备是否已打开 * @return 设备已打开返回true,否则返回false */ virtual bool isOpen() const = 0; /** * @brief 写入数据 * @param data 数据缓冲区 * @param size 数据大小 * @param timeout 超时时间(毫秒) * @return 实际写入的字节数,失败返回-1 */ virtual int write(const uint8_t* data, size_t size, int timeout = 1000) = 0; /** * @brief 读取数据 * @param data 数据缓冲区 * @param size 数据大小 * @param timeout 超时时间(毫秒) * @return 实际读取的字节数,失败返回-1 */ virtual int read(uint8_t* data, size_t size, int timeout = 1000) = 0; /** * @brief 获取设备信息 * @param[out] info 设备信息 * @return 操作成功返回true,否则返回false */ virtual bool getDeviceInfo(UsbDeviceInfo& info) = 0; /** * @brief 获取设备路径 * @return 设备路径 */ virtual std::string getDevicePath() const = 0; /** * @brief 创建USB设备实例 * @param platform 平台实例 * @return USB设备实例 */ static UsbDevice* createUsbDevice(platform::Platform* platform); }; /** * @brief USB设备管理器类 */ class UsbDeviceManager { public: /** * @brief 构造函数 * @param platform 平台实例 */ explicit UsbDeviceManager(platform::Platform* platform); /** * @brief 析构函数 */ ~UsbDeviceManager(); /** * @brief 扫描USB设备 * @param vendorId 供应商ID,0表示匹配所有供应商 * @param productId 产品ID,0表示匹配所有产品 * @return USB设备信息列表 */ std::vector scanDevices(uint16_t vendorId = 0, uint16_t productId = 0); /** * @brief 打开USB设备 * @param devicePath 设备路径 * @return USB设备实例,失败返回nullptr */ UsbDevice* openDevice(const std::string& devicePath); /** * @brief 关闭USB设备 * @param device USB设备实例 */ void closeDevice(UsbDevice* device); private: platform::Platform* platform_; ///< 平台实例 std::vector devices_; ///< 已打开的设备列表 }; } // namespace usb } // namespace usb2can #endif // USB2CAN_USB_DEVICE_H