Use psm StateChangeEvent to cache isCharging.

This commit is contained in:
yellows8 2018-10-26 13:11:55 -04:00
parent 35f48a59d0
commit 2695d48ba7

View File

@ -2,42 +2,71 @@
#include "../common/common.h" #include "../common/common.h"
static bool psmInitialized; static bool psmInitialized;
static bool psmCacheInitialized;
static uint32_t psmCacheCharge;
static bool psmCacheIsCharging;
bool powerGetDetails(uint32_t *batteryCharge, bool *isCharging) { bool powerGetDetails(uint32_t *batteryCharge, bool *isCharging) {
ChargerType charger = ChargerType_None; ChargerType charger = ChargerType_None;
bool hwReadsSucceeded = false; bool hwReadsSucceeded = false;
bool use_cache = false;
Result rc = 0; Result rc = 0;
*isCharging = false; *isCharging = false;
*batteryCharge = 0; *batteryCharge = 0;
if (psmInitialized) if (psmInitialized) {
{ if (psmCacheInitialized) {
rc = psmWaitStateChangeEvent(0);
if (R_FAILED(rc)) use_cache = true;
}
rc = psmGetBatteryChargePercentage(batteryCharge); rc = psmGetBatteryChargePercentage(batteryCharge);
hwReadsSucceeded = R_SUCCEEDED(rc); hwReadsSucceeded = R_SUCCEEDED(rc);
rc = psmGetChargerType(&charger); if (use_cache) {
hwReadsSucceeded &= R_SUCCEEDED(rc); *isCharging = psmCacheIsCharging;
*isCharging = (charger > ChargerType_None); }
else {
rc = psmGetChargerType(&charger);
hwReadsSucceeded &= R_SUCCEEDED(rc);
*isCharging = (charger > ChargerType_None);
}
psmCacheCharge = *batteryCharge;
psmCacheIsCharging = *isCharging;
psmCacheInitialized = true;
} }
return hwReadsSucceeded; return hwReadsSucceeded;
} }
void powerInit(void) { void powerInit(void) {
if (!psmInitialized) uint32_t charge=0;
{ bool isCharging=0;
psmCacheInitialized = false;
psmCacheCharge = 0;
psmCacheIsCharging = false;
if (!psmInitialized) {
Result rc = psmInitialize(); Result rc = psmInitialize();
if (R_SUCCEEDED(rc)) if (R_SUCCEEDED(rc)) {
{ rc = psmBindStateChangeEvent(1, 1, 1);
psmInitialized = true;
if (R_FAILED(rc)) psmExit();
if (R_SUCCEEDED(rc)) {
psmInitialized = true;
powerGetDetails(&charge, &isCharging);//Init the cache.
}
} }
} }
} }
void powerExit(void) { void powerExit(void) {
if (psmInitialized) if (psmInitialized) {
{
psmExit(); psmExit();
psmInitialized = false; psmInitialized = false;
psmCacheInitialized = false;
} }
} }