Files
hcanview/include/platform/LinuxPlatform.h

77 lines
2.3 KiB
C
Raw Normal View History

/**
* @file LinuxPlatform.h
* @brief Linux平台实现
*/
#ifndef USB2CAN_LINUX_PLATFORM_H
#define USB2CAN_LINUX_PLATFORM_H
#include "Platform.h"
#if defined(__linux__) || defined(__APPLE__)
#include <libusb.h>
#endif
namespace usb2can {
namespace platform {
/**
* @brief Linux平台实现类
*/
class LinuxPlatform : public Platform {
public:
LinuxPlatform();
~LinuxPlatform() override;
PlatformType getType() const override;
bool initialize() override;
std::vector<std::string> scanUsbDevices(uint16_t vendorId, uint16_t productId) override;
void* openUsbDevice(const std::string& devicePath) override;
bool closeUsbDevice(void* deviceHandle) override;
int writeUsbData(void* deviceHandle, const uint8_t* data, size_t size, int timeout) override;
int readUsbData(void* deviceHandle, uint8_t* data, size_t size, int timeout) override;
bool getDeviceInfo(void* deviceHandle, DeviceInfo& info) override;
private:
/**
* @brief Linux设备句柄结构体
*/
struct LinuxDeviceHandle {
libusb_device_handle* usbHandle; ///< USB设备句柄
std::string devicePath; ///< 设备路径
uint8_t inEndpoint; ///< 输入端点
uint8_t outEndpoint; ///< 输出端点
};
libusb_context* usbContext; ///< USB上下文
/**
* @brief USB设备描述符
* @param usbHandle USB设备句柄
* @param descriptor
* @return truefalse
*/
bool getUsbDeviceDescriptor(libusb_device_handle* usbHandle, libusb_device_descriptor& descriptor);
/**
* @brief USB设备字符串描述符
* @param usbHandle USB设备句柄
* @param descIndex
* @return
*/
std::string getUsbStringDescriptor(libusb_device_handle* usbHandle, uint8_t descIndex);
/**
* @brief USB设备的端点
* @param usbHandle USB设备句柄
* @param inEndpoint
* @param outEndpoint
* @return truefalse
*/
bool findUsbEndpoints(libusb_device_handle* usbHandle, uint8_t& inEndpoint, uint8_t& outEndpoint);
};
} // namespace platform
} // namespace usb2can
#endif // USB2CAN_LINUX_PLATFORM_H