使用libusb和Ruby从USB设备(Waterrower S4 Monitor)读取数据

时间:2015-02-15 18:41:25

标签: ruby macos usb osx-yosemite libusb

我买了一个Waterrower,其S4 Performance Monitor背面有一个Micro-USB接口,我觉得能够获取来自S4的数据会很好一些不错的东西。

我确实知道一些Ruby,但我根本不和硬件交谈。我确实在Github上找到libusb Ruby binding by Lars Kanis并玩弄它:

2.1.0 :001 > require "libusb"
 => true 
2.1.0 :002 > usb = LIBUSB::Context.new
 => #<LIBUSB::Context:0x000001011451c0 @ctx=#<FFI::Pointer address=0x000001032788b0>, @on_pollfd_added=nil, @on_pollfd_removed=nil, @hotplug_callbacks={}> 
2.1.0 :003 > usb.devices
 => [#<LIBUSB::Device 20/9 04d8:000a Microchip Technology Inc. CDC RS-232: WR-S4.2 ? (Comm (00,00))>, #<LIBUSB::Device 20/8 054c:0243 Sony Storage Media 2A08080530914 (MassStorage SCSI Bulk-Only)>, #<LIBUSB::Device 20/1 05ac:025a Apple Inc. Apple Internal Keyboard / Trackpad ? (HID (01,01), HID (00,00), HID (01,02))>, #<LIBUSB::Device 20/129 05ac:8007 ? ? ? (Hi-speed Hub with single TT)>, #<LIBUSB::Device 21/128 05ac:8007 ? ? ? (Hub (00,03))>] 
2.1.0 :004 > wr_s4 = usb.devices(:idVendor => 0x04d8, :idProduct => 0x000a).first
 => #<LIBUSB::Device 20/9 04d8:000a Microchip Technology Inc. CDC RS-232: WR-S4.2 ? (Comm (00,00))> 
2.1.0 :005 > wr_s4
 => #<LIBUSB::Device 20/9 04d8:000a Microchip Technology Inc. CDC RS-232: WR-S4.2 ? (Comm (00,00))>

如您所见,我能够连接到正确的设备(名为wr_s4)。

现在,我不知道S4 Monitor将以什么样的格式通过USB发送数据,以及最聪明的读取方式。

任何有关S4性能监视器的帮助或使用Ruby从USB设备获取数据都将非常感激。

非常感谢你的帮助!

2 个答案:

答案 0 :(得分:4)

您是否看过标题为&#34; Water Rower S4 S5 USB Protocol Iss 1.04.doc&#34;?

的文件

Here是链接。

github项目似乎与您想要做的类似。它应该有助于理解usb数据。

答案 1 :(得分:1)

您可以联系制造商并索取USB协议详细信息。如果他们没有告诉你,那么你只需要对其进行逆向工程。

制造商提供适用于Windows的软件,因此您可以做的是使该软件正常工作,然后使用某种USB协议分析仪查看USB数据包。我推荐Beagle USB 12但您可以免费找到一些软件USB协议分析仪,它可能已经足够了。

一旦你对USB有了足够的了解并找出了协议的内容,编写发送和接收所需数据的libusb命令相对容易。