EPSON Thermal Printer RS232 Interface Model --TM-T82II

Dependents:   EPSON_Printer

Files at this revision

API Documentation at this revision

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
diff -r 000000000000 -r 19ca061f5bcf EPSON.cpp
--- /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
diff -r 000000000000 -r 19ca061f5bcf EPSON.h
--- /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