From 89dfb6cf861e7e5dfb690cb2c389ee0a22b80d6b Mon Sep 17 00:00:00 2001 From: csoft2k Date: Mon, 24 Jul 2017 13:57:02 +0200 Subject: [PATCH] Added the DLE EOT querying command. (#237) * 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. * Update AUTHORS * Add entry to .mailmap * currently USB only --- .mailmap | 1 + AUTHORS | 1 + src/escpos/constants.py | 4 ++++ src/escpos/escpos.py | 22 ++++++++++++++++++++++ src/escpos/printer.py | 4 ++++ 5 files changed, 32 insertions(+) diff --git a/.mailmap b/.mailmap index 46c0229..9de2698 100644 --- a/.mailmap +++ b/.mailmap @@ -8,3 +8,4 @@ Cody (Quantified Code Bot) Cody Renato.Lorenzi Ahmed Tahri TAHRI Ahmed Michael Elsdörfer Michael Elsdörfer +csoft2k \ No newline at end of file diff --git a/AUTHORS b/AUTHORS index dd865d0..d0ab9b0 100644 --- a/AUTHORS +++ b/AUTHORS @@ -3,6 +3,7 @@ Asuki Kono belono Christoph Heuel Cody (Quantified Code Bot) +csoft2k Curtis // mashedkeyboard Davis Goglin Dean Rispin diff --git a/src/escpos/constants.py b/src/escpos/constants.py index 4e61419..a764290 100644 --- a/src/escpos/constants.py +++ b/src/escpos/constants.py @@ -249,3 +249,7 @@ 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_MASK_ONLINE = 8; diff --git a/src/escpos/escpos.py b/src/escpos/escpos.py index 0af1e55..a986304 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_MASK_ONLINE from .exceptions import BarcodeTypeError, BarcodeSizeError, TabPosError from .exceptions import CashDrawerError, SetVariableError, BarcodeCodeError @@ -77,6 +79,12 @@ class Escpos(object): """ pass + def _read(self, msg): + """ Returns a NotImplementedError if the instance of the class doesn't override this method. + :raises NotImplementedError + """ + raise NotImplementedError() + def image(self, img_source, high_density_vertical=True, high_density_horizontal=True, impl="bitImageRaster", fragment_height=960): """ Print an image @@ -733,6 +741,20 @@ class Escpos(object): else: self._raw(PANEL_BUTTON_OFF) + def query_status(self): + """ Queries the printer for its status, and returns an array of integers containing it. + :rtype: array(integer)""" + self._raw(RT_STATUS_ONLINE) + time.sleep(1) + status = self._read() + return status or [RT_MASK_ONLINE] + + def is_online(self): + """ Queries the printer its online status. + When online, returns True; False otherwise. + :rtype: bool: True if online, False if offline.""" + return not (self.query_status()[0] & RT_MASK_ONLINE) + 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: