Fix for recent Adafruit_GFX change and PROGMEM kludges

This commit is contained in:
Phillip Burgess
2013-07-05 11:40:09 -07:00
parent b229812d29
commit 2926bacdbc
7 changed files with 98 additions and 175 deletions
+5 -4
View File
@@ -4,7 +4,9 @@
// Graphics library by ladyada/adafruit with init code from Rossum
// MIT license
#ifdef __AVR__
#include <avr/pgmspace.h>
#endif
#include "pins_arduino.h"
#include "wiring_private.h"
#include "Adafruit_TFTLCD.h"
@@ -83,7 +85,8 @@
// Constructor for breakout board (configurable LCD control lines).
// Can still use this w/shield, but parameters are ignored.
Adafruit_TFTLCD::Adafruit_TFTLCD(
uint8_t cs, uint8_t cd, uint8_t wr, uint8_t rd, uint8_t reset) {
uint8_t cs, uint8_t cd, uint8_t wr, uint8_t rd, uint8_t reset) :
Adafruit_GFX(TFTWIDTH, TFTHEIGHT) {
#ifndef USE_ADAFRUIT_SHIELD_PINOUT
// Convert pin numbers to registers and bitmasks
@@ -118,7 +121,7 @@ Adafruit_TFTLCD::Adafruit_TFTLCD(
}
// Constructor for shield (fixed LCD control lines)
Adafruit_TFTLCD::Adafruit_TFTLCD(void) {
Adafruit_TFTLCD::Adafruit_TFTLCD(void) : Adafruit_GFX(TFTWIDTH, TFTHEIGHT) {
init();
}
@@ -259,8 +262,6 @@ static const uint16_t ILI932x_regValues[] PROGMEM = {
void Adafruit_TFTLCD::begin(uint16_t id) {
uint8_t i = 0;
constructor(TFTWIDTH, TFTHEIGHT);
reset();
if((id == 0x9325) || (id == 0x9328)) {
+27 -40
View File
@@ -45,12 +45,12 @@ Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
void setup(void) {
Serial.begin(9600);
progmemPrintln(PSTR("TFT LCD test"));
Serial.println(F("TFT LCD test"));
#ifdef USE_ADAFRUIT_SHIELD_PINOUT
progmemPrintln(PSTR("Using Adafruit 2.8\" TFT Arduino Shield Pinout"));
Serial.println(F("Using Adafruit 2.8\" TFT Arduino Shield Pinout"));
#else
progmemPrintln(PSTR("Using Adafruit 2.8\" TFT Breakout Board Pinout"));
Serial.println(F("Using Adafruit 2.8\" TFT Breakout Board Pinout"));
#endif
tft.reset();
@@ -58,75 +58,75 @@ void setup(void) {
uint16_t identifier = tft.readID();
if(identifier == 0x9325) {
progmemPrintln(PSTR("Found ILI9325 LCD driver"));
Serial.println(F("Found ILI9325 LCD driver"));
} else if(identifier == 0x9328) {
progmemPrintln(PSTR("Found ILI9328 LCD driver"));
Serial.println(F("Found ILI9328 LCD driver"));
} else if(identifier == 0x7575) {
progmemPrintln(PSTR("Found HX8347G LCD driver"));
Serial.println(F("Found HX8347G LCD driver"));
} else {
progmemPrint(PSTR("Unknown LCD driver chip: "));
Serial.print(F("Unknown LCD driver chip: "));
Serial.println(identifier, HEX);
progmemPrintln(PSTR("If using the Adafruit 2.8\" TFT Arduino shield, the line:"));
progmemPrintln(PSTR(" #define USE_ADAFRUIT_SHIELD_PINOUT"));
progmemPrintln(PSTR("should appear in the library header (Adafruit_TFT.h)."));
progmemPrintln(PSTR("If using the breakout board, it should NOT be #defined!"));
progmemPrintln(PSTR("Also if using the breakout, double-check that all wiring"));
progmemPrintln(PSTR("matches the tutorial."));
Serial.println(F("If using the Adafruit 2.8\" TFT Arduino shield, the line:"));
Serial.println(F(" #define USE_ADAFRUIT_SHIELD_PINOUT"));
Serial.println(F("should appear in the library header (Adafruit_TFT.h)."));
Serial.println(F("If using the breakout board, it should NOT be #defined!"));
Serial.println(F("Also if using the breakout, double-check that all wiring"));
Serial.println(F("matches the tutorial."));
return;
}
tft.begin(identifier);
progmemPrintln(PSTR("Benchmark Time (microseconds)"));
Serial.println(F("Benchmark Time (microseconds)"));
progmemPrint(PSTR("Screen fill "));
Serial.print(F("Screen fill "));
Serial.println(testFillScreen());
delay(500);
progmemPrint(PSTR("Text "));
Serial.print(F("Text "));
Serial.println(testText());
delay(3000);
progmemPrint(PSTR("Lines "));
Serial.print(F("Lines "));
Serial.println(testLines(CYAN));
delay(500);
progmemPrint(PSTR("Horiz/Vert Lines "));
Serial.print(F("Horiz/Vert Lines "));
Serial.println(testFastLines(RED, BLUE));
delay(500);
progmemPrint(PSTR("Rectangles (outline) "));
Serial.print(F("Rectangles (outline) "));
Serial.println(testRects(GREEN));
delay(500);
progmemPrint(PSTR("Rectangles (filled) "));
Serial.print(F("Rectangles (filled) "));
Serial.println(testFilledRects(YELLOW, MAGENTA));
delay(500);
progmemPrint(PSTR("Circles (filled) "));
Serial.print(F("Circles (filled) "));
Serial.println(testFilledCircles(10, MAGENTA));
progmemPrint(PSTR("Circles (outline) "));
Serial.print(F("Circles (outline) "));
Serial.println(testCircles(10, WHITE));
delay(500);
progmemPrint(PSTR("Triangles (outline) "));
Serial.print(F("Triangles (outline) "));
Serial.println(testTriangles());
delay(500);
progmemPrint(PSTR("Triangles (filled) "));
Serial.print(F("Triangles (filled) "));
Serial.println(testFilledTriangles());
delay(500);
progmemPrint(PSTR("Rounded rects (outline) "));
Serial.print(F("Rounded rects (outline) "));
Serial.println(testRoundRects());
delay(500);
progmemPrint(PSTR("Rounded rects (filled) "));
Serial.print(F("Rounded rects (filled) "));
Serial.println(testFilledRoundRects());
delay(500);
progmemPrintln(PSTR("Done!"));
Serial.println(F("Done!"));
}
void loop(void) {
@@ -378,16 +378,3 @@ unsigned long testFilledRoundRects() {
return micros() - start;
}
// Copy string from flash to serial port
// Source string MUST be inside a PSTR() declaration!
void progmemPrint(const char *str) {
char c;
while(c = pgm_read_byte(str++)) Serial.print(c);
}
// Same as above, with trailing newline
void progmemPrintln(const char *str) {
progmemPrint(str);
Serial.println();
}
+15 -28
View File
@@ -45,12 +45,12 @@ Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
void setup(void) {
Serial.begin(9600);
progmemPrintln(PSTR("TFT LCD test"));
Serial.println(F("TFT LCD test"));
#ifdef USE_ADAFRUIT_SHIELD_PINOUT
progmemPrintln(PSTR("Using Adafruit 2.8\" TFT Arduino Shield Pinout"));
Serial.println(F("Using Adafruit 2.8\" TFT Arduino Shield Pinout"));
#else
progmemPrintln(PSTR("Using Adafruit 2.8\" TFT Breakout Board Pinout"));
Serial.println(F("Using Adafruit 2.8\" TFT Breakout Board Pinout"));
#endif
tft.reset();
@@ -58,20 +58,20 @@ void setup(void) {
uint16_t identifier = tft.readID();
if(identifier == 0x9325) {
progmemPrintln(PSTR("Found ILI9325 LCD driver"));
Serial.println(F("Found ILI9325 LCD driver"));
} else if(identifier == 0x9328) {
progmemPrintln(PSTR("Found ILI9328 LCD driver"));
Serial.println(F("Found ILI9328 LCD driver"));
} else if(identifier == 0x7575) {
progmemPrintln(PSTR("Found HX8347G LCD driver"));
Serial.println(F("Found HX8347G LCD driver"));
} else {
progmemPrint(PSTR("Unknown LCD driver chip: "));
Serial.print(F("Unknown LCD driver chip: "));
Serial.println(identifier, HEX);
progmemPrintln(PSTR("If using the Adafruit 2.8\" TFT Arduino shield, the line:"));
progmemPrintln(PSTR(" #define USE_ADAFRUIT_SHIELD_PINOUT"));
progmemPrintln(PSTR("should appear in the library header (Adafruit_TFT.h)."));
progmemPrintln(PSTR("If using the breakout board, it should NOT be #defined!"));
progmemPrintln(PSTR("Also if using the breakout, double-check that all wiring"));
progmemPrintln(PSTR("matches the tutorial."));
Serial.println(F("If using the Adafruit 2.8\" TFT Arduino shield, the line:"));
Serial.println(F(" #define USE_ADAFRUIT_SHIELD_PINOUT"));
Serial.println(F("should appear in the library header (Adafruit_TFT.h)."));
Serial.println(F("If using the breakout board, it should NOT be #defined!"));
Serial.println(F("Also if using the breakout, double-check that all wiring"));
Serial.println(F("matches the tutorial."));
return;
}
@@ -79,8 +79,8 @@ void setup(void) {
tft.fillScreen(BLACK);
progmemPrintln(PSTR("This is a test of the rotation capabilities of the TFT library!"));
progmemPrintln(PSTR("Press <SEND> (or type a character) to advance"));
Serial.println(F("This is a test of the rotation capabilities of the TFT library!"));
Serial.println(F("Press <SEND> (or type a character) to advance"));
}
void loop(void) {
@@ -217,16 +217,3 @@ void rotatePixel(void) {
}
}
// Copy string from flash to serial port
// Source string MUST be inside a PSTR() declaration!
void progmemPrint(const char *str) {
char c;
while(c = pgm_read_byte(str++)) Serial.print(c);
}
// Same as above, with trailing newline
void progmemPrintln(const char *str) {
progmemPrint(str);
Serial.println();
}
+22 -35
View File
@@ -48,31 +48,31 @@ void setup()
uint16_t identifier = tft.readID();
if(identifier == 0x9325) {
progmemPrintln(PSTR("Found ILI9325 LCD driver"));
Serial.println(F("Found ILI9325 LCD driver"));
} else if(identifier == 0x9328) {
progmemPrintln(PSTR("Found ILI9328 LCD driver"));
Serial.println(F("Found ILI9328 LCD driver"));
} else if(identifier == 0x7575) {
progmemPrintln(PSTR("Found HX8347G LCD driver"));
Serial.println(F("Found HX8347G LCD driver"));
} else {
progmemPrint(PSTR("Unknown LCD driver chip: "));
Serial.print(F("Unknown LCD driver chip: "));
Serial.println(identifier, HEX);
progmemPrintln(PSTR("If using the Adafruit 2.8\" TFT Arduino shield, the line:"));
progmemPrintln(PSTR(" #define USE_ADAFRUIT_SHIELD_PINOUT"));
progmemPrintln(PSTR("should appear in the library header (Adafruit_TFT.h)."));
progmemPrintln(PSTR("If using the breakout board, it should NOT be #defined!"));
progmemPrintln(PSTR("Also if using the breakout, double-check that all wiring"));
progmemPrintln(PSTR("matches the tutorial."));
Serial.println(F("If using the Adafruit 2.8\" TFT Arduino shield, the line:"));
Serial.println(F(" #define USE_ADAFRUIT_SHIELD_PINOUT"));
Serial.println(F("should appear in the library header (Adafruit_TFT.h)."));
Serial.println(F("If using the breakout board, it should NOT be #defined!"));
Serial.println(F("Also if using the breakout, double-check that all wiring"));
Serial.println(F("matches the tutorial."));
return;
}
tft.begin(identifier);
progmemPrint(PSTR("Initializing SD card..."));
Serial.print(F("Initializing SD card..."));
if (!SD.begin(SD_CS)) {
progmemPrintln(PSTR("failed!"));
Serial.println(F("failed!"));
return;
}
progmemPrintln(PSTR("OK!"));
Serial.println(F("OK!"));
bmpDraw("woof.bmp", 0, 0);
delay(1000);
@@ -121,32 +121,32 @@ void bmpDraw(char *filename, int x, int y) {
if((x >= tft.width()) || (y >= tft.height())) return;
Serial.println();
progmemPrint(PSTR("Loading image '"));
Serial.print(F("Loading image '"));
Serial.print(filename);
Serial.println('\'');
// Open requested file on SD card
if ((bmpFile = SD.open(filename)) == NULL) {
progmemPrintln(PSTR("File not found"));
Serial.println(F("File not found"));
return;
}
// Parse BMP header
if(read16(bmpFile) == 0x4D42) { // BMP signature
progmemPrint(PSTR("File size: ")); Serial.println(read32(bmpFile));
Serial.println(F("File size: ")); Serial.println(read32(bmpFile));
(void)read32(bmpFile); // Read & ignore creator bytes
bmpImageoffset = read32(bmpFile); // Start of image data
progmemPrint(PSTR("Image Offset: ")); Serial.println(bmpImageoffset, DEC);
Serial.print(F("Image Offset: ")); Serial.println(bmpImageoffset, DEC);
// Read DIB header
progmemPrint(PSTR("Header size: ")); Serial.println(read32(bmpFile));
Serial.print(F("Header size: ")); Serial.println(read32(bmpFile));
bmpWidth = read32(bmpFile);
bmpHeight = read32(bmpFile);
if(read16(bmpFile) == 1) { // # planes -- must be '1'
bmpDepth = read16(bmpFile); // bits per pixel
progmemPrint(PSTR("Bit Depth: ")); Serial.println(bmpDepth);
Serial.print(F("Bit Depth: ")); Serial.println(bmpDepth);
if((bmpDepth == 24) && (read32(bmpFile) == 0)) { // 0 = uncompressed
goodBmp = true; // Supported BMP format -- proceed!
progmemPrint(PSTR("Image size: "));
Serial.print(F("Image size: "));
Serial.print(bmpWidth);
Serial.print('x');
Serial.println(bmpHeight);
@@ -210,7 +210,7 @@ void bmpDraw(char *filename, int x, int y) {
if(lcdidx > 0) {
tft.pushColors(lcdbuffer, lcdidx, first);
}
progmemPrint(PSTR("Loaded in "));
Serial.print(F("Loaded in "));
Serial.print(millis() - startTime);
Serial.println(" ms");
} // end goodBmp
@@ -218,7 +218,7 @@ void bmpDraw(char *filename, int x, int y) {
}
bmpFile.close();
if(!goodBmp) progmemPrintln(PSTR("BMP format not recognized."));
if(!goodBmp) Serial.println(F("BMP format not recognized."));
}
// These read 16- and 32-bit types from the SD card file.
@@ -241,16 +241,3 @@ uint32_t read32(File f) {
return result;
}
// Copy string from flash to serial port
// Source string MUST be inside a PSTR() declaration!
void progmemPrint(const char *str) {
char c;
while(c = pgm_read_byte(str++)) Serial.print(c);
}
// Same as above, with trailing newline
void progmemPrintln(const char *str) {
progmemPrint(str);
Serial.println();
}
+19 -32
View File
@@ -24,31 +24,31 @@ void setup()
uint16_t identifier = tft.readID();
if(identifier == 0x9325) {
progmemPrintln(PSTR("Found ILI9325 LCD driver"));
Serial.println(F("Found ILI9325 LCD driver"));
} else if(identifier == 0x9328) {
progmemPrintln(PSTR("Found ILI9328 LCD driver"));
Serial.println(F("Found ILI9328 LCD driver"));
} else if(identifier == 0x7575) {
progmemPrintln(PSTR("Found HX8347G LCD driver"));
Serial.println(F("Found HX8347G LCD driver"));
} else {
progmemPrint(PSTR("Unknown LCD driver chip: "));
Serial.print(F("Unknown LCD driver chip: "));
Serial.println(identifier, HEX);
progmemPrintln(PSTR("If using the Adafruit 2.8\" TFT Arduino shield, the line:"));
progmemPrintln(PSTR(" #define USE_ADAFRUIT_SHIELD_PINOUT"));
progmemPrintln(PSTR("should appear in the library header (Adafruit_TFT.h)."));
progmemPrintln(PSTR("If using the breakout board, it should NOT be #defined!"));
progmemPrintln(PSTR("Also if using the breakout, double-check that all wiring"));
progmemPrintln(PSTR("matches the tutorial."));
Serial.println(F("If using the Adafruit 2.8\" TFT Arduino shield, the line:"));
Serial.println(F(" #define USE_ADAFRUIT_SHIELD_PINOUT"));
Serial.println(F("should appear in the library header (Adafruit_TFT.h)."));
Serial.println(F("If using the breakout board, it should NOT be #defined!"));
Serial.println(F("Also if using the breakout, double-check that all wiring"));
Serial.println(F("matches the tutorial."));
return;
}
tft.begin(identifier);
progmemPrint(PSTR("Initializing SD card..."));
Serial.print(F("Initializing SD card..."));
if (!SD.begin(SD_CS)) {
progmemPrintln(PSTR("failed!"));
Serial.println(F("failed!"));
return;
}
progmemPrintln(PSTR("OK!"));
Serial.println(F("OK!"));
spi_save = SPCR;
bmpDraw("woof.bmp", 0, 0);
@@ -109,21 +109,21 @@ void bmpDraw(char *filename, int x, int y) {
// Parse BMP header
if(read16(bmpFile) == 0x4D42) { // BMP signature
progmemPrint(PSTR("File size: ")); Serial.println(read32(bmpFile));
Serial.print(F("File size: ")); Serial.println(read32(bmpFile));
(void)read32(bmpFile); // Read & ignore creator bytes
bmpImageoffset = read32(bmpFile); // Start of image data
progmemPrint(PSTR("Image Offset: ")); Serial.println(bmpImageoffset, DEC);
Serial.print(F("Image Offset: ")); Serial.println(bmpImageoffset, DEC);
// Read DIB header
progmemPrint(PSTR("Header size: ")); Serial.println(read32(bmpFile));
Serial.print(F("Header size: ")); Serial.println(read32(bmpFile));
bmpWidth = read32(bmpFile);
bmpHeight = read32(bmpFile);
if(read16(bmpFile) == 1) { // # planes -- must be '1'
bmpDepth = read16(bmpFile); // bits per pixel
progmemPrint(PSTR("Bit Depth: ")); Serial.println(bmpDepth);
Serial.print(F("Bit Depth: ")); Serial.println(bmpDepth);
if((bmpDepth == 24) && (read32(bmpFile) == 0)) { // 0 = uncompressed
goodBmp = true; // Supported BMP format -- proceed!
progmemPrint(PSTR("Image size: "));
Serial.print(F("Image size: "));
Serial.print(bmpWidth);
Serial.print('x');
Serial.println(bmpHeight);
@@ -192,7 +192,7 @@ void bmpDraw(char *filename, int x, int y) {
SPCR = 0;
tft.pushColors(lcdbuffer, lcdidx, first);
}
progmemPrint(PSTR("Loaded in "));
Serial.print(F("Loaded in "));
Serial.print(millis() - startTime);
Serial.println(" ms");
} // end goodBmp
@@ -223,16 +223,3 @@ uint32_t read32(File f) {
return result;
}
// Copy string from flash to serial port
// Source string MUST be inside a PSTR() declaration!
void progmemPrint(const char *str) {
char c;
while(c = pgm_read_byte(str++)) Serial.print(c);
}
// Same as above, with trailing newline
void progmemPrintln(const char *str) {
progmemPrint(str);
Serial.println();
}
+5 -18
View File
@@ -60,20 +60,20 @@ int oldcolor, currentcolor;
void setup(void) {
Serial.begin(9600);
progmemPrintln(PSTR("Paint!"));
Serial.println(F("Paint!"));
tft.reset();
uint16_t identifier = tft.readID();
if(identifier == 0x9325) {
progmemPrintln(PSTR("Found ILI9325 LCD driver"));
Serial.println(F("Found ILI9325 LCD driver"));
} else if(identifier == 0x9328) {
progmemPrintln(PSTR("Found ILI9328 LCD driver"));
Serial.println(F("Found ILI9328 LCD driver"));
} else if(identifier == 0x7575) {
progmemPrintln(PSTR("Found HX8347G LCD driver"));
Serial.println(F("Found HX8347G LCD driver"));
} else {
progmemPrint(PSTR("Unknown LCD driver chip: "));
Serial.print(F("Unknown LCD driver chip: "));
Serial.println(identifier, HEX);
return;
}
@@ -172,16 +172,3 @@ void loop()
}
}
// Copy string from flash to serial port
// Source string MUST be inside a PSTR() declaration!
void progmemPrint(const char *str) {
char c;
while(c = pgm_read_byte(str++)) Serial.print(c);
}
// Same as above, with trailing newline
void progmemPrintln(const char *str) {
progmemPrint(str);
Serial.println();
}
+5 -18
View File
@@ -49,20 +49,20 @@ int oldcolor, currentcolor;
void setup(void) {
Serial.begin(9600);
progmemPrintln(PSTR("Paint!"));
Serial.println(F("Paint!"));
tft.reset();
uint16_t identifier = tft.readID();
if(identifier == 0x9325) {
progmemPrintln(PSTR("Found ILI9325 LCD driver"));
Serial.println(F("Found ILI9325 LCD driver"));
} else if(identifier == 0x9328) {
progmemPrintln(PSTR("Found ILI9328 LCD driver"));
Serial.println(F("Found ILI9328 LCD driver"));
} else if(identifier == 0x7575) {
progmemPrintln(PSTR("Found HX8347G LCD driver"));
Serial.println(F("Found HX8347G LCD driver"));
} else {
progmemPrint(PSTR("Unknown LCD driver chip: "));
Serial.print(F("Unknown LCD driver chip: "));
Serial.println(identifier, HEX);
return;
}
@@ -161,16 +161,3 @@ void loop()
}
}
// Copy string from flash to serial port
// Source string MUST be inside a PSTR() declaration!
void progmemPrint(const char *str) {
char c;
while(c = pgm_read_byte(str++)) Serial.print(c);
}
// Same as above, with trailing newline
void progmemPrintln(const char *str) {
progmemPrint(str);
Serial.println();
}