diff --git a/addons/hw_escpos/__openerp__.py b/addons/hw_escpos/__openerp__.py index 830b78300ea..127dbd5cf0b 100644 --- a/addons/hw_escpos/__openerp__.py +++ b/addons/hw_escpos/__openerp__.py @@ -37,6 +37,9 @@ that would need such functionality. """, 'author': 'OpenERP SA', 'depends': ['hw_proxy'], + 'external_dependencies': { + 'python' : ['usb.core','serial','qrcode'], + }, 'test': [ ], 'installable': True, diff --git a/addons/hw_escpos/controllers/main.py b/addons/hw_escpos/controllers/main.py index 78ed77a2318..d284d05dfdd 100644 --- a/addons/hw_escpos/controllers/main.py +++ b/addons/hw_escpos/controllers/main.py @@ -14,8 +14,6 @@ import usb.core from openerp.tools.translate import _ from .. import escpos from ..escpos import printer -#import escpos -#import escpos.printer from PIL import Image from openerp import http @@ -29,6 +27,13 @@ class EscposDriver(hw_proxy.Proxy): supported_printers = [ { 'vendor' : 0x04b8, 'product' : 0x0e03, 'name' : 'Epson TM-T20' } ] + + def connected_usb_devices(self,devices): + connected = [] + for device in devices: + if usb.core.find(idVendor=device['vendor'], idProduct=device['product']) != None: + connected.append(device) + return connected def get_escpos_printer(self): printers = self.connected_usb_devices(self.supported_printers) diff --git a/addons/hw_proxy/controllers/main.py b/addons/hw_proxy/controllers/main.py index 967323ae0d6..6ddf94843fd 100644 --- a/addons/hw_proxy/controllers/main.py +++ b/addons/hw_proxy/controllers/main.py @@ -7,30 +7,21 @@ import openerp import time import random import subprocess -import usb.core -import escpos -import escpos.printer import werkzeug import werkzeug.wrappers +_logger = logging.getLogger(__name__) + from openerp import http from openerp.http import request from openerp.addons.web.controllers.main import manifest_list, module_boot, html_template -_logger = logging.getLogger(__name__) class Proxy(http.Controller): def __init__(self): self.scale = 'closed' self.scale_weight = 0.0 - def connected_usb_devices(self,devices): - connected = [] - for device in devices: - if usb.core.find(idVendor=device['vendor'], idProduct=device['product']) != None: - connected.append(device) - return connected - @http.route('/hw_proxy/hello', type='http', auth='admin') def helloajx(self): return request.make_response('ping', { diff --git a/addons/hw_scanner/controllers/main.py b/addons/hw_scanner/controllers/main.py index ec56a733671..69fd29f5128 100644 --- a/addons/hw_scanner/controllers/main.py +++ b/addons/hw_scanner/controllers/main.py @@ -12,7 +12,12 @@ from openerp.http import request _logger = logging.getLogger(__name__) -from evdev import InputDevice, ecodes, categorize, list_devices +try: + import evdev +except ImportError: + _logger.error('OpenERP module hw_scanner depends on the evdev python module') + evdev = None + from select import select class ScannerDriver(hw_proxy.Proxy): @@ -76,13 +81,15 @@ class ScannerDriver(hw_proxy.Proxy): } def get_device(self): + if not evdev: + return None devices = [ device for device in listdir(self.input_dir)] keyboards = [ device for device in devices if 'kbd' in device ] scanners = [ device for device in devices if ('barcode' in device.lower()) or ('scanner' in device.lower()) ] if len(scanners) > 0: - return InputDevice(join(self.input_dir,scanners[0])) + return evdev.InputDevice(join(self.input_dir,scanners[0])) elif len(keyboards) > 0: - return InputDevice(join(self.input_dir,keyboards[0])) + return evdev.InputDevice(join(self.input_dir,keyboards[0])) else: return None @@ -105,9 +112,9 @@ class ScannerDriver(hw_proxy.Proxy): device.ungrab() return '' for event in device.read(): - if event.type == ecodes.EV_KEY: + if event.type == evdev.ecodes.EV_KEY: + #_logger.debug('Evdev Keyboard event %s',evdev.categorize(event)) if event.value == 1: # keydown events - #print categorize(event) if event.code in self.keymap: if shift: barcode.append(self.keymap[event.code][1])