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:
Mon Jan 20 00:33:01 2020 +0900
Revision:
10:b7d6c02caf97
Parent:
9:7f8acb87da7c
Child:
11:4699cb4e4cfe
Use RawSerial and add rx param

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MACRUM 7:f9b9162c7e9d 1 /**
MACRUM 7:f9b9162c7e9d 2 ******************************************************************************
MACRUM 7:f9b9162c7e9d 3 * @file AS289R2.cpp
MACRUM 7:f9b9162c7e9d 4 * @author Toyomasa Watarai
MACRUM 10:b7d6c02caf97 5 * @version V1.1.0
MACRUM 10:b7d6c02caf97 6 * @date 20 January 2020
MACRUM 7:f9b9162c7e9d 7 * @brief AS289R2 class implementation
MACRUM 7:f9b9162c7e9d 8 ******************************************************************************
MACRUM 7:f9b9162c7e9d 9 * @attention
MACRUM 0:982a7efb3ef0 10 *
MACRUM 0:982a7efb3ef0 11 * Permission is hereby granted, free of charge, to any person obtaining a copy
MACRUM 0:982a7efb3ef0 12 * of this software and associated documentation files (the "Software"), to deal
MACRUM 0:982a7efb3ef0 13 * in the Software without restriction, including without limitation the rights
MACRUM 0:982a7efb3ef0 14 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
MACRUM 0:982a7efb3ef0 15 * copies of the Software, and to permit persons to whom the Software is
MACRUM 0:982a7efb3ef0 16 * furnished to do so, subject to the following conditions:
MACRUM 0:982a7efb3ef0 17 *
MACRUM 0:982a7efb3ef0 18 * The above copyright notice and this permission notice shall be included in
MACRUM 0:982a7efb3ef0 19 * all copies or substantial portions of the Software.
MACRUM 0:982a7efb3ef0 20 *
MACRUM 0:982a7efb3ef0 21 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
MACRUM 0:982a7efb3ef0 22 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
MACRUM 0:982a7efb3ef0 23 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
MACRUM 0:982a7efb3ef0 24 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
MACRUM 0:982a7efb3ef0 25 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
MACRUM 0:982a7efb3ef0 26 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
MACRUM 0:982a7efb3ef0 27 * THE SOFTWARE.
MACRUM 0:982a7efb3ef0 28 */
MACRUM 0:982a7efb3ef0 29
MACRUM 0:982a7efb3ef0 30 #include "mbed.h"
MACRUM 0:982a7efb3ef0 31 #include "AS289R2.h"
MACRUM 0:982a7efb3ef0 32
MACRUM 10:b7d6c02caf97 33 AS289R2::AS289R2(PinName tx, PinName rx, uint32_t baud)
MACRUM 0:982a7efb3ef0 34 :
MACRUM 10:b7d6c02caf97 35 _serial_p(new RawSerial(tx, rx)),
MACRUM 0:982a7efb3ef0 36 _serial(*_serial_p)
MACRUM 0:982a7efb3ef0 37 {
MACRUM 0:982a7efb3ef0 38 _serial.baud(baud);
MACRUM 0:982a7efb3ef0 39 initialize();
MACRUM 0:982a7efb3ef0 40 }
MACRUM 0:982a7efb3ef0 41
MACRUM 10:b7d6c02caf97 42 AS289R2::AS289R2(RawSerial &serial_obj, uint32_t baud)
MACRUM 0:982a7efb3ef0 43 :
MACRUM 0:982a7efb3ef0 44 _serial_p(NULL),
MACRUM 0:982a7efb3ef0 45 _serial(serial_obj)
MACRUM 0:982a7efb3ef0 46 {
MACRUM 1:ee311b8f969b 47 _serial.baud(baud);
MACRUM 0:982a7efb3ef0 48 initialize();
MACRUM 0:982a7efb3ef0 49 }
MACRUM 0:982a7efb3ef0 50
MACRUM 0:982a7efb3ef0 51 AS289R2::~AS289R2()
MACRUM 0:982a7efb3ef0 52 {
MACRUM 0:982a7efb3ef0 53 }
MACRUM 0:982a7efb3ef0 54
MACRUM 0:982a7efb3ef0 55 void AS289R2::initialize(void)
MACRUM 0:982a7efb3ef0 56 {
MACRUM 0:982a7efb3ef0 57 _serial.putc(0x1B);
MACRUM 0:982a7efb3ef0 58 _serial.putc(0x40);
MACRUM 0:982a7efb3ef0 59 }
MACRUM 0:982a7efb3ef0 60
MACRUM 0:982a7efb3ef0 61 void AS289R2::putLineFeed(uint32_t lines)
MACRUM 0:982a7efb3ef0 62 {
MACRUM 0:982a7efb3ef0 63 for(uint32_t i = 0; i < lines; i++) {
MACRUM 0:982a7efb3ef0 64 _serial.putc('\r');
MACRUM 0:982a7efb3ef0 65 }
MACRUM 0:982a7efb3ef0 66 }
MACRUM 0:982a7efb3ef0 67
MACRUM 0:982a7efb3ef0 68 void AS289R2::clearBuffer(void)
MACRUM 0:982a7efb3ef0 69 {
MACRUM 0:982a7efb3ef0 70 _serial.putc(0x18);
MACRUM 0:982a7efb3ef0 71 }
MACRUM 0:982a7efb3ef0 72
MACRUM 0:982a7efb3ef0 73 void AS289R2::setDoubleSizeHeight(void)
MACRUM 0:982a7efb3ef0 74 {
MACRUM 0:982a7efb3ef0 75 _serial.printf("\x1B\x4E\x31");
MACRUM 0:982a7efb3ef0 76 }
MACRUM 0:982a7efb3ef0 77
MACRUM 0:982a7efb3ef0 78 void AS289R2::clearDoubleSizeHeight(void)
MACRUM 0:982a7efb3ef0 79 {
MACRUM 0:982a7efb3ef0 80 _serial.printf("\x1B\x4E\x30");
MACRUM 0:982a7efb3ef0 81 }
MACRUM 0:982a7efb3ef0 82
MACRUM 0:982a7efb3ef0 83 void AS289R2::setDoubleSizeWidth(void)
MACRUM 0:982a7efb3ef0 84 {
MACRUM 0:982a7efb3ef0 85 _serial.printf("\x1B\x57\x31");
MACRUM 0:982a7efb3ef0 86 }
MACRUM 0:982a7efb3ef0 87
MACRUM 0:982a7efb3ef0 88 void AS289R2::clearDoubleSizeWidth(void)
MACRUM 0:982a7efb3ef0 89 {
MACRUM 0:982a7efb3ef0 90 _serial.printf("\x1B\x57\x30");
MACRUM 0:982a7efb3ef0 91 }
MACRUM 0:982a7efb3ef0 92
MACRUM 0:982a7efb3ef0 93 void AS289R2::setLargeFont(void)
MACRUM 0:982a7efb3ef0 94 {
MACRUM 0:982a7efb3ef0 95 _serial.printf("\x1B\x4C\x31");
MACRUM 0:982a7efb3ef0 96 }
MACRUM 0:982a7efb3ef0 97
MACRUM 0:982a7efb3ef0 98 void AS289R2::clearLargeFont()
MACRUM 0:982a7efb3ef0 99 {
MACRUM 0:982a7efb3ef0 100 _serial.printf("\x1B\x4C\x30");
MACRUM 0:982a7efb3ef0 101 }
MACRUM 0:982a7efb3ef0 102
MACRUM 0:982a7efb3ef0 103 void AS289R2::setANKFont(uint32_t font)
MACRUM 0:982a7efb3ef0 104 {
MACRUM 0:982a7efb3ef0 105 _serial.putc(0x1B);
MACRUM 0:982a7efb3ef0 106 _serial.putc(0x68);
MACRUM 0:982a7efb3ef0 107 _serial.putc(font);
MACRUM 0:982a7efb3ef0 108 }
MACRUM 0:982a7efb3ef0 109
MACRUM 0:982a7efb3ef0 110 void AS289R2::setKanjiFont(uint32_t font)
MACRUM 0:982a7efb3ef0 111 {
MACRUM 0:982a7efb3ef0 112 _serial.putc(0x12);
MACRUM 0:982a7efb3ef0 113 _serial.putc(0x53);
MACRUM 0:982a7efb3ef0 114 _serial.putc(font);
MACRUM 0:982a7efb3ef0 115 }
MACRUM 0:982a7efb3ef0 116
MACRUM 2:ce25d0949cbd 117 void AS289R2::printQRCode(uint32_t err, const char* param)
MACRUM 0:982a7efb3ef0 118 {
MACRUM 0:982a7efb3ef0 119 uint32_t len = strlen(param);
MACRUM 0:982a7efb3ef0 120 char buf[4] = {0x1D, 0x78};
MACRUM 0:982a7efb3ef0 121 buf[2] = err;
MACRUM 0:982a7efb3ef0 122 buf[3] = len;
MACRUM 0:982a7efb3ef0 123 for (uint32_t i = 0; i < sizeof(buf); i++) {
MACRUM 0:982a7efb3ef0 124 _serial.putc(buf[i]);
MACRUM 0:982a7efb3ef0 125 }
MACRUM 0:982a7efb3ef0 126 for (uint32_t i = 0; i < len; i++) {
MACRUM 0:982a7efb3ef0 127 _serial.putc(param[i]);
MACRUM 0:982a7efb3ef0 128 }
MACRUM 0:982a7efb3ef0 129 }
MACRUM 0:982a7efb3ef0 130
MACRUM 2:ce25d0949cbd 131 void AS289R2::printBarCode(uint32_t code, const char* param)
MACRUM 0:982a7efb3ef0 132 {
MACRUM 0:982a7efb3ef0 133 char buf[3] = {0x1D, 0x6B};
MACRUM 0:982a7efb3ef0 134 buf[2] = code;
MACRUM 0:982a7efb3ef0 135 for (uint32_t i = 0; i < sizeof(buf); i++) {
MACRUM 0:982a7efb3ef0 136 _serial.putc(buf[i]);
MACRUM 0:982a7efb3ef0 137 }
MACRUM 0:982a7efb3ef0 138 for (uint32_t i = 0; i < strlen(param); i++) {
MACRUM 0:982a7efb3ef0 139 _serial.putc(param[i]);
MACRUM 0:982a7efb3ef0 140 }
MACRUM 0:982a7efb3ef0 141 _serial.putc('\0');
MACRUM 0:982a7efb3ef0 142 }
MACRUM 0:982a7efb3ef0 143
MACRUM 9:7f8acb87da7c 144 void AS289R2::printBitmapImage(uint32_t mode, uint16_t lines, const uint8_t * image)
MACRUM 0:982a7efb3ef0 145 {
MACRUM 0:982a7efb3ef0 146 char buf[3] = {0x1C, 0x2A};
MACRUM 0:982a7efb3ef0 147 buf[2] = mode;
MACRUM 0:982a7efb3ef0 148 for (uint32_t i = 0; i < sizeof(buf); i++) {
MACRUM 0:982a7efb3ef0 149 _serial.putc(buf[i]);
MACRUM 0:982a7efb3ef0 150 }
MACRUM 0:982a7efb3ef0 151 _serial.putc((lines >> 8) & 0xFF); // n1
MACRUM 0:982a7efb3ef0 152 _serial.putc((lines >> 0) & 0xFF); // n2
MACRUM 0:982a7efb3ef0 153
MACRUM 0:982a7efb3ef0 154 if (mode == 0x61) {
MACRUM 0:982a7efb3ef0 155 return;
MACRUM 0:982a7efb3ef0 156 }
MACRUM 0:982a7efb3ef0 157
MACRUM 0:982a7efb3ef0 158 for (uint32_t i = 0; i < (48 * lines); i++) {
MACRUM 0:982a7efb3ef0 159 _serial.putc(image[i]);
MACRUM 0:982a7efb3ef0 160 }
MACRUM 0:982a7efb3ef0 161 }
MACRUM 0:982a7efb3ef0 162
MACRUM 4:a2e0373a9cd1 163 void AS289R2::setLineSpaceing(uint32_t space)
MACRUM 4:a2e0373a9cd1 164 {
MACRUM 4:a2e0373a9cd1 165 _serial.putc(0x1B);
MACRUM 4:a2e0373a9cd1 166 _serial.putc(0x33);
MACRUM 4:a2e0373a9cd1 167 _serial.putc(space);
MACRUM 4:a2e0373a9cd1 168 }
MACRUM 4:a2e0373a9cd1 169
MACRUM 4:a2e0373a9cd1 170 void AS289R2::defaultLineSpaceing()
MACRUM 4:a2e0373a9cd1 171 {
MACRUM 4:a2e0373a9cd1 172 _serial.printf("\x1B\x33\x04");
MACRUM 4:a2e0373a9cd1 173 }
MACRUM 4:a2e0373a9cd1 174
MACRUM 4:a2e0373a9cd1 175 void AS289R2::setPrintDirection(uint32_t direction)
MACRUM 4:a2e0373a9cd1 176 {
MACRUM 4:a2e0373a9cd1 177 _serial.putc(0x1B);
MACRUM 4:a2e0373a9cd1 178 _serial.putc(0x49);
MACRUM 4:a2e0373a9cd1 179 _serial.putc(direction);
MACRUM 4:a2e0373a9cd1 180 }
MACRUM 4:a2e0373a9cd1 181
MACRUM 4:a2e0373a9cd1 182 void AS289R2::putPaperFeed(uint32_t space)
MACRUM 4:a2e0373a9cd1 183 {
MACRUM 4:a2e0373a9cd1 184 _serial.putc(0x1B);
MACRUM 4:a2e0373a9cd1 185 _serial.putc(0x4A);
MACRUM 4:a2e0373a9cd1 186 _serial.putc(space);
MACRUM 4:a2e0373a9cd1 187 }
MACRUM 4:a2e0373a9cd1 188
MACRUM 4:a2e0373a9cd1 189 void AS289R2::setInterCharacterSpace(uint32_t space)
MACRUM 4:a2e0373a9cd1 190 {
MACRUM 4:a2e0373a9cd1 191 _serial.putc(0x1B);
MACRUM 4:a2e0373a9cd1 192 _serial.putc(0x20);
MACRUM 4:a2e0373a9cd1 193 _serial.putc(space);
MACRUM 4:a2e0373a9cd1 194 }
MACRUM 4:a2e0373a9cd1 195
MACRUM 4:a2e0373a9cd1 196 void AS289R2::defaultInterCharacterSpace()
MACRUM 4:a2e0373a9cd1 197 {
MACRUM 4:a2e0373a9cd1 198 _serial.printf("\x1B\x20\x01");
MACRUM 4:a2e0373a9cd1 199 }
MACRUM 4:a2e0373a9cd1 200
MACRUM 4:a2e0373a9cd1 201 void AS289R2::putPrintPosition(uint32_t position)
MACRUM 4:a2e0373a9cd1 202 {
MACRUM 4:a2e0373a9cd1 203 _serial.putc(0x1B);
MACRUM 4:a2e0373a9cd1 204 _serial.putc(0x6c);
MACRUM 4:a2e0373a9cd1 205 _serial.putc(position);
MACRUM 4:a2e0373a9cd1 206 }
MACRUM 4:a2e0373a9cd1 207
MACRUM 7:f9b9162c7e9d 208 void AS289R2::setScript(script_mode script)
MACRUM 4:a2e0373a9cd1 209 {
MACRUM 4:a2e0373a9cd1 210 _serial.putc(0x1B);
MACRUM 4:a2e0373a9cd1 211 _serial.putc(0x73);
MACRUM 4:a2e0373a9cd1 212 _serial.putc(script);
MACRUM 4:a2e0373a9cd1 213 }
MACRUM 4:a2e0373a9cd1 214
MACRUM 4:a2e0373a9cd1 215 void AS289R2::clearScript()
MACRUM 4:a2e0373a9cd1 216 {
MACRUM 4:a2e0373a9cd1 217 _serial.printf("\x1B\x73\x30");
MACRUM 4:a2e0373a9cd1 218 }
MACRUM 4:a2e0373a9cd1 219
MACRUM 4:a2e0373a9cd1 220 void AS289R2::setQuadrupleSize()
MACRUM 4:a2e0373a9cd1 221 {
MACRUM 4:a2e0373a9cd1 222 _serial.printf("\x1C\x57\x31");
MACRUM 4:a2e0373a9cd1 223 }
MACRUM 4:a2e0373a9cd1 224
MACRUM 4:a2e0373a9cd1 225 void AS289R2::clearQuadrupleSize()
MACRUM 4:a2e0373a9cd1 226 {
MACRUM 4:a2e0373a9cd1 227 _serial.printf("\x1C\x57\x30");
MACRUM 4:a2e0373a9cd1 228 }
MACRUM 4:a2e0373a9cd1 229
MACRUM 4:a2e0373a9cd1 230 void AS289R2::setEnlargement(uint32_t width, uint32_t height)
MACRUM 4:a2e0373a9cd1 231 {
MACRUM 4:a2e0373a9cd1 232 _serial.putc(0x1C);
MACRUM 4:a2e0373a9cd1 233 _serial.putc(0x65);
MACRUM 4:a2e0373a9cd1 234 _serial.putc(width);
MACRUM 4:a2e0373a9cd1 235 _serial.putc(height);
MACRUM 4:a2e0373a9cd1 236 }
MACRUM 4:a2e0373a9cd1 237
MACRUM 4:a2e0373a9cd1 238 void AS289R2::clearEnlargement()
MACRUM 4:a2e0373a9cd1 239 {
MACRUM 4:a2e0373a9cd1 240 _serial.printf("\x1C\x65\x31\x31");
MACRUM 4:a2e0373a9cd1 241 }
MACRUM 4:a2e0373a9cd1 242
MACRUM 4:a2e0373a9cd1 243 void AS289R2::setBarCodeHeight(uint32_t height)
MACRUM 4:a2e0373a9cd1 244 {
MACRUM 4:a2e0373a9cd1 245 _serial.putc(0x1D);
MACRUM 4:a2e0373a9cd1 246 _serial.putc(0x68);
MACRUM 4:a2e0373a9cd1 247 _serial.putc(height);
MACRUM 4:a2e0373a9cd1 248 }
MACRUM 4:a2e0373a9cd1 249
MACRUM 4:a2e0373a9cd1 250 void AS289R2::defaultBarCodeHeight()
MACRUM 4:a2e0373a9cd1 251 {
MACRUM 4:a2e0373a9cd1 252 _serial.printf("\x1D\x68\x50");
MACRUM 4:a2e0373a9cd1 253 }
MACRUM 4:a2e0373a9cd1 254
MACRUM 4:a2e0373a9cd1 255 void AS289R2::setBarCodeBarSize(uint32_t narrowbar, uint32_t widebar)
MACRUM 4:a2e0373a9cd1 256 {
MACRUM 4:a2e0373a9cd1 257 _serial.putc(0x1D);
MACRUM 4:a2e0373a9cd1 258 _serial.putc(0x77);
MACRUM 4:a2e0373a9cd1 259 _serial.putc(narrowbar);
MACRUM 4:a2e0373a9cd1 260 _serial.putc(widebar);
MACRUM 4:a2e0373a9cd1 261 }
MACRUM 4:a2e0373a9cd1 262
MACRUM 4:a2e0373a9cd1 263 void AS289R2::defaultBarCodeBarSize()
MACRUM 4:a2e0373a9cd1 264 {
MACRUM 4:a2e0373a9cd1 265 _serial.printf("\x1D\x77\x02\x05");
MACRUM 4:a2e0373a9cd1 266 }
MACRUM 4:a2e0373a9cd1 267
MACRUM 0:982a7efb3ef0 268 int AS289R2::_putc(int value)
MACRUM 0:982a7efb3ef0 269 {
MACRUM 0:982a7efb3ef0 270 _serial.putc(value);
MACRUM 0:982a7efb3ef0 271 return value;
MACRUM 0:982a7efb3ef0 272 }
MACRUM 0:982a7efb3ef0 273
MACRUM 0:982a7efb3ef0 274 int AS289R2::_getc()
MACRUM 0:982a7efb3ef0 275 {
MACRUM 0:982a7efb3ef0 276 return -1;
MACRUM 0:982a7efb3ef0 277 }