From 2926bacdbc869198f172946eccaa542c05715846 Mon Sep 17 00:00:00 2001 From: Phillip Burgess Date: Fri, 5 Jul 2013 11:40:09 -0700 Subject: [PATCH] Fix for recent Adafruit_GFX change and PROGMEM kludges --- Adafruit_TFTLCD.cpp | 9 +-- examples/graphicstest/graphicstest.pde | 67 ++++++++------------ examples/rotationtest/rotationtest.pde | 43 +++++-------- examples/tftbmp/tftbmp.pde | 57 +++++++---------- examples/tftbmp_shield/tftbmp_shield.pde | 51 ++++++--------- examples/tftpaint/tftpaint.pde | 23 ++----- examples/tftpaint_shield/tftpaint_shield.pde | 23 ++----- 7 files changed, 98 insertions(+), 175 deletions(-) diff --git a/Adafruit_TFTLCD.cpp b/Adafruit_TFTLCD.cpp index d0aad2c..9cd6088 100644 --- a/Adafruit_TFTLCD.cpp +++ b/Adafruit_TFTLCD.cpp @@ -4,7 +4,9 @@ // Graphics library by ladyada/adafruit with init code from Rossum // MIT license +#ifdef __AVR__ #include +#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)) { diff --git a/examples/graphicstest/graphicstest.pde b/examples/graphicstest/graphicstest.pde index a3f660c..0122b2f 100644 --- a/examples/graphicstest/graphicstest.pde +++ b/examples/graphicstest/graphicstest.pde @@ -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(); -} - diff --git a/examples/rotationtest/rotationtest.pde b/examples/rotationtest/rotationtest.pde index 3d067de..6d3d0b9 100644 --- a/examples/rotationtest/rotationtest.pde +++ b/examples/rotationtest/rotationtest.pde @@ -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 (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 (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(); -} - diff --git a/examples/tftbmp/tftbmp.pde b/examples/tftbmp/tftbmp.pde index 8e3ea02..4d20eda 100644 --- a/examples/tftbmp/tftbmp.pde +++ b/examples/tftbmp/tftbmp.pde @@ -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(); -} - diff --git a/examples/tftbmp_shield/tftbmp_shield.pde b/examples/tftbmp_shield/tftbmp_shield.pde index 72815ad..150b4ff 100644 --- a/examples/tftbmp_shield/tftbmp_shield.pde +++ b/examples/tftbmp_shield/tftbmp_shield.pde @@ -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(); -} - diff --git a/examples/tftpaint/tftpaint.pde b/examples/tftpaint/tftpaint.pde index 0ec6a53..3be6b27 100644 --- a/examples/tftpaint/tftpaint.pde +++ b/examples/tftpaint/tftpaint.pde @@ -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(); -} - diff --git a/examples/tftpaint_shield/tftpaint_shield.pde b/examples/tftpaint_shield/tftpaint_shield.pde index 5287ce9..5f7b89d 100644 --- a/examples/tftpaint_shield/tftpaint_shield.pde +++ b/examples/tftpaint_shield/tftpaint_shield.pde @@ -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(); -} -