aboutsummaryrefslogtreecommitdiff
path: root/tmk_core/common/print.h
diff options
context:
space:
mode:
Diffstat (limited to 'tmk_core/common/print.h')
-rw-r--r--tmk_core/common/print.h394
1 files changed, 196 insertions, 198 deletions
diff --git a/tmk_core/common/print.h b/tmk_core/common/print.h
index 2d7184bd0..20189838f 100644
--- a/tmk_core/common/print.h
+++ b/tmk_core/common/print.h
@@ -30,137 +30,136 @@
30#include "util.h" 30#include "util.h"
31 31
32#if defined(PROTOCOL_CHIBIOS) || defined(PROTOCOL_ARM_ATSAM) 32#if defined(PROTOCOL_CHIBIOS) || defined(PROTOCOL_ARM_ATSAM)
33#define PSTR(x) x 33# define PSTR(x) x
34#endif 34#endif
35 35
36
37#ifndef NO_PRINT 36#ifndef NO_PRINT
38 37
39#if defined(__AVR__) /* __AVR__ */ 38# if defined(__AVR__) /* __AVR__ */
40 39
41# include "avr/xprintf.h" 40# include "avr/xprintf.h"
42 41
43# ifdef USER_PRINT /* USER_PRINT */ 42# ifdef USER_PRINT /* USER_PRINT */
44 43
45// Remove normal print defines 44// Remove normal print defines
46# define print(s) 45# define print(s)
47# define println(s) 46# define println(s)
48# undef xprintf 47# undef xprintf
49# define xprintf(fmt, ...) 48# define xprintf(fmt, ...)
50 49
51// Create user print defines 50// Create user print defines
52# define uprint(s) xputs(PSTR(s)) 51# define uprint(s) xputs(PSTR(s))
53# define uprintln(s) xputs(PSTR(s "\r\n")) 52# define uprintln(s) xputs(PSTR(s "\r\n"))
54# define uprintf(fmt, ...) __xprintf(PSTR(fmt), ##__VA_ARGS__) 53# define uprintf(fmt, ...) __xprintf(PSTR(fmt), ##__VA_ARGS__)
55 54
56# else /* NORMAL PRINT */ 55# else /* NORMAL PRINT */
57 56
58// Create user & normal print defines 57// Create user & normal print defines
59# define print(s) xputs(PSTR(s)) 58# define print(s) xputs(PSTR(s))
60# define println(s) xputs(PSTR(s "\r\n")) 59# define println(s) xputs(PSTR(s "\r\n"))
61# define uprint(s) print(s) 60# define uprint(s) print(s)
62# define uprintln(s) println(s) 61# define uprintln(s) println(s)
63# define uprintf(fmt, ...) xprintf(fmt, ##__VA_ARGS__) 62# define uprintf(fmt, ...) xprintf(fmt, ##__VA_ARGS__)
64 63
65# endif /* USER_PRINT / NORMAL PRINT */ 64# endif /* USER_PRINT / NORMAL PRINT */
66 65
67# ifdef __cplusplus 66# ifdef __cplusplus
68extern "C" 67extern "C"
69# endif 68# endif
70 69
71/* function pointer of sendchar to be used by print utility */ 70 /* function pointer of sendchar to be used by print utility */
72void print_set_sendchar(int8_t (*print_sendchar_func)(uint8_t)); 71 void print_set_sendchar(int8_t (*print_sendchar_func)(uint8_t));
73 72
74#elif defined(PROTOCOL_CHIBIOS) /* PROTOCOL_CHIBIOS */ 73# elif defined(PROTOCOL_CHIBIOS) /* PROTOCOL_CHIBIOS */
75 74
76#ifndef TERMINAL_ENABLE 75# ifndef TERMINAL_ENABLE
77# include "chibios/printf.h" 76# include "chibios/printf.h"
78#endif 77# endif
79 78
80# ifdef USER_PRINT /* USER_PRINT */ 79# ifdef USER_PRINT /* USER_PRINT */
81 80
82// Remove normal print defines 81// Remove normal print defines
83# define print(s) 82# define print(s)
84# define println(s) 83# define println(s)
85# define xprintf(fmt, ...) 84# define xprintf(fmt, ...)
86 85
87// Create user print defines 86// Create user print defines
88# define uprint(s) printf(s) 87# define uprint(s) printf(s)
89# define uprintln(s) printf(s "\r\n") 88# define uprintln(s) printf(s "\r\n")
90# define uprintf printf 89# define uprintf printf
91 90
92# else /* NORMAL PRINT */ 91# else /* NORMAL PRINT */
93 92
94// Create user & normal print defines 93// Create user & normal print defines
95# define print(s) printf(s) 94# define print(s) printf(s)
96# define println(s) printf(s "\r\n") 95# define println(s) printf(s "\r\n")
97# define xprintf printf 96# define xprintf printf
98# define uprint(s) printf(s) 97# define uprint(s) printf(s)
99# define uprintln(s) printf(s "\r\n") 98# define uprintln(s) printf(s "\r\n")
100# define uprintf printf 99# define uprintf printf
101 100
102# endif /* USER_PRINT / NORMAL PRINT */ 101# endif /* USER_PRINT / NORMAL PRINT */
103 102
104#elif defined(PROTOCOL_ARM_ATSAM) /* PROTOCOL_ARM_ATSAM */ 103# elif defined(PROTOCOL_ARM_ATSAM) /* PROTOCOL_ARM_ATSAM */
105 104
106# include "arm_atsam/printf.h" 105# include "arm_atsam/printf.h"
107 106
108# ifdef USER_PRINT /* USER_PRINT */ 107# ifdef USER_PRINT /* USER_PRINT */
109 108
110// Remove normal print defines 109// Remove normal print defines
111# define print(s) 110# define print(s)
112# define println(s) 111# define println(s)
113# define xprintf(fmt, ...) 112# define xprintf(fmt, ...)
114 113
115// Create user print defines 114// Create user print defines
116# define uprintf(fmt, ...) __xprintf(fmt, ##__VA_ARGS__) 115# define uprintf(fmt, ...) __xprintf(fmt, ##__VA_ARGS__)
117# define uprint(s) xprintf(s) 116# define uprint(s) xprintf(s)
118# define uprintln(s) xprintf(s "\r\n") 117# define uprintln(s) xprintf(s "\r\n")
119 118
120# else /* NORMAL PRINT */ 119# else /* NORMAL PRINT */
121 120
122// Create user & normal print defines 121// Create user & normal print defines
123# define xprintf(fmt, ...) __xprintf(fmt, ##__VA_ARGS__) 122# define xprintf(fmt, ...) __xprintf(fmt, ##__VA_ARGS__)
124# define print(s) xprintf(s) 123# define print(s) xprintf(s)
125# define println(s) xprintf(s "\r\n") 124# define println(s) xprintf(s "\r\n")
126# define uprint(s) print(s) 125# define uprint(s) print(s)
127# define uprintln(s) println(s) 126# define uprintln(s) println(s)
128# define uprintf(fmt, ...) xprintf(fmt, ##__VA_ARGS__) 127# define uprintf(fmt, ...) xprintf(fmt, ##__VA_ARGS__)
129 128
130# endif /* USER_PRINT / NORMAL PRINT */ 129# endif /* USER_PRINT / NORMAL PRINT */
131 130
132#elif defined(__arm__) /* __arm__ */ 131# elif defined(__arm__) /* __arm__ */
133 132
134# include "mbed/xprintf.h" 133# include "mbed/xprintf.h"
135 134
136# ifdef USER_PRINT /* USER_PRINT */ 135# ifdef USER_PRINT /* USER_PRINT */
137 136
138// Remove normal print defines 137// Remove normal print defines
139# define print(s) 138# define print(s)
140# define println(s) 139# define println(s)
141# define xprintf(fmt, ...) 140# define xprintf(fmt, ...)
142 141
143// Create user print defines 142// Create user print defines
144# define uprintf(fmt, ...) __xprintf(fmt, ##__VA_ARGS__) 143# define uprintf(fmt, ...) __xprintf(fmt, ##__VA_ARGS__)
145# define uprint(s) xprintf(s) 144# define uprint(s) xprintf(s)
146# define uprintln(s) xprintf(s "\r\n") 145# define uprintln(s) xprintf(s "\r\n")
147 146
148# else /* NORMAL PRINT */ 147# else /* NORMAL PRINT */
149 148
150// Create user & normal print defines 149// Create user & normal print defines
151# define xprintf(fmt, ...) __xprintf(fmt, ##__VA_ARGS__) 150# define xprintf(fmt, ...) __xprintf(fmt, ##__VA_ARGS__)
152# define print(s) xprintf(s) 151# define print(s) xprintf(s)
153# define println(s) xprintf(s "\r\n") 152# define println(s) xprintf(s "\r\n")
154# define uprint(s) print(s) 153# define uprint(s) print(s)
155# define uprintln(s) println(s) 154# define uprintln(s) println(s)
156# define uprintf(fmt, ...) xprintf(fmt, ##__VA_ARGS__) 155# define uprintf(fmt, ...) xprintf(fmt, ##__VA_ARGS__)
157 156
158# endif /* USER_PRINT / NORMAL PRINT */ 157# endif /* USER_PRINT / NORMAL PRINT */
159 158
160/* TODO: to select output destinations: UART/USBSerial */ 159/* TODO: to select output destinations: UART/USBSerial */
161# define print_set_sendchar(func) 160# define print_set_sendchar(func)
162 161
163#endif /* __AVR__ / PROTOCOL_CHIBIOS / PROTOCOL_ARM_ATSAM / __arm__ */ 162# endif /* __AVR__ / PROTOCOL_CHIBIOS / PROTOCOL_ARM_ATSAM / __arm__ */
164 163
165// User print disables the normal print messages in the body of QMK/TMK code and 164// User print disables the normal print messages in the body of QMK/TMK code and
166// is meant as a lightweight alternative to NOPRINT. Use it when you only want to do 165// is meant as a lightweight alternative to NOPRINT. Use it when you only want to do
@@ -169,141 +168,140 @@ void print_set_sendchar(int8_t (*print_sendchar_func)(uint8_t));
169// 168//
170// !!! DO NOT USE USER PRINT CALLS IN THE BODY OF QMK/TMK !!! 169// !!! DO NOT USE USER PRINT CALLS IN THE BODY OF QMK/TMK !!!
171// 170//
172#ifdef USER_PRINT 171# ifdef USER_PRINT
173 172
174// Disable normal print 173// Disable normal print
175#define print_dec(data) 174# define print_dec(data)
176#define print_decs(data) 175# define print_decs(data)
177#define print_hex4(data) 176# define print_hex4(data)
178#define print_hex8(data) 177# define print_hex8(data)
179#define print_hex16(data) 178# define print_hex16(data)
180#define print_hex32(data) 179# define print_hex32(data)
181#define print_bin4(data) 180# define print_bin4(data)
182#define print_bin8(data) 181# define print_bin8(data)
183#define print_bin16(data) 182# define print_bin16(data)
184#define print_bin32(data) 183# define print_bin32(data)
185#define print_bin_reverse8(data) 184# define print_bin_reverse8(data)
186#define print_bin_reverse16(data) 185# define print_bin_reverse16(data)
187#define print_bin_reverse32(data) 186# define print_bin_reverse32(data)
188#define print_val_dec(v) 187# define print_val_dec(v)
189#define print_val_decs(v) 188# define print_val_decs(v)
190#define print_val_hex8(v) 189# define print_val_hex8(v)
191#define print_val_hex16(v) 190# define print_val_hex16(v)
192#define print_val_hex32(v) 191# define print_val_hex32(v)
193#define print_val_bin8(v) 192# define print_val_bin8(v)
194#define print_val_bin16(v) 193# define print_val_bin16(v)
195#define print_val_bin32(v) 194# define print_val_bin32(v)
196#define print_val_bin_reverse8(v) 195# define print_val_bin_reverse8(v)
197#define print_val_bin_reverse16(v) 196# define print_val_bin_reverse16(v)
198#define print_val_bin_reverse32(v) 197# define print_val_bin_reverse32(v)
199 198
200#else /* NORMAL_PRINT */ 199# else /* NORMAL_PRINT */
201 200
202//Enable normal print 201// Enable normal print
203/* decimal */ 202/* decimal */
204#define print_dec(i) xprintf("%u", i) 203# define print_dec(i) xprintf("%u", i)
205#define print_decs(i) xprintf("%d", i) 204# define print_decs(i) xprintf("%d", i)
206/* hex */ 205/* hex */
207#define print_hex4(i) xprintf("%X", i) 206# define print_hex4(i) xprintf("%X", i)
208#define print_hex8(i) xprintf("%02X", i) 207# define print_hex8(i) xprintf("%02X", i)
209#define print_hex16(i) xprintf("%04X", i) 208# define print_hex16(i) xprintf("%04X", i)
210#define print_hex32(i) xprintf("%08lX", i) 209# define print_hex32(i) xprintf("%08lX", i)
211/* binary */ 210/* binary */
212#define print_bin4(i) xprintf("%04b", i) 211# define print_bin4(i) xprintf("%04b", i)
213#define print_bin8(i) xprintf("%08b", i) 212# define print_bin8(i) xprintf("%08b", i)
214#define print_bin16(i) xprintf("%016b", i) 213# define print_bin16(i) xprintf("%016b", i)
215#define print_bin32(i) xprintf("%032lb", i) 214# define print_bin32(i) xprintf("%032lb", i)
216#define print_bin_reverse8(i) xprintf("%08b", bitrev(i)) 215# define print_bin_reverse8(i) xprintf("%08b", bitrev(i))
217#define print_bin_reverse16(i) xprintf("%016b", bitrev16(i)) 216# define print_bin_reverse16(i) xprintf("%016b", bitrev16(i))
218#define print_bin_reverse32(i) xprintf("%032lb", bitrev32(i)) 217# define print_bin_reverse32(i) xprintf("%032lb", bitrev32(i))
219/* print value utility */ 218/* print value utility */
220#define print_val_dec(v) xprintf(#v ": %u\n", v) 219# define print_val_dec(v) xprintf(# v ": %u\n", v)
221#define print_val_decs(v) xprintf(#v ": %d\n", v) 220# define print_val_decs(v) xprintf(# v ": %d\n", v)
222#define print_val_hex8(v) xprintf(#v ": %X\n", v) 221# define print_val_hex8(v) xprintf(# v ": %X\n", v)
223#define print_val_hex16(v) xprintf(#v ": %02X\n", v) 222# define print_val_hex16(v) xprintf(# v ": %02X\n", v)
224#define print_val_hex32(v) xprintf(#v ": %04lX\n", v) 223# define print_val_hex32(v) xprintf(# v ": %04lX\n", v)
225#define print_val_bin8(v) xprintf(#v ": %08b\n", v) 224# define print_val_bin8(v) xprintf(# v ": %08b\n", v)
226#define print_val_bin16(v) xprintf(#v ": %016b\n", v) 225# define print_val_bin16(v) xprintf(# v ": %016b\n", v)
227#define print_val_bin32(v) xprintf(#v ": %032lb\n", v) 226# define print_val_bin32(v) xprintf(# v ": %032lb\n", v)
228#define print_val_bin_reverse8(v) xprintf(#v ": %08b\n", bitrev(v)) 227# define print_val_bin_reverse8(v) xprintf(# v ": %08b\n", bitrev(v))
229#define print_val_bin_reverse16(v) xprintf(#v ": %016b\n", bitrev16(v)) 228# define print_val_bin_reverse16(v) xprintf(# v ": %016b\n", bitrev16(v))
230#define print_val_bin_reverse32(v) xprintf(#v ": %032lb\n", bitrev32(v)) 229# define print_val_bin_reverse32(v) xprintf(# v ": %032lb\n", bitrev32(v))
231 230
232#endif /* USER_PRINT / NORMAL_PRINT */ 231# endif /* USER_PRINT / NORMAL_PRINT */
233 232
234// User Print 233// User Print
235 234
236/* decimal */ 235/* decimal */
237#define uprint_dec(i) uprintf("%u", i) 236# define uprint_dec(i) uprintf("%u", i)
238#define uprint_decs(i) uprintf("%d", i) 237# define uprint_decs(i) uprintf("%d", i)
239/* hex */ 238/* hex */
240#define uprint_hex4(i) uprintf("%X", i) 239# define uprint_hex4(i) uprintf("%X", i)
241#define uprint_hex8(i) uprintf("%02X", i) 240# define uprint_hex8(i) uprintf("%02X", i)
242#define uprint_hex16(i) uprintf("%04X", i) 241# define uprint_hex16(i) uprintf("%04X", i)
243#define uprint_hex32(i) uprintf("%08lX", i) 242# define uprint_hex32(i) uprintf("%08lX", i)
244/* binary */ 243/* binary */
245#define uprint_bin4(i) uprintf("%04b", i) 244# define uprint_bin4(i) uprintf("%04b", i)
246#define uprint_bin8(i) uprintf("%08b", i) 245# define uprint_bin8(i) uprintf("%08b", i)
247#define uprint_bin16(i) uprintf("%016b", i) 246# define uprint_bin16(i) uprintf("%016b", i)
248#define uprint_bin32(i) uprintf("%032lb", i) 247# define uprint_bin32(i) uprintf("%032lb", i)
249#define uprint_bin_reverse8(i) uprintf("%08b", bitrev(i)) 248# define uprint_bin_reverse8(i) uprintf("%08b", bitrev(i))
250#define uprint_bin_reverse16(i) uprintf("%016b", bitrev16(i)) 249# define uprint_bin_reverse16(i) uprintf("%016b", bitrev16(i))
251#define uprint_bin_reverse32(i) uprintf("%032lb", bitrev32(i)) 250# define uprint_bin_reverse32(i) uprintf("%032lb", bitrev32(i))
252/* print value utility */ 251/* print value utility */
253#define uprint_val_dec(v) uprintf(#v ": %u\n", v) 252# define uprint_val_dec(v) uprintf(# v ": %u\n", v)
254#define uprint_val_decs(v) uprintf(#v ": %d\n", v) 253# define uprint_val_decs(v) uprintf(# v ": %d\n", v)
255#define uprint_val_hex8(v) uprintf(#v ": %X\n", v) 254# define uprint_val_hex8(v) uprintf(# v ": %X\n", v)
256#define uprint_val_hex16(v) uprintf(#v ": %02X\n", v) 255# define uprint_val_hex16(v) uprintf(# v ": %02X\n", v)
257#define uprint_val_hex32(v) uprintf(#v ": %04lX\n", v) 256# define uprint_val_hex32(v) uprintf(# v ": %04lX\n", v)
258#define uprint_val_bin8(v) uprintf(#v ": %08b\n", v) 257# define uprint_val_bin8(v) uprintf(# v ": %08b\n", v)
259#define uprint_val_bin16(v) uprintf(#v ": %016b\n", v) 258# define uprint_val_bin16(v) uprintf(# v ": %016b\n", v)
260#define uprint_val_bin32(v) uprintf(#v ": %032lb\n", v) 259# define uprint_val_bin32(v) uprintf(# v ": %032lb\n", v)
261#define uprint_val_bin_reverse8(v) uprintf(#v ": %08b\n", bitrev(v)) 260# define uprint_val_bin_reverse8(v) uprintf(# v ": %08b\n", bitrev(v))
262#define uprint_val_bin_reverse16(v) uprintf(#v ": %016b\n", bitrev16(v)) 261# define uprint_val_bin_reverse16(v) uprintf(# v ": %016b\n", bitrev16(v))
263#define uprint_val_bin_reverse32(v) uprintf(#v ": %032lb\n", bitrev32(v)) 262# define uprint_val_bin_reverse32(v) uprintf(# v ": %032lb\n", bitrev32(v))
264 263
265#else /* NO_PRINT */ 264#else /* NO_PRINT */
266
267#define xprintf(fmt, ...)
268#define print(s)
269#define println(s)
270#define print_set_sendchar(func)
271#define print_dec(data)
272#define print_decs(data)
273#define print_hex4(data)
274#define print_hex8(data)
275#define print_hex16(data)
276#define print_hex32(data)
277#define print_bin4(data)
278#define print_bin8(data)
279#define print_bin16(data)
280#define print_bin32(data)
281#define print_bin_reverse8(data)
282#define print_bin_reverse16(data)
283#define print_bin_reverse32(data)
284#define print_val_dec(v)
285#define print_val_decs(v)
286#define print_val_hex8(v)
287#define print_val_hex16(v)
288#define print_val_hex32(v)
289#define print_val_bin8(v)
290#define print_val_bin16(v)
291#define print_val_bin32(v)
292#define print_val_bin_reverse8(v)
293#define print_val_bin_reverse16(v)
294#define print_val_bin_reverse32(v)
295
296#endif /* NO_PRINT */
297 265
266# define xprintf(fmt, ...)
267# define print(s)
268# define println(s)
269# define print_set_sendchar(func)
270# define print_dec(data)
271# define print_decs(data)
272# define print_hex4(data)
273# define print_hex8(data)
274# define print_hex16(data)
275# define print_hex32(data)
276# define print_bin4(data)
277# define print_bin8(data)
278# define print_bin16(data)
279# define print_bin32(data)
280# define print_bin_reverse8(data)
281# define print_bin_reverse16(data)
282# define print_bin_reverse32(data)
283# define print_val_dec(v)
284# define print_val_decs(v)
285# define print_val_hex8(v)
286# define print_val_hex16(v)
287# define print_val_hex32(v)
288# define print_val_bin8(v)
289# define print_val_bin16(v)
290# define print_val_bin32(v)
291# define print_val_bin_reverse8(v)
292# define print_val_bin_reverse16(v)
293# define print_val_bin_reverse32(v)
294
295#endif /* NO_PRINT */
298 296
299/* Backward compatiblitly for old name */ 297/* Backward compatiblitly for old name */
300#define pdec(data) print_dec(data) 298#define pdec(data) print_dec(data)
301#define pdec16(data) print_dec(data) 299#define pdec16(data) print_dec(data)
302#define phex(data) print_hex8(data) 300#define phex(data) print_hex8(data)
303#define phex16(data) print_hex16(data) 301#define phex16(data) print_hex16(data)
304#define pbin(data) print_bin8(data) 302#define pbin(data) print_bin8(data)
305#define pbin16(data) print_bin16(data) 303#define pbin16(data) print_bin16(data)
306#define pbin_reverse(data) print_bin_reverse8(data) 304#define pbin_reverse(data) print_bin_reverse8(data)
307#define pbin_reverse16(data) print_bin_reverse16(data) 305#define pbin_reverse16(data) print_bin_reverse16(data)
308 306
309#endif 307#endif