void Adafruit_Thermal::writeBytes(uint8_t a, uint8_t b, uint8_t c) { timeoutWait(); PRINTER_PRINT(a); PRINTER_PRINT(b); PRINTER_PRINT(c); timeoutSet(3 * BYTE_TIME); }
void Adafruit_Thermal::printBitmap(int w, int h, Stream *stream) { int rowBytes, rowBytesClipped, rowStart, chunkHeight, x, y, i, c; rowBytes = (w + 7) / 8; // Round up to next byte boundary rowBytesClipped = (rowBytes >= 48) ? 48 : rowBytes; // 384 pixels max width for(rowStart=0; rowStart < h; rowStart += 255) { // Issue up to 255 rows at a time: chunkHeight = h - rowStart; if(chunkHeight > 255) chunkHeight = 255; writeBytes(18, 42, chunkHeight, rowBytesClipped); for(y=0; y < chunkHeight; y++) { for(x=0; x < rowBytesClipped; x++) { while((c = stream->read()) < 0); PRINTER_PRINT((uint8_t)c); } for(i = rowBytes - rowBytesClipped; i>0; i--) { while((c = stream->read()) < 0); } } timeoutSet(chunkHeight * dotPrintTime); } prevByte = '\n'; }
// The underlying method for all high-level printing (e.g. println()). // The inherited Print class handles the rest! size_t Adafruit_Thermal::write(uint8_t c) { if(c != 0x13) { // Strip carriage returns timeoutWait(); PRINTER_PRINT(c); unsigned long d = BYTE_TIME; if((c == '\n') || (column == maxColumn)) { // If newline or wrap d += (prevByte == '\n') ? ((charHeight+lineSpacing) * dotFeedTime) : // Feed line ((charHeight*dotPrintTime)+(lineSpacing*dotFeedTime)); // Text line column = 0; c = '\n'; // Treat wrap as newline on next pass } else { column++; } timeoutSet(d); prevByte = c; } return 1; }
void Adafruit_Thermal::printBitmap(int w, int h, const uint8_t *bitmap, bool fromProgMem) { int rowBytes, rowBytesClipped, rowStart, chunkHeight, x, y, i; rowBytes = (w + 7) / 8; // Round up to next byte boundary rowBytesClipped = (rowBytes >= 48) ? 48 : rowBytes; // 384 pixels max width for(i=rowStart=0; rowStart < h; rowStart += 255) { // Issue up to 255 rows at a time: chunkHeight = h - rowStart; if(chunkHeight > 255) chunkHeight = 255; writeBytes(18, 42, chunkHeight, rowBytesClipped); for(y=0; y < chunkHeight; y++) { for(x=0; x < rowBytesClipped; x++, i++) { PRINTER_PRINT(fromProgMem ? pgm_read_byte(bitmap + i) : *(bitmap+i)); } i += rowBytes - rowBytesClipped; } timeoutSet(chunkHeight * dotPrintTime); } prevByte = '\n'; }
void Adafruit_Thermal::writeBytes(uint8_t a) { timeoutWait(); PRINTER_PRINT(a); timeoutSet(BYTE_TIME); }
////////////////////// not working? void Adafruit_Thermal::tab() { PRINTER_PRINT(9); }
size_t Adafruit_Thermal::write(uint8_t c) { #else void Adafruit_Thermal::write(uint8_t c) { #endif if(c != 0x13) { // Strip carriage returns timeoutWait(); PRINTER_PRINT(c); unsigned long d = BYTE_TIME; if((c == '\n') || (column == maxColumn)) { // If newline or wrap d += (prevByte == '\n') ? ((charHeight+lineSpacing) * dotFeedTime) : // Feed line ((charHeight*dotPrintTime)+(lineSpacing*dotFeedTime)); // Text line column = 0; c = '\n'; // Treat wrap as newline on next pass } else { column++; } timeoutSet(d); prevByte = c; } #if ARDUINO >= 100 return 1; #endif } void Adafruit_Thermal::begin(int heatTime) { _printer = new SERIAL_IMPL(_RX_Pin, _TX_Pin); _printer->begin(BAUDRATE); // The printer can't start receiving data immediately upon power up -- // it needs a moment to cold boot and initialize. Allow at least 1/2 // sec of uptime before printer can receive data. timeoutSet(500000); wake(); reset(); // Description of print settings from page 23 of the manual: // ESC 7 n1 n2 n3 Setting Control Parameter Command // Decimal: 27 55 n1 n2 n3 // Set "max heating dots", "heating time", "heating interval" // n1 = 0-255 Max printing dots, Unit (8dots), Default: 7 (64 dots) // n2 = 3-255 Heating time, Unit (10us), Default: 80 (800us) // n3 = 0-255 Heating interval, Unit (10us), Default: 2 (20us) // The more max heating dots, the more peak current will cost // when printing, the faster printing speed. The max heating // dots is 8*(n1+1). The more heating time, the more density, // but the slower printing speed. If heating time is too short, // blank page may occur. The more heating interval, the more // clear, but the slower printing speed. writeBytes(27, 55); // Esc 7 (print settings) writeBytes(20); // Heating dots (20=balance of darkness vs no jams) writeBytes(heatTime); // Library default = 255 (max) writeBytes(250); // Heat interval (500 uS = slower, but darker) // Description of print density from page 23 of the manual: // DC2 # n Set printing density // Decimal: 18 35 n // D4..D0 of n is used to set the printing density. Density is // 50% + 5% * n(D4-D0) printing density. // D7..D5 of n is used to set the printing break time. Break time // is n(D7-D5)*250us. // (Unsure of the default value for either -- not documented) #define printDensity 40 // 120% (? can go higher, text is darker but fuzzy) #define printBreakTime 4 // 500 uS writeBytes(18, 35); // DC2 # (print density) writeBytes((printBreakTime << 5) | printDensity); dotPrintTime = 30000; // See comments near top of file for dotFeedTime = 2100; // an explanation of these values. }