Python,evdev,usb条形码阅读器:如何解码输入数据

时间:2017-04-07 17:57:20

标签: python usb barcode hid evdev

我有Datalogic Gryphon GFS4400二维条码扫描仪。我已经加入了Raspberry pi,它可以用作USB HID设备。我可以读取条形码,输出转到默认TTY。

我想创建一个在读取条形码时处理输出的服务。我正在使用python和evdev。

有人能指出正确的方向如何将输出转换为正确的字符吗?

Python脚本如下所示:

.padding-left-10 {
  padding-left: 15px;
  padding-right: 0px;
}

.padding-right-10 {
  padding-left: 0px;
  padding-right: 15px;
}

.padding-0 {
  padding: 0;
}


<div class="container-fluid">
    <div class="row">
      <div class="col-md-12">
        <div class="row">
          <div class="col-md-4 text-center padding-0">
            <div class="col-md-4 text-center  padding-left-10 "><div class="well">x</div></div>
            <div class="col-md-4 text-center padding-0"><div class="well">x</div></div>
            <div class="col-md-4 text-center padding-0"><div class="well">x</div></div>
          </div>
          <div class="col-md-4 text-center padding-0">
            <div class="col-md-4 text-center padding-0"><div class="well">x</div></div>
            <div class="col-md-4 text-center padding-0"><div class="well">x</div></div>
            <div class="col-md-4 text-center padding-0"><div class="well">x</div></div>
          </div>
          <div class="col-md-4 text-center padding-0">
            <div class="col-md-4 text-center padding-0"><div class="well">x</div></div>
            <div class="col-md-4 text-center padding-0"><div class="well">x</div></div>
            <div class="col-md-4 text-center padding-right-10"><div class="well">x</div></div>
          </div>
        </div>
      </div>
    </div>
</div>

当我运行脚本并读取一个条形码from evdev import InputDevice, categorize, ecodes device = InputDevice("/dev/input/by-id/usb-Datalogic_ADC__Inc._Handheld_Barcode_Scanner_S_N_G17A58010-event-kbd") # my keyboard for event in device.read_loop(): if event.type == ecodes.EV_KEY: print(categorize(event)) 时,我得到以下输出:

487800017702297980000411000000000000702407088651000000

我不明白如何将KEY_xxx转换为正确的字符。如果我只过滤掉事件,我仍然不明白什么是KEY_KPn等.Evetest给出了这个:

key event at 1491586389.048072, 69 (KEY_NUMLOCK), down
key event at 1491586389.049084, 69 (KEY_NUMLOCK), up
key event at 1491586389.050085, 56 (KEY_LEFTALT), down
key event at 1491586389.051081, 82 (KEY_KP0), down
key event at 1491586389.052082, 82 (KEY_KP0), up
key event at 1491586389.052082, 76 (KEY_KP5), down
key event at 1491586389.053084, 76 (KEY_KP5), up
key event at 1491586389.053084, 80 (KEY_KP2), down
key event at 1491586389.054079, 80 (KEY_KP2), up
key event at 1491586389.055084, 56 (KEY_LEFTALT), up
key event at 1491586389.056080, 56 (KEY_LEFTALT), down
key event at 1491586389.057088, 82 (KEY_KP0), down
key event at 1491586389.058079, 82 (KEY_KP0), up
key event at 1491586389.058079, 76 (KEY_KP5), down
key event at 1491586389.059087, 76 (KEY_KP5), up
key event at 1491586389.059087, 77 (KEY_KP6), down
key event at 1491586389.060041, 77 (KEY_KP6), up
key event at 1491586389.061046, 56 (KEY_LEFTALT), up
key event at 1491586389.062036, 56 (KEY_LEFTALT), down
key event at 1491586389.063100, 82 (KEY_KP0), down
key event at 1491586389.098114, 56 (KEY_LEFTALT), up
key event at 1491586389.099104, 56 (KEY_LEFTALT), down
key event at 1491586389.100126, 82 (KEY_KP0), down
key event at 1491586389.101125, 82 (KEY_KP0), up
key event at 1491586389.101125, 76 (KEY_KP5), down
key event at 1491586389.102114, 76 (KEY_KP5), up
key event at 1491586389.103118, 76 (KEY_KP5), down
key event at 1491586389.104115, 76 (KEY_KP5), up
key event at 1491586389.105114, 56 (KEY_LEFTALT), up
key event at 1491586389.106111, 56 (KEY_LEFTALT), down
key event at 1491586389.107127, 82 (KEY_KP0), down
key event at 1491586389.108134, 82 (KEY_KP0), up
key event at 1491586389.108134, 76 (KEY_KP5), down
key event at 1491586389.109121, 76 (KEY_KP5), up
key event at 1491586389.128128, 76 (KEY_KP5), up
key event at 1491586389.128128, 82 (KEY_KP0), down
key event at 1491586389.129121, 82 (KEY_KP0), up
key event at 1491586389.130107, 56 (KEY_LEFTALT), up
key event at 1491586389.131113, 56 (KEY_LEFTALT), down
key event at 1491586389.132127, 82 (KEY_KP0), down
key event at 1491586389.133126, 82 (KEY_KP0), up
key event at 1491586389.133126, 76 (KEY_KP5), down
key event at 1491586389.134126, 76 (KEY_KP5), up
key event at 1491586389.134126, 71 (KEY_KP7), down
key event at 1491586389.135125, 71 (KEY_KP7), up
key event at 1491586389.136104, 56 (KEY_LEFTALT), up
key event at 1491586389.137125, 56 (KEY_LEFTALT), down
key event at 1491586389.138119, 82 (KEY_KP0), down
key event at 1491586389.139117, 82 (KEY_KP0), up
key event at 1491586389.139117, 76 (KEY_KP5), down
key event at 1491586389.175126, 82 (KEY_KP0), down
key event at 1491586389.176117, 82 (KEY_KP0), up
key event at 1491586389.176117, 75 (KEY_KP4), down
key event at 1491586389.177134, 75 (KEY_KP4), up
key event at 1491586389.177134, 72 (KEY_KP8), down
key event at 1491586389.178129, 72 (KEY_KP8), up
key event at 1491586389.179136, 56 (KEY_LEFTALT), up
key event at 1491586389.180126, 56 (KEY_LEFTALT), down
key event at 1491586389.181122, 82 (KEY_KP0), down
key event at 1491586389.182130, 82 (KEY_KP0), up
key event at 1491586389.182130, 76 (KEY_KP5), down
key event at 1491586389.183130, 76 (KEY_KP5), up
key event at 1491586389.183130, 80 (KEY_KP2), down
key event at 1491586389.184116, 80 (KEY_KP2), up
key event at 1491586389.185122, 56 (KEY_LEFTALT), up
key event at 1491586389.186116, 56 (KEY_LEFTALT), down
key event at 1491586389.187134, 82 (KEY_KP0), down
key event at 1491586389.188125, 82 (KEY_KP0), up
key event at 1491586389.188125, 75 (KEY_KP4), down
key event at 1491586389.189137, 75 (KEY_KP4), up
key event at 1491586389.189137, 73 (KEY_KP9), down
key event at 1491586389.190129, 73 (KEY_KP9), up
key event at 1491586389.191129, 56 (KEY_LEFTALT), up
key event at 1491586389.192116, 56 (KEY_LEFTALT), down
key event at 1491586389.193122, 82 (KEY_KP0), down
key event at 1491586389.194118, 82 (KEY_KP0), up
key event at 1491586389.194118, 75 (KEY_KP4), down
key event at 1491586389.195127, 75 (KEY_KP4), up
key event at 1491586389.195127, 73 (KEY_KP9), down
key event at 1491586389.248120, 82 (KEY_KP0), up
key event at 1491586389.248120, 75 (KEY_KP4), down
key event at 1491586389.249143, 75 (KEY_KP4), up
key event at 1491586389.249143, 72 (KEY_KP8), down
key event at 1491586389.250109, 72 (KEY_KP8), up
key event at 1491586389.251147, 56 (KEY_LEFTALT), up
key event at 1491586389.252130, 56 (KEY_LEFTALT), down
key event at 1491586389.253137, 82 (KEY_KP0), down
key event at 1491586389.254141, 82 (KEY_KP0), up
key event at 1491586389.254141, 75 (KEY_KP4), down
key event at 1491586389.255155, 75 (KEY_KP4), up
key event at 1491586389.255155, 72 (KEY_KP8), down
key event at 1491586389.256129, 72 (KEY_KP8), up
key event at 1491586389.257119, 56 (KEY_LEFTALT), up
key event at 1491586389.258122, 56 (KEY_LEFTALT), down
key event at 1491586389.259125, 82 (KEY_KP0), down
key event at 1491586389.260129, 82 (KEY_KP0), up
key event at 1491586389.260129, 75 (KEY_KP4), down
key event at 1491586389.261136, 75 (KEY_KP4), up
key event at 1491586389.261136, 72 (KEY_KP8), down
key event at 1491586389.262124, 72 (KEY_KP8), up
key event at 1491586389.263140, 56 (KEY_LEFTALT), up
key event at 1491586389.264135, 56 (KEY_LEFTALT), down
key event at 1491586389.265133, 82 (KEY_KP0), down
key event at 1491586389.266125, 82 (KEY_KP0), up
key event at 1491586389.266125, 75 (KEY_KP4), down
key event at 1491586389.267131, 75 (KEY_KP4), up
key event at 1491586389.267131, 72 (KEY_KP8), down
key event at 1491586389.303143, 76 (KEY_KP5), down
key event at 1491586389.304127, 76 (KEY_KP5), up
key event at 1491586389.305146, 76 (KEY_KP5), down
key event at 1491586389.306139, 76 (KEY_KP5), up
key event at 1491586389.307145, 56 (KEY_LEFTALT), up
key event at 1491586389.308130, 56 (KEY_LEFTALT), down
key event at 1491586389.309137, 82 (KEY_KP0), down
key event at 1491586389.310127, 82 (KEY_KP0), up
key event at 1491586389.310127, 75 (KEY_KP4), down
key event at 1491586389.311131, 75 (KEY_KP4), up
key event at 1491586389.311131, 72 (KEY_KP8), down
key event at 1491586389.312144, 72 (KEY_KP8), up
key event at 1491586389.313135, 56 (KEY_LEFTALT), up
key event at 1491586389.349137, 72 (KEY_KP8), up
key event at 1491586389.350136, 56 (KEY_LEFTALT), up
key event at 1491586389.351123, 56 (KEY_LEFTALT), down
key event at 1491586389.352150, 82 (KEY_KP0), down
key event at 1491586389.370200, 82 (KEY_KP0), down
key event at 1491586389.371148, 82 (KEY_KP0), up
key event at 1491586389.371148, 75 (KEY_KP4), down
key event at 1491586389.372156, 75 (KEY_KP4), up
key event at 1491586389.372156, 72 (KEY_KP8), down
key event at 1491586389.373147, 72 (KEY_KP8), up
key event at 1491586389.374121, 56 (KEY_LEFTALT), up
key event at 1491586389.375140, 56 (KEY_LEFTALT), down
key event at 1491586389.376138, 82 (KEY_KP0), down
key event at 1491586389.377147, 82 (KEY_KP0), up
key event at 1491586389.377147, 75 (KEY_KP4), down
key event at 1491586389.378058, 75 (KEY_KP4), up
key event at 1491586389.378058, 72 (KEY_KP8), down
key event at 1491586389.379141, 72 (KEY_KP8), up
key event at 1491586389.380119, 56 (KEY_LEFTALT), up
key event at 1491586389.381159, 28 (KEY_ENTER), down
key event at 1491586389.382118, 28 (KEY_ENTER), up
key event at 1491586389.384121, 69 (KEY_NUMLOCK), down
key event at 1491586389.385115, 69 (KEY_NUMLOCK), up

任何帮助表示赞赏!谢谢。

2 个答案:

答案 0 :(得分:3)

为了获得无人驾驶,USB条形码阅读器模拟HID设备(实际上是键盘)。这有一些简洁的功能:

  • 开箱即用,
  • 适用于任何应用
  • 适用于任何操作系统。

读者的默认行为只是模拟击键。他们读取代码,解码,将其转换为文本,然后将文本转换为击键。您的计算机唯一看到的是USB键盘扫描码,您的操作系统会将击键转换回文本。这有一个主要缺点:它依赖于键盘语言映射设置,因此读者必须知道要使用的键映射(在HID中没有通用的方式来发送文本而不是键)。

为了解决这个问题,一些条形码扫描器可以(ab)使用Windows输入子系统的功能,用户可以直接输入ASCII代码。启用此功能后,阅读器会在按住左Alt键的同时模拟键入十进制ASCII代码。这样,就不依赖于当前的键盘映射(但这会对Windows输入层产生另一种依赖)。

在这里,这就是发生的事情。首先,条形码在NumLock键上按下,以检索Num Lock的当前状态(它将在Num Lock LED状态下接收切换)以确保启用它。然后它会发布一系列Alt按+数字按下/释放+ Alt版本。如果您对其进行解码,则为:052056055050等。524的十进制ASCII代码, 568557502等。

如果更改阅读器的配置,您可以禁用此功能以使用给定的键盘映射返回常用输入键。条形码的配置通常通过扫描手册中的特殊条形码来完成。如果您没有条形码手册,应该可以在网上找到。大多数情况下,配置代码在给定品牌中是可互操作的。

答案 1 :(得分:1)

这是一个字符设备意味着它是面向字节的,因此每个事件都提供1个字节(unicode UTF-8)的信息

从条形码扫描器生成的每个事件中获取一个unicode字母(1个字节),您可以使用

ev1 = ""
ev1 = event.unicode

然后将ev1, ev2,...附加到面向块的格式。使用数组缓冲区附加单个事件字节

对于字符(字节)或面向块的

,请参阅http://en.wikipedia.org/wiki/Device_file

您还可以检查alpha unicode event.unicode.isalpha()

http://www.stackoverflow.com/questions/14111381/how-to-make-pygame-print-input-from-user

相关问题