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 |
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