forked from Bodmer/TFT_eSPI
Remove ultra-retarded swapBytes
This commit is contained in:
@ -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
|
||||
|
31
TFT_eSPI.cpp
31
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();
|
||||
}
|
||||
|
||||
|
11
TFT_eSPI.h
11
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
|
||||
|
||||
|
Reference in New Issue
Block a user