From 2695d48ba7372051a60d02442bcfc34f6ef0b83b Mon Sep 17 00:00:00 2001 From: yellows8 Date: Fri, 26 Oct 2018 13:11:55 -0400 Subject: [PATCH] Use psm StateChangeEvent to cache isCharging. --- nx_main/nx_power.c | 55 +++++++++++++++++++++++++++++++++++----------- 1 file changed, 42 insertions(+), 13 deletions(-) diff --git a/nx_main/nx_power.c b/nx_main/nx_power.c index d5c1949..53c043e 100644 --- a/nx_main/nx_power.c +++ b/nx_main/nx_power.c @@ -2,42 +2,71 @@ #include "../common/common.h" static bool psmInitialized; +static bool psmCacheInitialized; +static uint32_t psmCacheCharge; +static bool psmCacheIsCharging; bool powerGetDetails(uint32_t *batteryCharge, bool *isCharging) { ChargerType charger = ChargerType_None; bool hwReadsSucceeded = false; + bool use_cache = false; Result rc = 0; *isCharging = false; *batteryCharge = 0; - if (psmInitialized) - { + if (psmInitialized) { + if (psmCacheInitialized) { + rc = psmWaitStateChangeEvent(0); + + if (R_FAILED(rc)) use_cache = true; + } + rc = psmGetBatteryChargePercentage(batteryCharge); hwReadsSucceeded = R_SUCCEEDED(rc); - rc = psmGetChargerType(&charger); - hwReadsSucceeded &= R_SUCCEEDED(rc); - *isCharging = (charger > ChargerType_None); + if (use_cache) { + *isCharging = psmCacheIsCharging; + } + else { + rc = psmGetChargerType(&charger); + hwReadsSucceeded &= R_SUCCEEDED(rc); + *isCharging = (charger > ChargerType_None); + } + + psmCacheCharge = *batteryCharge; + psmCacheIsCharging = *isCharging; + psmCacheInitialized = true; } return hwReadsSucceeded; } void powerInit(void) { - if (!psmInitialized) - { + uint32_t charge=0; + bool isCharging=0; + + psmCacheInitialized = false; + psmCacheCharge = 0; + psmCacheIsCharging = false; + + if (!psmInitialized) { Result rc = psmInitialize(); - if (R_SUCCEEDED(rc)) - { - psmInitialized = true; + if (R_SUCCEEDED(rc)) { + rc = psmBindStateChangeEvent(1, 1, 1); + + if (R_FAILED(rc)) psmExit(); + if (R_SUCCEEDED(rc)) { + psmInitialized = true; + powerGetDetails(&charge, &isCharging);//Init the cache. + } } } } void powerExit(void) { - if (psmInitialized) - { + if (psmInitialized) { psmExit(); psmInitialized = false; + psmCacheInitialized = false; } -} \ No newline at end of file +}