[IMP] hw_escpos: get rid of printer whitelist
It makes more sense to just look for usb devices that identify as a printer and use whatever we get. This saves us time having to explain to users how to add their particular printer to the whitelist to test.
This commit is contained in:
parent
4b6309f5de
commit
e7c51228f3
|
@ -52,60 +52,37 @@ class EscposDriver(Thread):
|
|||
self.lock = Lock()
|
||||
self.status = {'status':'connecting', 'messages':[]}
|
||||
|
||||
def supported_devices(self):
|
||||
if not os.path.isfile('escpos_devices.pickle'):
|
||||
return supported_devices.device_list
|
||||
else:
|
||||
try:
|
||||
f = open('escpos_devices.pickle','r')
|
||||
return pickle.load(f)
|
||||
f.close()
|
||||
except Exception as e:
|
||||
self.set_status('error',str(e))
|
||||
return supported_devices.device_list
|
||||
|
||||
def add_supported_device(self,device_string):
|
||||
r = re.compile('[0-9A-Fa-f]{4}:[0-9A-Fa-f]{4}');
|
||||
match = r.search(device_string)
|
||||
if match:
|
||||
match = match.group().split(':')
|
||||
vendor = int(match[0],16)
|
||||
product = int(match[1],16)
|
||||
name = device_string.split('ID')
|
||||
if len(name) >= 2:
|
||||
name = name[1]
|
||||
else:
|
||||
name = name[0]
|
||||
_logger.info('ESC/POS: adding support for device: '+match[0]+':'+match[1]+' '+name)
|
||||
|
||||
device_list = supported_devices.device_list[:]
|
||||
if os.path.isfile('escpos_devices.pickle'):
|
||||
try:
|
||||
f = open('escpos_devices.pickle','r')
|
||||
device_list = pickle.load(f)
|
||||
f.close()
|
||||
except Exception as e:
|
||||
self.set_status('error',str(e))
|
||||
device_list.append({
|
||||
'vendor': vendor,
|
||||
'product': product,
|
||||
'name': name,
|
||||
})
|
||||
|
||||
try:
|
||||
f = open('escpos_devices.pickle','w+')
|
||||
f.seek(0)
|
||||
pickle.dump(device_list,f)
|
||||
f.close()
|
||||
except Exception as e:
|
||||
self.set_status('error',str(e))
|
||||
|
||||
def connected_usb_devices(self):
|
||||
connected = []
|
||||
|
||||
for device in self.supported_devices():
|
||||
if usb.core.find(idVendor=device['vendor'], idProduct=device['product']) != None:
|
||||
connected.append(device)
|
||||
|
||||
# printers can either define bDeviceClass=7, or they can define one of
|
||||
# their interfaces with bInterfaceClass=7. This class checks for both.
|
||||
class FindUsbClass(object):
|
||||
def __init__(self, usb_class):
|
||||
self._class = usb_class
|
||||
def __call__(self, device):
|
||||
# first, let's check the device
|
||||
if device.bDeviceClass == self._class:
|
||||
return True
|
||||
# transverse all devices and look through their interfaces to
|
||||
# find a matching class
|
||||
for cfg in device:
|
||||
intf = usb.util.find_descriptor(cfg, bInterfaceClass=self._class)
|
||||
|
||||
if intf is not None:
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
printers = usb.core.find(find_all=True, custom_match=FindUsbClass(7))
|
||||
|
||||
for printer in printers:
|
||||
connected.append({
|
||||
'vendor': printer.idVendor,
|
||||
'product': printer.idProduct,
|
||||
'name': usb.util.get_string(printer, 256, printer.iManufacturer) + " " + usb.util.get_string(printer, 256, printer.iProduct)
|
||||
})
|
||||
|
||||
return connected
|
||||
|
||||
def lockedstart(self):
|
||||
|
@ -377,18 +354,3 @@ class EscposProxy(hw_proxy.Proxy):
|
|||
_logger.info('ESC/POS: PRINT XML RECEIPT')
|
||||
driver.push_task('xml_receipt',receipt)
|
||||
|
||||
@http.route('/hw_proxy/escpos/add_supported_device', type='http', auth='none', cors='*')
|
||||
def add_supported_device(self, device_string):
|
||||
_logger.info('ESC/POS: ADDED NEW DEVICE:'+device_string)
|
||||
driver.add_supported_device(device_string)
|
||||
return "The device:\n"+device_string+"\n has been added to the list of supported devices.<br/><a href='/hw_proxy/status'>Ok</a>"
|
||||
|
||||
@http.route('/hw_proxy/escpos/reset_supported_devices', type='http', auth='none', cors='*')
|
||||
def reset_supported_devices(self):
|
||||
try:
|
||||
os.remove('escpos_devices.pickle')
|
||||
except Exception as e:
|
||||
pass
|
||||
return 'The list of supported devices has been reset to factory defaults.<br/><a href="/hw_proxy/status">Ok</a>'
|
||||
|
||||
|
||||
|
|
|
@ -1 +1 @@
|
|||
__all__ = ["constants","escpos","exceptions","printer","supported_devices"]
|
||||
__all__ = ["constants","escpos","exceptions","printer"]
|
||||
|
|
|
@ -1,11 +0,0 @@
|
|||
#!/usr/bin/python
|
||||
|
||||
# This is a list of esc/pos compatible usb printers. The vendor and product ids can be found by
|
||||
# typing lsusb in a linux terminal, this will give you the ids in the form ID VENDOR:PRODUCT
|
||||
|
||||
device_list = [
|
||||
{ 'vendor' : 0x04b8, 'product' : 0x0e03, 'name' : 'Epson TM-T20' },
|
||||
{ 'vendor' : 0x04b8, 'product' : 0x0202, 'name' : 'Epson TM-T70' },
|
||||
{ 'vendor' : 0x04b8, 'product' : 0x0e15, 'name' : 'Epson TM-T20II' },
|
||||
]
|
||||
|
Loading…
Reference in New Issue