- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有 Datalogic Gryphon GFS4400 二维条码扫描器。我已经放入 Raspberry pi,它可以用作 USB HID 设备。我可以读取条形码并且输出为默认 TTY。
我想创建一个服务来处理读取条形码时的输出。我正在使用 python 和 evdev。
有人能给我指明正确的方向,如何将输出转换为正确的字符吗?
Python 脚本如下所示:
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 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
我不明白如何将 KEY_xxx 转换为正确的字符。如果我只过滤向下事件,我仍然不明白 KEY_KPn 等是什么。Evetest 给出了这个:
$ evtest /dev/input/event0
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x5f9 product 0x2216 version 0x110
Input device name: "Datalogic ADC, Inc. Handheld Barcode Scanner"
Supported events:
Event type 0 (EV_SYN)
Event type 1 (EV_KEY)
Event code 1 (KEY_ESC)
Event code 2 (KEY_1)
Event code 3 (KEY_2)
Event code 4 (KEY_3)
Event code 5 (KEY_4)
Event code 6 (KEY_5)
Event code 7 (KEY_6)
Event code 8 (KEY_7)
Event code 9 (KEY_8)
Event code 10 (KEY_9)
Event code 11 (KEY_0)
Event code 12 (KEY_MINUS)
Event code 13 (KEY_EQUAL)
Event code 14 (KEY_BACKSPACE)
Event code 15 (KEY_TAB)
Event code 16 (KEY_Q)
Event code 17 (KEY_W)
Event code 18 (KEY_E)
Event code 19 (KEY_R)
Event code 20 (KEY_T)
Event code 21 (KEY_Y)
Event code 22 (KEY_U)
Event code 23 (KEY_I)
Event code 24 (KEY_O)
Event code 25 (KEY_P)
Event code 26 (KEY_LEFTBRACE)
Event code 27 (KEY_RIGHTBRACE)
Event code 28 (KEY_ENTER)
Event code 29 (KEY_LEFTCTRL)
Event code 30 (KEY_A)
Event code 31 (KEY_S)
Event code 32 (KEY_D)
Event code 33 (KEY_F)
Event code 34 (KEY_G)
Event code 35 (KEY_H)
Event code 36 (KEY_J)
Event code 37 (KEY_K)
Event code 38 (KEY_L)
Event code 39 (KEY_SEMICOLON)
Event code 40 (KEY_APOSTROPHE)
Event code 41 (KEY_GRAVE)
Event code 42 (KEY_LEFTSHIFT)
Event code 43 (KEY_BACKSLASH)
Event code 44 (KEY_Z)
Event code 45 (KEY_X)
Event code 46 (KEY_C)
Event code 47 (KEY_V)
Event code 48 (KEY_B)
Event code 49 (KEY_N)
Event code 50 (KEY_M)
Event code 51 (KEY_COMMA)
Event code 52 (KEY_DOT)
Event code 53 (KEY_SLASH)
Event code 54 (KEY_RIGHTSHIFT)
Event code 55 (KEY_KPASTERISK)
Event code 56 (KEY_LEFTALT)
Event code 57 (KEY_SPACE)
Event code 58 (KEY_CAPSLOCK)
Event code 59 (KEY_F1)
Event code 60 (KEY_F2)
Event code 61 (KEY_F3)
Event code 62 (KEY_F4)
Event code 63 (KEY_F5)
Event code 64 (KEY_F6)
Event code 65 (KEY_F7)
Event code 66 (KEY_F8)
Event code 67 (KEY_F9)
Event code 68 (KEY_F10)
Event code 69 (KEY_NUMLOCK)
Event code 70 (KEY_SCROLLLOCK)
Event code 71 (KEY_KP7)
Event code 72 (KEY_KP8)
Event code 73 (KEY_KP9)
Event code 74 (KEY_KPMINUS)
Event code 75 (KEY_KP4)
Event code 76 (KEY_KP5)
Event code 77 (KEY_KP6)
Event code 78 (KEY_KPPLUS)
Event code 79 (KEY_KP1)
Event code 80 (KEY_KP2)
Event code 81 (KEY_KP3)
Event code 82 (KEY_KP0)
Event code 83 (KEY_KPDOT)
Event code 85 (KEY_ZENKAKUHANKAKU)
Event code 86 (KEY_102ND)
Event code 87 (KEY_F11)
Event code 88 (KEY_F12)
Event code 89 (KEY_RO)
Event code 90 (KEY_KATAKANA)
Event code 91 (KEY_HIRAGANA)
Event code 92 (KEY_HENKAN)
Event code 93 (KEY_KATAKANAHIRAGANA)
Event code 94 (KEY_MUHENKAN)
Event code 95 (KEY_KPJPCOMMA)
Event code 96 (KEY_KPENTER)
Event code 97 (KEY_RIGHTCTRL)
Event code 98 (KEY_KPSLASH)
Event code 99 (KEY_SYSRQ)
Event code 100 (KEY_RIGHTALT)
Event code 102 (KEY_HOME)
Event code 103 (KEY_UP)
Event code 104 (KEY_PAGEUP)
Event code 105 (KEY_LEFT)
Event code 106 (KEY_RIGHT)
Event code 107 (KEY_END)
Event code 108 (KEY_DOWN)
Event code 109 (KEY_PAGEDOWN)
Event code 110 (KEY_INSERT)
Event code 111 (KEY_DELETE)
Event code 113 (KEY_MUTE)
Event code 114 (KEY_VOLUMEDOWN)
Event code 115 (KEY_VOLUMEUP)
Event code 116 (KEY_POWER)
Event code 117 (KEY_KPEQUAL)
Event code 119 (KEY_PAUSE)
Event code 121 (KEY_KPCOMMA)
Event code 122 (KEY_HANGUEL)
Event code 123 (KEY_HANJA)
Event code 124 (KEY_YEN)
Event code 125 (KEY_LEFTMETA)
Event code 126 (KEY_RIGHTMETA)
Event code 127 (KEY_COMPOSE)
Event code 128 (KEY_STOP)
Event code 129 (KEY_AGAIN)
Event code 130 (KEY_PROPS)
Event code 131 (KEY_UNDO)
Event code 132 (KEY_FRONT)
Event code 133 (KEY_COPY)
Event code 134 (KEY_OPEN)
Event code 135 (KEY_PASTE)
Event code 136 (KEY_FIND)
Event code 137 (KEY_CUT)
Event code 138 (KEY_HELP)
Event code 140 (KEY_CALC)
Event code 142 (KEY_SLEEP)
Event code 150 (KEY_WWW)
Event code 152 (KEY_SCREENLOCK)
Event code 158 (KEY_BACK)
Event code 159 (KEY_FORWARD)
Event code 161 (KEY_EJECTCD)
Event code 163 (KEY_NEXTSONG)
Event code 164 (KEY_PLAYPAUSE)
Event code 165 (KEY_PREVIOUSSONG)
Event code 166 (KEY_STOPCD)
Event code 173 (KEY_REFRESH)
Event code 176 (KEY_EDIT)
Event code 177 (KEY_SCROLLUP)
Event code 178 (KEY_SCROLLDOWN)
Event code 179 (KEY_KPLEFTPAREN)
Event code 180 (KEY_KPRIGHTPAREN)
Event code 183 (KEY_F13)
Event code 184 (KEY_F14)
Event code 185 (KEY_F15)
Event code 186 (KEY_F16)
Event code 187 (KEY_F17)
Event code 188 (KEY_F18)
Event code 189 (KEY_F19)
Event code 190 (KEY_F20)
Event code 191 (KEY_F21)
Event code 192 (KEY_F22)
Event code 193 (KEY_F23)
Event code 194 (KEY_F24)
Event code 240 (KEY_UNKNOWN)
Event type 4 (EV_MSC)
Event code 4 (MSC_SCAN)
Event type 17 (EV_LED)
Event code 0 (LED_NUML)
Event code 1 (LED_CAPSL)
Event code 2 (LED_SCROLLL)
Event code 3 (LED_COMPOSE)
Event code 4 (LED_KANA)
Event type 20 (EV_REP)
Properties:
Testing ... (interrupt to exit)
感谢任何帮助!谢谢。
最佳答案
为了实现无驱动,USB 条形码阅读器模拟 HID 设备(实际上是键盘)。这有一些简洁的功能:
读者的默认行为只是模拟击键。他们阅读代码、对其进行解码、将其转换为文本,然后将文本转换为击键。您的计算机唯一看到的是 USB 键盘扫描代码,您的操作系统会将击键转换回文本。这有一个主要缺点:它依赖于键盘语言映射设置,因此读者必须知道要使用什么键盘映射(在 HID 中没有发送文本而不是按键的通用方法)。
为了克服这个问题,一些条形码扫描仪可以(滥用)使用 Windows 输入子系统的功能,用户可以在其中直接输入 ASCII 代码。启用该功能后,阅读器会模拟在按住左 Alt
的同时键入十进制 ASCII 代码编号。 key 。这样,就没有对当前键盘映射的依赖(但这对 Windows 输入层产生了另一个依赖)。
这就是发生的事情。一、条码问题NumLock
键,检索 Num Lock 的当前状态(它将接收到 Num Lock LED
状态的切换)以确保启用它。然后它发出一系列 Alt
按下 + 数字 按下/释放 + Alt
发布。如果你解码它,它是:052
, 056
, 055
, 050
等52
是 4
的十进制 ASCII 码, 56
对于 8
, 55
对于 7
, 50
对于 2
等
如果您更改阅读器的配置,您可能可以禁用此功能以使用给定的键盘映射返回到通常输入键。条形码的配置通常通过扫描手册中的特殊条形码来进行。如果您没有,您的条形码手册应该可以在网上找到。大多数时候,配置代码在给定品牌内是可互操作的。
关于Python、evdev、usb 条形码阅读器 : how to decode the input data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43284404/
我有一个正在动态生成的条形码,并希望传递给 gsp,该 gsp 稍后将变成 pdf。我不需要出于自己的任何目的保留条形码,只想将图像从 Controller 传递到 gsp。 有没有办法渲染作为变量传
我正在研究苹果“passkit”框架。我已经制作了 lolipop 优惠券,正如它在 guide 中所说的那样. - 创建证书(Apple Dev 网站)我已经编译了.pkpass。 现在我必须使用动
我有这样的代码 $('.testbarcode').barcode('1234567', "code128"); 当我设置样式时它是折线,那么我如何才能将此条码的宽度设置得
我正在将 Visual Basic 应用程序转换为 Python Django。目前,它具有条形码功能来处理商店的销售。这可以用 python django 实现吗? 最佳答案 如果您对条形码功能的定
我正在尝试按照此示例使用条形码 API https://github.com/googlesamples/android-vision/tree/master/visionSamples/barcod
这是我到目前为止所得到的: def encodeFive(zip): zero = "||:::" one = ":::||" two = "::|:|" t
我正在尝试创建具有本文所示格式的条形码:http://www.thebookdesigner.com/2009/10/self-publishing-basics-deciphering-the-bo
我需要一些关于如何从 bmp 文件中获取 12 位条形码的指导,我完全不知道如何处理这个问题。我首先将图像读入 bitmam,我该如何继续? 例子:下图的条码是081034489030。我如何获得这些
谁能告诉我从哪里开始编码以便从 C# 中的 OPOS(Datalogic Magellan 设备)加权和条形码扫描中获取数据?例如,在这种情况下我应该使用什么库和什么函数。我一无所知,因为我已经花了很
使用 zxing,我设法将 Code39 条形码保存为 PNG,但它只显示条形,没有数字。我怎样才能在一个 PNG 中包含条形码和编号? KI 最佳答案 您无法使用 zxing 添加号码。您可以做一些
我正在尝试将扫描的条形码用作 SQL 查询中的变量。我正在使用 Google ML Kit Quick Start项目。我有一个使用 jtds1.3.1 制作的连接和查询功能。我只是无法获得要在查询中
我尝试让程序从下面的代码中读取 EAN13,但它不起作用 func metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metada
我必须读取 PDF 文件中的数据矩阵代码,我正在研究其可能性,对此我有一些疑问: 1.- 我与 Itext 合作,我正在寻找有关使用此库读取此 QR 条形码的可能性的信息,但我没有相关结果,这可能吗?
文档和头文件不包含任何与支持 3D 条形码相关的信息。但是,明确提到 AVMetadataMachineReadableCodeObject 支持一维和二维条码。因此,有人知道 AVFoundatio
我一直在寻找解决方案,到目前为止,我认为对我的项目来说最好的解决方案是使用免费的 Code 39 字体。但是,我已经尝试打印一些样本,但我的条形码扫描仪无法读取它们。 我进行了更多研究,偶然发现了 t
生成 3 of 9 很容易条形码使用 Font() Font f = new Font("Free 3 of 9", 80); this.Font = f; Label l = new Label()
愚蠢的我,我以为只要用条形码字体写一些文本,就会让扫描仪读取它。看来我错了。 所以在阅读了一些关于 code128 条形码的文档之后,我了解到: 条形码以(103、104 或 105 取决于类型)开头
我想在 WPF 应用程序中区分(条形码)扫描仪和键盘输入。 我需要的是每当我的扫描仪提供数据时发生的事件。 在我的应用程序中有一个特殊的字段,它将填充来自扫描仪的输入。因此,如果用户关注其他领域,我不
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
是否可以将 ZPL 和二进制数据用于 aztec 条形码? 我尝试使用BluetoothConnection写入发送以UTF8和字节数据编码的字符串连接数组/ String zplStart; byt
我是一名优秀的程序员,十分优秀!