158 lines
3.7 KiB
C++
158 lines
3.7 KiB
C++
#include "uDisplay.h"
|
|
#include "uDisplay_config.h"
|
|
#include "uDisplay_spi.h" // Your SPI header
|
|
|
|
// ===== High-Level SPI Communication Functions =====
|
|
|
|
void uDisplay::ulcd_command(uint8_t val) {
|
|
if (interface == _UDSP_SPI) {
|
|
if (spi_dc < 0) {
|
|
if (spi_nr > 2) {
|
|
if (spi_nr == 3) {
|
|
write9(val, 0);
|
|
} else {
|
|
write9_slow(val, 0);
|
|
}
|
|
} else {
|
|
hw_write9(val, 0);
|
|
}
|
|
} else {
|
|
SPI_DC_LOW
|
|
if (spi_nr > 2) {
|
|
if (spi_nr == 3) {
|
|
write8(val);
|
|
} else {
|
|
write8_slow(val);
|
|
}
|
|
} else {
|
|
uspi->write(val);
|
|
}
|
|
SPI_DC_HIGH
|
|
}
|
|
return;
|
|
}
|
|
|
|
#ifdef USE_ESP32_S3
|
|
if (interface == _UDSP_PAR8 || interface == _UDSP_PAR16) {
|
|
pb_writeCommand(val, 8);
|
|
}
|
|
#endif
|
|
}
|
|
|
|
void uDisplay::ulcd_data8(uint8_t val) {
|
|
if (interface == _UDSP_SPI) {
|
|
if (spi_dc < 0) {
|
|
if (spi_nr > 2) {
|
|
if (spi_nr == 3) {
|
|
write9(val, 1);
|
|
} else {
|
|
write9_slow(val, 1);
|
|
}
|
|
} else {
|
|
hw_write9(val, 1);
|
|
}
|
|
} else {
|
|
if (spi_nr > 2) {
|
|
if (spi_nr == 3) {
|
|
write8(val);
|
|
} else {
|
|
write8_slow(val);
|
|
}
|
|
} else {
|
|
uspi->write(val);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
#ifdef USE_ESP32_S3
|
|
if (interface == _UDSP_PAR8 || interface == _UDSP_PAR16) {
|
|
pb_writeData(val, 8);
|
|
}
|
|
#endif
|
|
}
|
|
|
|
void uDisplay::ulcd_data16(uint16_t val) {
|
|
if (interface == _UDSP_SPI) {
|
|
if (spi_dc < 0) {
|
|
if (spi_nr > 2) {
|
|
write9(val >> 8, 1);
|
|
write9(val, 1);
|
|
} else {
|
|
hw_write9(val >> 8, 1);
|
|
hw_write9(val, 1);
|
|
}
|
|
} else {
|
|
if (spi_nr > 2) {
|
|
write16(val);
|
|
} else {
|
|
uspi->write16(val);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
#ifdef USE_ESP32_S3
|
|
if (interface == _UDSP_PAR8 || interface == _UDSP_PAR16) {
|
|
pb_writeData(val, 16);
|
|
}
|
|
#endif
|
|
}
|
|
|
|
void uDisplay::ulcd_data32(uint32_t val) {
|
|
if (interface == _UDSP_SPI) {
|
|
if (spi_dc < 0) {
|
|
if (spi_nr > 2) {
|
|
write9(val >> 24, 1);
|
|
write9(val >> 16, 1);
|
|
write9(val >> 8, 1);
|
|
write9(val, 1);
|
|
} else {
|
|
hw_write9(val >> 24, 1);
|
|
hw_write9(val >> 16, 1);
|
|
hw_write9(val >> 8, 1);
|
|
hw_write9(val, 1);
|
|
}
|
|
} else {
|
|
if (spi_nr > 2) {
|
|
write32(val);
|
|
} else {
|
|
uspi->write32(val);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
#ifdef USE_ESP32_S3
|
|
if (interface == _UDSP_PAR8 || interface == _UDSP_PAR16) {
|
|
pb_writeData(val, 32);
|
|
}
|
|
#endif
|
|
}
|
|
|
|
void uDisplay::ulcd_command_one(uint8_t val) {
|
|
if (interface == _UDSP_SPI) {
|
|
SPI_BEGIN_TRANSACTION
|
|
SPI_CS_LOW
|
|
ulcd_command(val);
|
|
SPI_CS_HIGH
|
|
SPI_END_TRANSACTION
|
|
}
|
|
}
|
|
|
|
void uDisplay::WriteColor(uint16_t color) {
|
|
if (col_mode == 18) {
|
|
uint8_t r = (color & 0xF800) >> 11;
|
|
uint8_t g = (color & 0x07E0) >> 5;
|
|
uint8_t b = color & 0x001F;
|
|
r = (r * 255) / 31;
|
|
g = (g * 255) / 63;
|
|
b = (b * 255) / 31;
|
|
|
|
ulcd_data8(r);
|
|
ulcd_data8(g);
|
|
ulcd_data8(b);
|
|
} else {
|
|
ulcd_data16(color);
|
|
}
|
|
} |