diff --git a/Processors/TFT_eSPI_ESP32.c b/Processors/TFT_eSPI_ESP32.c index 9d406ca..5498f10 100644 --- a/Processors/TFT_eSPI_ESP32.c +++ b/Processors/TFT_eSPI_ESP32.c @@ -183,11 +183,6 @@ void TFT_eSPI::pushPixels(const void* data_in, uint32_t len) { uint8_t *data = (uint8_t*)data_in; - if(_swapBytes) { - while ( len-- ) {tft_Write_16(*data); data++;} - return; - } - while ( len >=64 ) {spi.writePattern(data, 64, 1); data += 64; len -= 64; } if (len) spi.writePattern(data, len, 1); } @@ -283,82 +278,6 @@ void TFT_eSPI::pushBlock(uint16_t color, uint32_t len){ //while (*_spi_cmd&SPI_USR); } //*/ -/*************************************************************************************** -** Function name: pushSwapBytePixels - for ESP32 -** Description: Write a sequence of pixels with swapped bytes -***************************************************************************************/ -void TFT_eSPI::pushSwapBytePixels(const void* data_in, uint32_t len){ - - uint8_t* data = (uint8_t*)data_in; - uint32_t color[16]; - - if (len > 31) - { - WRITE_PERI_REG(SPI_MOSI_DLEN_REG(SPI_PORT), 511); - while(len>31) - { - uint32_t i = 0; - while(i<16) - { - color[i++] = DAT8TO32(data); - data+=4; - } - while (READ_PERI_REG(SPI_CMD_REG(SPI_PORT))&SPI_USR); - WRITE_PERI_REG(SPI_W0_REG(SPI_PORT), color[0]); - WRITE_PERI_REG(SPI_W1_REG(SPI_PORT), color[1]); - WRITE_PERI_REG(SPI_W2_REG(SPI_PORT), color[2]); - WRITE_PERI_REG(SPI_W3_REG(SPI_PORT), color[3]); - WRITE_PERI_REG(SPI_W4_REG(SPI_PORT), color[4]); - WRITE_PERI_REG(SPI_W5_REG(SPI_PORT), color[5]); - WRITE_PERI_REG(SPI_W6_REG(SPI_PORT), color[6]); - WRITE_PERI_REG(SPI_W7_REG(SPI_PORT), color[7]); - WRITE_PERI_REG(SPI_W8_REG(SPI_PORT), color[8]); - WRITE_PERI_REG(SPI_W9_REG(SPI_PORT), color[9]); - WRITE_PERI_REG(SPI_W10_REG(SPI_PORT), color[10]); - WRITE_PERI_REG(SPI_W11_REG(SPI_PORT), color[11]); - WRITE_PERI_REG(SPI_W12_REG(SPI_PORT), color[12]); - WRITE_PERI_REG(SPI_W13_REG(SPI_PORT), color[13]); - WRITE_PERI_REG(SPI_W14_REG(SPI_PORT), color[14]); - WRITE_PERI_REG(SPI_W15_REG(SPI_PORT), color[15]); - SET_PERI_REG_MASK(SPI_CMD_REG(SPI_PORT), SPI_USR); - len -= 32; - } - } - - if (len > 15) - { - uint32_t i = 0; - while(i<8) - { - color[i++] = DAT8TO32(data); - data+=4; - } - while (READ_PERI_REG(SPI_CMD_REG(SPI_PORT))&SPI_USR); - WRITE_PERI_REG(SPI_MOSI_DLEN_REG(SPI_PORT), 255); - WRITE_PERI_REG(SPI_W0_REG(SPI_PORT), color[0]); - WRITE_PERI_REG(SPI_W1_REG(SPI_PORT), color[1]); - WRITE_PERI_REG(SPI_W2_REG(SPI_PORT), color[2]); - WRITE_PERI_REG(SPI_W3_REG(SPI_PORT), color[3]); - WRITE_PERI_REG(SPI_W4_REG(SPI_PORT), color[4]); - WRITE_PERI_REG(SPI_W5_REG(SPI_PORT), color[5]); - WRITE_PERI_REG(SPI_W6_REG(SPI_PORT), color[6]); - WRITE_PERI_REG(SPI_W7_REG(SPI_PORT), color[7]); - SET_PERI_REG_MASK(SPI_CMD_REG(SPI_PORT), SPI_USR); - len -= 16; - } - - if (len) - { - while (READ_PERI_REG(SPI_CMD_REG(SPI_PORT))&SPI_USR); - WRITE_PERI_REG(SPI_MOSI_DLEN_REG(SPI_PORT), (len << 4) - 1); - for (uint32_t i=0; i <= (len<<1); i+=4) { - WRITE_PERI_REG(SPI_W0_REG(SPI_PORT)+i, DAT8TO32(data)); data+=4; - } - SET_PERI_REG_MASK(SPI_CMD_REG(SPI_PORT), SPI_USR); - } - while (READ_PERI_REG(SPI_CMD_REG(SPI_PORT))&SPI_USR); - -} /*************************************************************************************** ** Function name: pushPixels - for ESP32 @@ -366,11 +285,6 @@ void TFT_eSPI::pushSwapBytePixels(const void* data_in, uint32_t len){ ***************************************************************************************/ void TFT_eSPI::pushPixels(const void* data_in, uint32_t len){ - if(_swapBytes) { - pushSwapBytePixels(data_in, len); - return; - } - uint32_t *data = (uint32_t*)data_in; if (len > 31) @@ -496,17 +410,6 @@ void TFT_eSPI::pushPixels(const void* data_in, uint32_t len){ else { while ( len-- ) {tft_Write_16(*data); data++;} } } -/*************************************************************************************** -** Function name: pushSwapBytePixels - for ESP32 and 3 byte RGB display -** Description: Write a sequence of pixels with swapped bytes -***************************************************************************************/ -void TFT_eSPI::pushSwapBytePixels(const void* data_in, uint32_t len){ - - uint16_t *data = (uint16_t*)data_in; - // ILI9488 write macro is not endianess dependant, so swap byte macro not used here - while ( len-- ) {tft_Write_16(*data); data++;} -} - //////////////////////////////////////////////////////////////////////////////////////// #elif defined (TFT_PARALLEL_8_BIT) // Now the code for ESP32 8 bit parallel //////////////////////////////////////////////////////////////////////////////////////// @@ -536,16 +439,6 @@ void TFT_eSPI::pushBlock(uint16_t color, uint32_t len){ else while (len--) {tft_Write_16(color);} } -/*************************************************************************************** -** Function name: pushSwapBytePixels - for ESP32 and parallel display -** Description: Write a sequence of pixels with swapped bytes -***************************************************************************************/ -void TFT_eSPI::pushSwapBytePixels(const void* data_in, uint32_t len){ - - uint16_t *data = (uint16_t*)data_in; - while ( len-- ) {tft_Write_16(*data); data++;} -} - /*************************************************************************************** ** Function name: pushPixels - for ESP32 and parallel display ** Description: Write a sequence of pixels @@ -618,10 +511,6 @@ void TFT_eSPI::pushPixelsDMA(uint16_t* image, uint32_t len) dmaWait(); - if(_swapBytes) { - for (uint32_t i = 0; i < len; i++) (image[i] = image[i] << 8 | image[i] >> 8); - } - esp_err_t ret; static spi_transaction_t trans; @@ -702,28 +591,13 @@ void TFT_eSPI::pushImageDMA(int32_t x, int32_t y, int32_t w, int32_t h, uint16_t // If image is clipped, copy pixels into a contiguous block if ( (dw != w) || (dh != h) ) { - if(_swapBytes) { - for (int32_t yb = 0; yb < dh; yb++) { - for (int32_t xb = 0; xb < dw; xb++) { - uint32_t src = xb + dx + w * (yb + dy); - (buffer[xb + yb * dw] = image[src] << 8 | image[src] >> 8); - } - } - } - else { - for (int32_t yb = 0; yb < dh; yb++) { - memcpy((uint8_t*) (buffer + yb * dw), (uint8_t*) (image + dx + w * (yb + dy)), dw << 1); - } + for (int32_t yb = 0; yb < dh; yb++) { + memcpy((uint8_t*) (buffer + yb * dw), (uint8_t*) (image + dx + w * (yb + dy)), dw << 1); } } // else, if a buffer pointer has been provided copy whole image to the buffer - else if (buffer != image || _swapBytes) { - if(_swapBytes) { - for (uint32_t i = 0; i < len; i++) (buffer[i] = image[i] << 8 | image[i] >> 8); - } - else { - memcpy(buffer, image, len*2); - } + else if (buffer != image) { + memcpy(buffer, image, len*2); } if (spiBusyCheck) dmaWait(); // In case we did not wait earlier diff --git a/TFT_eSPI.cpp b/TFT_eSPI.cpp index d860bbf..6aa9373 100644 --- a/TFT_eSPI.cpp +++ b/TFT_eSPI.cpp @@ -477,8 +477,6 @@ TFT_eSPI::TFT_eSPI(int16_t w, int16_t h) textdatum = TL_DATUM; // Top Left text alignment is default fontsloaded = 0; - _swapBytes = false; // Do not swap colour bytes by default - locked = true; // Transaction mutex lock flag to ensure begin/endTranaction pairing inTransaction = false; // Flag to prevent multiple sequential functions to keep bus access open lockTransaction = false; // start/endWrite lock flag to allow sketch to keep SPI bus access open @@ -1360,9 +1358,7 @@ void TFT_eSPI::readRect(int32_t x, int32_t y, int32_t w, int32_t h, uint16_t *da ***************************************************************************************/ void TFT_eSPI::pushRect(int32_t x, int32_t y, int32_t w, int32_t h, uint16_t *data) { - bool swap = _swapBytes; _swapBytes = false; pushImage(x, y, w, h, data); - _swapBytes = swap; } @@ -1412,9 +1408,6 @@ void TFT_eSPI::pushImage(int32_t x, int32_t y, int32_t w, int32_t h, const uint1 uint16_t lineBuf[dw]; // Use buffer to minimise setWindow call count - // The little endian transp color must be byte swapped if the image is big endian - if (!_swapBytes) transp = transp >> 8 | transp << 8; - while (dh--) { int32_t len = dw; @@ -1455,26 +1448,6 @@ void TFT_eSPI::pushImage(int32_t x, int32_t y, int32_t w, int32_t h, const uint1 } -/*************************************************************************************** -** Function name: setSwapBytes -** Description: Used by 16 bit pushImage() to swap byte order in colours -***************************************************************************************/ -void TFT_eSPI::setSwapBytes(bool swap) -{ - _swapBytes = swap; -} - - -/*************************************************************************************** -** Function name: getSwapBytes -** Description: Return the swap byte order for colours -***************************************************************************************/ -bool TFT_eSPI::getSwapBytes(void) -{ - return _swapBytes; -} - - /*************************************************************************************** ** Function name: read rectangle (for SPI Interface II i.e. IM [3:0] = "1101") ** Description: Read RGB pixel colours from a defined area @@ -3044,14 +3017,12 @@ void TFT_eSPI::pushColors(uint8_t *data, uint32_t len) ** Function name: pushColors ** Description: push an array of pixels, for image drawing ***************************************************************************************/ -void TFT_eSPI::pushColors(uint16_t *data, uint32_t len, bool swap) +void TFT_eSPI::pushColors(uint16_t *data, uint32_t len) { begin_tft_write(); - if (swap) {swap = _swapBytes; _swapBytes = true; } pushPixels(data, len); - _swapBytes = swap; // Restore old value end_tft_write(); } diff --git a/TFT_eSPI.h b/TFT_eSPI.h index e30db04..2d66cf2 100644 --- a/TFT_eSPI.h +++ b/TFT_eSPI.h @@ -455,7 +455,7 @@ class TFT_eSPI { // Push (aka write pixel) colours to the TFT (use setAddrWindow() first) void pushColor(uint16_t color, uint32_t len), // Deprecated, use pushBlock() - pushColors(uint16_t *data, uint32_t len, bool swap = true), // With byte swap option + pushColors(uint16_t *data, uint32_t len), // With byte swap option pushColors(uint8_t *data, uint32_t len); // Deprecated, use pushPixels() // Write a solid block of a single colour @@ -519,11 +519,6 @@ class TFT_eSPI { void drawTriangle(int32_t x1,int32_t y1, int32_t x2,int32_t y2, int32_t x3,int32_t y3, uint32_t color); void fillTriangle(int32_t x1,int32_t y1, int32_t x2,int32_t y2, int32_t x3,int32_t y3, uint32_t color); - // Image rendering - // Swap the byte order for pushImage() and pushPixels() - corrects endianness - void setSwapBytes(bool swap); - bool getSwapBytes(void); - // Draw bitmap void drawBitmap( int16_t x, int16_t y, const uint8_t *bitmap, int16_t w, int16_t h, uint16_t fgcolor), drawBitmap( int16_t x, int16_t y, const uint8_t *bitmap, int16_t w, int16_t h, uint16_t fgcolor, uint16_t bgcolor), @@ -721,9 +716,6 @@ class TFT_eSPI { // Initialise the data bus GPIO and hardware interfaces void initBus(void); - // Temporary library development function TODO: remove need for this - void pushSwapBytePixels(const void* data_in, uint32_t len); - // Same as setAddrWindow but exits with CGRAM in read mode void readAddrWindow(int32_t xs, int32_t ys, int32_t w, int32_t h); @@ -790,7 +782,6 @@ class TFT_eSPI { bool isDigits; // adjust bounding box for numbers to reduce visual jiggling bool textwrapX, textwrapY; // If set, 'wrap' text at right and optionally bottom edge of display - bool _swapBytes; // Swap the byte order for TFT pushImage() bool _booted; // init() or begin() has already run once