From d42e7c31d0ebf6633bb7a6855cb50a1e87b27b15 Mon Sep 17 00:00:00 2001 From: Shaun Inman Date: Sun, 15 Jan 2023 20:38:57 -0500 Subject: [PATCH] fixed autosleep shenanigans when emulating --- src/common/api.c | 10 +++++++++- src/common/api.h | 2 ++ src/minarch/main.c | 4 ++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/common/api.c b/src/common/api.c index f279298..97a188f 100644 --- a/src/common/api.c +++ b/src/common/api.c @@ -964,8 +964,16 @@ void POW_fauxSleep(void) { system("killall -CONT keymon.elf"); POW_exitSleep(); } + +static int can_autosleep = 1; +void POW_disableAutosleep(void) { + can_autosleep = 0; +} +void POW_enableAutosleep(void) { + can_autosleep = 1; +} int POW_preventAutosleep(void) { - return POW_isCharging(); + return POW_isCharging() || !can_autosleep; } int POW_isCharging(void) { return getInt("/sys/class/power_supply/battery/charger_online"); diff --git a/src/common/api.h b/src/common/api.h index 1ac17e5..2a0fd26 100644 --- a/src/common/api.h +++ b/src/common/api.h @@ -161,6 +161,8 @@ void POW_update(int* dirty, int* show_setting, POW_callback_t before_sleep, POW_ void POW_disablePowerOff(void); void POW_powerOff(void); void POW_fauxSleep(void); +void POW_disableAutosleep(void); +void POW_enableAutosleep(void); int POW_preventAutosleep(void); int POW_isCharging(void); int POW_getBattery(void); diff --git a/src/minarch/main.c b/src/minarch/main.c index e115ea4..9c87595 100644 --- a/src/minarch/main.c +++ b/src/minarch/main.c @@ -968,6 +968,7 @@ void Menu_afterSleep(void) { unlink(AUTO_RESUME_PATH); } void Menu_loop(void) { + POW_enableAutosleep(); PAD_reset(); // current screen is on the previous buffer @@ -1046,6 +1047,8 @@ void Menu_loop(void) { if (!quit) SDL_BlitSurface(backing, NULL, screen, NULL); SDL_FreeSurface(backing); GFX_flip(screen); + + POW_disableAutosleep(); } int main(int argc , char* argv[]) { @@ -1075,6 +1078,7 @@ int main(int argc , char* argv[]) { State_resume(); // State_read(); LOG_info("after State_read\n"); + POW_disableAutosleep(); sec_start = SDL_GetTicks(); while (!quit) { GFX_startFrame();