From c2869703af3b5c3ae7a4062c15f43214274c0911 Mon Sep 17 00:00:00 2001 From: CTCaer Date: Sun, 8 May 2022 05:29:30 +0300 Subject: [PATCH] hekate: gfx: add negative decimals printing And remove external handling --- bootloader/frontend/fe_info.c | 16 ++++------------ bootloader/gfx/gfx.c | 14 +++++++++++++- bootloader/gfx/tui.c | 9 +++------ 3 files changed, 20 insertions(+), 19 deletions(-) diff --git a/bootloader/frontend/fe_info.c b/bootloader/frontend/fe_info.c index a1e9dca..00c38f2 100644 --- a/bootloader/frontend/fe_info.c +++ b/bootloader/frontend/fe_info.c @@ -337,16 +337,10 @@ void print_fuel_gauge_info() gfx_printf("Capacity (design): %4d mAh\n", value); max17050_get_property(MAX17050_Current, &value); - if (value >= 0) - gfx_printf("Current now: %d mA\n", value / 1000); - else - gfx_printf("Current now: -%d mA\n", ~value / 1000); + gfx_printf("Current now: %d mA\n", value / 1000); max17050_get_property(MAX17050_AvgCurrent, &value); - if (value >= 0) - gfx_printf("Current average: %d mA\n", value / 1000); - else - gfx_printf("Current average: -%d mA\n", ~value / 1000); + gfx_printf("Current average: %d mA\n", value / 1000); max17050_get_property(MAX17050_VCELL, &value); gfx_printf("Voltage now: %4d mV\n", value); @@ -364,10 +358,8 @@ void print_fuel_gauge_info() gfx_printf("Empty voltage (design): %4d mV\n", value); max17050_get_property(MAX17050_TEMP, &value); - if (value >= 0) - gfx_printf("Battery temperature: %d.%d oC\n", value / 10, value % 10); - else - gfx_printf("Battery temperature: -%d.%d oC\n", ~value / 10, (~value) % 10); + gfx_printf("Battery temperature: %d.%d oC\n", value / 10, + (value >= 0 ? value : (~value)) % 10); } void print_battery_charger_info() diff --git a/bootloader/gfx/gfx.c b/bootloader/gfx/gfx.c index fbd0b36..66133e0 100644 --- a/bootloader/gfx/gfx.c +++ b/bootloader/gfx/gfx.c @@ -280,10 +280,19 @@ static void _gfx_putn(u32 v, int base, char fill, int fcnt) static const char digits[] = "0123456789ABCDEFghijklmnopqrstuvwxyz"; char *p; int c = fcnt; + bool negative = false; if (base > 36) return; + // Account for negative numbers. + if (base == 10 && v & 0x80000000) + { + negative = true; + v = (int)v * -1; + c--; + } + p = buf + 64; *p = 0; do @@ -293,9 +302,12 @@ static void _gfx_putn(u32 v, int base, char fill, int fcnt) v /= base; } while (v); + if (negative) + *--p = '-'; + if (fill != 0) { - while (c > 0) + while (c > 0 && p > buf) { *--p = fill; c--; diff --git a/bootloader/gfx/tui.c b/bootloader/gfx/tui.c index 9e61f61..d34b490 100644 --- a/bootloader/gfx/tui.c +++ b/bootloader/gfx/tui.c @@ -51,12 +51,9 @@ void tui_sbar(bool force_update) max17050_get_property(MAX17050_Current, &battVoltCurr); - if (battVoltCurr >= 0) - gfx_printf(" %k+%d mA%k%K\n", - 0xFF008800, battVoltCurr / 1000, 0xFFCCCCCC, 0xFF1B1B1B); - else - gfx_printf(" %k-%d mA%k%K\n", - 0xFF880000, (~battVoltCurr) / 1000, 0xFFCCCCCC, 0xFF1B1B1B); + gfx_printf(" %k%d mA%k%K\n", battVoltCurr >= 0 ? 0xFF008800 : 0xFF880000, + battVoltCurr / 1000, 0xFFCCCCCC, 0xFF1B1B1B); + gfx_con.fntsz = prevFontSize; gfx_con_setpos(cx, cy); }