Driver for thermal printer using serial communication like http://www.sparkfun.com/products/10438. This is port from arduino library available at http://bildr.org/2011/08/thermal-printer-arduino/

Dependents:   ThermalSample mbedica_on_yehowshua mbedica

Committer:
mimil
Date:
Wed Jul 18 12:58:53 2012 +0000
Revision:
0:fd2be7a1b59f
update of headers

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mimil 0:fd2be7a1b59f 1 /*
mimil 0:fd2be7a1b59f 2 Copyright (c) 2010 bildr community
mimil 0:fd2be7a1b59f 3 Ported to mbed by mimilowns
mimil 0:fd2be7a1b59f 4
mimil 0:fd2be7a1b59f 5 Permission is hereby granted, free of charge, to any person obtaining a copy
mimil 0:fd2be7a1b59f 6 of this software and associated documentation files (the "Software"), to deal
mimil 0:fd2be7a1b59f 7 in the Software without restriction, including without limitation the rights
mimil 0:fd2be7a1b59f 8 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
mimil 0:fd2be7a1b59f 9 copies of the Software, and to permit persons to whom the Software is
mimil 0:fd2be7a1b59f 10 furnished to do so, subject to the following conditions:
mimil 0:fd2be7a1b59f 11
mimil 0:fd2be7a1b59f 12 The above copyright notice and this permission notice shall be included in
mimil 0:fd2be7a1b59f 13 all copies or substantial portions of the Software.
mimil 0:fd2be7a1b59f 14
mimil 0:fd2be7a1b59f 15 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
mimil 0:fd2be7a1b59f 16 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
mimil 0:fd2be7a1b59f 17 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
mimil 0:fd2be7a1b59f 18 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
mimil 0:fd2be7a1b59f 19 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
mimil 0:fd2be7a1b59f 20 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
mimil 0:fd2be7a1b59f 21 THE SOFTWARE.
mimil 0:fd2be7a1b59f 22 */
mimil 0:fd2be7a1b59f 23
mimil 0:fd2be7a1b59f 24 #include "mbed.h"
mimil 0:fd2be7a1b59f 25 #include "Thermal.h"
mimil 0:fd2be7a1b59f 26
mimil 0:fd2be7a1b59f 27
mimil 0:fd2be7a1b59f 28 Thermal::Thermal(PinName tx, PinName rx, int baud) : Serial(tx, rx) {
mimil 0:fd2be7a1b59f 29 Serial::baud(baud);
mimil 0:fd2be7a1b59f 30 //setTimeout(50);
mimil 0:fd2be7a1b59f 31
mimil 0:fd2be7a1b59f 32
mimil 0:fd2be7a1b59f 33 int zero = 0;
mimil 0:fd2be7a1b59f 34
mimil 0:fd2be7a1b59f 35
mimil 0:fd2be7a1b59f 36
mimil 0:fd2be7a1b59f 37 heatTime = 80; // 80 is default from page 23 of datasheet. Controls speed of printing and darkness
mimil 0:fd2be7a1b59f 38 heatInterval = 2; // 2 is default from page 23 of datasheet. Controls speed of printing and darkness
mimil 0:fd2be7a1b59f 39 printDensity = 15; // Not sure what the defaut is. Testing shows the max helps darken text. From page 23.
mimil 0:fd2be7a1b59f 40 printBreakTime = 15; // Not sure what the defaut is. Testing shows the max helps darken text. From page 23.
mimil 0:fd2be7a1b59f 41
mimil 0:fd2be7a1b59f 42
mimil 0:fd2be7a1b59f 43 setHeatTime(heatTime);
mimil 0:fd2be7a1b59f 44 setPrintDensity(printDensity);
mimil 0:fd2be7a1b59f 45
mimil 0:fd2be7a1b59f 46
mimil 0:fd2be7a1b59f 47 setDefault();
mimil 0:fd2be7a1b59f 48 }
mimil 0:fd2be7a1b59f 49
mimil 0:fd2be7a1b59f 50 void Thermal::setDefault()
mimil 0:fd2be7a1b59f 51
mimil 0:fd2be7a1b59f 52 {
mimil 0:fd2be7a1b59f 53 wake();
mimil 0:fd2be7a1b59f 54 justify('L');
mimil 0:fd2be7a1b59f 55 inverseOff();
mimil 0:fd2be7a1b59f 56 doubleHeightOff();
mimil 0:fd2be7a1b59f 57 setLineHeight(32);
mimil 0:fd2be7a1b59f 58 boldOff();
mimil 0:fd2be7a1b59f 59 underlineOff();
mimil 0:fd2be7a1b59f 60 setBarcodeHeight(50);
mimil 0:fd2be7a1b59f 61 setSize('s');
mimil 0:fd2be7a1b59f 62 }
mimil 0:fd2be7a1b59f 63
mimil 0:fd2be7a1b59f 64 void Thermal::test()
mimil 0:fd2be7a1b59f 65
mimil 0:fd2be7a1b59f 66 {
mimil 0:fd2be7a1b59f 67 Serial::printf("Hello World!");
mimil 0:fd2be7a1b59f 68 feed(2);
mimil 0:fd2be7a1b59f 69 }
mimil 0:fd2be7a1b59f 70
mimil 0:fd2be7a1b59f 71
mimil 0:fd2be7a1b59f 72
mimil 0:fd2be7a1b59f 73 void Thermal::setBarcodeHeight(int val)
mimil 0:fd2be7a1b59f 74
mimil 0:fd2be7a1b59f 75 {
mimil 0:fd2be7a1b59f 76 // default is 50
mimil 0:fd2be7a1b59f 77 writeBytes(29, 104, val);
mimil 0:fd2be7a1b59f 78 }
mimil 0:fd2be7a1b59f 79
mimil 0:fd2be7a1b59f 80 void Thermal::printBarcode(char * text){
mimil 0:fd2be7a1b59f 81 writeBytes(29, 107, 0); // GS, K, m!
mimil 0:fd2be7a1b59f 82
mimil 0:fd2be7a1b59f 83 for(int i = 0; i < strlen(text); i ++){
mimil 0:fd2be7a1b59f 84 write(text[i]); //Data
mimil 0:fd2be7a1b59f 85 }
mimil 0:fd2be7a1b59f 86
mimil 0:fd2be7a1b59f 87 write(zero); //Terminator
mimil 0:fd2be7a1b59f 88
mimil 0:fd2be7a1b59f 89 delay(3000); //For some reason we can't immediately have line feeds here
mimil 0:fd2be7a1b59f 90 feed(2);
mimil 0:fd2be7a1b59f 91 }
mimil 0:fd2be7a1b59f 92
mimil 0:fd2be7a1b59f 93 void Thermal::printFancyBarcode(char * text){
mimil 0:fd2be7a1b59f 94 writeBytes(29, 107, 4); // GS, K, Fancy!
mimil 0:fd2be7a1b59f 95
mimil 0:fd2be7a1b59f 96 for(int i = 0; i < strlen(text); i ++){
mimil 0:fd2be7a1b59f 97 write(text[i]); //Data
mimil 0:fd2be7a1b59f 98 }
mimil 0:fd2be7a1b59f 99
mimil 0:fd2be7a1b59f 100 write(zero); //Terminator
mimil 0:fd2be7a1b59f 101
mimil 0:fd2be7a1b59f 102 delay(3000); //For some reason we can't immediately have line feeds here
mimil 0:fd2be7a1b59f 103 feed(2);
mimil 0:fd2be7a1b59f 104 }
mimil 0:fd2be7a1b59f 105
mimil 0:fd2be7a1b59f 106 void Thermal::writeBytes(uint8_t a, uint8_t b)
mimil 0:fd2be7a1b59f 107
mimil 0:fd2be7a1b59f 108 {
mimil 0:fd2be7a1b59f 109 write(a);
mimil 0:fd2be7a1b59f 110 write(b);
mimil 0:fd2be7a1b59f 111 }
mimil 0:fd2be7a1b59f 112
mimil 0:fd2be7a1b59f 113 void Thermal::writeBytes(uint8_t a, uint8_t b, uint8_t c)
mimil 0:fd2be7a1b59f 114
mimil 0:fd2be7a1b59f 115 {
mimil 0:fd2be7a1b59f 116 write(a);
mimil 0:fd2be7a1b59f 117 write(b);
mimil 0:fd2be7a1b59f 118 write(c);
mimil 0:fd2be7a1b59f 119 }
mimil 0:fd2be7a1b59f 120
mimil 0:fd2be7a1b59f 121 void Thermal::writeBytes(uint8_t a, uint8_t b, uint8_t c, uint8_t d)
mimil 0:fd2be7a1b59f 122
mimil 0:fd2be7a1b59f 123 {
mimil 0:fd2be7a1b59f 124 write(a);
mimil 0:fd2be7a1b59f 125 write(b);
mimil 0:fd2be7a1b59f 126 write(c);
mimil 0:fd2be7a1b59f 127 write(d);
mimil 0:fd2be7a1b59f 128 }
mimil 0:fd2be7a1b59f 129
mimil 0:fd2be7a1b59f 130 void Thermal::write(uint8_t a)
mimil 0:fd2be7a1b59f 131 {
mimil 0:fd2be7a1b59f 132 putc(a);
mimil 0:fd2be7a1b59f 133 }
mimil 0:fd2be7a1b59f 134
mimil 0:fd2be7a1b59f 135 void Thermal::delay(uint8_t a)
mimil 0:fd2be7a1b59f 136 {
mimil 0:fd2be7a1b59f 137 wait(a);
mimil 0:fd2be7a1b59f 138 }
mimil 0:fd2be7a1b59f 139
mimil 0:fd2be7a1b59f 140 void Thermal::inverseOn()
mimil 0:fd2be7a1b59f 141
mimil 0:fd2be7a1b59f 142 {
mimil 0:fd2be7a1b59f 143 writeBytes(29, 'B', 1);
mimil 0:fd2be7a1b59f 144 }
mimil 0:fd2be7a1b59f 145
mimil 0:fd2be7a1b59f 146 void Thermal::inverseOff()
mimil 0:fd2be7a1b59f 147
mimil 0:fd2be7a1b59f 148 {
mimil 0:fd2be7a1b59f 149 writeBytes(29, 'B', 0, 10);
mimil 0:fd2be7a1b59f 150 }
mimil 0:fd2be7a1b59f 151
mimil 0:fd2be7a1b59f 152 void Thermal::doubleHeightOn()
mimil 0:fd2be7a1b59f 153
mimil 0:fd2be7a1b59f 154 {
mimil 0:fd2be7a1b59f 155 writeBytes(27, 14);
mimil 0:fd2be7a1b59f 156 }
mimil 0:fd2be7a1b59f 157
mimil 0:fd2be7a1b59f 158 void Thermal::doubleHeightOff()
mimil 0:fd2be7a1b59f 159
mimil 0:fd2be7a1b59f 160 {
mimil 0:fd2be7a1b59f 161 writeBytes(27, 20);
mimil 0:fd2be7a1b59f 162 }
mimil 0:fd2be7a1b59f 163
mimil 0:fd2be7a1b59f 164 void Thermal::boldOn()
mimil 0:fd2be7a1b59f 165
mimil 0:fd2be7a1b59f 166 {
mimil 0:fd2be7a1b59f 167 writeBytes(27, 69, 1);
mimil 0:fd2be7a1b59f 168 }
mimil 0:fd2be7a1b59f 169
mimil 0:fd2be7a1b59f 170 void Thermal::boldOff()
mimil 0:fd2be7a1b59f 171
mimil 0:fd2be7a1b59f 172 {
mimil 0:fd2be7a1b59f 173 writeBytes(27, 69, 0);
mimil 0:fd2be7a1b59f 174 if (linefeedneeded)
mimil 0:fd2be7a1b59f 175 feed();
mimil 0:fd2be7a1b59f 176
mimil 0:fd2be7a1b59f 177 linefeedneeded = false;
mimil 0:fd2be7a1b59f 178 }
mimil 0:fd2be7a1b59f 179
mimil 0:fd2be7a1b59f 180 void Thermal::justify(char value)
mimil 0:fd2be7a1b59f 181
mimil 0:fd2be7a1b59f 182 {
mimil 0:fd2be7a1b59f 183 uint8_t pos = 0;
mimil 0:fd2be7a1b59f 184
mimil 0:fd2be7a1b59f 185
mimil 0:fd2be7a1b59f 186 if(value == 'l' || value == 'L') pos = 0;
mimil 0:fd2be7a1b59f 187 if(value == 'c' || value == 'C') pos = 1;
mimil 0:fd2be7a1b59f 188 if(value == 'r' || value == 'R') pos = 2;
mimil 0:fd2be7a1b59f 189
mimil 0:fd2be7a1b59f 190 writeBytes(0x1B, 0x61, pos);
mimil 0:fd2be7a1b59f 191 }
mimil 0:fd2be7a1b59f 192
mimil 0:fd2be7a1b59f 193 void Thermal::feed(uint8_t x)
mimil 0:fd2be7a1b59f 194
mimil 0:fd2be7a1b59f 195 {
mimil 0:fd2be7a1b59f 196 while (x--)
mimil 0:fd2be7a1b59f 197 write(10);
mimil 0:fd2be7a1b59f 198 }
mimil 0:fd2be7a1b59f 199
mimil 0:fd2be7a1b59f 200 void Thermal::setSize(char value)
mimil 0:fd2be7a1b59f 201
mimil 0:fd2be7a1b59f 202 {
mimil 0:fd2be7a1b59f 203 int size = 0;
mimil 0:fd2be7a1b59f 204
mimil 0:fd2be7a1b59f 205
mimil 0:fd2be7a1b59f 206 if(value == 's' || value == 'S') size = 0;
mimil 0:fd2be7a1b59f 207 if(value == 'm' || value == 'M') size = 10;
mimil 0:fd2be7a1b59f 208 if(value == 'l' || value == 'L') size = 25;
mimil 0:fd2be7a1b59f 209
mimil 0:fd2be7a1b59f 210 writeBytes(29, 33, size, 10);
mimil 0:fd2be7a1b59f 211 // if (linefeedneeded)
mimil 0:fd2be7a1b59f 212 // println("lfn"); //feed();
mimil 0:fd2be7a1b59f 213 //linefeedneeded = false;
mimil 0:fd2be7a1b59f 214 }
mimil 0:fd2be7a1b59f 215
mimil 0:fd2be7a1b59f 216 void Thermal::underlineOff()
mimil 0:fd2be7a1b59f 217
mimil 0:fd2be7a1b59f 218 {
mimil 0:fd2be7a1b59f 219 writeBytes(27, 45, 0, 10);
mimil 0:fd2be7a1b59f 220 }
mimil 0:fd2be7a1b59f 221
mimil 0:fd2be7a1b59f 222
mimil 0:fd2be7a1b59f 223 void Thermal::underlineOn()
mimil 0:fd2be7a1b59f 224
mimil 0:fd2be7a1b59f 225 {
mimil 0:fd2be7a1b59f 226 writeBytes(27, 45, 1);
mimil 0:fd2be7a1b59f 227 }
mimil 0:fd2be7a1b59f 228
mimil 0:fd2be7a1b59f 229 void Thermal::printBitmap(uint8_t w, uint8_t h, const uint8_t *bitmap)
mimil 0:fd2be7a1b59f 230
mimil 0:fd2be7a1b59f 231 {
mimil 0:fd2be7a1b59f 232 writeBytes(18, 42, h, w/8);
mimil 0:fd2be7a1b59f 233 for (uint16_t i=0; i<(w/8) * h; i++) {
mimil 0:fd2be7a1b59f 234 //write(pgm_read_byte(bitmap + i));
mimil 0:fd2be7a1b59f 235 write(*(bitmap + i));
mimil 0:fd2be7a1b59f 236 }
mimil 0:fd2be7a1b59f 237 }
mimil 0:fd2be7a1b59f 238
mimil 0:fd2be7a1b59f 239 void Thermal::wake()
mimil 0:fd2be7a1b59f 240
mimil 0:fd2be7a1b59f 241 {
mimil 0:fd2be7a1b59f 242 writeBytes(27, 61, 1);
mimil 0:fd2be7a1b59f 243 }
mimil 0:fd2be7a1b59f 244
mimil 0:fd2be7a1b59f 245 void Thermal::sleep()
mimil 0:fd2be7a1b59f 246
mimil 0:fd2be7a1b59f 247 {
mimil 0:fd2be7a1b59f 248 writeBytes(27, 61, 0);
mimil 0:fd2be7a1b59f 249 }
mimil 0:fd2be7a1b59f 250
mimil 0:fd2be7a1b59f 251 ////////////////////// not working?
mimil 0:fd2be7a1b59f 252 void Thermal::tab()
mimil 0:fd2be7a1b59f 253
mimil 0:fd2be7a1b59f 254 {
mimil 0:fd2be7a1b59f 255 write(9);
mimil 0:fd2be7a1b59f 256 }
mimil 0:fd2be7a1b59f 257
mimil 0:fd2be7a1b59f 258
mimil 0:fd2be7a1b59f 259 void Thermal::setCharSpacing(int spacing)
mimil 0:fd2be7a1b59f 260
mimil 0:fd2be7a1b59f 261 {
mimil 0:fd2be7a1b59f 262 writeBytes(27, 32, 0, 10);
mimil 0:fd2be7a1b59f 263 }
mimil 0:fd2be7a1b59f 264
mimil 0:fd2be7a1b59f 265
mimil 0:fd2be7a1b59f 266 void Thermal::setLineHeight(int val)
mimil 0:fd2be7a1b59f 267
mimil 0:fd2be7a1b59f 268 {
mimil 0:fd2be7a1b59f 269 writeBytes(27, 51, val); // default is 32
mimil 0:fd2be7a1b59f 270 }
mimil 0:fd2be7a1b59f 271
mimil 0:fd2be7a1b59f 272
mimil 0:fd2be7a1b59f 273
mimil 0:fd2be7a1b59f 274 void Thermal::setHeatTime(int vHeatTime)
mimil 0:fd2be7a1b59f 275
mimil 0:fd2be7a1b59f 276 {
mimil 0:fd2be7a1b59f 277
mimil 0:fd2be7a1b59f 278 heatTime = vHeatTime;
mimil 0:fd2be7a1b59f 279
mimil 0:fd2be7a1b59f 280 write(27);
mimil 0:fd2be7a1b59f 281
mimil 0:fd2be7a1b59f 282 write(55);
mimil 0:fd2be7a1b59f 283
mimil 0:fd2be7a1b59f 284 write(7); //Default 64 dots = 8*('7'+1)
mimil 0:fd2be7a1b59f 285
mimil 0:fd2be7a1b59f 286 write(heatTime); //Default 80 or 800us
mimil 0:fd2be7a1b59f 287
mimil 0:fd2be7a1b59f 288 write(heatInterval); //Default 2 or 20us
mimil 0:fd2be7a1b59f 289
mimil 0:fd2be7a1b59f 290 }
mimil 0:fd2be7a1b59f 291
mimil 0:fd2be7a1b59f 292
mimil 0:fd2be7a1b59f 293
mimil 0:fd2be7a1b59f 294 void Thermal::setHeatInterval(int vHeatInterval)
mimil 0:fd2be7a1b59f 295
mimil 0:fd2be7a1b59f 296 {
mimil 0:fd2be7a1b59f 297
mimil 0:fd2be7a1b59f 298 heatInterval = vHeatInterval;
mimil 0:fd2be7a1b59f 299
mimil 0:fd2be7a1b59f 300 write(27);
mimil 0:fd2be7a1b59f 301
mimil 0:fd2be7a1b59f 302 write(55);
mimil 0:fd2be7a1b59f 303
mimil 0:fd2be7a1b59f 304 write(7); //Default 64 dots = 8*('7'+1)
mimil 0:fd2be7a1b59f 305
mimil 0:fd2be7a1b59f 306 write(heatTime); //Default 80 or 800us
mimil 0:fd2be7a1b59f 307
mimil 0:fd2be7a1b59f 308 write(heatInterval); //Default 2 or 20us
mimil 0:fd2be7a1b59f 309
mimil 0:fd2be7a1b59f 310 }
mimil 0:fd2be7a1b59f 311
mimil 0:fd2be7a1b59f 312
mimil 0:fd2be7a1b59f 313
mimil 0:fd2be7a1b59f 314 void Thermal::setPrintDensity(char vPrintDensity)
mimil 0:fd2be7a1b59f 315
mimil 0:fd2be7a1b59f 316 {
mimil 0:fd2be7a1b59f 317
mimil 0:fd2be7a1b59f 318 //Modify the print density and timeout
mimil 0:fd2be7a1b59f 319
mimil 0:fd2be7a1b59f 320 printDensity = vPrintDensity;
mimil 0:fd2be7a1b59f 321
mimil 0:fd2be7a1b59f 322 write(18);
mimil 0:fd2be7a1b59f 323
mimil 0:fd2be7a1b59f 324 write(35);
mimil 0:fd2be7a1b59f 325
mimil 0:fd2be7a1b59f 326 int printSetting = (printDensity<<4) | printBreakTime;
mimil 0:fd2be7a1b59f 327
mimil 0:fd2be7a1b59f 328 write(printSetting); //Combination of printDensity and printBreakTime
mimil 0:fd2be7a1b59f 329
mimil 0:fd2be7a1b59f 330 }
mimil 0:fd2be7a1b59f 331
mimil 0:fd2be7a1b59f 332
mimil 0:fd2be7a1b59f 333
mimil 0:fd2be7a1b59f 334 void Thermal::setPrintBreakTime(char vPrintBreakTime)
mimil 0:fd2be7a1b59f 335
mimil 0:fd2be7a1b59f 336 {
mimil 0:fd2be7a1b59f 337
mimil 0:fd2be7a1b59f 338 //Modify the print density and timeout
mimil 0:fd2be7a1b59f 339
mimil 0:fd2be7a1b59f 340 printBreakTime = vPrintBreakTime;
mimil 0:fd2be7a1b59f 341
mimil 0:fd2be7a1b59f 342 write(18);
mimil 0:fd2be7a1b59f 343
mimil 0:fd2be7a1b59f 344 write(35);
mimil 0:fd2be7a1b59f 345
mimil 0:fd2be7a1b59f 346 int printSetting = (printDensity<<4) | printBreakTime;
mimil 0:fd2be7a1b59f 347
mimil 0:fd2be7a1b59f 348 write(printSetting); //Combination of printDensity and printBreakTime
mimil 0:fd2be7a1b59f 349
mimil 0:fd2be7a1b59f 350 }
mimil 0:fd2be7a1b59f 351