indent
--HG-- extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%403645
This commit is contained in:
parent
e74bc6f89f
commit
d03a7700eb
18 changed files with 616 additions and 704 deletions
|
@ -27,22 +27,23 @@
|
|||
* SDL_FALSE to try next implementation.
|
||||
*/
|
||||
typedef SDL_bool
|
||||
(*SDL_GetPowerInfo_Impl)(SDL_PowerState *state, int *seconds, int *percent);
|
||||
(*SDL_GetPowerInfo_Impl) (SDL_PowerState * state, int *seconds,
|
||||
int *percent);
|
||||
|
||||
SDL_bool SDL_GetPowerInfo_Linux_sys_power(SDL_PowerState*, int*, int*);
|
||||
SDL_bool SDL_GetPowerInfo_Linux_proc_acpi(SDL_PowerState*, int*, int*);
|
||||
SDL_bool SDL_GetPowerInfo_Linux_proc_apm(SDL_PowerState*, int*, int*);
|
||||
SDL_bool SDL_GetPowerInfo_Windows(SDL_PowerState*, int*, int*);
|
||||
SDL_bool SDL_GetPowerInfo_MacOSX(SDL_PowerState*, int*, int*);
|
||||
SDL_bool SDL_GetPowerInfo_OS2(SDL_PowerState*, int*, int*);
|
||||
SDL_bool SDL_GetPowerInfo_BeOS(SDL_PowerState*, int*, int*);
|
||||
SDL_bool SDL_GetPowerInfo_NintendoDS(SDL_PowerState*, int*, int*);
|
||||
SDL_bool SDL_GetPowerInfo_Linux_sys_power(SDL_PowerState *, int *, int *);
|
||||
SDL_bool SDL_GetPowerInfo_Linux_proc_acpi(SDL_PowerState *, int *, int *);
|
||||
SDL_bool SDL_GetPowerInfo_Linux_proc_apm(SDL_PowerState *, int *, int *);
|
||||
SDL_bool SDL_GetPowerInfo_Windows(SDL_PowerState *, int *, int *);
|
||||
SDL_bool SDL_GetPowerInfo_MacOSX(SDL_PowerState *, int *, int *);
|
||||
SDL_bool SDL_GetPowerInfo_OS2(SDL_PowerState *, int *, int *);
|
||||
SDL_bool SDL_GetPowerInfo_BeOS(SDL_PowerState *, int *, int *);
|
||||
SDL_bool SDL_GetPowerInfo_NintendoDS(SDL_PowerState *, int *, int *);
|
||||
|
||||
#ifndef SDL_POWER_DISABLED
|
||||
#ifdef SDL_POWER_HARDWIRED
|
||||
/* This is for things that _never_ have a battery, like the Dreamcast, etc. */
|
||||
static SDL_bool
|
||||
SDL_GetPowerInfo_Hardwired(SDL_PowerState *state, int *seconds, int *percent)
|
||||
SDL_GetPowerInfo_Hardwired(SDL_PowerState * state, int *seconds, int *percent)
|
||||
{
|
||||
*seconds = -1;
|
||||
*percent = -1;
|
||||
|
@ -55,24 +56,24 @@ SDL_GetPowerInfo_Hardwired(SDL_PowerState *state, int *seconds, int *percent)
|
|||
|
||||
static SDL_GetPowerInfo_Impl implementations[] = {
|
||||
#ifndef SDL_POWER_DISABLED
|
||||
#ifdef SDL_POWER_LINUX /* in order of preference. More than could work. */
|
||||
#ifdef SDL_POWER_LINUX /* in order of preference. More than could work. */
|
||||
SDL_GetPowerInfo_Linux_sys_power,
|
||||
SDL_GetPowerInfo_Linux_proc_acpi,
|
||||
SDL_GetPowerInfo_Linux_proc_apm,
|
||||
#endif
|
||||
#ifdef SDL_POWER_WINDOWS /* handles Win32, Win64, PocketPC. */
|
||||
#ifdef SDL_POWER_WINDOWS /* handles Win32, Win64, PocketPC. */
|
||||
SDL_GetPowerInfo_Windows,
|
||||
#endif
|
||||
#ifdef SDL_POWER_MACOSX /* handles Mac OS X, Darwin, iPhone. */
|
||||
#ifdef SDL_POWER_MACOSX /* handles Mac OS X, Darwin, iPhone. */
|
||||
SDL_GetPowerInfo_MacOSX,
|
||||
#endif
|
||||
#ifdef SDL_POWER_OS2 /* handles OS/2, Warp, eComStation. */
|
||||
#ifdef SDL_POWER_OS2 /* handles OS/2, Warp, eComStation. */
|
||||
SDL_GetPowerInfo_OS2,
|
||||
#endif
|
||||
#ifdef SDL_POWER_NINTENDODS /* handles Nintendo DS. */
|
||||
#ifdef SDL_POWER_NINTENDODS /* handles Nintendo DS. */
|
||||
SDL_GetPowerInfo_NintendoDS,
|
||||
#endif
|
||||
#ifdef SDL_POWER_BEOS /* handles BeOS, Zeta, with euc.jp apm driver. */
|
||||
#ifdef SDL_POWER_BEOS /* handles BeOS, Zeta, with euc.jp apm driver. */
|
||||
SDL_GetPowerInfo_BeOS,
|
||||
#endif
|
||||
#ifdef SDL_POWER_HARDWIRED
|
||||
|
@ -84,7 +85,7 @@ static SDL_GetPowerInfo_Impl implementations[] = {
|
|||
SDL_PowerState
|
||||
SDL_GetPowerInfo(int *seconds, int *percent)
|
||||
{
|
||||
const int total = sizeof (implementations) / sizeof (implementations[0]);
|
||||
const int total = sizeof(implementations) / sizeof(implementations[0]);
|
||||
int _seconds, _percent;
|
||||
SDL_PowerState retval;
|
||||
int i;
|
||||
|
@ -99,7 +100,7 @@ SDL_GetPowerInfo(int *seconds, int *percent)
|
|||
}
|
||||
|
||||
for (i = 0; i < total; i++) {
|
||||
if (implementations[i](&retval, seconds, percent)) {
|
||||
if (implementations[i] (&retval, seconds, percent)) {
|
||||
return retval;
|
||||
}
|
||||
}
|
||||
|
@ -111,4 +112,3 @@ SDL_GetPowerInfo(int *seconds, int *percent)
|
|||
}
|
||||
|
||||
/* vi: set ts=4 sw=4 expandtab: */
|
||||
|
||||
|
|
|
@ -41,7 +41,7 @@
|
|||
#include "SDL_power.h"
|
||||
|
||||
SDL_bool
|
||||
SDL_GetPowerInfo_BeOS(SDL_PowerState *state, int *seconds, int *percent)
|
||||
SDL_GetPowerInfo_BeOS(SDL_PowerState * state, int *seconds, int *percent)
|
||||
{
|
||||
const int fd = open("/dev/misc/apm", O_RDONLY);
|
||||
SDL_bool need_details = SDL_FALSE;
|
||||
|
@ -53,10 +53,10 @@ SDL_GetPowerInfo_BeOS(SDL_PowerState *state, int *seconds, int *percent)
|
|||
uint32 battery_time;
|
||||
|
||||
if (fd == -1) {
|
||||
return SDL_FALSE; /* maybe some other method will work? */
|
||||
return SDL_FALSE; /* maybe some other method will work? */
|
||||
}
|
||||
|
||||
memset(regs, '\0', sizeof (regs));
|
||||
memset(regs, '\0', sizeof(regs));
|
||||
regs[0] = APM_FUNC_OFFSET + APM_FUNC_GET_POWER_STATUS;
|
||||
regs[1] = APM_DEVICE_ALL;
|
||||
rc = ioctl(fd, APM_BIOS_CALL, regs);
|
||||
|
@ -73,7 +73,7 @@ SDL_GetPowerInfo_BeOS(SDL_PowerState *state, int *seconds, int *percent)
|
|||
battery_time = (uint32) regs[3];
|
||||
|
||||
/* in theory, _something_ should be set in battery_flags, right? */
|
||||
if (battery_flags == 0x00) { /* older APM BIOS? Less fields. */
|
||||
if (battery_flags == 0x00) { /* older APM BIOS? Less fields. */
|
||||
battery_time = 0xFFFF;
|
||||
if (battery_status == 0xFF) {
|
||||
battery_flags = 0xFF;
|
||||
|
@ -82,23 +82,23 @@ SDL_GetPowerInfo_BeOS(SDL_PowerState *state, int *seconds, int *percent)
|
|||
}
|
||||
}
|
||||
|
||||
if ( (battery_time != 0xFFFF) && (battery_time & (1 << 15)) ) {
|
||||
if ((battery_time != 0xFFFF) && (battery_time & (1 << 15))) {
|
||||
/* time is in minutes, not seconds */
|
||||
battery_time = (battery_time & 0x7FFF) * 60;
|
||||
}
|
||||
|
||||
if (battery_flags == 0xFF) { /* unknown state */
|
||||
if (battery_flags == 0xFF) { /* unknown state */
|
||||
*state = SDL_POWERSTATE_UNKNOWN;
|
||||
} else if (battery_flags & (1 << 7)) { /* no battery */
|
||||
} else if (battery_flags & (1 << 7)) { /* no battery */
|
||||
*state = SDL_POWERSTATE_NO_BATTERY;
|
||||
} else if (battery_flags & (1 << 3)) { /* charging */
|
||||
} else if (battery_flags & (1 << 3)) { /* charging */
|
||||
*state = SDL_POWERSTATE_CHARGING;
|
||||
need_details = SDL_TRUE;
|
||||
} else if (ac_status == 1) {
|
||||
*state = SDL_POWERSTATE_CHARGED; /* on AC, not charging. */
|
||||
*state = SDL_POWERSTATE_CHARGED; /* on AC, not charging. */
|
||||
need_details = SDL_TRUE;
|
||||
} else {
|
||||
*state = SDL_POWERSTATE_ON_BATTERY; /* not on AC. */
|
||||
*state = SDL_POWERSTATE_ON_BATTERY; /* not on AC. */
|
||||
need_details = SDL_TRUE;
|
||||
}
|
||||
|
||||
|
@ -108,19 +108,18 @@ SDL_GetPowerInfo_BeOS(SDL_PowerState *state, int *seconds, int *percent)
|
|||
const int pct = (int) battery_life;
|
||||
const int secs = (int) battery_time;
|
||||
|
||||
if (pct != 255) { /* 255 == unknown */
|
||||
*percent = (pct > 100) ? 100 : pct; /* clamp between 0%, 100% */
|
||||
if (pct != 255) { /* 255 == unknown */
|
||||
*percent = (pct > 100) ? 100 : pct; /* clamp between 0%, 100% */
|
||||
}
|
||||
if (secs != 0xFFFF) { /* 0xFFFF == unknown */
|
||||
if (secs != 0xFFFF) { /* 0xFFFF == unknown */
|
||||
*seconds = secs;
|
||||
}
|
||||
}
|
||||
|
||||
return SDL_TRUE; /* the definitive answer if APM driver replied. */
|
||||
return SDL_TRUE; /* the definitive answer if APM driver replied. */
|
||||
}
|
||||
|
||||
#endif /* SDL_POWER_BEOS */
|
||||
#endif /* SDL_POWER_DISABLED */
|
||||
|
||||
/* vi: set ts=4 sw=4 expandtab: */
|
||||
|
||||
|
|
|
@ -34,28 +34,28 @@
|
|||
#include "SDL_power.h"
|
||||
|
||||
SDL_bool
|
||||
SDL_GetPowerInfo_Linux_sys_power(SDL_PowerState *state,
|
||||
SDL_GetPowerInfo_Linux_sys_power(SDL_PowerState * state,
|
||||
int *seconds, int *percent)
|
||||
{
|
||||
return SDL_FALSE; /* !!! FIXME: write me. */
|
||||
return SDL_FALSE; /* !!! FIXME: write me. */
|
||||
#if 0
|
||||
const int fd = open("/sys/power", O_RDONLY);
|
||||
if (fd == -1) {
|
||||
return SDL_FALSE; /* can't use this interface. */
|
||||
return SDL_FALSE; /* can't use this interface. */
|
||||
}
|
||||
return SDL_TRUE;
|
||||
#endif
|
||||
}
|
||||
|
||||
SDL_bool
|
||||
SDL_GetPowerInfo_Linux_proc_acpi(SDL_PowerState *state,
|
||||
int *seconds, int *percent)
|
||||
SDL_GetPowerInfo_Linux_proc_acpi(SDL_PowerState * state,
|
||||
int *seconds, int *percent)
|
||||
{
|
||||
return SDL_FALSE; /* !!! FIXME: write me. */
|
||||
return SDL_FALSE; /* !!! FIXME: write me. */
|
||||
#if 0
|
||||
const int fd = open("/proc/acpi", O_RDONLY);
|
||||
if (fd == -1) {
|
||||
return SDL_FALSE; /* can't use this interface. */
|
||||
return SDL_FALSE; /* can't use this interface. */
|
||||
}
|
||||
return SDL_TRUE;
|
||||
#endif
|
||||
|
@ -67,7 +67,7 @@ next_string(char **_ptr, char **_str)
|
|||
char *ptr = *_ptr;
|
||||
char *str = *_str;
|
||||
|
||||
while (*ptr == ' ') { /* skip any spaces... */
|
||||
while (*ptr == ' ') { /* skip any spaces... */
|
||||
ptr++;
|
||||
}
|
||||
|
||||
|
@ -91,14 +91,14 @@ static SDL_bool
|
|||
int_string(char *str, int *val)
|
||||
{
|
||||
char *endptr = NULL;
|
||||
*val = (int) strtol(str+2, &endptr, 16);
|
||||
*val = (int) strtol(str + 2, &endptr, 16);
|
||||
return ((*str != '\0') && (*endptr == '\0'));
|
||||
}
|
||||
|
||||
/* http://lxr.linux.no/linux+v2.6.29/drivers/char/apm-emulation.c */
|
||||
SDL_bool
|
||||
SDL_GetPowerInfo_Linux_proc_apm(SDL_PowerState *state,
|
||||
int *seconds, int *percent)
|
||||
SDL_GetPowerInfo_Linux_proc_apm(SDL_PowerState * state,
|
||||
int *seconds, int *percent)
|
||||
{
|
||||
SDL_bool need_details = SDL_FALSE;
|
||||
int ac_status = 0;
|
||||
|
@ -113,44 +113,44 @@ SDL_GetPowerInfo_Linux_proc_apm(SDL_PowerState *state,
|
|||
ssize_t br;
|
||||
|
||||
if (fd == -1) {
|
||||
return SDL_FALSE; /* can't use this interface. */
|
||||
return SDL_FALSE; /* can't use this interface. */
|
||||
}
|
||||
|
||||
br = read(fd, buf, sizeof (buf) - 1);
|
||||
br = read(fd, buf, sizeof(buf) - 1);
|
||||
close(fd);
|
||||
|
||||
if (br < 0) {
|
||||
return SDL_FALSE;
|
||||
}
|
||||
|
||||
buf[br] = '\0'; // null-terminate the string.
|
||||
if (!next_string(&ptr, &str)) { /* driver version */
|
||||
buf[br] = '\0'; // null-terminate the string.
|
||||
if (!next_string(&ptr, &str)) { /* driver version */
|
||||
return SDL_FALSE;
|
||||
}
|
||||
if (!next_string(&ptr, &str)) { /* BIOS version */
|
||||
if (!next_string(&ptr, &str)) { /* BIOS version */
|
||||
return SDL_FALSE;
|
||||
}
|
||||
if (!next_string(&ptr, &str)) { /* APM flags */
|
||||
if (!next_string(&ptr, &str)) { /* APM flags */
|
||||
return SDL_FALSE;
|
||||
}
|
||||
|
||||
if (!next_string(&ptr, &str)) { /* AC line status */
|
||||
if (!next_string(&ptr, &str)) { /* AC line status */
|
||||
return SDL_FALSE;
|
||||
} else if (!int_string(str, &ac_status)) {
|
||||
return SDL_FALSE;
|
||||
}
|
||||
|
||||
if (!next_string(&ptr, &str)) { /* battery status */
|
||||
if (!next_string(&ptr, &str)) { /* battery status */
|
||||
return SDL_FALSE;
|
||||
} else if (!int_string(str, &battery_status)) {
|
||||
return SDL_FALSE;
|
||||
}
|
||||
if (!next_string(&ptr, &str)) { /* battery flag */
|
||||
if (!next_string(&ptr, &str)) { /* battery flag */
|
||||
return SDL_FALSE;
|
||||
} else if (!int_string(str, &battery_flag)) {
|
||||
return SDL_FALSE;
|
||||
}
|
||||
if (!next_string(&ptr, &str)) { /* remaining battery life percent */
|
||||
if (!next_string(&ptr, &str)) { /* remaining battery life percent */
|
||||
return SDL_FALSE;
|
||||
}
|
||||
if (str[strlen(str) - 1] == '%') {
|
||||
|
@ -160,27 +160,27 @@ SDL_GetPowerInfo_Linux_proc_apm(SDL_PowerState *state,
|
|||
return SDL_FALSE;
|
||||
}
|
||||
|
||||
if (!next_string(&ptr, &str)) { /* remaining battery life time */
|
||||
if (!next_string(&ptr, &str)) { /* remaining battery life time */
|
||||
return SDL_FALSE;
|
||||
} else if (!int_string(str, &battery_time)) {
|
||||
return SDL_FALSE;
|
||||
}
|
||||
|
||||
if (!next_string(&ptr, &str)) { /* remaining battery life time units */
|
||||
if (!next_string(&ptr, &str)) { /* remaining battery life time units */
|
||||
return SDL_FALSE;
|
||||
} else if (strcmp(str, "min") == 0) {
|
||||
battery_time *= 60;
|
||||
}
|
||||
|
||||
if (battery_flag == 0xFF) { /* unknown state */
|
||||
if (battery_flag == 0xFF) { /* unknown state */
|
||||
*state = SDL_POWERSTATE_UNKNOWN;
|
||||
} else if (battery_flag & (1 << 7)) { /* no battery */
|
||||
} else if (battery_flag & (1 << 7)) { /* no battery */
|
||||
*state = SDL_POWERSTATE_NO_BATTERY;
|
||||
} else if (battery_flag & (1 << 3)) { /* charging */
|
||||
} else if (battery_flag & (1 << 3)) { /* charging */
|
||||
*state = SDL_POWERSTATE_CHARGING;
|
||||
need_details = SDL_TRUE;
|
||||
} else if (ac_status == 1) {
|
||||
*state = SDL_POWERSTATE_CHARGED; /* on AC, not charging. */
|
||||
*state = SDL_POWERSTATE_CHARGED; /* on AC, not charging. */
|
||||
need_details = SDL_TRUE;
|
||||
} else {
|
||||
*state = SDL_POWERSTATE_ON_BATTERY;
|
||||
|
@ -193,10 +193,10 @@ SDL_GetPowerInfo_Linux_proc_apm(SDL_PowerState *state,
|
|||
const int pct = battery_percent;
|
||||
const int secs = battery_time;
|
||||
|
||||
if (pct >= 0) { /* -1 == unknown */
|
||||
*percent = (pct > 100) ? 100 : pct; /* clamp between 0%, 100% */
|
||||
if (pct >= 0) { /* -1 == unknown */
|
||||
*percent = (pct > 100) ? 100 : pct; /* clamp between 0%, 100% */
|
||||
}
|
||||
if (secs >= 0) { /* -1 == unknown */
|
||||
if (secs >= 0) { /* -1 == unknown */
|
||||
*seconds = secs;
|
||||
}
|
||||
}
|
||||
|
@ -208,4 +208,3 @@ SDL_GetPowerInfo_Linux_proc_apm(SDL_PowerState *state,
|
|||
#endif /* SDL_POWER_DISABLED */
|
||||
|
||||
/* vi: set ts=4 sw=4 expandtab: */
|
||||
|
||||
|
|
|
@ -37,10 +37,10 @@
|
|||
|
||||
/* Note that AC power sources also include a laptop battery it is charging. */
|
||||
static void
|
||||
checkps(CFDictionaryRef dict, SDL_bool *have_ac, SDL_bool *have_battery,
|
||||
SDL_bool *charging, int *seconds, int *percent)
|
||||
checkps(CFDictionaryRef dict, SDL_bool * have_ac, SDL_bool * have_battery,
|
||||
SDL_bool * charging, int *seconds, int *percent)
|
||||
{
|
||||
CFStringRef strval; /* don't CFRelease() this. */
|
||||
CFStringRef strval; /* don't CFRelease() this. */
|
||||
CFBooleanRef bval;
|
||||
CFNumberRef numval;
|
||||
SDL_bool charge = SDL_FALSE;
|
||||
|
@ -51,7 +51,7 @@ checkps(CFDictionaryRef dict, SDL_bool *have_ac, SDL_bool *have_battery,
|
|||
int pct = -1;
|
||||
|
||||
if ((GETVAL(kIOPSIsPresentKey, &bval)) && (bval == kCFBooleanFalse)) {
|
||||
return; /* nothing to see here. */
|
||||
return; /* nothing to see here. */
|
||||
}
|
||||
|
||||
if (!GETVAL(kIOPSPowerSourceStateKey, &strval)) {
|
||||
|
@ -61,7 +61,7 @@ checkps(CFDictionaryRef dict, SDL_bool *have_ac, SDL_bool *have_battery,
|
|||
if (STRMATCH(strval, CFSTR(kIOPSACPowerValue))) {
|
||||
is_ac = *have_ac = SDL_TRUE;
|
||||
} else if (!STRMATCH(strval, CFSTR(kIOPSBatteryPowerValue))) {
|
||||
return; /* not a battery? */
|
||||
return; /* not a battery? */
|
||||
}
|
||||
|
||||
if ((GETVAL(kIOPSIsChargingKey, &bval)) && (bval == kCFBooleanTrue)) {
|
||||
|
@ -92,12 +92,12 @@ checkps(CFDictionaryRef dict, SDL_bool *have_ac, SDL_bool *have_battery,
|
|||
|
||||
/* Mac OS X reports 0 minutes until empty if you're plugged in. :( */
|
||||
if ((val == 0) && (is_ac)) {
|
||||
val = -1; /* !!! FIXME: calc from timeToFull and capacity? */
|
||||
val = -1; /* !!! FIXME: calc from timeToFull and capacity? */
|
||||
}
|
||||
|
||||
secs = (int) val;
|
||||
if (secs > 0) {
|
||||
secs *= 60; /* value is in minutes, so convert to seconds. */
|
||||
secs *= 60; /* value is in minutes, so convert to seconds. */
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -108,7 +108,7 @@ checkps(CFDictionaryRef dict, SDL_bool *have_ac, SDL_bool *have_battery,
|
|||
}
|
||||
|
||||
if ((pct > 0) && (maxpct > 0)) {
|
||||
pct = (int) ((((double)pct)/((double)maxpct)) * 100.0);
|
||||
pct = (int) ((((double) pct) / ((double) maxpct)) * 100.0);
|
||||
}
|
||||
|
||||
if (pct > 100) {
|
||||
|
@ -121,7 +121,7 @@ checkps(CFDictionaryRef dict, SDL_bool *have_ac, SDL_bool *have_battery,
|
|||
*/
|
||||
if ((secs < 0) && (*seconds < 0)) {
|
||||
if ((pct < 0) && (*percent < 0)) {
|
||||
choose = SDL_TRUE; /* at least we know there's a battery. */
|
||||
choose = SDL_TRUE; /* at least we know there's a battery. */
|
||||
}
|
||||
if (pct > *percent) {
|
||||
choose = SDL_TRUE;
|
||||
|
@ -142,7 +142,7 @@ checkps(CFDictionaryRef dict, SDL_bool *have_ac, SDL_bool *have_battery,
|
|||
|
||||
|
||||
SDL_bool
|
||||
SDL_GetPowerInfo_MacOSX(SDL_PowerState *state, int *seconds, int *percent)
|
||||
SDL_GetPowerInfo_MacOSX(SDL_PowerState * state, int *seconds, int *percent)
|
||||
{
|
||||
CFTypeRef blob = IOPSCopyPowerSourcesInfo();
|
||||
|
||||
|
@ -161,7 +161,8 @@ SDL_GetPowerInfo_MacOSX(SDL_PowerState *state, int *seconds, int *percent)
|
|||
CFIndex i;
|
||||
for (i = 0; i < total; i++) {
|
||||
CFTypeRef ps = (CFTypeRef) CFArrayGetValueAtIndex(list, i);
|
||||
CFDictionaryRef dict = IOPSGetPowerSourceDescription(blob, ps);
|
||||
CFDictionaryRef dict =
|
||||
IOPSGetPowerSourceDescription(blob, ps);
|
||||
if (dict != NULL) {
|
||||
checkps(dict, &have_ac, &have_battery, &charging,
|
||||
seconds, percent);
|
||||
|
@ -183,11 +184,10 @@ SDL_GetPowerInfo_MacOSX(SDL_PowerState *state, int *seconds, int *percent)
|
|||
CFRelease(blob);
|
||||
}
|
||||
|
||||
return SDL_TRUE; /* always the definitive answer on Mac OS X. */
|
||||
return SDL_TRUE; /* always the definitive answer on Mac OS X. */
|
||||
}
|
||||
|
||||
#endif /* SDL_POWER_MACOSX */
|
||||
#endif /* SDL_POWER_DISABLED */
|
||||
|
||||
/* vi: set ts=4 sw=4 expandtab: */
|
||||
|
||||
|
|
|
@ -27,7 +27,8 @@
|
|||
#include "SDL_power.h"
|
||||
|
||||
SDL_bool
|
||||
SDL_GetPowerInfo_NintendoDS(SDL_PowerState *state, int *seconds, int *percent)
|
||||
SDL_GetPowerInfo_NintendoDS(SDL_PowerState * state, int *seconds,
|
||||
int *percent)
|
||||
{
|
||||
/* !!! FIXME: write me. */
|
||||
|
||||
|
@ -35,11 +36,10 @@ SDL_GetPowerInfo_NintendoDS(SDL_PowerState *state, int *seconds, int *percent)
|
|||
*percent = -1;
|
||||
*seconds = -1;
|
||||
|
||||
return SDL_TRUE; /* always the definitive answer on Nintendo DS. */
|
||||
return SDL_TRUE; /* always the definitive answer on Nintendo DS. */
|
||||
}
|
||||
|
||||
#endif /* SDL_POWER_NINTENDODS */
|
||||
#endif /* SDL_POWER_DISABLED */
|
||||
|
||||
/* vi: set ts=4 sw=4 expandtab: */
|
||||
|
||||
|
|
|
@ -38,7 +38,8 @@
|
|||
|
||||
#include "SDL_power.h"
|
||||
|
||||
typedef struct {
|
||||
typedef struct
|
||||
{
|
||||
USHORT len;
|
||||
USHORT flags;
|
||||
UCHAR ac_status;
|
||||
|
@ -48,11 +49,11 @@ typedef struct {
|
|||
USHORT battery_time;
|
||||
UCHAR battery_flags;
|
||||
} PowerStatus;
|
||||
extern int CompilerAssertPowerStatus[(sizeof (PowerStatus) == 10) ? 1 : -1];
|
||||
extern int CompilerAssertPowerStatus[(sizeof(PowerStatus) == 10) ? 1 : -1];
|
||||
|
||||
|
||||
SDL_bool
|
||||
SDL_GetPowerInfo_OS2(SDL_PowerState *state, int *seconds, int *percent)
|
||||
SDL_GetPowerInfo_OS2(SDL_PowerState * state, int *seconds, int *percent)
|
||||
{
|
||||
PowerStatus status;
|
||||
HFILE hfile = 0;
|
||||
|
@ -69,11 +70,11 @@ SDL_GetPowerInfo_OS2(SDL_PowerState *state, int *seconds, int *percent)
|
|||
|
||||
if (rc == NO_ERROR) {
|
||||
USHORT iorc = 0;
|
||||
ULONG iorclen = sizeof (iorc);
|
||||
ULONG statuslen = sizeof (status);
|
||||
ULONG iorclen = sizeof(iorc);
|
||||
ULONG statuslen = sizeof(status);
|
||||
|
||||
SDL_memset(&status, '\0', sizeof (status));
|
||||
status.len = sizeof (status);
|
||||
SDL_memset(&status, '\0', sizeof(status));
|
||||
status.len = sizeof(status);
|
||||
|
||||
rc = DosDevIOCtl(hfile, IOCTL_POWER, POWER_GETPOWERSTATUS, &status,
|
||||
statuslen, &statuslen, &iorc, iorclen, &iorclen);
|
||||
|
@ -81,7 +82,7 @@ SDL_GetPowerInfo_OS2(SDL_PowerState *state, int *seconds, int *percent)
|
|||
|
||||
/* (status.flags & 0x1) == power subsystem enabled. */
|
||||
if ((rc == NO_ERROR) && (status.flags & 0x1)) {
|
||||
if (statuslen == 7) { /* older OS/2 APM driver? Less fields. */
|
||||
if (statuslen == 7) { /* older OS/2 APM driver? Less fields. */
|
||||
status.battery_time_form = 0xFF;
|
||||
status.battery_time = 0;
|
||||
if (status.battery_status == 0xFF) {
|
||||
|
@ -91,18 +92,18 @@ SDL_GetPowerInfo_OS2(SDL_PowerState *state, int *seconds, int *percent)
|
|||
}
|
||||
}
|
||||
|
||||
if (status.battery_flags == 0xFF) { /* unknown state */
|
||||
if (status.battery_flags == 0xFF) { /* unknown state */
|
||||
*state = SDL_POWERSTATE_UNKNOWN;
|
||||
} else if (status.battery_flags & (1 << 7)) { /* no battery */
|
||||
} else if (status.battery_flags & (1 << 7)) { /* no battery */
|
||||
*state = SDL_POWERSTATE_NO_BATTERY;
|
||||
} else if (status.battery_flags & (1 << 3)) { /* charging */
|
||||
} else if (status.battery_flags & (1 << 3)) { /* charging */
|
||||
*state = SDL_POWERSTATE_CHARGING;
|
||||
need_details = SDL_TRUE;
|
||||
} else if (status.ac_status == 1) {
|
||||
*state = SDL_POWERSTATE_CHARGED; /* on AC, not charging. */
|
||||
*state = SDL_POWERSTATE_CHARGED; /* on AC, not charging. */
|
||||
need_details = SDL_TRUE;
|
||||
} else {
|
||||
*state = SDL_POWERSTATE_ON_BATTERY; /* not on AC. */
|
||||
*state = SDL_POWERSTATE_ON_BATTERY; /* not on AC. */
|
||||
need_details = SDL_TRUE;
|
||||
}
|
||||
|
||||
|
@ -110,13 +111,13 @@ SDL_GetPowerInfo_OS2(SDL_PowerState *state, int *seconds, int *percent)
|
|||
const int pct = (int) status.battery_life;
|
||||
const int secs = (int) status.battery_time;
|
||||
|
||||
if (pct != 0xFF) { /* 255 == unknown */
|
||||
if (pct != 0xFF) { /* 255 == unknown */
|
||||
*percent = (pct > 100) ? 100 : pct;
|
||||
}
|
||||
|
||||
if (status.battery_time_form == 0xFF) { /* unknown */
|
||||
if (status.battery_time_form == 0xFF) { /* unknown */
|
||||
*seconds = -1;
|
||||
} else if (status.battery_time_form == 1) { /* minutes */
|
||||
} else if (status.battery_time_form == 1) { /* minutes */
|
||||
*seconds = secs * 60;
|
||||
} else {
|
||||
*seconds = secs;
|
||||
|
@ -125,11 +126,10 @@ SDL_GetPowerInfo_OS2(SDL_PowerState *state, int *seconds, int *percent)
|
|||
}
|
||||
}
|
||||
|
||||
return SDL_TRUE; /* always the definitive answer on OS/2. */
|
||||
return SDL_TRUE; /* always the definitive answer on OS/2. */
|
||||
}
|
||||
|
||||
#endif /* SDL_POWER_OS2 */
|
||||
#endif /* SDL_POWER_DISABLED */
|
||||
|
||||
/* vi: set ts=4 sw=4 expandtab: */
|
||||
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
#include "SDL_power.h"
|
||||
|
||||
SDL_bool
|
||||
SDL_GetPowerInfo_Windows(SDL_PowerState *state, int *seconds, int *percent)
|
||||
SDL_GetPowerInfo_Windows(SDL_PowerState * state, int *seconds, int *percent)
|
||||
{
|
||||
SYSTEM_POWER_STATUS status;
|
||||
SDL_bool need_details = SDL_FALSE;
|
||||
|
@ -39,18 +39,18 @@ SDL_GetPowerInfo_Windows(SDL_PowerState *state, int *seconds, int *percent)
|
|||
if (!GetSystemPowerStatus(&status)) {
|
||||
/* !!! FIXME: push GetLastError() into SDL_GetError() */
|
||||
*state = SDL_POWERSTATE_UNKNOWN;
|
||||
} else if (status.BatteryFlag == 0xFF) { /* unknown state */
|
||||
} else if (status.BatteryFlag == 0xFF) { /* unknown state */
|
||||
*state = SDL_POWERSTATE_UNKNOWN;
|
||||
} else if (status.BatteryFlag & (1 << 7)) { /* no battery */
|
||||
} else if (status.BatteryFlag & (1 << 7)) { /* no battery */
|
||||
*state = SDL_POWERSTATE_NO_BATTERY;
|
||||
} else if (status.BatteryFlag & (1 << 3)) { /* charging */
|
||||
} else if (status.BatteryFlag & (1 << 3)) { /* charging */
|
||||
*state = SDL_POWERSTATE_CHARGING;
|
||||
need_details = SDL_TRUE;
|
||||
} else if (status.ACLineStatus == 1) {
|
||||
*state = SDL_POWERSTATE_CHARGED; /* on AC, not charging. */
|
||||
*state = SDL_POWERSTATE_CHARGED; /* on AC, not charging. */
|
||||
need_details = SDL_TRUE;
|
||||
} else {
|
||||
*state = SDL_POWERSTATE_ON_BATTERY; /* not on AC. */
|
||||
*state = SDL_POWERSTATE_ON_BATTERY; /* not on AC. */
|
||||
need_details = SDL_TRUE;
|
||||
}
|
||||
|
||||
|
@ -60,19 +60,18 @@ SDL_GetPowerInfo_Windows(SDL_PowerState *state, int *seconds, int *percent)
|
|||
const int pct = (int) status.BatteryLifePercent;
|
||||
const int secs = (int) status.BatteryLifeTime;
|
||||
|
||||
if (pct != 255) { /* 255 == unknown */
|
||||
*percent = (pct > 100) ? 100 : pct; /* clamp between 0%, 100% */
|
||||
if (pct != 255) { /* 255 == unknown */
|
||||
*percent = (pct > 100) ? 100 : pct; /* clamp between 0%, 100% */
|
||||
}
|
||||
if (secs != 0xFFFFFFFF) { /* ((DWORD)-1) == unknown */
|
||||
if (secs != 0xFFFFFFFF) { /* ((DWORD)-1) == unknown */
|
||||
*seconds = secs;
|
||||
}
|
||||
}
|
||||
|
||||
return SDL_TRUE; /* always the definitive answer on Windows. */
|
||||
return SDL_TRUE; /* always the definitive answer on Windows. */
|
||||
}
|
||||
|
||||
#endif /* SDL_POWER_WINDOWS */
|
||||
#endif /* SDL_POWER_DISABLED */
|
||||
|
||||
/* vi: set ts=4 sw=4 expandtab: */
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue