Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion labelprinterkit/backends/bluetooth.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
7 changes: 4 additions & 3 deletions labelprinterkit/backends/usb.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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)
Expand Down
19 changes: 19 additions & 0 deletions labelprinterkit/printers.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -261,6 +276,10 @@ class P750W(GenericPrinter):
pass


class P2730(GenericPrinter):
pass


class H500(GenericPrinter):
_SUPPORTED_RESOLUTIONS = (Resolution.LOW,)
_FEATURE_HALF_CUT = False
Expand Down