2016-07-02 6 views
1

Немного фона, я работаю с необработанным потоком данных в Linux Mint (32 бит). Это из моей библиотеки ruby-buzz, которая считывает 24-битные комки из файла потока данных.Чтение входного потока USB из рубина.

Я только что переустановил свой ноутбук с Монетным двором Linux, 32-битным, и вдруг я вижу ошибку Errno::EINVAL: Invalid argument @ io_fread.

[email protected] ~ $ sudo chmod 777 /dev/input/by-id/* 
[email protected] ~ $ irb 
2.2.1 :001 > path = '/dev/input/by-id/usb-Logitech_Logitech_Buzz_tm__Controller_V1-event-if00' 
=> "/dev/input/by-id/usb-Logitech_Logitech_Buzz_tm__Controller_V1-event-if00" 
2.2.1 :002 > f = File.open(path) 
=> #<File:/dev/input/by-id/usb-Logitech_Logitech_Buzz_tm__Controller_V1-event-if00> 
2.2.1 :003 > f.read(24) 
Errno::EINVAL: Invalid argument @ io_fread - /dev/input/by-id/usb-Logitech_Logitech_Buzz_tm__Controller_V1-event-if00 
    from (irb):3:in `read' 
    from (irb):3 
    from /home/ajfaraday/.rvm/rubies/ruby-2.2.1/bin/irb:11:in `<main>' 
2.2.1 :004 > f.read(32) 
=> "\xAB>xW\x0E\xDC\x00\x00\x01\x00\xC0\x02\x01\x00\x00\x00\xAB>xW\x0E\xDC\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 

На той же системе, с тем же устройством ввода, я увидел проблему в /dev/input file created, but contains no data stream

Я не знаю, почему я раньше было хорошо использовать tail -f смотреть сырым поток данных с терминала, и почему я ранее мог использовать file.read(24), чтобы захватить этот 24-битный кусок из ruby. В том числе на установку Монетного двора. Но теперь я тоже не могу.

ответ

0

Я не полностью понимаю решение, которое я нашел, но он, вероятно, поможет любому, кто столкнулся с одной и той же проблемой, так и здесь.

Похоже, что это следствие 32-разрядной архитектуры Linux Mint, что он не позволит работать с аргументом file.read с аргументом, который не является мощностью 2 (например, 8, 16, 32). Я не знаю, почему это так.

Однако, переустанавливая с использованием 64-битной версии Mint, это работает так, как я ранее видел в моей установке KDE (что, ретроспективно, было, вероятно, 64-битной архитектурой).