Files
hcanview/include/usb/LinuxUsbDevice.h

86 lines
2.4 KiB
C
Raw Permalink Normal View History

/**
* @file LinuxUsbDevice.h
* @brief Linux平台USB设备实现
*/
#ifndef USB2CAN_LINUX_USB_DEVICE_H
#define USB2CAN_LINUX_USB_DEVICE_H
#include "UsbDevice.h"
#if defined(__linux__) || defined(__APPLE__)
#include <libusb.h>
#endif
namespace usb2can {
namespace usb {
/**
* @brief Linux平台USB设备实现类
*/
class LinuxUsbDevice : public UsbDevice {
public:
LinuxUsbDevice(platform::Platform* platform);
~LinuxUsbDevice() override;
bool open(const std::string& devicePath) override;
void close() override;
bool isOpen() const override;
int write(const uint8_t* data, size_t size, int timeout = 1000) override;
int read(uint8_t* data, size_t size, int timeout = 1000) override;
bool getDeviceInfo(UsbDeviceInfo& info) override;
std::string getDevicePath() const override;
private:
platform::Platform* platform_; ///< 平台实例
void* deviceHandle_; ///< 设备句柄
std::string devicePath_; ///< 设备路径
bool isOpen_; ///< 设备是否已打开
UsbDeviceInfo deviceInfo_; ///< 设备信息
uint8_t inEndpoint_; ///< 输入端点
uint8_t outEndpoint_; ///< 输出端点
#if defined(__linux__) || defined(__APPLE__)
libusb_context* ctx_; ///< libusb上下文
std::vector<libusb_endpoint_descriptor> endpoints_; ///< 端点描述符列表
#endif
/**
* @brief libusb
* @return truefalse
*/
bool initializeLibUsb();
/**
* @brief libusb设备句柄
* @return libusb设备句柄
*/
libusb_device_handle* getLibusbHandle() const;
/**
* @brief USB设备描述符
* @param descriptor
* @return truefalse
*/
bool getDeviceDescriptor(libusb_device_descriptor& descriptor);
/**
* @brief USB字符串描述符
* @param descIndex
* @return
*/
std::string getStringDescriptor(uint8_t descIndex);
/**
* @brief USB设备的端点
* @param inEndpoint
* @param outEndpoint
* @return truefalse
*/
bool findEndpoints(uint8_t& inEndpoint, uint8_t& outEndpoint);
};
} // namespace usb
} // namespace usb2can
#endif // USB2CAN_LINUX_USB_DEVICE_H