In OpenERP first create custom module and inherits the Scanner object in your own module and pass all the barcode fields and map it to the object.
Then this barcode will start a loop that catches all keyboard events in Odoo. And by using the parse barcode in your event put them on a timestamped queue. And all barcode consumed in the point of sale module and request to the barcode even.
Using this function given below:
def runs_events(self ,cr, uid, id, context=None):
self.barcodes = Queue()
barcode = []
shift = False
devices = None
while True:
devices = self.get_devices()
try:
while True:
r,w,x = select({dev.fd: dev for dev in [d.evdev for d in devices]},[],[],5)
if len(r) == 0:
break
for fd in r:
device = self._get_open_device_by_fd(fd)
if not evdev.util.is_device(device.evdev.fn):
_logger.info('%s disconnected', str(device.evdev))
self.release_device(device)
break
events = device.evdev.read()
for event in events:
if event.type == evdev.ecodes.EV_KEY:
if event.value == 1:
if event.code in self.keymap:
if device.shift:
device.barcode.append(self.keymap[event.code][1])
else:
device.barcode.append(self.keymap[event.code][0])
elif event.code == 42 or event.code == 54:
device.shift = True
elif event.code == 28:
_logger.debug('pushing barcode %s from %s', ''.join(device.barcode), str(device.evdev))
self.barcodes.put( (time.time(),''.join(device.barcode)) )
device.barcode = []
elif event.value == 0:
if event.code == 42 or event.code == 54:
device.shift = False
except Exception as e:
self.set_status('error',str(e))
scanner_thread = None
if evdev:
scanner_thread = Scanner()
hw_proxy.drivers['scanner'] = scanner_thread
0 Comment(s)