summaryrefslogtreecommitdiff
path: root/addons/hw_scanner/controllers/main.py
diff options
context:
space:
mode:
Diffstat (limited to 'addons/hw_scanner/controllers/main.py')
-rw-r--r--addons/hw_scanner/controllers/main.py19
1 files changed, 12 insertions, 7 deletions
diff --git a/addons/hw_scanner/controllers/main.py b/addons/hw_scanner/controllers/main.py
index 105856a3e28..8fbdae62db6 100644
--- a/addons/hw_scanner/controllers/main.py
+++ b/addons/hw_scanner/controllers/main.py
@@ -4,7 +4,7 @@ import os
import time
from os import listdir
from os.path import join
-from threading import Thread
+from threading import Thread, Lock
from select import select
from Queue import Queue, Empty
@@ -26,6 +26,7 @@ except ImportError:
class Scanner(Thread):
def __init__(self):
Thread.__init__(self)
+ self.lock = Lock()
self.status = {'status':'connecting', 'messages':[]}
self.input_dir = '/dev/input/by-id/'
self.barcodes = Queue()
@@ -86,6 +87,12 @@ class Scanner(Thread):
57:(" "," "),
}
+ def lockedstart(self):
+ self.lock.acquire()
+ if not self.isAlive():
+ self.start()
+ self.lock.release()
+
def set_status(self, status, message = None):
if status == self.status['status']:
if message != None and message != self.status['messages'][-1]:
@@ -102,8 +109,6 @@ class Scanner(Thread):
elif status == 'disconnected' and message:
_logger.warning('Disconnected Barcode Scanner: '+message)
-
-
def get_device(self):
try:
if not evdev:
@@ -135,6 +140,8 @@ class Scanner(Thread):
busy reading another barcode
"""
+ self.lockedstart()
+
while True:
try:
timestamp, barcode = self.barcodes.get(True, 5)
@@ -144,8 +151,7 @@ class Scanner(Thread):
return ''
def get_status(self):
- if not s.isAlive():
- s.start()
+ self.lockedstart()
return self.status
def run(self):
@@ -209,7 +215,6 @@ hw_proxy.drivers['scanner'] = s
class ScannerDriver(hw_proxy.Proxy):
@http.route('/hw_proxy/scanner', type='json', auth='none', cors='*')
def scanner(self):
- if not s.isAlive():
- s.start()
return s.get_barcode()
+