diff --git a/labelprinterkit/backends/bluetooth.py b/labelprinterkit/backends/bluetooth.py index 83a3a0b..48fb393 100644 --- a/labelprinterkit/backends/bluetooth.py +++ b/labelprinterkit/backends/bluetooth.py @@ -27,6 +27,6 @@ def __init__(self, dev_path: str): def write(self, data: bytes): self._dev.write(data) - def read(self, count: int) -> bytes: + def read(self, count: int, timeout=None) -> bytes: data = self._dev.read(count) return data diff --git a/labelprinterkit/backends/usb.py b/labelprinterkit/backends/usb.py index 3eb2cd7..24bd3a5 100644 --- a/labelprinterkit/backends/usb.py +++ b/labelprinterkit/backends/usb.py @@ -3,13 +3,14 @@ import usb.core import usb.util +import libusb_package from . import BaseBackend class PyUSBBackend(BaseBackend): def __init__(self): - dev = usb.core.find(custom_match=self.is_usb_printer) + dev = libusb_package.find(custom_match=self.is_usb_printer) if dev is None: raise OSError('Device not found') self._dev = dev @@ -26,9 +27,9 @@ def is_usb_printer(dev) -> bool: def write(self, data: bytes): self._dev.write(0x2, data) - def read(self, count: int) -> bytes | None: + def read(self, count: int, timeout=None) -> bytes | None: for i in range(0, 3): - data = self._dev.read(0x81, count) + data = self._dev.read(0x81, count, timeout) if data: return data sleep(0.1) diff --git a/labelprinterkit/printers.py b/labelprinterkit/printers.py index 265653d..b10c5a3 100644 --- a/labelprinterkit/printers.py +++ b/labelprinterkit/printers.py @@ -99,6 +99,11 @@ def media(self) -> Media: self._media = Media.get_media(self.media_width, self.media_type) return self._media + @property + def status(self) -> Media: + if self._data['status'] is not None: + return self._data['status'] + class BasePrinter(ABC): """Base class for printers. All printers define this API. Any other @@ -248,10 +253,20 @@ def print(self, job: Job): if i < len(job) - 1: self._backend.write(b'\x0C') + while not self.__is_print_finished(page.length*1000): + pass + # end page self._backend.write(b'\x1A') logger.info("end of page") + def __is_print_finished(self, timeout): + data = self._backend.read(32, timeout) + while data is None: + data = self._backend.read(32, timeout) + + return Status(data).status == StatusCodes.PRINTING_DONE + class P700(GenericPrinter): pass @@ -261,6 +276,10 @@ class P750W(GenericPrinter): pass +class P2730(GenericPrinter): + pass + + class H500(GenericPrinter): _SUPPORTED_RESOLUTIONS = (Resolution.LOW,) _FEATURE_HALF_CUT = False