/* ============== SCR_DrawBAT Crow_bar ============== */ void SCR_DrawBAT (void) { extern cvar_t show_bat; int x, y, i; char stA[80],stB[80]; if (!show_bat.value) return; if (!scePowerIsBatteryExist()) { // Don't report anything. return; } const int level = scePowerGetBatteryLifePercent(); const bool charging = scePowerGetBatteryChargingStatus(); // Is the level not sensible? if ((level < 0) || (level > 100)) { // Hopefully it will be sensible soon. return; } sprintf(stA, "Battery %d%%\n",level); sprintf(stB, "Battery %d%% (charging)\n",level); if(!charging) x = vid.width - strlen(stA) * 16 - 70; else x = vid.width - strlen(stB) * 16 - 70; y = 2 ; //vid.height - (sb_lines * (vid.height/240) )- 16; if(show_bat.value == 2) { if(!charging) Draw_String(x, y, stA); else Draw_String(x, y, stB); } else { if(charging) { Draw_Fill (240, y, level, 5, 12+((int)(realtime*8)&120)); } else Draw_Fill (240, y, level, 5, level); } }
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; }
static int lua_powerGetBatteryChargingStatus(lua_State *L) { if (lua_gettop(L) != 0) return luaL_error(L, "System.powerGetBatteryChargingStatus() takes no arguments"); lua_pushnumber(L, scePowerGetBatteryChargingStatus()); return 1; }
void check() { // No battery? if (!scePowerIsBatteryExist()) { // Don't report anything. return; } // Get the new battery status. const int level = scePowerGetBatteryLifePercent(); const bool charging = scePowerGetBatteryChargingStatus(); // Is the level not sensible? if ((level < 0) || (level > 100)) { // Hopefully it will be sensible soon. return; } // Has the battery status changed? if ((level != lastLevel) || (charging != lastCharging)) { // Charging? if (charging) { // Inform the player. Con_Printf("Battery %d%% (charging)\n", level); } else { // How much time is left? const int timeLeft = scePowerGetBatteryLifeTime(); // Is the time sensible? if (timeLeft > 0) { // Convert the time to something readable. const int hoursLeft = timeLeft / 60; const int minutesLeft = timeLeft % 60; // Inform the player. Con_Printf("Battery %d%% (%d hour%s %d minute%s)\n", level, hoursLeft, (hoursLeft == 1) ? "" : "s", // Handle pluralisation of hour(s). minutesLeft, (minutesLeft == 1) ? "" : "s"); // Handle pluralisation of minute(s). } else { // It's a silly time, just report the battery level. Con_Printf("Battery %d%%\n", level); } } // Remember the status for next frame. lastLevel = level; lastCharging = charging; } }