Files
hcanview/include/platform/LinuxPlatform.h
yemai 81bee50cd9 Initial commit: Complete USB2CAN cross-platform framework
Features:
- Cross-platform support (Windows/Linux/macOS)
- CAN and CANFD protocol support
- USB communication (WinUSB/libusb)
- Device management and configuration
- Message transmission and reception
- Filter configuration
- CMake build system
- Comprehensive examples and tests
2025-09-11 17:56:26 +08:00

77 lines
2.3 KiB
C++
Raw Permalink 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.
/**
* @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 操作成功返回true否则返回false
*/
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 操作成功返回true否则返回false
*/
bool findUsbEndpoints(libusb_device_handle* usbHandle, uint8_t& inEndpoint, uint8_t& outEndpoint);
};
} // namespace platform
} // namespace usb2can
#endif // USB2CAN_LINUX_PLATFORM_H