diff options
| author | Olivier <olivier@gid0.org> | 2016-11-27 23:23:21 +0100 | 
|---|---|---|
| committer | Olivier <olivier@gid0.org> | 2016-11-27 23:23:21 +0100 | 
| commit | d6d0b7eadaa568853b21d74057db306a33b7a847 (patch) | |
| tree | e935179ed0db152f94d31ef187c01a40f0fb42d6 /tmk_core/common/print.h | |
| parent | 73d2a470eed73a1ba28520343bd1cfc81498d183 (diff) | |
| parent | 1585fc4b616cb28b8d4a418cd31c8ce0dd64f731 (diff) | |
| download | firmware-d6d0b7eadaa568853b21d74057db306a33b7a847.tar.gz firmware-d6d0b7eadaa568853b21d74057db306a33b7a847.tar.bz2 firmware-d6d0b7eadaa568853b21d74057db306a33b7a847.zip | |
Merge https://github.com/jackhumbert/qmk_firmware
Diffstat (limited to 'tmk_core/common/print.h')
| -rw-r--r-- | tmk_core/common/print.h | 168 | 
1 files changed, 150 insertions, 18 deletions
| diff --git a/tmk_core/common/print.h b/tmk_core/common/print.h index a1352527f..8836c0fc7 100644 --- a/tmk_core/common/print.h +++ b/tmk_core/common/print.h @@ -36,40 +36,140 @@  #ifndef NO_PRINT +#if defined(__AVR__) /* __AVR__ */ -#if defined(__AVR__) +#  include "avr/xprintf.h" -#include "avr/xprintf.h" -#define print(s)    xputs(PSTR(s)) -#define println(s)  xputs(PSTR(s "\r\n")) +#  ifdef USER_PRINT /* USER_PRINT */ -#ifdef __cplusplus +// Remove normal print defines +#    define print(s) +#    define println(s) +#    undef xprintf +#    define xprintf(fmt, ...) + +// Create user print defines +#    define uprint(s)          xputs(PSTR(s)) +#    define uprintln(s)        xputs(PSTR(s "\r\n")) +#    define uprintf(fmt, ...)  __xprintf(PSTR(fmt), ##__VA_ARGS__) + +#  else /* NORMAL PRINT */ + +// Create user & normal print defines +#    define print(s)           xputs(PSTR(s)) +#    define println(s)         xputs(PSTR(s "\r\n")) +#    define uprint(s)          print(s) +#    define uprintln(s)        println(s) +#    define uprintf(fmt, ...)  xprintf(fmt, ...) + +#  endif /* USER_PRINT / NORMAL PRINT */ + +#  ifdef __cplusplus  extern "C" -#endif +#  endif +  /* function pointer of sendchar to be used by print utility */  void print_set_sendchar(int8_t (*print_sendchar_func)(uint8_t)); -#elif defined(PROTOCOL_CHIBIOS) /* __AVR__ */ +#elif defined(PROTOCOL_CHIBIOS) /* PROTOCOL_CHIBIOS */ + +#  include "chibios/printf.h" + +#  ifdef USER_PRINT /* USER_PRINT */ + +// Remove normal print defines +#    define print(s) +#    define println(s) +#    define xprintf(fmt, ...) + +// Create user print defines +#    define uprint(s)    printf(s) +#    define uprintln(s)  printf(s "\r\n") +#    define uprintf      printf + +#  else /* NORMAL PRINT */ + +// Create user & normal print defines +#    define print(s)     printf(s) +#    define println(s)   printf(s "\r\n") +#    define xprintf      printf +#    define uprint(s)    printf(s) +#    define uprintln(s)  printf(s "\r\n") +#    define uprintf      printf -#include "chibios/printf.h" +#  endif /* USER_PRINT / NORMAL PRINT */ -#define print(s)    printf(s) -#define println(s)  printf(s "\r\n") -#define xprintf  printf +#elif defined(__arm__) /* __arm__ */ -#elif defined(__arm__) /* __AVR__ */ +#  include "mbed/xprintf.h" -#include "mbed/xprintf.h" +#  ifdef USER_PRINT /* USER_PRINT */ -#define print(s)    xprintf(s) -#define println(s)  xprintf(s "\r\n") +// Remove normal print defines +#    define print(s) +#    define println(s) +#    define xprintf(fmt, ...) + +// Create user print defines +#    define uprintf(fmt, ...)  __xprintf(fmt, ...) +#    define uprint(s)          xprintf(s) +#    define uprintln(s)        xprintf(s "\r\n") + +#  else /* NORMAL PRINT */ + +// Create user & normal print defines +#    define xprintf(fmt, ...)  __xprintf(fmt, ...) +#    define print(s)           xprintf(s) +#    define println(s)         xprintf(s "\r\n") +#    define uprint(s)          print(s) +#    define uprintln(s)        println(s) +#    define uprintf(fmt, ...)  xprintf(fmt, ...) + +#  endif /* USER_PRINT / NORMAL PRINT */  /* TODO: to select output destinations: UART/USBSerial */ -#define print_set_sendchar(func) +#  define print_set_sendchar(func) + +#endif /* __AVR__ / PROTOCOL_CHIBIOS / __arm__ */ + +// User print disables the normal print messages in the body of QMK/TMK code and +// is meant as a lightweight alternative to NOPRINT. Use it when you only want to do +// a spot of debugging but lack flash resources for allowing all of the codebase to +// print (and store their wasteful strings). +// +// !!! DO NOT USE USER PRINT CALLS IN THE BODY OF QMK/TMK !!! +// +#ifdef USER_PRINT -#endif /* __AVR__ */ +// Disable normal print +#define print_dec(data) +#define print_decs(data) +#define print_hex4(data) +#define print_hex8(data) +#define print_hex16(data) +#define print_hex32(data) +#define print_bin4(data) +#define print_bin8(data) +#define print_bin16(data) +#define print_bin32(data) +#define print_bin_reverse8(data) +#define print_bin_reverse16(data) +#define print_bin_reverse32(data) +#define print_val_dec(v) +#define print_val_decs(v) +#define print_val_hex8(v) +#define print_val_hex16(v) +#define print_val_hex32(v) +#define print_val_bin8(v) +#define print_val_bin16(v) +#define print_val_bin32(v) +#define print_val_bin_reverse8(v) +#define print_val_bin_reverse16(v) +#define print_val_bin_reverse32(v) +#else /* NORMAL_PRINT */ +//Enable normal print  /* decimal */  #define print_dec(i)                xprintf("%u", i)  #define print_decs(i)               xprintf("%d", i) @@ -99,6 +199,39 @@ void print_set_sendchar(int8_t (*print_sendchar_func)(uint8_t));  #define print_val_bin_reverse16(v)  xprintf(#v ": %016b\n", bitrev16(v))  #define print_val_bin_reverse32(v)  xprintf(#v ": %032lb\n", bitrev32(v)) +#endif /* USER_PRINT / NORMAL_PRINT */ + +// User Print + +/* decimal */ +#define uprint_dec(i)               uprintf("%u", i) +#define uprint_decs(i)              uprintf("%d", i) +/* hex */ +#define uprint_hex4(i)              uprintf("%X", i) +#define uprint_hex8(i)              uprintf("%02X", i) +#define uprint_hex16(i)             uprintf("%04X", i) +#define uprint_hex32(i)             uprintf("%08lX", i) +/* binary */ +#define uprint_bin4(i)              uprintf("%04b", i) +#define uprint_bin8(i)              uprintf("%08b", i) +#define uprint_bin16(i)             uprintf("%016b", i) +#define uprint_bin32(i)             uprintf("%032lb", i) +#define uprint_bin_reverse8(i)      uprintf("%08b", bitrev(i)) +#define uprint_bin_reverse16(i)     uprintf("%016b", bitrev16(i)) +#define uprint_bin_reverse32(i)     uprintf("%032lb", bitrev32(i)) +/* print value utility */ +#define uprint_val_dec(v)           uprintf(#v ": %u\n", v) +#define uprint_val_decs(v)          uprintf(#v ": %d\n", v) +#define uprint_val_hex8(v)          uprintf(#v ": %X\n", v) +#define uprint_val_hex16(v)         uprintf(#v ": %02X\n", v) +#define uprint_val_hex32(v)         uprintf(#v ": %04lX\n", v) +#define uprint_val_bin8(v)          uprintf(#v ": %08b\n", v) +#define uprint_val_bin16(v)         uprintf(#v ": %016b\n", v) +#define uprint_val_bin32(v)         uprintf(#v ": %032lb\n", v) +#define uprint_val_bin_reverse8(v)  uprintf(#v ": %08b\n", bitrev(v)) +#define uprint_val_bin_reverse16(v) uprintf(#v ": %016b\n", bitrev16(v)) +#define uprint_val_bin_reverse32(v) uprintf(#v ": %032lb\n", bitrev32(v)) +  #else   /* NO_PRINT */  #define xprintf(fmt, ...) @@ -143,5 +276,4 @@ void print_set_sendchar(int8_t (*print_sendchar_func)(uint8_t));  #define pbin_reverse(data)      print_bin_reverse8(data)  #define pbin_reverse16(data)    print_bin_reverse16(data) -  #endif | 
