EPSON Thermal Printer RS232 Interface Model --TM-T82II
Revision 0:19ca061f5bcf, committed 2018-07-09
- Comitter:
- shivanandgowdakr
- Date:
- Mon Jul 09 08:07:02 2018 +0000
- Commit message:
- EPSON Thermal Printer Code RS232 Interface
Changed in this revision
| EPSON.cpp | Show annotated file Show diff for this revision Revisions of this file |
| EPSON.h | Show annotated file Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/EPSON.cpp Mon Jul 09 08:07:02 2018 +0000
@@ -0,0 +1,462 @@
+#include "mbed.h"
+#include "EPSON.h"
+
+EPSON::EPSON(PinName tx, PinName rx,uint32_t baud)
+ :
+ _serial_p(new Serial(tx, rx)),
+ _serial(*_serial_p)
+{
+ _serial.baud(baud);
+ initialize();
+}
+
+EPSON::EPSON(Serial &serial_obj, uint32_t baud)
+ :
+ _serial_p(NULL),
+ _serial(serial_obj)
+{
+ _serial.baud(baud);
+ initialize();
+}
+
+EPSON::~EPSON()
+{
+}
+
+
+void EPSON::initialize(void)
+{
+ _serial.putc(0x1B);
+ _serial.putc(0x40);
+ _serial.putc(0x1C);
+}
+
+
+ void EPSON::printLeft(void)
+{
+ _serial.putc(0x1B);
+ _serial.putc(0x40);
+ _serial.putc(0x30);
+}
+
+void EPSON::printRight(void)
+{
+ _serial.putc(0x1B);
+ _serial.putc(0x40);
+ _serial.putc(0x32);
+}
+
+
+
+void EPSON::printCenter(void)
+{
+ _serial.putc(0x1B);
+ _serial.putc(0x40);
+ _serial.putc(0x31);
+}
+
+void EPSON::font_Zero(void)
+{
+ _serial.putc(0x1D);
+ _serial.putc(0x21);
+ _serial.putc(0x00);
+}
+
+void EPSON::font_OneZero(void)
+{
+ _serial.putc(0x1D);
+ _serial.putc(0x21);
+ _serial.putc(0x10);
+}
+
+void EPSON::font_ZeroOne(void)
+{
+ _serial.putc(0x1D);
+ _serial.putc(0x21);
+ _serial.putc(0x01);
+}
+
+ int EPSON:: PrintBarCode(char *data,int ilen)
+ {
+ char str_pdata[100];
+ char header[] = {0x1D, 0x48, 0x02, 0x1D, 0x66, 0x00, 0x1D, 0x68, 0x51, 0x1D, 0x77, 0x02, 0x1D, 0x6B, 0x49};
+ int idata_len, raw_data_len;
+
+ memset(str_pdata, 0x00, sizeof(str_pdata));
+
+ memcpy(str_pdata,header, 15);
+ idata_len = 15;
+
+ raw_data_len = ilen + 2;
+ str_pdata[idata_len] = raw_data_len;
+
+ idata_len++;
+ memcpy(str_pdata+idata_len, "{A", 2);
+ idata_len += 2;
+ memcpy(str_pdata+idata_len, data, ilen);
+ idata_len += ilen;
+
+ _serial.printf("%s",str_pdata );
+
+ return 1;
+
+ }
+
+
+void EPSON::printTest(void)
+{
+ _serial.putc(0x1D);
+ _serial.putc(0x28);
+ _serial.putc(0x41);
+}
+
+
+void EPSON::lineFeed(void)
+{
+ _serial.putc(0x0A);
+
+}
+
+
+void EPSON::carriageReturn(void)
+{
+ _serial.putc(0x0D);
+}
+
+
+
+void EPSON::putLineFeed(uint8_t lines)
+{
+ for(uint32_t i = 0; i < lines; i++) {
+ _serial.putc('\r');
+ }
+}
+
+void EPSON::printnputLineFeed(uint8_t lines)
+{
+ _serial.putc(0x1B);
+ _serial.putc(0x64);
+ _serial.putc(lines);
+
+ }
+
+void EPSON::setdefaultLinespacing(void)
+{
+ _serial.putc(0x1B);
+ _serial.putc(0x32);
+ _serial.putc(0x32);
+
+ }
+
+void EPSON::setLinespacing(uint8_t lines)
+{
+ uint8_t num=32;
+ if(lines==1)
+ num=32;
+ else if(lines==2)
+ num=64;
+ else if(lines==3)
+ num=96;
+
+
+ _serial.putc(0x1B);
+ _serial.putc(0x33);
+ _serial.putc(num);
+
+ }
+
+ void EPSON::setleftMargin(uint8_t n1, uint8_t n2)
+ {
+ _serial.putc(0x1D);
+ _serial.putc(0x4C);
+ _serial.putc(n1);
+ _serial.putc(n2);
+ }
+
+ void EPSON::absoluteprintPosition(uint8_t n1, uint8_t n2)
+ {
+ _serial.putc(0x1B);
+ _serial.putc(0x24);
+ _serial.putc(n1);
+ _serial.putc(n2);
+ }
+
+void EPSON::whiteblack(uint8_t n1)
+ {
+ _serial.putc(0x1D);
+ _serial.putc(0x42);
+ _serial.putc(n1);// n1=0 for OFF n1=1 for ON
+
+ }
+
+ void EPSON::papersensorstatus(void)
+ {
+ _serial.putc(0x1B);
+ _serial.putc(0x76);
+
+ // Poll Rx pin of printer Here
+ //0x00 Paper Present
+ //0x20 Paper Absent
+ }
+
+void EPSON::printModes(uint8_t n)
+{
+ _serial.putc(0x1B);
+ _serial.putc(0x21);
+ _serial.putc(n);
+
+
+
+//Possible values for n
+//00 = 32 Char Normal 08 = 32 Char BOLD
+//01 = 24 Char Normal 09 = 24 Char BOLD
+//11 = 24 Char Double Height 19 = 24 Char Double Height & BOLD
+//21 = 24 Char Double Width 29 = 24 Char Double Width & BOLD
+//31 = 24 Char Double Height & Double Width 39 = 24 Char Double Height & Double Width & BOLD
+//10 = 32 Char Double Height 18 = 32 Char Double Height & BOLD
+//20 = 32 Char Double Width 28 = 32 Char Double Width & BOLD
+//30 = 32 Char Double Height & Double Width 38 = 32 Char Double Height & Double Width & BOLD
+
+}
+
+void EPSON::clearBuffer(void)
+{
+ _serial.putc(0x18);
+
+
+//
+//[Name] Clear buffer(s)
+//[Format]
+//ASCII DLE DC4 fn d1 d2 d3 d4 d5 d6 d7
+//Hex 10 14 08 01 03 14 01 06 02 08
+//Decimal 16 20 8 1 3 20 1 6 2 8
+
+
+_serial.putc(0x10);
+_serial.putc(0x14);
+_serial.putc(0x08);
+_serial.putc(0x01);
+_serial.putc(0x03);
+_serial.putc(0x14);
+_serial.putc(0x01);
+_serial.putc(0x06);
+_serial.putc(0x02);
+_serial.putc(0x08);
+
+}
+
+void EPSON::putHorizontaltab(void)
+{
+ _serial.putc(0x09);
+}
+
+void EPSON::setDoubleSizeHeight(void)
+{
+ _serial.printf("\x1D\x21\x01");
+}
+
+void EPSON::clearDoubleSizeHeight(void)
+{
+ _serial.printf("\x1D\x21\x00");
+}
+
+void EPSON::setDoubleSizeWidth(void)
+{
+ _serial.printf("\x1D\x21\x10");
+}
+
+void EPSON::clearDoubleSizeWidth(void)
+{
+ _serial.printf("\x1D\x21\x00");
+}
+
+void EPSON::setLargeFont(void)
+{
+ _serial.printf("\x1D\x21\x11");
+}
+
+void EPSON::clearLargeFont()
+{
+ _serial.printf("\x1D\x21\x00");
+}
+
+void EPSON::setANKFont(uint32_t font)
+{
+ _serial.putc(0x1B);
+ _serial.putc(0x68);
+ _serial.putc(font);
+}
+
+void EPSON::setKanjiFont(uint32_t font)
+{
+ _serial.putc(0x12);
+ _serial.putc(0x53);
+ _serial.putc(font);
+}
+
+void EPSON::printQRCode(uint32_t err, const char* param)
+{
+ uint32_t len = strlen(param);
+ char buf[4] = {0x1D, 0x78};
+ buf[2] = err;
+ buf[3] = len;
+ for (uint32_t i = 0; i < sizeof(buf); i++) {
+ _serial.putc(buf[i]);
+ }
+ for (uint32_t i = 0; i < len; i++) {
+ _serial.putc(param[i]);
+ }
+}
+
+void EPSON::printBarCode(uint32_t code, const char* param)
+{
+ char buf[3] = {0x1D, 0x6B};
+ buf[2] = code;
+ for (uint32_t i = 0; i < sizeof(buf); i++) {
+ _serial.putc(buf[i]);
+ }
+ for (uint32_t i = 0; i < strlen(param); i++) {
+ _serial.putc(param[i]);
+ }
+ _serial.putc('\0');
+}
+
+void EPSON::printBitmapImage(uint32_t mode, uint16_t lines, const uint8_t * image)
+{
+ char buf[3] = {0x1C, 0x2A};
+ buf[2] = mode;
+ for (uint32_t i = 0; i < sizeof(buf); i++) {
+ _serial.putc(buf[i]);
+ }
+ _serial.putc((lines >> 8) & 0xFF); // n1
+ _serial.putc((lines >> 0) & 0xFF); // n2
+
+ if (mode == 0x61) {
+ return;
+ }
+
+ for (uint32_t i = 0; i < (48 * lines); i++) {
+ _serial.putc(image[i]);
+ }
+}
+
+void EPSON::setLineSpaceing(uint32_t space)
+{
+ _serial.putc(0x1B);
+ _serial.putc(0x33);
+ _serial.putc(space);
+}
+
+void EPSON::defaultLineSpaceing()
+{
+ _serial.printf("\x1B\x33\x04");
+}
+
+void EPSON::setPrintDirection(uint32_t direction)
+{
+ _serial.putc(0x1B);
+ _serial.putc(0x49);
+ _serial.putc(direction);
+}
+
+void EPSON::putPaperFeed(uint32_t space)
+{
+ _serial.putc(0x1B);
+ _serial.putc(0x4A);
+ _serial.putc(space);
+}
+
+void EPSON::setInterCharacterSpace(uint32_t space)
+{
+ _serial.putc(0x1B);
+ _serial.putc(0x20);
+ _serial.putc(space);
+}
+
+void EPSON::defaultInterCharacterSpace()
+{
+ _serial.printf("\x1B\x20\x01");
+}
+
+void EPSON::putPrintPosition(uint32_t position)
+{
+ _serial.putc(0x1B);
+ _serial.putc(0x6c);
+ _serial.putc(position);
+}
+
+void EPSON::setScript(script_mode script)
+{
+ _serial.putc(0x1B);
+ _serial.putc(0x73);
+ _serial.putc(script);
+}
+
+
+
+void EPSON::clearScript()
+{
+ _serial.printf("\x1B\x73\x30");
+}
+
+void EPSON::setQuadrupleSize()
+{
+ _serial.printf("\x1C\x57\x31");
+}
+
+void EPSON::clearQuadrupleSize()
+{
+ _serial.printf("\x1C\x57\x30");
+}
+
+void EPSON::setEnlargement(uint32_t width, uint32_t height)
+{
+ _serial.putc(0x1C);
+ _serial.putc(0x65);
+ _serial.putc(width);
+ _serial.putc(height);
+}
+
+void EPSON::clearEnlargement()
+{
+ _serial.printf("\x1C\x65\x31\x31");
+}
+
+void EPSON::setBarCodeHeight(uint32_t height)
+{
+ _serial.putc(0x1D);
+ _serial.putc(0x68);
+ _serial.putc(height);
+}
+
+void EPSON::defaultBarCodeHeight()
+{
+ _serial.printf("\x1D\x68\x50");
+}
+
+
+
+void EPSON::setBarCodeBarSize(uint32_t narrowbar, uint32_t widebar)
+{
+ _serial.putc(0x1D);
+ _serial.putc(0x77);
+ _serial.putc(narrowbar);
+ _serial.putc(widebar);
+}
+
+
+void EPSON::defaultBarCodeBarSize()
+{
+ _serial.printf("\x1D\x77\x02\x05");
+}
+
+int EPSON::_putc(int value)
+{
+ _serial.putc(value);
+ return value;
+}
+
+int EPSON::_getc()
+{
+ return -1;
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/EPSON.h Mon Jul 09 08:07:02 2018 +0000
@@ -0,0 +1,368 @@
+/**
+ ******************************************************************************
+ * @file EPSON.h
+ * @author Shivanand Gowda
+ * @version V1.0.0
+ * @date 21 May 2018
+ * @brief This file contains the class of a EPSON thermal control component
+ ******************************************************************************
+ * @attention
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#ifndef MBED_EPSON_H
+#define MBED_EPSON_H
+
+#include "mbed.h"
+
+#if defined(__CC_ARM)
+// To avoid "invalid multibyte character sequence" warning
+#pragma diag_suppress 870
+#endif
+
+
+class EPSON : public Stream
+{
+public:
+
+ /**
+ * @enum Kanji_font_size
+ * Value of Japanese Kanji font size
+ */
+ enum Kanji_font_size {
+ //! 24x24 dot font
+ KANJI_24x24 = 0x30,
+ //! 16x16 dot font
+ KANJI_16x16,
+ //! Defalut font size
+ KANJI_DEFAULT = KANJI_24x24
+ };
+
+ /**
+ * @enum ANK_font_size
+ * Value of ANK font size
+ */
+ enum ANK_font_size {
+ //! 8x16 dot font
+ ANK_8x16 = 0x30,
+ //! 12x24 dot font
+ ANK_12x24,
+ //! 16x16 dot font
+ ANK_16x16,
+ //! 24x24 dot fot
+ ANK_24x24,
+ //! Defalut font size
+ ANK_DEFAULT = ANK_12x24
+ };
+
+ /**
+ * @enum QRcode_error_level
+ * Value of CQ code error correction level
+ */
+ enum QRcode_error_level {
+ //! Error correction level L (7%)
+ QR_ERR_LVL_L = 0x4C,
+ //! Error correction level M (15%)
+ QR_ERR_LVL_M = 0x4D,
+ //! Error correction level Q (25%)
+ QR_ERR_LVL_Q = 0x51,
+ //! Error correction level H (30%)
+ QR_ERR_LVL_H = 0x48
+ };
+
+ /**
+ * @enum barcode_mode
+ * Value of barcode mode
+ */
+ enum barcode_mode {
+ //! UPC-A : 11-digit, d1-d11, C/D
+ BCODE_UPC_A = 0x30,
+ //! JAN13 : 12-digit, d1-d12, C/D
+ BCODE_JAN13 = 0x32,
+ //! JAN8 : 7-digit, d1-d7, C/D
+ BCODE_JAN8,
+ //! CODE39 : variable, d1-d20, C/D
+ BCODE_CODE39,
+ //! ITF : variable, d1-d20
+ BCODE_ITF,
+ //! CODABAR (NW7) : variable, d1-d20
+ BCODE_CODABAR
+ };
+
+ /**
+ * @enum script_mode
+ * Value of script mode
+ */
+ enum script_mode {
+ //! Cancel script mode
+ SCRIPT_CANCEL = 0,
+ //! Super script
+ SCRIPT_SUPER,
+ //! Sub script
+ SCRIPT_SUB
+ };
+
+ /** Create a EPSON instance
+ * which is connected to specified Serial pin with specified baud rate
+ *
+ * @param tx Serial TX pin
+ * @param baud (option) serial baud rate (default: 9600bps)
+ */
+ EPSON(PinName tx,PinName rx, uint32_t baud = 9600);
+
+ /** Create a EPSON instance
+ * which is connected to specified Serial instance with specified baud rate
+ *
+ * @param serial_obj Serial object (instance)
+ * @param baud (option) serial baud rate (default: 9600bps)
+ */
+ EPSON(Serial &serial_obj, uint32_t baud = 9600);
+
+ /** Destructor of EPSON
+ */
+ virtual ~EPSON();
+
+ /** Initializa EPSON
+ *
+ * Issues initialize command for AS-289R2
+ *
+ */
+ void initialize(void);
+
+ /** Send line feed code
+ * which is connected to specified Serial pin with specified baud rate
+ *
+ * @param lines Number of line feed
+ */
+ void printTest(void);
+ void printnputLineFeed(uint8_t lines);
+ void lineFeed(void);
+ void putHorizontaltab(void);
+
+ void setdefaultLinespacing(void);
+ void setLinespacing(uint8_t lines);
+ void setleftMargin(uint8_t n1, uint8_t n2);
+ void absoluteprintPosition(uint8_t n1, uint8_t n2);
+ void whiteblack(uint8_t n1);
+ void papersensorstatus(void);
+ void carriageReturn(void);
+
+
+
+
+ void printCenter(void);
+ void printLeft(void);
+ void printRight(void);
+
+ void font_ZeroOne(void);
+ void font_Zero(void);
+ void font_OneZero(void);
+ int PrintBarCode(char *data ,int ilen);
+
+
+ void printModes(uint8_t n);
+
+
+
+
+ /** pur Horizontal Tab
+ *
+ */
+
+ void putLineFeed(uint8_t lines);
+
+ /** Clear image buffer of the AS-289R2
+ *
+ */
+ void clearBuffer(void);
+
+ /** Set double height size font
+ *
+ */
+ void setDoubleSizeHeight(void);
+
+ /** Set normal height size font
+ *
+ */
+ void clearDoubleSizeHeight(void);
+
+ /** Set double width size font
+ *
+ */
+ void setDoubleSizeWidth(void);
+
+ /** Set normal width size font
+ *
+ */
+ void clearDoubleSizeWidth(void);
+
+ /** Set large size font (48x96)
+ *
+ */
+ void setLargeFont(void);
+
+ /** Set normal size font
+ *
+ */
+ void clearLargeFont(void);
+
+ /** Set ANK font
+ *
+ * @param font ANK font e.g. EPSON::ANK_8x16
+ */
+ void setANKFont(uint32_t font);
+
+ /** Set Kanji font size
+ *
+ * @param font Kanji font e.g. EPSON::KANJI_16x16
+ */
+ void setKanjiFont(uint32_t font);
+
+ /** Print QR code
+ *
+ * @param err QR code error correction level e.g. EPSON::QR_ERR_LVL_M
+ * @param buf Data to be printed
+ */
+ void printQRCode(uint32_t err, const char* buf);
+
+ /** Print Bar code
+ *
+ * @param code Type of Bar code e.g. EPSON::JAN13
+ * @param buf Data to be printed
+ */
+ void printBarCode(uint32_t code, const char* param);
+
+ /** Print bitmap image
+ *
+ * @param cmd Type of operation mode, 0x61: print image buffer, 0x62: register image buffer, 0x63: register -> print, 0x64: print -> register, 0x65: line print
+ * @param lines Number of print line
+ * @param image Data to be printed
+ */
+ void printBitmapImage(uint32_t cmd, uint16_t lines, const uint8_t * image);
+
+ /** Set Line Spaceing
+ *
+ * @param space line spacing
+ */
+ void setLineSpaceing(uint32_t space);
+
+ /** Set as default Line Spaceing
+ *
+ */
+ void defaultLineSpaceing(void);
+
+ /** Set Print Direction
+ *
+ * @param direction Print direction, 0: lister, 1: texter
+ */
+ void setPrintDirection(uint32_t direction);
+
+ /** Send feed code
+ *
+ * @param space Paper feed
+ */
+ void putPaperFeed(uint32_t space);
+
+ /** Set Inter Character Space
+ *
+ * @param space inter-character space
+ */
+ void setInterCharacterSpace(uint32_t space);
+
+ /** Set as default Inter Character Space
+ *
+ */
+ void defaultInterCharacterSpace(void);
+
+ /** Send Print Position
+ *
+ * @param position Print position
+ */
+ void putPrintPosition(uint32_t position);
+
+ /** Set Script
+ *
+ * @param script mode e.g. EPSON::SCRIPT_SUPER
+ */
+ void setScript(script_mode script);
+
+ /** Clear Script
+ *
+ */
+ void clearScript(void);
+
+ /** Set Quadruple size
+ *
+ */
+ void setQuadrupleSize(void);
+
+ /** Clear Quadruple size
+ *
+ */
+ void clearQuadrupleSize(void);
+
+ /** Set Enlargement size
+ *
+ * @param width enlargement
+ * @param height enlargement
+ */
+ void setEnlargement(uint32_t width, uint32_t height);
+
+ /** Clear Enlargement size
+ *
+ */
+ void clearEnlargement(void);
+
+ /** Set BarCode Height size
+ *
+ * @param height Bar height
+ */
+ void setBarCodeHeight(uint32_t height);
+
+ /** Set as default BarCode Height size
+ *
+ */
+ void defaultBarCodeHeight(void);
+
+ /** Set BarCode Bar size
+ *
+ * @param narrowbar narrow bars size
+ * @param widebar wide bars size
+ */
+ void setBarCodeBarSize(uint32_t narrowbar, uint32_t widebar);
+
+ /** Set as default BarCode Bar size
+ *
+ */
+ void defaultBarCodeBarSize(void);
+
+private:
+ Serial *_serial_p;
+ Serial &_serial;
+
+protected:
+ // Stream implementation functions
+ virtual int _putc(int value);
+ virtual int _getc();
+};
+
+#endif
+
+
\ No newline at end of file