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