【问题标题】:Reading USB input stream from ruby.从 ruby​​ 读取 USB 输入流。
【发布时间】:2016-11-05 00:36:28
【问题描述】:

只是一点背景知识,我正在使用 Linux Mint(32 位)中的原始数据流。它来自我的库ruby-buzz,它从数据流文件中读取 24 位块。

我刚刚用 32 位 Linux Mint 重新安装了我的笔记本电脑,突然我看到了错误 Errno::EINVAL: Invalid argument @ io_fread

ajfaraday@squishy ~ $ sudo chmod 777 /dev/input/by-id/*
ajfaraday@squishy ~ $ 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 位块红宝石。包括安装 Mint。但现在我也做不到。

【问题讨论】:

    标签: ruby hid data-stream


    【解决方案1】:

    我不完全理解我找到的解决方案,但它可能会帮助遇到同样问题的任何人,所以就这样吧。

    这似乎是 Linux Mint 的 32 位架构的结果,它不允许 file.read 方法使用不是 2 的幂的参数(例如 8、16、32)。我不知道这是为什么。

    但是,使用 64 位版本的 Mint 重新安装,这与我之前在我的 KDE 安装中看到的一样(回想起来,可能是 64 位架构)。

    【讨论】:

      猜你喜欢
      • 2011-04-13
      • 2012-09-17
      • 2011-02-12
      • 2013-06-03
      相关资源
      最近更新 更多