【USB】USB CDC 与 VCP

USB CDC

USB CDC (Communications Device Class) 是 USB 标准定义的设备类规范(device class specification),Class Code 为 02h,用于实现通信设备的功能(如调制解调器、串口设备等)。

CDC 包含多个子类(subclass):
在这里插入图片描述
在这里插入图片描述

VCP

VCP (virtual COM port) 是串行端口的软件表示形式,它不连接真实的串行端口,而是通过软件来扩展为真实的串行端口,所以并不是一个专有术语,只是一个泛称

例如 FDTI 公司通过 VCP 驱动,把 USB 设备模拟成全功能的标准 COM 端口,这样的端口被称为 VCP,这样的话, USB 设备会被系统识别为串口,在 Windows 设备管理器中显示 COM 端口。

Driver

厂商根据芯片会提供 CDC 驱动和 VCP 驱动

  • CDC 驱动:只支持数据传输
  • VCP 驱动:支持全功能串口、硬件流控、参数配置等功能、支持高波特率下持续稳定传输,就像标准的 COM 端口一样。

Reference

[1]: Class definitions for Communication Devices 1.2
[2]: VCP Drivers

在Ubuntu中使用QT调用DLL文件中的函数需要使用Qt的插件框架。Qt提供了一个名为QPluginLoader的类,可以动态加载共享库并获取其导出的符号。下面是一个简单的示例代码: ```cpp #include <QApplication> #include <QPluginLoader> #include "plugininterface.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); // 加载插件 QPluginLoader pluginLoader("/path/to/plugin.so"); if (!pluginLoader.load()) { qDebug() << "Failed to load plugin:" << pluginLoader.errorString(); return -1; } // 获取插件接口 PluginInterface* plugin = qobject_cast<PluginInterface*>(pluginLoader.instance()); if (!plugin) { qDebug() << "Failed to get plugin interface"; return -1; } // 调用插件的函数 plugin->doSomething(); return a.exec(); } ``` 其中,`PluginInterface`是一个纯虚基类,定义了插件的接口: ```cpp class PluginInterface { public: virtual ~PluginInterface() {} virtual void doSomething() = 0; }; ``` 在插件中,需要实现这个接口,并导出一个名为`createPlugin`的函数,用于创建插件的实例: ```cpp #include "plugininterface.h" class MyPlugin : public PluginInterface { public: virtual void doSomething() override { // do something } }; extern "C" PluginInterface* createPlugin() { return new MyPlugin(); } ``` 最后,使用以下命令编译插件并链接到QT程序中: ``` g++ -shared -fPIC -o plugin.so plugin.cpp -I/path/to/qt/include -L/path/to/qt/lib -lQt5Core ``` 其中,`/path/to/qt`是QT的安装路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值