From 574d6d86facbd8d8e737f0f1606e894b7bf07294 Mon Sep 17 00:00:00 2001 From: K Date: Sat, 22 Jul 2017 02:37:33 +0200 Subject: [PATCH] Added the DLE EOT querying command. Added a function to check whether the printer is online or not, as well as a reading method for USB printers. --- src/escpos/constants.py | 5 +++++ src/escpos/escpos.py | 14 ++++++++++++++ src/escpos/printer.py | 4 ++++ 3 files changed, 23 insertions(+) diff --git a/src/escpos/constants.py b/src/escpos/constants.py index 4e61419..7a6eca7 100644 --- a/src/escpos/constants.py +++ b/src/escpos/constants.py @@ -249,3 +249,8 @@ S_RASTER_N = _PRINT_RASTER_IMG(b'\x00') # Set raster image normal size S_RASTER_2W = _PRINT_RASTER_IMG(b'\x01') # Set raster image double width S_RASTER_2H = _PRINT_RASTER_IMG(b'\x02') # Set raster image double height S_RASTER_Q = _PRINT_RASTER_IMG(b'\x03') # Set raster image quadruple + +# Status Command +RT_STATUS_ONLINE = DLE + EOT + b'\x01'; +RT_STATUS_OFFLINECAUSE = DLE + EOT + b'\x02'; +RT_MASK_ONLINE = 8; diff --git a/src/escpos/escpos.py b/src/escpos/escpos.py index 0af1e55..3639ea1 100644 --- a/src/escpos/escpos.py +++ b/src/escpos/escpos.py @@ -18,6 +18,7 @@ from __future__ import unicode_literals import qrcode import textwrap import six +import time import barcode from barcode.writer import ImageWriter @@ -34,6 +35,7 @@ from .constants import CD_KICK_DEC_SEQUENCE, CD_KICK_5, CD_KICK_2, PAPER_FULL_CU from .constants import HW_RESET, HW_SELECT, HW_INIT from .constants import CTL_VT, CTL_HT, CTL_CR, CTL_FF, CTL_LF, CTL_SET_HT, PANEL_BUTTON_OFF, PANEL_BUTTON_ON from .constants import TXT_STYLE +from .constants import RT_STATUS_ONLINE, RT_STATUS_OFFLINECAUSE, RT_MASK_ONLINE from .exceptions import BarcodeTypeError, BarcodeSizeError, TabPosError from .exceptions import CashDrawerError, SetVariableError, BarcodeCodeError @@ -733,6 +735,18 @@ class Escpos(object): else: self._raw(PANEL_BUTTON_OFF) + def queryStatus(self): + self._raw(RT_STATUS_ONLINE) + time.sleep(1) + status = self._read(); + if (len(status) > 0): + return status; + else: + return [8]; + + def _isOnline(self): + status = self.queryStatus()[0]; + return ((status & RT_MASK_ONLINE) == 0); class EscposIO(object): """ESC/POS Printer IO object diff --git a/src/escpos/printer.py b/src/escpos/printer.py index a15fe21..b658efb 100644 --- a/src/escpos/printer.py +++ b/src/escpos/printer.py @@ -84,6 +84,10 @@ class Usb(Escpos): """ self.device.write(self.out_ep, msg, self.timeout) + def _read(self): + """ Reads a data buffer and returns it to the caller. """ + return self.device.read(self.in_ep, 16) + def close(self): """ Release USB interface """ if self.device: