23 #ifndef SDL_POWER_DISABLED
31 #include <drivers/Drivers.h>
34 #define APM_DEVICE_PATH "/dev/misc/apm"
35 #define APM_FUNC_OFFSET 0x5300
36 #define APM_FUNC_GET_POWER_STATUS 10
37 #define APM_DEVICE_ALL 1
38 #define APM_BIOS_CALL (B_DEVICE_OP_CODES_END + 3)
45 const int fd = open(
"/dev/misc/apm", O_RDONLY);
59 memset(regs,
'\0',
sizeof(regs));
60 regs[0] = APM_FUNC_OFFSET + APM_FUNC_GET_POWER_STATUS;
61 regs[1] = APM_DEVICE_ALL;
62 rc = ioctl(fd, APM_BIOS_CALL, regs);
69 ac_status = regs[1] >> 8;
70 battery_status = regs[1] & 0xFF;
71 battery_flags = regs[2] >> 8;
72 battery_life = regs[2] & 0xFF;
73 battery_time = (uint32) regs[3];
76 if (battery_flags == 0x00) {
77 battery_time = 0xFFFF;
78 if (battery_status == 0xFF) {
81 battery_flags = (1 << battery_status);
85 if ((battery_time != 0xFFFF) && (battery_time & (1 << 15))) {
87 battery_time = (battery_time & 0x7FFF) * 60;
90 if (battery_flags == 0xFF) {
92 }
else if (battery_flags & (1 << 7)) {
94 }
else if (battery_flags & (1 << 3)) {
97 }
else if (ac_status == 1) {
108 const int pct = (
int) battery_life;
109 const int secs = (
int) battery_time;
112 *percent = (pct > 100) ? 100 : pct;
114 if (secs != 0xFFFF) {
SDL_bool SDL_GetPowerInfo_BeOS(SDL_PowerState *, int *, int *)
SDL_PowerState
The basic state for the system's power supply.