diff --git a/.gitignore b/.gitignore index cdb0f107..df289b05 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ embedded/dist .vscode/.browse.c_cpp.db* .vscode/c_cpp_properties.json .vscode/launch.json +.vscode/arduino.json diff --git a/libraries/TFT_eSPI-1.4.11/Extensions/Sprite.cpp b/libraries/TFT_eSPI-1.4.11/Extensions/Sprite.cpp index 832abb99..faeaae2d 100644 --- a/libraries/TFT_eSPI-1.4.11/Extensions/Sprite.cpp +++ b/libraries/TFT_eSPI-1.4.11/Extensions/Sprite.cpp @@ -716,7 +716,7 @@ void TFT_eSprite::pushImage(int32_t x, int32_t y, int32_t w, int32_t h, const u uint32_t ww = (w+7) & 0xFFF8; for (int32_t yp = 0; yp2) && (font<9)) { // This is slower than above but is more convenient for the RLE fonts - flash_address = pgm_read_dword( (const void*)pgm_read_dword( &(fontdata[font].chartbl ) ) + uniCode*sizeof(void *) ); + flash_address = pgm_read_dword( (const void*)(pgm_read_dword( &(fontdata[font].chartbl ) ) + uniCode*sizeof(void *) )); width = pgm_read_byte( (uint8_t *)pgm_read_dword( &(fontdata[font].widthtbl ) ) + uniCode ); height= pgm_read_byte( &fontdata[font].height ); } diff --git a/libraries/TFT_eSPI-1.4.11/TFT_eSPI.cpp b/libraries/TFT_eSPI-1.4.11/TFT_eSPI.cpp index ad27dcb7..85e814ff 100644 --- a/libraries/TFT_eSPI-1.4.11/TFT_eSPI.cpp +++ b/libraries/TFT_eSPI-1.4.11/TFT_eSPI.cpp @@ -35,9 +35,9 @@ // If it is a 16bit serial display we must transfer 16 bits every time #ifdef RPI_ILI9486_DRIVER - #define CMD_BITS 16-1 + #define CMD_BITS (16-1) #else - #define CMD_BITS 8-1 + #define CMD_BITS (8-1) #endif // Fast block write prototype @@ -4270,7 +4270,7 @@ int16_t TFT_eSPI::drawChar(uint16_t uniCode, int32_t x, int32_t y, uint8_t font) { if ((font>2) && (font<9)) { - flash_address = pgm_read_dword( (const void*)pgm_read_dword( &(fontdata[font].chartbl ) ) + uniCode*sizeof(void *) ); + flash_address = pgm_read_dword( (const void*)(pgm_read_dword( &(fontdata[font].chartbl ) ) + uniCode*sizeof(void *))); width = pgm_read_byte( (uint8_t *)pgm_read_dword( &(fontdata[font].widthtbl ) ) + uniCode ); height= pgm_read_byte( &fontdata[font].height ); } diff --git a/patch/pgmspace.h b/patch/pgmspace.h deleted file mode 100644 index 9b61bec2..00000000 --- a/patch/pgmspace.h +++ /dev/null @@ -1,114 +0,0 @@ -/* PGMSPACE.H - Accessor utilities/types for accessing PROGMEM data */ - -#ifndef _PGMSPACE_H_ -#define _PGMSPACE_H_ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef ICACHE_RODATA_ATTR - #define ICACHE_RODATA_ATTR __attribute__((section(".irom.text"))) -#endif -#ifndef PROGMEM - // The following two macros cause a parameter to be enclosed in quotes - // by the preopressor (i.e. for concatenating ints to strings) - #define __STRINGIZE_NX(A) #A - #define __STRINGIZE(A) __STRINGIZE_NX(A) - // Since __section__ is supposed to be only use for global variables, - // there could be conflicts when a static/inlined function has them in the - // same file as a non-static PROGMEM object. - // Ref: https://gcc.gnu.org/onlinedocs/gcc-3.2/gcc/Variable-Attributes.html - // Place each progmem object into its own named section, avoiding conflicts - #define PROGMEM __attribute__((section( "\".irom.text." __FILE__ "." __STRINGIZE(__LINE__) "." __STRINGIZE(__COUNTER__) "\""))) -#endif -#ifndef PGM_P - #define PGM_P const char * -#endif -#ifndef PGM_VOID_P - #define PGM_VOID_P const void * -#endif - -// PSTR() macro modified to start on a 32-bit boundary. This adds on average -// 1.5 bytes/string, but in return memcpy_P and strcpy_P will work 4~8x faster -#ifndef PSTR - #define PSTR(s) (__extension__({static const char __c[] __attribute__((__aligned__(4))) PROGMEM = (s); &__c[0];})) -#endif - -// Flash memory must be read using 32 bit aligned addresses else a processor -// exception will be triggered. -// The order within the 32 bit values are: -// -------------- -// b3, b2, b1, b0 -// w1, w0 - -#define pgm_read_with_offset(addr, res) \ - asm("extui %0, %1, 0, 2\n" /* Extract offset within word (in bytes) */ \ - "sub %1, %1, %0\n" /* Subtract offset from addr, yielding an aligned address */ \ - "l32i.n %1, %1, 0x0\n" /* Load word from aligned address */ \ - "slli %0, %0, 3\n" /* Mulitiply offset by 8, yielding an offset in bits */ \ - "ssr %0\n" /* Prepare to shift by offset (in bits) */ \ - "srl %0, %1\n" /* Shift right; now the requested byte is the first one */ \ - :"=r"(res), "=r"(addr) \ - :"1"(addr) \ - :); - -static inline uint8_t pgm_read_byte_inlined(const void* addr) { - register uint32_t res; - pgm_read_with_offset(addr, res); - return (uint8_t) res; /* This masks the lower byte from the returned word */ -} - -/* Although this says "word", it's actually 16 bit, i.e. half word on Xtensa */ -static inline uint16_t pgm_read_word_inlined(const void* addr) { - register uint32_t res; - pgm_read_with_offset(addr, res); - return (uint16_t) res; /* This masks the lower half-word from the returned word */ -} - -#define pgm_read_byte(addr) pgm_read_byte_inlined(addr) -#define pgm_read_word(addr) pgm_read_word_inlined(addr) -#ifdef __cplusplus - #define pgm_read_dword(addr) (*reinterpret_cast(addr)) - #define pgm_read_float(addr) (*reinterpret_cast(addr)) - #define pgm_read_ptr(addr) (*reinterpret_cast(addr)) -#else - #define pgm_read_dword(addr) (*(const uint32_t*)(addr)) - #define pgm_read_float(addr) (*(const float*)(addr)) - #define pgm_read_ptr(addr) (*(const void* const*)(addr)) -#endif - -#define pgm_read_byte_near(addr) pgm_read_byte(addr) -#define pgm_read_word_near(addr) pgm_read_word(addr) -#define pgm_read_dword_near(addr) pgm_read_dword(addr) -#define pgm_read_float_near(addr) pgm_read_float(addr) -#define pgm_read_ptr_near(addr) pgm_read_ptr(addr) -#define pgm_read_byte_far(addr) pgm_read_byte(addr) -#define pgm_read_word_far(addr) pgm_read_word(addr) -#define pgm_read_dword_far(addr) pgm_read_dword(addr) -#define pgm_read_float_far(addr) pgm_read_float(addr) -#define pgm_read_ptr_far(addr) pgm_read_ptr(addr) - -#define _SFR_BYTE(n) (n) - -#ifdef __PROG_TYPES_COMPAT__ - -typedef void prog_void; -typedef char prog_char; -typedef unsigned char prog_uchar; -typedef int8_t prog_int8_t; -typedef uint8_t prog_uint8_t; -typedef int16_t prog_int16_t; -typedef uint16_t prog_uint16_t; -typedef int32_t prog_int32_t; -typedef uint32_t prog_uint32_t; - -#endif // defined(__PROG_TYPES_COMPAT__) - -#ifdef __cplusplus -} -#endif - -#endif