diff --git a/source/common/power.c b/source/common/power.c index 9e6d57c..4b64b09 100644 --- a/source/common/power.c +++ b/source/common/power.c @@ -1,7 +1,6 @@ #include "power.h" #include "i2c.h" #include "cache.h" -#include "timer.h" #include "pxi.h" static const u8 br_settings[] = {0x10, 0x17, 0x1E, 0x25, 0x2C, 0x34, 0x3C, 0x44, 0x4D, 0x56, 0x60, 0x6B, 0x79, 0x8C, 0xA7, 0xD2}; @@ -18,6 +17,12 @@ void CheckBrightness() { return; } +u32 GetBatteryPercent() { + u8 battery = 0; + I2C_readRegBuf(I2C_DEV_MCU, 0x0B, &battery, 1); + return battery; +} + void Reboot() { I2C_writeReg(I2C_DEV_MCU, 0x22, 1 << 0); // poweroff LCD to prevent MCU hangs flushEntireDCache(); diff --git a/source/common/power.h b/source/common/power.h index 42abc1e..3e8a1fb 100644 --- a/source/common/power.h +++ b/source/common/power.h @@ -3,6 +3,7 @@ #include "common.h" void CheckBrightness(); +u32 GetBatteryPercent(); void ScreenOn(); void Reboot(); void PowerOff(); diff --git a/source/godmode.c b/source/godmode.c index f1edbfb..33d5f8c 100644 --- a/source/godmode.c +++ b/source/godmode.c @@ -59,17 +59,27 @@ typedef struct { u32 scroll; } PaneData; -void GetTimeString(char* timestr, bool forced_update) { +void GetTimeString(char* timestr, bool forced_update, bool full_year) { static DsTime dstime; static u64 timer = (u64) -1; // this ensures we don't check the time too often if (forced_update || (timer == (u64) -1) || (timer_sec(timer) > 30)) { get_dstime(&dstime); timer = timer_start(); } - if (timestr) snprintf(timestr, 31, "20%02lX-%02lX-%02lX %02lX:%02lX", + if (timestr) snprintf(timestr, 31, "%s%02lX-%02lX-%02lX %02lX:%02lX", full_year ? "20" : "", (u32) dstime.bcd_Y, (u32) dstime.bcd_M, (u32) dstime.bcd_D, (u32) dstime.bcd_h, (u32) dstime.bcd_m); } +u32 GetBatteryPercentSafe() { + static u32 battery = 0; + static u64 timer = (u64) -1; // this ensures we don't check the battery too often + if ((timer == (u64) -1) || (timer_sec(timer) > 120)) { + battery = GetBatteryPercent(); + timer = timer_start(); + } + return battery; +} + void DrawTopBar(const char* curr_path) { const u32 bartxt_start = (FONT_HEIGHT_EXT == 10) ? 1 : 2; const u32 bartxt_x = 2; @@ -97,10 +107,11 @@ void DrawTopBar(const char* curr_path) { } #endif - if (show_time) { // clock + if (show_time) { // clock & battery char timestr[32]; - GetTimeString(timestr, false); - DrawStringF(TOP_SCREEN, bartxt_rx, bartxt_start, COLOR_STD_BG, COLOR_TOP_BAR, "%19.19s", timestr); + GetTimeString(timestr, false, false); + DrawStringF(TOP_SCREEN, bartxt_rx, bartxt_start, COLOR_STD_BG, COLOR_TOP_BAR, "%14.14s %3lu%%", timestr, + GetBatteryPercentSafe()); } } @@ -1463,7 +1474,7 @@ u32 HomeMoreMenu(char* current_path, DirStruct* current_dir, DirStruct* clipboar if (ShowRtcSetterPrompt(&dstime, "Set RTC date&time:")) { char timestr[32]; set_dstime(&dstime); - GetTimeString(timestr, true); + GetTimeString(timestr, true, true); ShowPrompt(false, "New RTC date&time is:\n%s\n \nHint: HOMEMENU time needs\nmanual adjustment after\nsetting the RTC.", timestr); } @@ -1564,7 +1575,7 @@ u32 GodMode(bool is_b9s) { ShowRtcSetterPrompt(&dstime, "Set RTC date&time:")) { char timestr[32]; set_dstime(&dstime); - GetTimeString(timestr, true); + GetTimeString(timestr, true, true); ShowPrompt(false, "New RTC date&time is:\n%s\n \nHint: HOMEMENU time needs\nmanual adjustment after\nsetting the RTC.", timestr); } }