Increased SPI frequency from 5Mhz to 10MHz
Fork of RA8875 by
Diff: GraphicsDisplay.cpp
- Revision:
- 112:325ca91bc03d
- Parent:
- 111:efe436c43aba
- Child:
- 113:843888f7785b
- Child:
- 114:dbfb996bfbf3
diff -r efe436c43aba -r 325ca91bc03d GraphicsDisplay.cpp --- a/GraphicsDisplay.cpp Mon Apr 25 01:43:59 2016 +0000 +++ b/GraphicsDisplay.cpp Wed Apr 27 01:29:55 2016 +0000 @@ -270,7 +270,7 @@ unsigned int i, offset; int padd,j; #ifdef DEBUG - uint32_t start_data; + //uint32_t start_data; #endif // Now, Read the bitmap info header @@ -278,11 +278,14 @@ HexDump("BMP_Info", (uint8_t *)&BMP_Info, sizeof(BMP_Info)); BPP_t = BMP_Info.biBitCount; INFO("biBitCount %04X", BPP_t); - if (BPP_t != 4 && BPP_t != 8 && BPP_t != 16 && BPP_t != 24) { // Support 4, 8, 16, 24-bits per pixel + if (BPP_t != 1 && BPP_t != 4 && BPP_t != 8 && BPP_t != 16 && BPP_t != 24) { // Support 4, 8, 16, 24-bits per pixel fclose(Image); return(not_supported_format); } - + if (BMP_Info.biCompression != 0) { // Only the "no comporession" option is supported. + fclose(Image); + return(not_supported_format); + } PixelHeight = BMP_Info.biHeight; PixelWidth = BMP_Info.biWidth; INFO("(%d,%d) (%d,%d) (%d,%d)", x,y, PixelWidth,PixelHeight, width(), height()); @@ -321,38 +324,33 @@ return(not_enough_ram); } - // the Raw Data records are padded to a multiple of 4 bytes - int recordSize = 2; - if (BPP_t == 4) { - recordSize = 1; - } else if (BPP_t == 8) { - recordSize = 1; - } else if (BPP_t == 16) { - recordSize = 2; - } else if (BPP_t == 24) { - recordSize = 3; - } - padd = -1; - do { - padd++; - } while ((PixelWidth * recordSize + padd) % 4 != 0); + padd = (lineBufSize % 4); + if (padd) + padd = 4 - padd; // Define window for top to bottom and left to right so writing auto-wraps rect_t restore = windowrect; window(x,y, PixelWidth,PixelHeight); SetGraphicsCursor(x, y); _StartGraphicsStream(); - - //start_data = BMP_Header.bfOffBits; - HexDump("Raw Data", (uint8_t *)&start_data, 32); + + //start_data = BMP_Info.bfOffBits; + //HexDump("Raw Data", (uint8_t *)&start_data, 32); INFO("(%d,%d) (%d,%d), [%d,%d]", x,y, PixelWidth,PixelHeight, lineBufSize, padd); for (j = PixelHeight - 1; j >= 0; j--) { //Lines bottom up offset = fileOffset + j * (lineBufSize + padd); // start of line fseek(Image, offset, SEEK_SET); fread(lineBuffer, 1, lineBufSize, Image); // read a line - slow ! //INFO("offset: %6X", offset); + //HexDump("Line", lineBuffer, lineBufSize); for (i = 0; i < PixelWidth; i++) { // copy pixel data to TFT - if (BPP_t == 4) { + if (BPP_t == 1) { + uint8_t dPix = lineBuffer[i/8]; + uint8_t bMask = 0x80 >> (i % 8); + uint8_t bit = (bMask & dPix) ? 0 : 1; + //INFO("%02X & %02X ? => %02X", dPix, bMask, bit); + pixelBuffer[i] = RGBQuadToRGB16(colorPalette, bit); + } else if (BPP_t == 4) { uint8_t dPix = lineBuffer[i/2]; if ((i & 1) == 0) dPix >>= 4; @@ -408,6 +406,7 @@ fclose(Image); return(not_bmp_format); } + INFO("bfOffits %04X", BMP_Header.bfOffBits); RetCode_t rt = _RenderBitmap(x, y, BMP_Header.bfOffBits, Image); if (rt != noerror) { return rt;