X-Git-Url: https://git.friedersdorff.com/?a=blobdiff_plain;f=common%2Fprint.c;h=d8a899b4071df0b902ba741c1d300672ae412fcc;hb=f609712da3b94ea36612a6f210bd6ce902b74631;hp=dd73ff59ddbcffa81e0addab9613eea345f00f71;hpb=ad24858e4fec8bb9af9d89ebf42cda3fffcfdff5;p=max%2Ftmk_keyboard.git diff --git a/common/print.c b/common/print.c index dd73ff59..d8a899b4 100644 --- a/common/print.c +++ b/common/print.c @@ -22,15 +22,17 @@ * THE SOFTWARE. */ -#include #include #include #include "print.h" + + #define sendchar(c) do { if (print_enable && print_sendchar_func) (print_sendchar_func)(c); } while (0) -int8_t (*print_sendchar_func)(uint8_t) = NULL; -bool print_enable = false; +int8_t (*print_sendchar_func)(uint8_t) = 0; +bool print_enable = true; + /* print string stored in data memory(SRAM) * print_P("hello world"); @@ -62,6 +64,55 @@ void print_P(const char *s) } } +void print_CRLF(void) +{ + sendchar('\r'); sendchar('\n'); +} + + +#define SIGNED 0x80 +#define BIN 2 +#define OCT 8 +#define DEC 10 +#define HEX 16 + +static inline +char itoc(uint8_t i) +{ + return (i < 10 ? '0' + i : 'A' + i - 10); +} + +static inline +void print_int(uint16_t data, uint8_t base) +{ + char buf[7] = {'\0'}; + char *p = &buf[6]; + if ((base & SIGNED) && (data & 0x8000)) { + data = -data; + buf[0] = '-'; + } + base &= ~SIGNED; + uint16_t n; + do { + n = data; + data /= base; + *(--p) = itoc(n - data*base); + } while (data); + if (buf[0]) *(--p) = buf[0]; + print_S(p); +} + +void print_dec(uint16_t data) +{ + print_int(data, DEC); +} + +void print_decs(int16_t data) +{ + print_int(data, DEC|SIGNED); +} + + static inline void print_hex4(uint8_t data) { @@ -86,22 +137,6 @@ void print_hex32(uint32_t data) print_hex16(data); } -void print_dec8(uint8_t data) -{ - if (data/100) sendchar('0' + (data/100)); - if (data/100 || data%100/10) sendchar('0' + (data%100/10)); - sendchar('0' + (data%10)); -} - -void print_dec16(uint16_t data) -{ - // TODO -} - -void print_dec32(uint32_t data) -{ - // TODO -} void print_bin(uint8_t data) {