From 17a7c6d3783288c3ed0b28f898232cd0ea00c0c9 Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Tue, 16 Jan 2018 11:04:22 +0100 Subject: esp8266 stdout: add printf_uint8 and printf_float --- include/esp8266/driver/stdout.h | 2 ++ src/arch/esp8266/driver/stdout.cc | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/include/esp8266/driver/stdout.h b/include/esp8266/driver/stdout.h index 5a75096..038de2e 100644 --- a/include/esp8266/driver/stdout.h +++ b/include/esp8266/driver/stdout.h @@ -14,6 +14,8 @@ class StandardOutput { void put(char c); void write(const char *s); void flush() {} + void printf_uint8(unsigned char num); + void printf_float(float num); StandardOutput & operator<<(char c); StandardOutput & operator<<(unsigned char c); diff --git a/src/arch/esp8266/driver/stdout.cc b/src/arch/esp8266/driver/stdout.cc index 9638a81..2064b38 100644 --- a/src/arch/esp8266/driver/stdout.cc +++ b/src/arch/esp8266/driver/stdout.cc @@ -141,6 +141,41 @@ void StandardOutput::setBase(uint8_t b) } } +static inline char format_hex_nibble(uint8_t num) +{ + if (num > 9) { + return 'a' + num - 10; + } + return '0' + num; +} + +void StandardOutput::printf_uint8(uint8_t num) +{ + put(format_hex_nibble(num / 16)); + put(format_hex_nibble(num % 16)); +} + +void StandardOutput::printf_float(float num) +{ + if (num < 0) { + put('-'); + num *= -1; + } + if (num > 1000) { + put('0' + (((int)num % 10000) / 1000)); + } + if (num > 100) { + put('0' + (((int)num % 1000) / 100)); + } + if (num > 10) { + put('0' + (((int)num % 100) / 10)); + } + put('0' + ((int)num % 10)); + put('.'); + put('0' + ((int)(num * 10) % 10)); + put('0' + ((int)(num * 100) % 10)); +} + // FLUSH StandardOutput & flush(StandardOutput & os) { -- cgit v1.2.3