Skip to content

Commit 2315ac2

Browse files
authored
import use of __PROG_TYPES_COMPAT__ define for compatibility with old arduino code (#4619)
restrict usage of deprecated typedefs "prog_*", and cast "pgm_read_*"'s address parameters to "const void*" only when __PROG_TYPES_COMPAT__ is defined. also add <avr/pgmspace.h> compatibility
1 parent 1ca5838 commit 2315ac2

File tree

2 files changed

+10
-0
lines changed

2 files changed

+10
-0
lines changed

Diff for: cores/esp8266/avr/pgmspace.h

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
#include "../pgmspace.h"

Diff for: cores/esp8266/pgmspace.h

+9
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ extern "C" {
2929

3030
#define _SFR_BYTE(n) (n)
3131

32+
#ifdef __PROG_TYPES_COMPAT__
33+
3234
typedef void prog_void;
3335
typedef char prog_char;
3436
typedef unsigned char prog_uchar;
@@ -39,6 +41,8 @@ typedef uint16_t prog_uint16_t;
3941
typedef int32_t prog_int32_t;
4042
typedef uint32_t prog_uint32_t;
4143

44+
#endif // defined(__PROG_TYPES_COMPAT__)
45+
4246
#define SIZE_IRRELEVANT 0x7fffffff
4347

4448
// memchr_P and memrchr_P are not implemented due to danger in its use, and
@@ -112,8 +116,13 @@ static inline uint16_t pgm_read_word_inlined(const void* addr) {
112116
}
113117

114118
// Make sure, that libraries checking existence of this macro are not failing
119+
#ifdef __PROG_TYPES_COMPAT__
120+
#define pgm_read_byte(addr) pgm_read_byte_inlined((const void*)(addr))
121+
#define pgm_read_word(addr) pgm_read_word_inlined((const void*)(addr))
122+
#else
115123
#define pgm_read_byte(addr) pgm_read_byte_inlined(addr)
116124
#define pgm_read_word(addr) pgm_read_word_inlined(addr)
125+
#endif
117126

118127
#else //__ets__
119128
#define pgm_read_byte(addr) (*reinterpret_cast<const uint8_t*>(addr))

0 commit comments

Comments
 (0)