c++ - 在 Windows/C++ 上控制 USB TMC 设备的最简单方法

标签 c++ windows usb

我正在开发通过 USB 与泰克 TDS2002 示波器交互的 C++/Qt 应用程序。示波器显示为“USB 测试和测量设备 (IVI)”。

目前我使用示波器供应商提供的 TekVISA 库。它可以工作,但它很大、很旧、有故障并且维护不善。因此,我想绕过库并直接连接设备。

到目前为止,我已经找到了这个简单的库:https://github.com/xyphro/WinUsbTmc这正是我正在寻找的,但它使用需要安装一些设备过滤器的 libusb,此外,建议将其作为开发工具而不是客户解决方案。你有这方面的经验吗?

在 Windows/C++/Qt 中与 USB 测试和测量设备交互的最简单方法是什么?

感谢您的建议:)

最佳答案

  1. 您需要一个 USB 驱动程序。我的示波器使用此 VISA 包中包含的驱动程序(可以很容易地提取驱动程序):http://www.keysight.com/main/software.jspx?cc=CZ&lc=eng&nid=-11143.0.00&id=2504667&pageMode=CV我假设所有 USB TMC 设备都可以使用相同的驱动程序,但我无法检查这一点。

  2. 可以通过标准 Windows 功能访问 USB 驱动程序。这个论坛上的人真的很亲密: https://forum.tek.com/viewtopic.php?f=568&t=137573而且这份文件也非常有用:http://www.ivifoundation.org/downloads/Class%20Specifications/Ivi-6%202_USBTMC_2010-03-23.doc

  3. 您不能直接向 OSC 写入命令 - 您发送和接收的数据具有特定的 header ,必须采用正确的格式,否则示波器会忽略该消息。查看这个简单库中的读写实现:https://github.com/xyphro/WinUsbTmc我没有使用这个库,因为它使用了使用某种设备过滤器的 libusb 库,我个人不喜欢这个概念(此外我有真正的工作驱动程序)。

  4. 您阅读的数据也有一个简单的标题。为确保您能很好地适应输入数据的 header 结构,您应该首先刷新输入缓冲区。然后您发出读取请求(使用写入命令 - 请参阅上面的 WinUsbTmc 库),最后您收到数据并将 header 放在其开头。

我希望这会对某些人有所帮助:)

问候

快乐

关于c++ - 在 Windows/C++ 上控制 USB TMC 设备的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36893856/

相关文章:

windows - 我不明白为什么在 Perl 中使用 Parallel::ForkManager 时所有 fork 的子节点不会同时启动

Linux USB CDC 发送意外字符

c++ - 我可以从哪里开始使用可编程硬件?

c++ - 成员函数能否返回对右值对象的可修改左值引用?

c++ - 如何在启用显示隐藏文件和文件夹的情况下使用 C\C++ 隐藏

c++ - 给定一串算术表达式,找出表达式的十进制值。

windows - PE文件如何映射到内存中?

c# - 如何使用 C# 卸载 USB 设备

c++ - 为什么 Microsoft 有 IHTMLDocument、IHTMLDocument2、...、IHTMLDocument8?

c++ - 使循环边界无效