Python, evdev, usb barcode reader: how to decode the input data -


i have datalogic gryphon gfs4400 2d barcode-scanner. have put raspberry pi , works usb hid device. can read barcodes , output goes default tty.

i want create serivce handles output when barcode read. using python , evdev.

can point me right direction how convert output correct characters?

the python script looks this:

from evdev import inputdevice, categorize, ecodes  device = inputdevice("/dev/input/by-id/usb-datalogic_adc__inc._handheld_barcode_scanner_s_n_g17a58010-event-kbd") # keyboard event in device.read_loop():     if event.type == ecodes.ev_key:         print(categorize(event)) 

when run script , read 1 barcode 487800017702297980000411000000000000702407088651000000, following output:

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

i don't understand how convert key_xxx correct characters. if filter down-events still don't understand key_kpn's etc. evetest gives this:

$ evtest /dev/input/event0 input driver version 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 exit) 

any appreciated! thank you.

in order driverless, usb barcode readers emulate hid devices (keyboards, actually). has neat features:

  • it works out of box,
  • it works in app,
  • it works in os.

default behavior readers emulate keystrokes. read code, decode it, convert text, convert text key strokes. thing computer sees usb keyboard scan codes, os converts keystrokes text. has 1 major drawback: dependent on keyboard language mapping settings, reader has know keymap use (there no universal way send text rather keys in hid).

to overcome issue, barcodes scanner can (ab)use feature of windows input subsystem user can enter ascii codes directly. when feature enabled, reader emulates typing decimal ascii code number while holding left alt key. way, there no dependency on current keyboard mapping (but makes dependency on windows input layer).

here, happens. first, barcode issues press on numlock key, retrieve current state of num lock (it receive toggle on num lock led status) sure enable it. issues series of alt press + numbers press/release + alt release. if decode it, is: 052, 056, 055, 050, etc. 52 decimal ascii code 4, 56 8, 55 7, 50 2, etc.

if change configuration of reader, can disable feature usual input keys using given keymap. configuration of barcodes typically goes through scanning of special barcodes found in manual. manual barcode should available on web if dont have it. of time, configuration codes interoperable within given brand.


Comments

Popular posts from this blog

Command prompt result in label. Python 2.7 -

javascript - How do I use URL parameters to change link href on page? -

amazon web services - AWS Route53 Trying To Get Site To Resolve To www -