Migration to libusb1 and changes to make it compatible with python on Windows

This commit is contained in:
Juanmi Taboada 2017-12-04 11:24:21 +01:00
parent 26d72a69f0
commit 8494cca526
5 changed files with 24 additions and 29 deletions

View File

@ -8,6 +8,7 @@ Cody (Quantified Code Bot) <cody@quantifiedcode.com> Cody <cody@quantifiedcode.c
Renato Lorenzi <renato.lorenzi@senior.com.br> Renato.Lorenzi <renato.lorenzi@senior.com.br>
Ahmed Tahri <nyuubi.10@gmail.com> TAHRI Ahmed <nyuubi.10@gmail.com>
Michael Elsdörfer <michael@elsdoerfer.com> Michael Elsdörfer <michael@elsdoerfer.info>
Juanmi Taboada <juanmi@juanmitaboada.com> Juanmi Taboada <juanmi@juanmitaboada.com>
csoft2k <csoft2k@hotmail.com>
Sergio Pulgarin <sergio.pulgarin@gmail.com>
reck31 <rakesh.gunduka@gmail.com>

View File

@ -10,6 +10,7 @@ Dean Rispin
Dmytro Katyukha
Hark
Joel Lehtonen
Juanmi Taboada // br0th3r
Kristi
ldos
Lucy Linder

View File

@ -107,7 +107,7 @@ setup(
'Topic :: Office/Business :: Financial :: Point-Of-Sale',
],
install_requires=[
'pyusb>=1.0.0',
'libusb1',
'Pillow>=2.0',
'qrcode>=4.0',
'pyserial',

View File

@ -7,12 +7,12 @@ import time
import six
import yaml
from tempfile import gettempdir
logging.basicConfig()
logger = logging.getLogger(__name__)
pickle_dir = environ.get('ESCPOS_CAPABILITIES_PICKLE_DIR', '/tmp/')
pickle_dir = environ.get('ESCPOS_CAPABILITIES_PICKLE_DIR', gettempdir())
pickle_path = path.join(pickle_dir, 'capabilities.pickle')
capabilities_path = environ.get(
'ESCPOS_CAPABILITIES_FILE',

View File

@ -13,8 +13,9 @@ from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals
import usb.core
import usb.util
from usb1 import USBContext
import platform
import serial
import socket
@ -33,6 +34,7 @@ class Usb(Escpos):
:parts: 1
"""
INTERFACE = 0
def __init__(self, idVendor, idProduct, timeout=0, in_ep=0x82, out_ep=0x01, *args, **kwargs): # noqa: N803
"""
@ -52,29 +54,16 @@ class Usb(Escpos):
def open(self):
""" Search device on USB tree and set it as escpos device """
self.device = usb.core.find(idVendor=self.idVendor, idProduct=self.idProduct)
if self.device is None:
self.ctx = USBContext()
dev = self.ctx.getByVendorIDAndProductID(self.idVendor, self.idProduct)
if dev is None:
raise USBNotFoundError("Device not found or cable not plugged in.")
check_driver = None
self.device = dev.open()
if platform.system() == 'Linux' and self.device.kernelDriverActive(self.INTERFACE):
self.device.detachKernelDriver(self.INTERFACE)
try:
check_driver = self.device.is_kernel_driver_active(0)
except NotImplementedError:
pass
if check_driver is None or check_driver:
try:
self.device.detach_kernel_driver(0)
except usb.core.USBError as e:
if check_driver is not None:
print("Could not detatch kernel driver: {0}".format(str(e)))
try:
self.device.set_configuration()
self.device.reset()
except usb.core.USBError as e:
print("Could not set configuration: {0}".format(str(e)))
self.device.claimInterface(self.INTERFACE)
def _raw(self, msg):
""" Print any command sent in raw format
@ -82,17 +71,21 @@ class Usb(Escpos):
:param msg: arbitrary code to be printed
:type msg: bytes
"""
self.device.write(self.out_ep, msg, self.timeout)
self.device.bulkWrite(self.out_ep, msg, timeout=self.timeout)
def _read(self):
""" Reads a data buffer and returns it to the caller. """
return self.device.read(self.in_ep, 16)
return self.device.bulkRead(self.in_ep, 16, timeout=self.timeout)
def close(self):
""" Release USB interface """
if self.device:
usb.util.dispose_resources(self.device)
self.device.releaseInterface(self.INTERFACE)
self.device.close()
self.device = None
if self.ctx:
self.ctx.exit()
self.ctx = None
class Serial(Escpos):