2015-02-15 2 views
2

Я купил Waterrower, у которого есть S4 Performance Monitor с разъемом Micro-USB на задней панели, и я подумал, что было бы неплохо получить данные, которые происходит от S4 и делает с ним что-то хорошее.Чтение данных с USB-устройства (Waterrower S4 Monitor) с libusb и Ruby

Я знаю немного Ruby, но я вовсе не разговариваю с оборудованием. Я действительно находил libusb Ruby binding by Lars Kanis на Github и играл с ним:

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 Performance Monitor или получение данных с USB-устройства с Ruby будет принята с благодарностью.

Большое спасибо за помощь!

+0

эй, вы знаете, как отправить и извлечь файл из usb в ruby? – puneet18

ответ

4

Вы видели документ под названием «Water Rower S4 S5 USB Protocol Iss 1.04.doc»?

Here - ссылка.

Проект github, похоже, похож на то, что вы хотите сделать. Это должно помочь в понимании данных USB.

+0

Удивительный! Большое спасибо! – Javier

+0

Эта ссылка мертва, но вы можете найти тот же документ [здесь] (https://github.com/jamesnesfield/node-waterrower/tree/develop/docs) – Wrecks

+0

эй, знаете ли вы, как отправлять и извлекать файл из usb в рубине? – puneet18

1

Вы можете связаться с производителем и запросить информацию о протоколе USB. Если они не скажут вам, вам просто нужно будет его перестроить.

Производитель предоставляет программное обеспечение для Windows, поэтому вы можете использовать это программное обеспечение, а затем использовать какой-то анализатор протоколов USB для просмотра USB-пакетов. Я рекомендую Beagle USB 12, но вы, вероятно, можете найти какой-то программный анализатор протоколов USB бесплатно, и он может быть достаточно хорошим.

Как только вы достаточно узнали о USB и выяснили, что такое протокол, относительно легко написать команды libusb, которые отправляют и получают нужные данные.