diff --git a/src/printer/prt_escp.c b/src/printer/prt_escp.c index 9b400b793..f5f802bec 100644 --- a/src/printer/prt_escp.c +++ b/src/printer/prt_escp.c @@ -8,7 +8,7 @@ * * Implementation of the Generic ESC/P Dot-Matrix printer. * - * Version: @(#)prt_escp.c 1.0.3 2018/10/06 + * Version: @(#)prt_escp.c 1.0.4 2018/11/09 * * Authors: Michael Drüing, * Fred N. van Kempen, @@ -192,6 +192,7 @@ typedef struct { uint16_t pitch; uint8_t *pixels; /* grayscale pixel data */ + uint8_t ctrl; } psurface_t; @@ -1865,7 +1866,7 @@ write_ctrl(uint8_t val, void *priv) dev->select = 1; } - if ((val & 0x04) == 0) { + if ((val & 0x04) && !(dev->ctrl & 0x04)) { /* reset printer */ dev->select = 0; @@ -1874,13 +1875,15 @@ write_ctrl(uint8_t val, void *priv) //pclog("Write control %02x\n", val & 1); - if (val & 0x01) { /* STROBE */ + if (!(val & 0x01) && (dev->ctrl & 0x01)) { /* STROBE */ /* Process incoming character. */ handle_char(dev); /* ACK it, will be read on next READ STATUS. */ dev->ack = 1; } + + dev->ctrl = val; } diff --git a/src/printer/prt_text.c b/src/printer/prt_text.c index 9236820cd..711a7056e 100644 --- a/src/printer/prt_text.c +++ b/src/printer/prt_text.c @@ -15,7 +15,7 @@ * printer mechanics. This would lead to a page being 66 lines * of 80 characters each. * - * Version: @(#)prt_text.c 1.0.3 2018/10/05 + * Version: @(#)prt_text.c 1.0.4 2018/11/09 * * Author: Fred N. van Kempen, * @@ -92,6 +92,7 @@ typedef struct { uint8_t h; char *chars; /* character data */ + uint8_t ctrl; } psurface_t; @@ -361,20 +362,22 @@ write_ctrl(uint8_t val, void *priv) dev->select = 1; } - if ((val & 0x04) == 0) { + if ((val & 0x04) && !(dev->ctrl & 0x04)) { /* reset printer */ dev->select = 0; reset_printer(dev); } - if (val & 0x01) { /* STROBE */ + if (!(val & 0x01) && (dev->ctrl & 0x01)) { /* STROBE */ /* Process incoming character. */ handle_char(dev); /* ACK it, will be read on next READ STATUS. */ dev->ack = 1; } + + dev->ctrl = val; }