|
@@ -31,17 +31,34 @@ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
|
POSSIBILITY OF SUCH DAMAGE.
|
|
POSSIBILITY OF SUCH DAMAGE.
|
|
|
*/
|
|
*/
|
|
|
|
|
|
|
|
-#include "Adafruit_GFX.h"
|
|
|
|
|
-#include "glcdfont.c"
|
|
|
|
|
#ifdef __AVR__
|
|
#ifdef __AVR__
|
|
|
#include <avr/pgmspace.h>
|
|
#include <avr/pgmspace.h>
|
|
|
- #define pgm_read_pointer(addr) ((void *)pgm_read_word(addr))
|
|
|
|
|
#elif defined(ESP8266)
|
|
#elif defined(ESP8266)
|
|
|
#include <pgmspace.h>
|
|
#include <pgmspace.h>
|
|
|
- #define pgm_read_pointer(addr) ((void *)pgm_read_dword(addr))
|
|
|
|
|
-#else
|
|
|
|
|
|
|
+#endif
|
|
|
|
|
+#include "Adafruit_GFX.h"
|
|
|
|
|
+#include "glcdfont.c"
|
|
|
|
|
+
|
|
|
|
|
+// Many (but maybe not all) non-AVR board installs define macros
|
|
|
|
|
+// for compatibility with existing PROGMEM-reading AVR code.
|
|
|
|
|
+// Do our own checks and defines here for good measure...
|
|
|
|
|
+
|
|
|
|
|
+#ifndef pgm_read_byte
|
|
|
#define pgm_read_byte(addr) (*(const unsigned char *)(addr))
|
|
#define pgm_read_byte(addr) (*(const unsigned char *)(addr))
|
|
|
|
|
+#endif
|
|
|
|
|
+#ifndef pgm_read_word
|
|
|
#define pgm_read_word(addr) (*(const unsigned short *)(addr))
|
|
#define pgm_read_word(addr) (*(const unsigned short *)(addr))
|
|
|
|
|
+#endif
|
|
|
|
|
+#ifndef pgm_read_dword
|
|
|
|
|
+ #define pgm_read_dword(addr) (*(const unsigned long *)(addr))
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+// Pointers are a peculiar case...typically 16-bit on AVR boards,
|
|
|
|
|
+// 32 bits elsewhere. Try to accommodate both...
|
|
|
|
|
+
|
|
|
|
|
+#if !defined(__INT_MAX__) || (__INT_MAX__ > 0xFFFF)
|
|
|
|
|
+ #define pgm_read_pointer(addr) ((void *)pgm_read_dword(addr))
|
|
|
|
|
+#else
|
|
|
#define pgm_read_pointer(addr) ((void *)pgm_read_word(addr))
|
|
#define pgm_read_pointer(addr) ((void *)pgm_read_word(addr))
|
|
|
#endif
|
|
#endif
|
|
|
|
|
|