SDL_bool SDL_GetPowerInfo_PSP(SDL_PowerState * state, int *seconds, int *percent) { int battery = scePowerIsBatteryExist(); int plugged = scePowerIsPowerOnline(); int charging = scePowerIsBatteryCharging(); *state = SDL_POWERSTATE_UNKNOWN; *seconds = -1; *percent = -1; if (!battery) { *state = SDL_POWERSTATE_NO_BATTERY; *seconds = -1; *percent = -1; } else if (charging) { *state = SDL_POWERSTATE_CHARGING; *percent = scePowerGetBatteryLifePercent(); *seconds = scePowerGetBatteryLifeTime()*60; } else if (plugged) { *state = SDL_POWERSTATE_CHARGED; *percent = scePowerGetBatteryLifePercent(); *seconds = scePowerGetBatteryLifeTime()*60; } else { *state = SDL_POWERSTATE_ON_BATTERY; *percent = scePowerGetBatteryLifePercent(); *seconds = scePowerGetBatteryLifeTime()*60; } return SDL_TRUE; /* always the definitive answer on PSP. */ }
static enum frontend_powerstate frontend_psp_get_powerstate(int *seconds, int *percent) { enum frontend_powerstate ret = FRONTEND_POWERSTATE_NONE; #ifndef VITA int battery = scePowerIsBatteryExist(); #endif int plugged = scePowerIsPowerOnline(); int charging = scePowerIsBatteryCharging(); *percent = scePowerGetBatteryLifePercent(); *seconds = scePowerGetBatteryLifeTime() * 60; #ifndef VITA if (!battery) { ret = FRONTEND_POWERSTATE_NO_SOURCE; *seconds = -1; *percent = -1; } else #endif if (charging) ret = FRONTEND_POWERSTATE_CHARGING; else if (plugged) ret = FRONTEND_POWERSTATE_CHARGED; else ret = FRONTEND_POWERSTATE_ON_POWER_SOURCE; return ret; }
static JSBool xgg_system_power_propop_pluggedin_get(JSContext *pcxa, JSObject *pobja, jsval id, jsval *vp) { #ifdef XTPF_Linux *vp = BOOLEAN_TO_JSVAL(0); #endif //XTPF_Linux #ifdef XTPF_PSP *vp = BOOLEAN_TO_JSVAL(scePowerIsBatteryCharging()); #endif //XTPF_PSP return JS_TRUE; }
void xrPlayerSetSpeed(int cpu, int bus) { unsigned int k = pspSdkSetK1(0); static bool inited = false; if (!inited) { scePowerSetClockFrequency2 = (void *) FindProc("scePower_Service", "scePower", 0x545A7F3C); scePowerIsBatteryCharging = (void *) FindProc("scePower_Service", "scePower", 0x1E490401); scePower_driver_A09FC577 = (void *) FindProc("scePower_Service", "scePower_driver", 0xA09FC577); scePower_driver_191A3848 = (void *) FindProc("scePower_Service", "scePower_driver", 0x191A3848); inited = true; } if (scePowerSetClockFrequency2 == 0 || scePowerIsBatteryCharging == 0 || scePower_driver_A09FC577 == 0 || scePower_driver_191A3848 == 0) { inited = false; return; } scePowerSetClockFrequency2(cpu, cpu, bus); if (scePowerIsBatteryCharging() != 0) { pspSdkSetK1(k); return; } static int ps1 = 0; if (ps1 == 0) { scePower_driver_A09FC577(1); ps1 = 1; pspSdkSetK1(k); return; } static int ps2 = 0; if (ps2 == 0) { ps1 = 0; ps2 = 1; pspSdkSetK1(k); return; } scePower_driver_191A3848(0); ps1 = 0; ps2 = 0; pspSdkSetK1(k); }
int draw_battery_status(int draw) { static UINT32 counter = 0; static int prev_bat = 0, prev_charging = 0; int width, icon, update = 0; int bat = scePowerGetBatteryLifePercent(); int charging = scePowerIsBatteryCharging(); char bat_left[4]; counter++; if (draw) { if (bat > 66) icon = ICON_BATTERY1; else if (bat > 33) icon = ICON_BATTERY2; else if (bat >= 10) icon = ICON_BATTERY3; else icon = ICON_BATTERY4; if ((charging && (counter % 60 < 40)) || !charging) small_icon_shadow(407, 3, UI_COLOR(UI_PAL_TITLE), icon); uifont_print_shadow(432, 5, UI_COLOR(UI_PAL_TITLE), "["); uifont_print_shadow(462, 5, UI_COLOR(UI_PAL_TITLE), "%]"); if (bat >= 0 && bat <= 100) sprintf(bat_left, "%3d", bat); else strcpy(bat_left, "---"); width = uifont_get_string_width(bat_left); uifont_print_shadow(462 - width, 5, UI_COLOR(UI_PAL_TITLE), bat_left); if (!charging && (bat < 10) && (counter % 120 < 40)) { int sx, sy, ex, ey; char message[128]; sprintf(message, TEXT(WARNING_BATTERY_IS_LOW_PLEASE_CHARGE_BATTERY), bat); width = uifont_get_string_width(message); sx = (SCR_WIDTH - width) >> 1; sy = (SCR_HEIGHT - FONTSIZE) >> 1; ex = sx + width; ey = sy + FONTSIZE; draw_dialog(sx - FONTSIZE/2, sy - FONTSIZE/2, ex + FONTSIZE/2, ey + FONTSIZE/2); uifont_print_shadow_center(sy, UI_COLOR(UI_PAL_WARNING), message); } }
void LCD::RenderStatusBattery() { // blit background to buffer Graphics::BlitAlphaImageToImage(0, 0, _bg->imageWidth, _bg->imageHeight, _bg, 0, 0, _buffer); int bp = scePowerGetBatteryLifePercent() / 10; string out = "Battery: "; for (int i=0; i < bp; i++) out += "i"; Font::PrintImage(out.c_str(), 5, textoffsety, _buffer, _textColor, 3); if (scePowerIsBatteryCharging() == 1) Font::PrintImage("Charging", 85, textoffsety, _buffer, _textColor, 3); else Font::PrintImage("Not Charging", 85, textoffsety, _buffer, _textColor, 3); }
static void show_battery_warning(void) { if (!scePowerIsBatteryCharging()) { int bat = scePowerGetBatteryLifePercent(); if (bat < 10) { static UINT32 counter = 0; counter++; if ((counter % 120) < 80) { char warning[128]; boxfill_alpha(0, 254, SCR_WIDTH-1, SCR_HEIGHT-1, COLOR_BLACK, 12); sprintf(warning, TEXT(WARNING_BATTERY_IS_LOW_PLEASE_CHARGE_BATTERY), bat); uifont_print_center(256, UI_COLOR(UI_PAL_WARNING), warning); } } } }
static int lua_powerIsBatteryCharging(lua_State *L) { if (lua_gettop(L) != 0) return luaL_error(L, "System.powerIsBatteryCharging() takes no arguments"); lua_pushboolean(L, scePowerIsBatteryCharging()); return 1; }
int main(int argc, char **argv) { int powerCbCallbackId = TEST_NOTZERO(sceKernelCreateCallback, "powerHandler", powerHandler, (void *)0x1234); int powerCbCallbackId2 = TEST_NOTZERO(sceKernelCreateCallback, "powerHandler2", powerHandler2, (void *)0x4567); int powerCbSlot1 = TEST_RES(scePowerRegisterCallback, -1, powerCbCallbackId); int powerCbSlot2 = TEST_RES(scePowerRegisterCallback, -1, powerCbCallbackId2); // Register the same callback in two slots, make sure it's only called once. int powerCbSlot3 = TEST_RES(scePowerRegisterCallback, -1, powerCbCallbackId2); TEST_RES(sceKernelCheckCallback); TEST_RES(scePowerUnregisterCallback, powerCbSlot1); TEST_NAMED_RES("scePowerUnregisterCallback twice", scePowerUnregisterCallback, powerCbSlot1); TEST_NAMED_RES("scePowerUnregisterCallback never registered", scePowerUnregisterCallback, 8); TEST_NAMED_RES("scePowerUnregisterCallback too low", scePowerUnregisterCallback, -4); TEST_NAMED_RES("scePowerUnregisterCallback too high (31)", scePowerUnregisterCallback, 31); TEST_NAMED_RES("scePowerUnregisterCallback too high (32)", scePowerUnregisterCallback, 32); TEST_RES(scePowerUnregisterCallback, powerCbSlot2); TEST_RES(scePowerUnregisterCallback, powerCbSlot3); checkpointNext("---"); powerCbSlot1 = TEST_RES(scePowerRegisterCallback, -1, powerCbCallbackId); TEST_RES(sceKernelPowerTick, -1); TEST_RES(sceKernelCheckCallback); // Just testing scheduling. scePowerIsBatteryCharging(); schedf("scePowerIsBatteryCharging\n"); TEST_RES(sceKernelCheckCallback); TEST_RES(scePowerIsBatteryExist); TEST_RES(sceKernelCheckCallback); TEST_RES(scePowerIsPowerOnline); TEST_RES(sceKernelCheckCallback); TEST_NOTZERO(scePowerGetBatteryLifePercent); TEST_RES(sceKernelCheckCallback); // Just testing scheduling. scePowerGetBatteryChargingStatus(); schedf("scePowerGetBatteryChargingStatus\n"); TEST_RES(sceKernelCheckCallback); TEST_RES(scePowerIsLowBattery); TEST_RES(sceKernelCheckCallback); TEST_RES(sceKernelPowerLock, 0); TEST_RES(sceKernelCheckCallback); TEST_RES(sceKernelPowerUnlock, 0); TEST_RES(sceKernelCheckCallback); TEST_RES(sceKernelPowerUnlock, 0); TEST_RES(sceKernelCheckCallback); TEST_RES(sceKernelPowerLock, 1); TEST_RES(sceKernelCheckCallback); TEST_RES(sceKernelPowerTick, -1); TEST_RES(sceKernelCheckCallback); TEST_NAMED_RES("scePowerSetBusClockFrequency to 66", scePowerSetBusClockFrequency, 66); TEST_RES(sceKernelCheckCallback); TEST_NAMED_RES("scePowerSetBusClockFrequency to 111", scePowerSetBusClockFrequency, 111); TEST_RES(sceKernelCheckCallback); TEST_NAMED_RES("scePowerSetCpuClockFrequency to 111", scePowerSetCpuClockFrequency, 111); TEST_RES(sceKernelCheckCallback); TEST_NAMED_RES("scePowerSetCpuClockFrequency to 222", scePowerSetCpuClockFrequency, 222); TEST_RES(sceKernelCheckCallback); TEST_RES(scePowerUnregisterCallback, powerCbSlot1); checkpointNext("---"); powerCbSlot1 = TEST_NAMED_RES("scePowerRegisterCallback: Normal", scePowerRegisterCallback, 0, powerCbCallbackId); TEST_NAMED_RES("scePowerRegisterCallback: Invalid CB", scePowerRegisterCallback, 0, 0); TEST_NAMED_RES("scePowerRegisterCallback: Too low slot", scePowerRegisterCallback, -4, powerCbCallbackId); TEST_NAMED_RES("scePowerRegisterCallback: Too high (31)", scePowerRegisterCallback, 31, powerCbCallbackId); TEST_NAMED_RES("scePowerRegisterCallback: Too high (32)", scePowerRegisterCallback, 32, powerCbCallbackId); TEST_NAMED_RES("scePowerRegisterCallback: Twice (same)", scePowerRegisterCallback, 0, powerCbCallbackId); TEST_NAMED_RES("scePowerRegisterCallback: Twice (different)", scePowerRegisterCallback, 0, powerCbCallbackId2); TEST_RES(scePowerUnregisterCallback, powerCbSlot1); TEST_RES(sceKernelCheckCallback); powerCbSlot1 = TEST_RES(scePowerRegisterCallback, 0, powerCbCallbackId); TEST_RES(scePowerUnregisterCallback, powerCbSlot1); TEST_RES(sceKernelDeleteCallback, powerCbCallbackId); TEST_RES(sceKernelCheckCallback); checkpointNext("---"); int i; for (i = 0; i < 17; i++) { TEST_RES(scePowerRegisterCallback, -1, powerCbCallbackId2); } checkpointNext("---"); return 0; }