from multiprocessing import Process
import os
import time
import serial
import time
from evdev import InputDevice, ecodes, list_devices, categorize
import signal, sys
scancodes = {
# Scancode: ASCIICode
0: None, 1: u'ESC', 2: u'1', 3: u'2', 4: u'3', 5: u'4', 6: u'5', 7: u'6', 8: u'7', 9: u'8',
10: u'9', 11: u'0', 12: u'-', 13: u'=', 14: u'BKSP', 15: u'TAB', 16: u'q', 17: u'w', 18: u'e', 19: u'r',
20: u't', 21: u'y', 22: u'u', 23: u'i', 24: u'o', 25: u'p', 26: u'[', 27: u']', 28: u'CRLF', 29: u'LCTRL',
30: u'a', 31: u's', 32: u'd', 33: u'f', 34: u'g', 35: u'h', 36: u'j', 37: u'k', 38: u'l', 39: u';',
40: u"'", 41: u'`', 42: u'LSHFT', 43: u'\\', 44: u'z', 45: u'x', 46: u'c', 47: u'v', 48: u'b', 49: u'n',
50: u'm', 51: u',', 52: u'.', 53: u'/', 54: u'RSHFT', 56: u'LALT', 100: u'RALT',57:u" "
}
scancodes_leftshift = {
# Scancode: ASCIICode
0: None, 1: u'ESC', 2: u'!', 3: u'@', 4: u'#', 5: u'$', 6: u'%', 7: u'^', 8: u'&', 9: u'*',
10: u'(', 11: u')', 12: u'_', 13: u'+', 14: u'BKSP', 15: u'TAB', 16: u'Q', 17: u'W', 18: u'E', 19: u'R',
20: u'T', 21: u'Y', 22: u'U', 23: u'I', 24: u'O', 25: u'P', 26: u'{', 27: u'}', 28: u'CRLF', 29: u'LCTRL',
30: u'A', 31: u'S', 32: u'D', 33: u'F', 34: u'G', 35: u'H', 36: u'J', 37: u'K', 38: u'L', 39: u':',
40: u'"', 41: u'~', 42: u'LSHFT', 43: u'|', 44: u'Z', 45: u'X', 46: u'C', 47: u'V', 48: u'B', 49: u'N',
50: u'M', 51: u'<', 52: u'>', 53: u'?', 54: u'RSHFT', 56: u'LALT', 100: u'RALT',57:u" "
}
ser = serial.Serial("/dev/ttyAMA0", 115200)
barCodeDeviceString = "Newland Auto-ID NLS IOTC PRDs HID KBW"
dev1 = None #设备
dev2 = None
def worker1(name):
print(name + "\n")
global dev1
i = 0
devices = map(InputDevice, list_devices())
for device in devices:
if device.name == barCodeDeviceString:
i = i + 1
if i == 1:
dev1 = InputDevice(device.fn)
if not dev1:
print("not found dev1")
return
def signal_handler(signalnum, frame):
print(signalnum)
print(frame)
print("Stopping")
dev1.ungrab()
sys.exit(0)
#signal.signal(signal.SIGINT, signal_handler)
signal.signal(signal.SIGTERM, signal_handler)
dev1.grab()
barcode = ""
keymap = scancodes
for event in dev1.read_loop():
if event.type == ecodes.EV_KEY:
data = categorize(event)
if data.scancode == 42:
if data.keystate == 1:
keymap = scancodes_leftshift
if data.keystate == 0:
keymap = scancodes_leftshift
#只接收输入,不接收输出,也不接收回车
if data.keystate == 1 and data.scancode != 42:
if data.scancode == 28:
print("s1: " + barcode)
barcode = ""
break
else:
if data.scancode >= 1 and data.scancode <= 57:
barcode += keymap[data.scancode]
def worker2(name):
print(name + "\n")
global dev2
i = 0
devices = map(InputDevice, list_devices())
for device in devices:
if device.name == barCodeDeviceString:
i = i + 1
if i == 2:
dev2 = InputDevice(device.fn)
if not dev2:
print("not found dev2")
return
def signal_handler(signalnum, frame):
print(signalnum)
print(frame)
print("Stopping")
dev2.ungrab()
sys.exit(0)
#signal.signal(signal.SIGINT, signal_handler)
signal.signal(signal.SIGTERM, signal_handler)
dev2.grab()
barcode = ""
keymap = scancodes
for event in dev2.read_loop():
if event.type == ecodes.EV_KEY:
data = categorize(event)
if data.scancode == 42:
if data.keystate == 1:
keymap = scancodes_leftshift
if data.keystate == 0:
keymap = scancodes_leftshift
#只接收输入,不接收输出,也不接收回车
if data.keystate == 1 and data.scancode != 42:
if data.scancode == 28:
print("s2: " + barcode)
barcode = ""
break
else:
if data.scancode >= 1 and data.scancode <= 57:
barcode += keymap[data.scancode]
if __name__ == '__main__':
# 检测到用户扫码,发送SystemStart_Sigal以启动系统
ser.write('_SystemStart_Sigal\n'.encode())
p1 = Process(target=worker1, args=("worker1",))
p1.start()
p2 = Process(target=worker2, args=("worker2",))
p2.start()
t1 = time.time()
while(1):
if not p1.is_alive():
p2.terminate()
break
if not p2.is_alive():
p1.terminate()
break
if int(time.time()) - t1 > 5:
print("process killed\n")
p1.terminate()
p2.terminate()
print("terminated")
# 检测到用户扫码,发送SystemStart_Sigal以启动单片机系统
ser.write('NotExist_Substance'.encode())
break
print("end")
树莓派利用multiprocessing 同时开启两个进程对条形码进行读取
猜你喜欢
转载自blog.csdn.net/weixin_40973138/article/details/102536731
今日推荐
周排行