From 4245a36406d64c174fa3d31ba662b329d5e6bea9 Mon Sep 17 00:00:00 2001 From: n-a-c-h <> Date: Sat, 8 Oct 2005 21:10:56 +0000 Subject: [PATCH] Greatly overhauled battery info. --- zsnes/src/uic.c | 60 +++++++++++++++++++++++++++------------ zsnes/src/win/winlink.cpp | 34 ++++++++++++++++++++-- 2 files changed, 74 insertions(+), 20 deletions(-) diff --git a/zsnes/src/uic.c b/zsnes/src/uic.c index a362bf10..f21f5aff 100644 --- a/zsnes/src/uic.c +++ b/zsnes/src/uic.c @@ -300,7 +300,7 @@ void zstart () static char *int_to_asc(size_t number) { - static char buffer[20]; + static char buffer[12]; char *i; buffer[19] = '\0'; @@ -315,7 +315,7 @@ static char *int_to_asc(size_t number) char *seconds_to_asc(size_t seconds) { - static char buffer[70]; + static char buffer[50]; size_t hours, minutes; hours = seconds/3600; @@ -347,7 +347,9 @@ char *seconds_to_asc(size_t seconds) } #ifdef __WIN32__ -int WinCheckBatteryTime(); +int CheckBattery(); +int CheckBatteryTime(); +int CheckBatteryPercent(); #endif extern unsigned int MessageOn; extern unsigned int MsgCount; @@ -358,25 +360,47 @@ extern char CSStatus3[70]; void DisplayBatteryStatus() { #ifdef __WIN32__ - int batteryTime = WinCheckBatteryTime(); + *CSStatus2 = 0; + *CSStatus3 = 0; - strcpy(CSStatus2, ""); - strcpy(CSStatus3, ""); + switch (CheckBattery()) + { + case -1: //No battery + strcpy(CSStatus, "No battery present"); + break; + + case 0: //Plugged in + { + int percent = CheckBatteryPercent(); - if (batteryTime > 0) - { - strcpy(CSStatus, "Battery time remaining\0"); - strcpy(CSStatus2, seconds_to_asc(batteryTime)); - Msgptr = CSStatus; - MessageOn = 100; - } - else - { - strcpy(CSStatus, "No battery present\0"); + strcpy(CSStatus, "PC is plugged in"); + if (percent > 0) + { + sprintf(CSStatus2, "%d%% charged", percent); + } + } + break; + + case 1: //Not plugged in + { + int percent = CheckBatteryPercent(); + int battery_time = CheckBatteryTime(); + + strcpy(CSStatus, "PC is running off of battery"); + if (battery_time > 0) + { + sprintf(CSStatus2, "Time remaining: %s", seconds_to_asc(battery_time)); + } + if (percent > 0) + { + sprintf(CSStatus3, "%d%% remaining", percent); + } + } + break; } - Msgptr = CSStatus; - MessageOn = 100; + Msgptr = CSStatus; + MessageOn = 100; #endif } diff --git a/zsnes/src/win/winlink.cpp b/zsnes/src/win/winlink.cpp index c4ee4a68..86e73f92 100644 --- a/zsnes/src/win/winlink.cpp +++ b/zsnes/src/win/winlink.cpp @@ -3089,13 +3089,43 @@ void InitDebugger() } } -signed int WinCheckBatteryTime() +int CheckBattery() { SYSTEM_POWER_STATUS SysPowerStat; - GetSystemPowerStatus(&SysPowerStat); + if (SysPowerStat.ACLineStatus == 0) //Definitly running off of battery + { + return(1); //Running off of battery + } + + if ((SysPowerStat.BatteryFlag == 255) || //Unknown + (SysPowerStat.BatteryFlag & 128)) //No battery + { + return(-1); + } + + if ((SysPowerStat.BatteryFlag & 8) || //Charging + (SysPowerStat.ACLineStatus == 1)) //Plugged in + { + return(0); //Plugged in + } + + return(1); //Running off of battery +} + +int CheckBatteryTime() +{ + SYSTEM_POWER_STATUS SysPowerStat; + GetSystemPowerStatus(&SysPowerStat); return SysPowerStat.BatteryLifeTime; } +int CheckBatteryPercent() +{ + SYSTEM_POWER_STATUS SysPowerStat; + GetSystemPowerStatus(&SysPowerStat); + return((SysPowerStat.BatteryLifePercent == 255) ? -1 : SysPowerStat.BatteryLifePercent); +} + }