AS-289R2 Thermal Printer shield control library

Dependents:   AS-289R2_Hello-World AS-289R2_Hello-World-mbed-OS hybrid_image_as289r2 microbit_AS-289R2 ... more

Committer:
MACRUM
Date:
Sun Sep 04 02:27:12 2016 +0000
Revision:
0:982a7efb3ef0
Child:
1:ee311b8f969b
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MACRUM 0:982a7efb3ef0 1 /* AS289R2 Library, for a Thermal Printer Shield AS-289R2
MACRUM 0:982a7efb3ef0 2 * Copyright (c) 2016, Toyomasa Watarai
MACRUM 0:982a7efb3ef0 3 *
MACRUM 0:982a7efb3ef0 4 * Permission is hereby granted, free of charge, to any person obtaining a copy
MACRUM 0:982a7efb3ef0 5 * of this software and associated documentation files (the "Software"), to deal
MACRUM 0:982a7efb3ef0 6 * in the Software without restriction, including without limitation the rights
MACRUM 0:982a7efb3ef0 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
MACRUM 0:982a7efb3ef0 8 * copies of the Software, and to permit persons to whom the Software is
MACRUM 0:982a7efb3ef0 9 * furnished to do so, subject to the following conditions:
MACRUM 0:982a7efb3ef0 10 *
MACRUM 0:982a7efb3ef0 11 * The above copyright notice and this permission notice shall be included in
MACRUM 0:982a7efb3ef0 12 * all copies or substantial portions of the Software.
MACRUM 0:982a7efb3ef0 13 *
MACRUM 0:982a7efb3ef0 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
MACRUM 0:982a7efb3ef0 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
MACRUM 0:982a7efb3ef0 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
MACRUM 0:982a7efb3ef0 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
MACRUM 0:982a7efb3ef0 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
MACRUM 0:982a7efb3ef0 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
MACRUM 0:982a7efb3ef0 20 * THE SOFTWARE.
MACRUM 0:982a7efb3ef0 21 */
MACRUM 0:982a7efb3ef0 22
MACRUM 0:982a7efb3ef0 23 #include "mbed.h"
MACRUM 0:982a7efb3ef0 24 #include "AS289R2.h"
MACRUM 0:982a7efb3ef0 25
MACRUM 0:982a7efb3ef0 26 AS289R2::AS289R2(PinName tx, uint32_t baud)
MACRUM 0:982a7efb3ef0 27 :
MACRUM 0:982a7efb3ef0 28 _serial_p(new Serial(tx, NC)),
MACRUM 0:982a7efb3ef0 29 _serial(*_serial_p)
MACRUM 0:982a7efb3ef0 30 {
MACRUM 0:982a7efb3ef0 31 _serial.baud(baud);
MACRUM 0:982a7efb3ef0 32 initialize();
MACRUM 0:982a7efb3ef0 33 }
MACRUM 0:982a7efb3ef0 34
MACRUM 0:982a7efb3ef0 35 AS289R2::AS289R2(Serial &serial_obj, uint32_t baud)
MACRUM 0:982a7efb3ef0 36 :
MACRUM 0:982a7efb3ef0 37 _serial_p(NULL),
MACRUM 0:982a7efb3ef0 38 _serial(serial_obj)
MACRUM 0:982a7efb3ef0 39 {
MACRUM 0:982a7efb3ef0 40 _serial.baud(9600);
MACRUM 0:982a7efb3ef0 41 initialize();
MACRUM 0:982a7efb3ef0 42 }
MACRUM 0:982a7efb3ef0 43
MACRUM 0:982a7efb3ef0 44 AS289R2::~AS289R2()
MACRUM 0:982a7efb3ef0 45 {
MACRUM 0:982a7efb3ef0 46 }
MACRUM 0:982a7efb3ef0 47
MACRUM 0:982a7efb3ef0 48 void AS289R2::initialize(void)
MACRUM 0:982a7efb3ef0 49 {
MACRUM 0:982a7efb3ef0 50 _serial.putc(0x1B);
MACRUM 0:982a7efb3ef0 51 _serial.putc(0x40);
MACRUM 0:982a7efb3ef0 52 }
MACRUM 0:982a7efb3ef0 53
MACRUM 0:982a7efb3ef0 54 void AS289R2::putLineFeed(uint32_t lines)
MACRUM 0:982a7efb3ef0 55 {
MACRUM 0:982a7efb3ef0 56 for(uint32_t i = 0; i < lines; i++) {
MACRUM 0:982a7efb3ef0 57 _serial.putc('\r');
MACRUM 0:982a7efb3ef0 58 }
MACRUM 0:982a7efb3ef0 59 }
MACRUM 0:982a7efb3ef0 60
MACRUM 0:982a7efb3ef0 61 void AS289R2::clearBuffer(void)
MACRUM 0:982a7efb3ef0 62 {
MACRUM 0:982a7efb3ef0 63 _serial.putc(0x18);
MACRUM 0:982a7efb3ef0 64 }
MACRUM 0:982a7efb3ef0 65
MACRUM 0:982a7efb3ef0 66 void AS289R2::setDoubleSizeHeight(void)
MACRUM 0:982a7efb3ef0 67 {
MACRUM 0:982a7efb3ef0 68 _serial.printf("\x1B\x4E\x31");
MACRUM 0:982a7efb3ef0 69 }
MACRUM 0:982a7efb3ef0 70
MACRUM 0:982a7efb3ef0 71 void AS289R2::clearDoubleSizeHeight(void)
MACRUM 0:982a7efb3ef0 72 {
MACRUM 0:982a7efb3ef0 73 _serial.printf("\x1B\x4E\x30");
MACRUM 0:982a7efb3ef0 74 }
MACRUM 0:982a7efb3ef0 75
MACRUM 0:982a7efb3ef0 76 void AS289R2::setDoubleSizeWidth(void)
MACRUM 0:982a7efb3ef0 77 {
MACRUM 0:982a7efb3ef0 78 _serial.printf("\x1B\x57\x31");
MACRUM 0:982a7efb3ef0 79 }
MACRUM 0:982a7efb3ef0 80
MACRUM 0:982a7efb3ef0 81 void AS289R2::clearDoubleSizeWidth(void)
MACRUM 0:982a7efb3ef0 82 {
MACRUM 0:982a7efb3ef0 83 _serial.printf("\x1B\x57\x30");
MACRUM 0:982a7efb3ef0 84 }
MACRUM 0:982a7efb3ef0 85
MACRUM 0:982a7efb3ef0 86 void AS289R2::setLargeFont(void)
MACRUM 0:982a7efb3ef0 87 {
MACRUM 0:982a7efb3ef0 88 _serial.printf("\x1B\x4C\x31");
MACRUM 0:982a7efb3ef0 89 }
MACRUM 0:982a7efb3ef0 90
MACRUM 0:982a7efb3ef0 91 void AS289R2::clearLargeFont()
MACRUM 0:982a7efb3ef0 92 {
MACRUM 0:982a7efb3ef0 93 _serial.printf("\x1B\x4C\x30");
MACRUM 0:982a7efb3ef0 94 }
MACRUM 0:982a7efb3ef0 95
MACRUM 0:982a7efb3ef0 96 void AS289R2::setANKFont(uint32_t font)
MACRUM 0:982a7efb3ef0 97 {
MACRUM 0:982a7efb3ef0 98 _serial.putc(0x1B);
MACRUM 0:982a7efb3ef0 99 _serial.putc(0x68);
MACRUM 0:982a7efb3ef0 100 _serial.putc(font);
MACRUM 0:982a7efb3ef0 101 }
MACRUM 0:982a7efb3ef0 102
MACRUM 0:982a7efb3ef0 103 void AS289R2::setKanjiFont(uint32_t font)
MACRUM 0:982a7efb3ef0 104 {
MACRUM 0:982a7efb3ef0 105 _serial.putc(0x12);
MACRUM 0:982a7efb3ef0 106 _serial.putc(0x53);
MACRUM 0:982a7efb3ef0 107 _serial.putc(font);
MACRUM 0:982a7efb3ef0 108 }
MACRUM 0:982a7efb3ef0 109
MACRUM 0:982a7efb3ef0 110 void AS289R2::printQRCode(uint32_t err, char* param)
MACRUM 0:982a7efb3ef0 111 {
MACRUM 0:982a7efb3ef0 112 uint32_t len = strlen(param);
MACRUM 0:982a7efb3ef0 113 char buf[4] = {0x1D, 0x78};
MACRUM 0:982a7efb3ef0 114 buf[2] = err;
MACRUM 0:982a7efb3ef0 115 buf[3] = len;
MACRUM 0:982a7efb3ef0 116 for (uint32_t i = 0; i < sizeof(buf); i++) {
MACRUM 0:982a7efb3ef0 117 _serial.putc(buf[i]);
MACRUM 0:982a7efb3ef0 118 }
MACRUM 0:982a7efb3ef0 119 for (uint32_t i = 0; i < len; i++) {
MACRUM 0:982a7efb3ef0 120 _serial.putc(param[i]);
MACRUM 0:982a7efb3ef0 121 }
MACRUM 0:982a7efb3ef0 122 }
MACRUM 0:982a7efb3ef0 123
MACRUM 0:982a7efb3ef0 124 void AS289R2::printBarCode(uint32_t code, char* param)
MACRUM 0:982a7efb3ef0 125 {
MACRUM 0:982a7efb3ef0 126 char buf[3] = {0x1D, 0x6B};
MACRUM 0:982a7efb3ef0 127 buf[2] = code;
MACRUM 0:982a7efb3ef0 128 for (uint32_t i = 0; i < sizeof(buf); i++) {
MACRUM 0:982a7efb3ef0 129 _serial.putc(buf[i]);
MACRUM 0:982a7efb3ef0 130 }
MACRUM 0:982a7efb3ef0 131 for (uint32_t i = 0; i < strlen(param); i++) {
MACRUM 0:982a7efb3ef0 132 _serial.putc(param[i]);
MACRUM 0:982a7efb3ef0 133 }
MACRUM 0:982a7efb3ef0 134 _serial.putc('\0');
MACRUM 0:982a7efb3ef0 135 }
MACRUM 0:982a7efb3ef0 136
MACRUM 0:982a7efb3ef0 137 void AS289R2::printBitmapImage(uint32_t mode, uint16_t lines, char * image)
MACRUM 0:982a7efb3ef0 138 {
MACRUM 0:982a7efb3ef0 139 char buf[3] = {0x1C, 0x2A};
MACRUM 0:982a7efb3ef0 140 buf[2] = mode;
MACRUM 0:982a7efb3ef0 141 for (uint32_t i = 0; i < sizeof(buf); i++) {
MACRUM 0:982a7efb3ef0 142 _serial.putc(buf[i]);
MACRUM 0:982a7efb3ef0 143 }
MACRUM 0:982a7efb3ef0 144 _serial.putc((lines >> 8) & 0xFF); // n1
MACRUM 0:982a7efb3ef0 145 _serial.putc((lines >> 0) & 0xFF); // n2
MACRUM 0:982a7efb3ef0 146
MACRUM 0:982a7efb3ef0 147 if (mode == 0x61) {
MACRUM 0:982a7efb3ef0 148 return;
MACRUM 0:982a7efb3ef0 149 }
MACRUM 0:982a7efb3ef0 150
MACRUM 0:982a7efb3ef0 151 for (uint32_t i = 0; i < (48 * lines); i++) {
MACRUM 0:982a7efb3ef0 152 _serial.putc(image[i]);
MACRUM 0:982a7efb3ef0 153 }
MACRUM 0:982a7efb3ef0 154 }
MACRUM 0:982a7efb3ef0 155
MACRUM 0:982a7efb3ef0 156 int AS289R2::_putc(int value)
MACRUM 0:982a7efb3ef0 157 {
MACRUM 0:982a7efb3ef0 158 _serial.putc(value);
MACRUM 0:982a7efb3ef0 159 return value;
MACRUM 0:982a7efb3ef0 160 }
MACRUM 0:982a7efb3ef0 161
MACRUM 0:982a7efb3ef0 162 int AS289R2::_getc()
MACRUM 0:982a7efb3ef0 163 {
MACRUM 0:982a7efb3ef0 164 return -1;
MACRUM 0:982a7efb3ef0 165 }