Fixed color data type and using new random utils

This commit is contained in:
2021-09-05 21:08:51 +02:00
parent 01e5fa369f
commit 29757e6851
3 changed files with 48 additions and 42 deletions

View File

@@ -10,6 +10,9 @@ set(dependencies
arduino-esp32 arduino-esp32
freertos freertos
esp_system esp_system
cpputils
espcpputils
) )
idf_component_register( idf_component_register(

View File

@@ -16,6 +16,9 @@
#include "TFT_eSPI.h" #include "TFT_eSPI.h"
#include <esprandom.h>
#include <randomutils.h>
#if defined (ESP32) #if defined (ESP32)
#if defined(CONFIG_IDF_TARGET_ESP32S3) #if defined(CONFIG_IDF_TARGET_ESP32S3)
#include "Processors/TFT_eSPI_ESP32_S3.c" // Tested with SPI and 8 bit parallel #include "Processors/TFT_eSPI_ESP32_S3.c" // Tested with SPI and 8 bit parallel
@@ -3006,7 +3009,7 @@ int16_t TFT_eSPI::fontHeight(void)
** Function name: drawChar ** Function name: drawChar
** Description: draw a single character in the GLCD or GFXFF font ** Description: draw a single character in the GLCD or GFXFF font
***************************************************************************************/ ***************************************************************************************/
void TFT_eSPI::drawChar(int32_t x, int32_t y, uint16_t c, uint32_t color, uint32_t bg, uint8_t size) void TFT_eSPI::drawChar(int32_t x, int32_t y, uint16_t c, uint16_t color, uint16_t bg, uint8_t size)
{ {
if (_vpOoB) return; if (_vpOoB) return;
@@ -3391,7 +3394,7 @@ void TFT_eSPI::readAddrWindow(int32_t xs, int32_t ys, int32_t w, int32_t h)
** Function name: drawPixel ** Function name: drawPixel
** Description: push a single pixel at an arbitrary position ** Description: push a single pixel at an arbitrary position
***************************************************************************************/ ***************************************************************************************/
void TFT_eSPI::drawPixel(int32_t x, int32_t y, uint32_t color) void TFT_eSPI::drawPixel(int32_t x, int32_t y, uint16_t color)
{ {
if (_vpOoB) return; if (_vpOoB) return;
@@ -3675,7 +3678,7 @@ void TFT_eSPI::pushColors(uint16_t *data, uint32_t len, bool swap)
***************************************************************************************/ ***************************************************************************************/
// Bresenham's algorithm - thx wikipedia - speed enhanced by Bodmer to use // Bresenham's algorithm - thx wikipedia - speed enhanced by Bodmer to use
// an efficient FastH/V Line draw routine for line segments of 2 pixels or more // an efficient FastH/V Line draw routine for line segments of 2 pixels or more
void TFT_eSPI::drawLine(int32_t x0, int32_t y0, int32_t x1, int32_t y1, uint32_t color) void TFT_eSPI::drawLine(int32_t x0, int32_t y0, int32_t x1, int32_t y1, uint16_t color)
{ {
if (_vpOoB) return; if (_vpOoB) return;
@@ -3985,7 +3988,7 @@ inline float TFT_eSPI::wedgeLineDistance(float xpax, float ypay, float bax, floa
** Function name: drawFastVLine ** Function name: drawFastVLine
** Description: draw a vertical line ** Description: draw a vertical line
***************************************************************************************/ ***************************************************************************************/
void TFT_eSPI::drawFastVLine(int32_t x, int32_t y, int32_t h, uint32_t color) void TFT_eSPI::drawFastVLine(int32_t x, int32_t y, int32_t h, uint16_t color)
{ {
if (_vpOoB) return; if (_vpOoB) return;
@@ -4015,7 +4018,7 @@ void TFT_eSPI::drawFastVLine(int32_t x, int32_t y, int32_t h, uint32_t color)
** Function name: drawFastHLine ** Function name: drawFastHLine
** Description: draw a horizontal line ** Description: draw a horizontal line
***************************************************************************************/ ***************************************************************************************/
void TFT_eSPI::drawFastHLine(int32_t x, int32_t y, int32_t w, uint32_t color) void TFT_eSPI::drawFastHLine(int32_t x, int32_t y, int32_t w, uint16_t color)
{ {
if (_vpOoB) return; if (_vpOoB) return;
@@ -4045,7 +4048,7 @@ void TFT_eSPI::drawFastHLine(int32_t x, int32_t y, int32_t w, uint32_t color)
** Function name: fillRect ** Function name: fillRect
** Description: draw a filled rectangle ** Description: draw a filled rectangle
***************************************************************************************/ ***************************************************************************************/
void TFT_eSPI::fillRect(int32_t x, int32_t y, int32_t w, int32_t h, uint32_t color) void TFT_eSPI::fillRect(int32_t x, int32_t y, int32_t w, int32_t h, uint16_t color)
{ {
if (_vpOoB) return; if (_vpOoB) return;
@@ -4214,7 +4217,7 @@ uint32_t TFT_eSPI::color16to24(uint16_t color565)
** Function name: color24to16 ** Function name: color24to16
** Description: convert 24 bit colour to a 16 bit 565 colour value ** Description: convert 24 bit colour to a 16 bit 565 colour value
***************************************************************************************/ ***************************************************************************************/
uint32_t TFT_eSPI::color24to16(uint32_t color888) uint16_t TFT_eSPI::color24to16(uint32_t color888)
{ {
uint16_t r = (color888 >> 8) & 0xF800; uint16_t r = (color888 >> 8) & 0xF800;
uint16_t g = (color888 >> 5) & 0x07E0; uint16_t g = (color888 >> 5) & 0x07E0;
@@ -4398,7 +4401,7 @@ uint16_t TFT_eSPI::alphaBlend(uint8_t alpha, uint16_t fgc, uint16_t bgc)
uint16_t TFT_eSPI::alphaBlend(uint8_t alpha, uint16_t fgc, uint16_t bgc, uint8_t dither) uint16_t TFT_eSPI::alphaBlend(uint8_t alpha, uint16_t fgc, uint16_t bgc, uint8_t dither)
{ {
if (dither) { if (dither) {
int16_t alphaDither = (int16_t)alpha - dither + random(2*dither+1); // +/-4 randomised int16_t alphaDither = (int16_t)alpha - dither + cpputils::randomNumber<long>(2*dither, espcpputils::esp_random_device{}); // +/-4 randomised
alpha = (uint8_t)alphaDither; alpha = (uint8_t)alphaDither;
if (alphaDither < 0) alpha = 0; if (alphaDither < 0) alpha = 0;
if (alphaDither >255) alpha = 255; if (alphaDither >255) alpha = 255;
@@ -4415,7 +4418,7 @@ uint32_t TFT_eSPI::alphaBlend24(uint8_t alpha, uint32_t fgc, uint32_t bgc, uint8
{ {
if (dither) { if (dither) {
int16_t alphaDither = (int16_t)alpha - dither + random(2*dither+1); // +/-dither randomised int16_t alphaDither = (int16_t)alpha - dither + cpputils::randomNumber<long>(2*dither, espcpputils::esp_random_device{}); // +/-dither randomised
alpha = (uint8_t)alphaDither; alpha = (uint8_t)alphaDither;
if (alphaDither < 0) alpha = 0; if (alphaDither < 0) alpha = 0;
if (alphaDither >255) alpha = 255; if (alphaDither >255) alpha = 255;

View File

@@ -262,31 +262,31 @@ const PROGMEM fontinfo fontdata [] = {
** Section 6: Colour enumeration ** Section 6: Colour enumeration
***************************************************************************************/ ***************************************************************************************/
// Default color definitions // Default color definitions
constexpr auto TFT_BLACK = 0x0000; /* 0, 0, 0 */ constexpr uint16_t TFT_BLACK = 0x0000; /* 0, 0, 0 */
constexpr auto TFT_NAVY = 0x000F; /* 0, 0, 128 */ constexpr uint16_t TFT_NAVY = 0x000F; /* 0, 0, 128 */
constexpr auto TFT_DARKGREEN = 0x03E0; /* 0, 128, 0 */ constexpr uint16_t TFT_DARKGREEN = 0x03E0; /* 0, 128, 0 */
constexpr auto TFT_DARKCYAN = 0x03EF; /* 0, 128, 128 */ constexpr uint16_t TFT_DARKCYAN = 0x03EF; /* 0, 128, 128 */
constexpr auto TFT_MAROON = 0x7800; /* 128, 0, 0 */ constexpr uint16_t TFT_MAROON = 0x7800; /* 128, 0, 0 */
constexpr auto TFT_PURPLE = 0x780F; /* 128, 0, 128 */ constexpr uint16_t TFT_PURPLE = 0x780F; /* 128, 0, 128 */
constexpr auto TFT_OLIVE = 0x7BE0; /* 128, 128, 0 */ constexpr uint16_t TFT_OLIVE = 0x7BE0; /* 128, 128, 0 */
constexpr auto TFT_LIGHTGREY = 0xD69A; /* 211, 211, 211 */ constexpr uint16_t TFT_LIGHTGREY = 0xD69A; /* 211, 211, 211 */
constexpr auto TFT_DARKGREY = 0x7BEF; /* 128, 128, 128 */ constexpr uint16_t TFT_DARKGREY = 0x7BEF; /* 128, 128, 128 */
constexpr auto TFT_BLUE = 0x001F; /* 0, 0, 255 */ constexpr uint16_t TFT_BLUE = 0x001F; /* 0, 0, 255 */
constexpr auto TFT_GREEN = 0x07E0; /* 0, 255, 0 */ constexpr uint16_t TFT_GREEN = 0x07E0; /* 0, 255, 0 */
constexpr auto TFT_CYAN = 0x07FF; /* 0, 255, 255 */ constexpr uint16_t TFT_CYAN = 0x07FF; /* 0, 255, 255 */
constexpr auto TFT_RED = 0xF800; /* 255, 0, 0 */ constexpr uint16_t TFT_RED = 0xF800; /* 255, 0, 0 */
constexpr auto TFT_MAGENTA = 0xF81F; /* 255, 0, 255 */ constexpr uint16_t TFT_MAGENTA = 0xF81F; /* 255, 0, 255 */
constexpr auto TFT_YELLOW = 0xFFE0; /* 255, 255, 0 */ constexpr uint16_t TFT_YELLOW = 0xFFE0; /* 255, 255, 0 */
constexpr auto TFT_WHITE = 0xFFFF; /* 255, 255, 255 */ constexpr uint16_t TFT_WHITE = 0xFFFF; /* 255, 255, 255 */
constexpr auto TFT_GREY = 0x5AEB; constexpr uint16_t TFT_GREY = 0x5AEB;
constexpr auto TFT_ORANGE = 0xFDA0; /* 255, 180, 0 */ constexpr uint16_t TFT_ORANGE = 0xFDA0; /* 255, 180, 0 */
constexpr auto TFT_GREENYELLOW = 0xB7E0; /* 180, 255, 0 */ constexpr uint16_t TFT_GREENYELLOW = 0xB7E0; /* 180, 255, 0 */
constexpr auto TFT_PINK = 0xFE19; /* 255, 192, 203 */ //Lighter pink, was 0xFC9F constexpr uint16_t TFT_PINK = 0xFE19; /* 255, 192, 203 */ //Lighter pink, was 0xFC9F
constexpr auto TFT_BROWN = 0x9A60; /* 150, 75, 0 */ constexpr uint16_t TFT_BROWN = 0x9A60; /* 150, 75, 0 */
constexpr auto TFT_GOLD = 0xFEA0; /* 255, 215, 0 */ constexpr uint16_t TFT_GOLD = 0xFEA0; /* 255, 215, 0 */
constexpr auto TFT_SILVER = 0xC618; /* 192, 192, 192 */ constexpr uint16_t TFT_SILVER = 0xC618; /* 192, 192, 192 */
constexpr auto TFT_SKYBLUE = 0x867D; /* 135, 206, 235 */ constexpr uint16_t TFT_SKYBLUE = 0x867D; /* 135, 206, 235 */
constexpr auto TFT_VIOLET = 0x915C; /* 180, 46, 226 */ constexpr uint16_t TFT_VIOLET = 0x915C; /* 180, 46, 226 */
// Next is a special 16 bit colour value that encodes to 8 bits // Next is a special 16 bit colour value that encodes to 8 bits
// and will then decode back to the same 16 bit value. // and will then decode back to the same 16 bit value.
@@ -398,12 +398,12 @@ class TFT_eSPI { friend class TFT_eSprite; // Sprite class has access to protect
void init(uint8_t tc = TAB_COLOUR), begin(uint8_t tc = TAB_COLOUR); void init(uint8_t tc = TAB_COLOUR), begin(uint8_t tc = TAB_COLOUR);
// These are virtual so the TFT_eSprite class can override them with sprite specific functions // These are virtual so the TFT_eSprite class can override them with sprite specific functions
virtual void drawPixel(int32_t x, int32_t y, uint32_t color), virtual void drawPixel(int32_t x, int32_t y, uint16_t color),
drawChar(int32_t x, int32_t y, uint16_t c, uint32_t color, uint32_t bg, uint8_t size), drawChar(int32_t x, int32_t y, uint16_t c, uint16_t color, uint16_t bg, uint8_t size),
drawLine(int32_t xs, int32_t ys, int32_t xe, int32_t ye, uint32_t color), drawLine(int32_t xs, int32_t ys, int32_t xe, int32_t ye, uint16_t color),
drawFastVLine(int32_t x, int32_t y, int32_t h, uint32_t color), drawFastVLine(int32_t x, int32_t y, int32_t h, uint16_t color),
drawFastHLine(int32_t x, int32_t y, int32_t w, uint32_t color), drawFastHLine(int32_t x, int32_t y, int32_t w, uint16_t color),
fillRect(int32_t x, int32_t y, int32_t w, int32_t h, uint32_t color); fillRect(int32_t x, int32_t y, int32_t w, int32_t h, uint16_t color);
virtual int16_t drawChar(uint16_t uniCode, int32_t x, int32_t y, uint8_t font), virtual int16_t drawChar(uint16_t uniCode, int32_t x, int32_t y, uint8_t font),
drawChar(uint16_t uniCode, int32_t x, int32_t y), drawChar(uint16_t uniCode, int32_t x, int32_t y),
@@ -634,7 +634,7 @@ class TFT_eSPI { friend class TFT_eSprite; // Sprite class has access to protect
// Convert 16 bit colour to/from 24 bit, R+G+B concatenated into LS 24 bits // Convert 16 bit colour to/from 24 bit, R+G+B concatenated into LS 24 bits
uint32_t color16to24(uint16_t color565); uint32_t color16to24(uint16_t color565);
uint32_t color24to16(uint32_t color888); uint16_t color24to16(uint32_t color888);
// Alpha blend 2 colours, see generic "alphaBlend_Test" example // Alpha blend 2 colours, see generic "alphaBlend_Test" example
// alpha = 0 = 100% background colour // alpha = 0 = 100% background colour
@@ -722,7 +722,7 @@ class TFT_eSPI { friend class TFT_eSprite; // Sprite class has access to protect
// Global variables // Global variables
static SPIClass& getSPIinstance(void); // Get SPI class handle static SPIClass& getSPIinstance(void); // Get SPI class handle
uint32_t textcolor, textbgcolor; // Text foreground and background colours uint16_t textcolor, textbgcolor; // Text foreground and background colours
uint32_t bitmap_fg, bitmap_bg; // Bitmap foreground (bit=1) and background (bit=0) colours uint32_t bitmap_fg, bitmap_bg; // Bitmap foreground (bit=1) and background (bit=0) colours