Skip to content

Commit c349ad5

Browse files
Improved(?) 32-bit CPU compatibility for fonts
1 parent 9ec1f6d commit c349ad5

File tree

1 file changed

+22
-5
lines changed

1 file changed

+22
-5
lines changed

Adafruit_GFX.cpp

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,17 +31,34 @@ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
3131
POSSIBILITY OF SUCH DAMAGE.
3232
*/
3333

34-
#include "Adafruit_GFX.h"
35-
#include "glcdfont.c"
3634
#ifdef __AVR__
3735
#include <avr/pgmspace.h>
38-
#define pgm_read_pointer(addr) ((void *)pgm_read_word(addr))
3936
#elif defined(ESP8266)
4037
#include <pgmspace.h>
41-
#define pgm_read_pointer(addr) ((void *)pgm_read_dword(addr))
42-
#else
38+
#endif
39+
#include "Adafruit_GFX.h"
40+
#include "glcdfont.c"
41+
42+
// Many (but maybe not all) non-AVR board installs define macros
43+
// for compatibility with existing PROGMEM-reading AVR code.
44+
// Do our own checks and defines here for good measure...
45+
46+
#ifndef pgm_read_byte
4347
#define pgm_read_byte(addr) (*(const unsigned char *)(addr))
48+
#endif
49+
#ifndef pgm_read_word
4450
#define pgm_read_word(addr) (*(const unsigned short *)(addr))
51+
#endif
52+
#ifndef pgm_read_dword
53+
#define pgm_read_dword(addr) (*(const unsigned long *)(addr))
54+
#endif
55+
56+
// Pointers are a peculiar case...typically 16-bit on AVR boards,
57+
// 32 bits elsewhere. Try to accommodate both...
58+
59+
#if !defined(__INT_MAX__) || (__INT_MAX__ > 0xFFFF)
60+
#define pgm_read_pointer(addr) ((void *)pgm_read_dword(addr))
61+
#else
4562
#define pgm_read_pointer(addr) ((void *)pgm_read_word(addr))
4663
#endif
4764

0 commit comments

Comments
 (0)