1
- /* Simple compatibility headers for AVR code used with ARM chips
2
- * Copyright (c) 2015 Paul Stoffregen <[email protected] >
3
- *
4
- * Permission is hereby granted, free of charge, to any person obtaining a copy
5
- * of this software and associated documentation files (the "Software"), to deal
6
- * in the Software without restriction, including without limitation the rights
7
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
- * copies of the Software, and to permit persons to whom the Software is
9
- * furnished to do so, subject to the following conditions:
10
- *
11
- * The above copyright notice and this permission notice shall be included in
12
- * all copies or substantial portions of the Software.
13
- *
14
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
- * THE SOFTWARE.
21
- */
1
+ /*
2
+ pgmspace.h - Definitions for compatibility with AVR pgmspace macros
3
+
4
+ Copyright (c) 2015 Arduino LLC
5
+
6
+ Based on work of Paul Stoffregen on Teensy 3 (http://pjrc.com)
7
+
8
+ Permission is hereby granted, free of charge, to any person obtaining a copy
9
+ of this software and associated documentation files (the "Software"), to deal
10
+ in the Software without restriction, including without limitation the rights
11
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12
+ copies of the Software, and to permit persons to whom the Software is
13
+ furnished to do so, subject to the following conditions:
14
+
15
+ The above copyright notice and this permission notice shall be included in
16
+ all copies or substantial portions of the Software.
17
+
18
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24
+ THE SOFTWARE
25
+ */
22
26
23
27
#ifndef __PGMSPACE_H_
24
28
#define __PGMSPACE_H_ 1
@@ -43,38 +47,39 @@ typedef uint32_t prog_uint32_t;
43
47
typedef int64_t prog_int64_t ;
44
48
typedef uint64_t prog_uint64_t ;
45
49
46
- #define memchr_P (str , c , len ) memchr((str), (c), (len))
47
- #define memcmp_P (a , b , n ) memcmp((a), (b), (n))
48
- #define memcpy_P (dest , src , num ) memcpy((dest), (src), (num))
49
- #define memmem_P (a , alen , b , blen ) memmem((a), (alen), (b), (blen))
50
- #define memrchr_P (str , val , len ) memrchr((str), (val), (len))
50
+ typedef const void * int_farptr_t ;
51
+ typedef const void * uint_farptr_t ;
52
+
53
+ #define memchr_P (s , c , n ) memchr((s), (c), (n))
54
+ #define memcmp_P (s1 , s2 , n ) memcmp((s1), (s2), (n))
55
+ #define memccpy_P (dest , src , c , n ) memccpy((dest), (src), (c), (n))
56
+ #define memcpy_P (dest , src , n ) memcpy((dest), (src), (n))
57
+ #define memmem_P (haystack , haystacklen , needle , needlelen ) memmem((haystack), (haystacklen), (needle), (needlelen))
58
+ #define memrchr_P (s , c , n ) memrchr((s), (c), (n))
51
59
#define strcat_P (dest , src ) strcat((dest), (src))
52
- #define strchr_P (str , c ) strchr((str ), (c))
53
- #define strchrnul_P (str , c ) strchrnul((str ), (c))
60
+ #define strchr_P (s , c ) strchr((s ), (c))
61
+ #define strchrnul_P (s , c ) strchrnul((s ), (c))
54
62
#define strcmp_P (a , b ) strcmp((a), (b))
55
63
#define strcpy_P (dest , src ) strcpy((dest), (src))
56
- #define strcasecmp_P (a , b ) strcasecmp((a), (b))
57
- #define strcasestr_P (a , b ) strcasestr((a), (b))
58
- #define strlcat_P (dest , src , len ) strlcat((dest), (src), (len))
59
- #define strlcpy_P (dest , src , len ) strlcpy((dest), (src), (len))
60
- #define strlen_P (s ) strlen((const char *)(s))
61
- #define strnlen_P (str , len ) strnlen((str), (len))
62
- #define strncmp_P (a , b , n ) strncmp((a), (b), (n))
63
- #define strncasecmp_P (a , b , n ) strncasecmp((a), (b), (n))
64
- #define strncat_P (a , b , n ) strncat((a), (b), (n))
65
- #define strncpy_P (a , b , n ) strncpy((a), (b), (n))
66
- #define strpbrk_P (str , chrs ) strpbrk((str), (chrs))
67
- #define strrchr_P (str , c ) strrchr((str), (c))
68
- #define strsep_P (strp , delim ) strsep((strp), (delim))
69
- #define strspn_P (str , chrs ) strspn((str), (chrs))
64
+ #define strcasecmp_P (s1 , s2 ) strcasecmp((s1), (s2))
65
+ #define strcasestr_P (haystack , needle ) strcasestr((haystack), (needle))
66
+ #define strcspn_P (s , accept ) strcspn((s), (accept))
67
+ #define strlcat_P (s1 , s2 , n ) strlcat((s1), (s2), (n))
68
+ #define strlcpy_P (s1 , s2 , n ) strlcpy((s1), (s2), (n))
69
+ #define strlen_P (a ) strlen((a))
70
+ #define strnlen_P (s , n ) strnlen((s), (n))
71
+ #define strncmp_P (s1 , s2 , n ) strncmp((s1), (s2), (n))
72
+ #define strncasecmp_P (s1 , s2 , n ) strncasecmp((s1), (s2), (n))
73
+ #define strncat_P (s1 , s2 , n ) strncat((s1), (s2), (n))
74
+ #define strncpy_P (s1 , s2 , n ) strncpy((s1), (s2), (n))
75
+ #define strpbrk_P (s , accept ) strpbrk((s), (accept))
76
+ #define strrchr_P (s , c ) strrchr((s), (c))
77
+ #define strsep_P (sp , delim ) strsep((sp), (delim))
78
+ #define strspn_P (s , accept ) strspn((s), (accept))
70
79
#define strstr_P (a , b ) strstr((a), (b))
71
- #define sprintf_P (s , ...) sprintf((s), __VA_ARGS__)
72
- #define vfprintf_P (fp , s , ...) vfprintf((fp), (s), __VA_ARGS__)
73
- #define printf_P (...) printf(__VA_ARGS__)
74
- #define snprintf_P (s , n , ...) snprintf((s), (n), __VA_ARGS__)
75
- #define vsprintf_P (s , ...) vsprintf((s), __VA_ARGS__)
76
- #define vsnprintf_P (s , n , ...) vsnprintf((s), (n), __VA_ARGS__)
77
- #define fprintf_P (fp , ...) fprintf((fp), __VA_ARGS__)
80
+ #define strtok_P (s , delim ) strtok((s), (delim))
81
+ #define strtok_rP (s , delim , last ) strtok((s), (delim), (last))
82
+
78
83
#define strlen_PF (a ) strlen((a))
79
84
#define strnlen_PF (src , len ) strnlen((src), (len))
80
85
#define memcpy_PF (dest , src , len ) memcpy((dest), (src), (len))
@@ -91,6 +96,13 @@ typedef uint64_t prog_uint64_t;
91
96
#define strlcpy_PF (dest , src , n ) strlcpy((dest), (src), (n))
92
97
#define memcmp_PF (s1 , s2 , n ) memcmp((s1), (s2), (n))
93
98
99
+ #define sprintf_P (s , f , ...) sprintf((s), (f), __VA_ARGS__)
100
+ #define vfprintf_P (fp , s , ...) vfprintf((fp), (s), __VA_ARGS__)
101
+ #define printf_P (...) printf(__VA_ARGS__)
102
+ #define snprintf_P (s , f , ...) snprintf((s), (f), __VA_ARGS__)
103
+ #define vsprintf_P (s , ...) vsprintf((s), __VA_ARGS__)
104
+ #define vsnprintf_P (s , n , ...) vsnprintf((s), (n), __VA_ARGS__)
105
+ #define fprintf_P (fp , ...) fprintf((fp), __VA_ARGS__)
94
106
95
107
#define pgm_read_byte (addr ) (*(const unsigned char *)(addr))
96
108
#if 0
@@ -121,10 +133,13 @@ typedef uint64_t prog_uint64_t;
121
133
#define pgm_read_dword_near (addr ) pgm_read_dword(addr)
122
134
#define pgm_read_float_near (addr ) pgm_read_float(addr)
123
135
#define pgm_read_ptr_near (addr ) pgm_read_ptr(addr)
136
+
124
137
#define pgm_read_byte_far (addr ) pgm_read_byte(addr)
125
138
#define pgm_read_word_far (addr ) pgm_read_word(addr)
126
139
#define pgm_read_dword_far (addr ) pgm_read_dword(addr)
127
140
#define pgm_read_float_far (addr ) pgm_read_float(addr)
128
141
#define pgm_read_ptr_far (addr ) pgm_read_ptr(addr)
129
142
143
+ #define pgm_get_far_address (addr ) (&(addr))
144
+
130
145
#endif
0 commit comments