optimizations, fixes, hacks, psp, ...
[picodrive.git] / platform / psp / psp.c
index a21507f..c8d73ac 100644 (file)
@@ -10,6 +10,7 @@
 #include <pspgu.h>
 
 #include "psp.h"
+#include "emu.h"
 #include "../common/lprintf.h"
 
 PSP_MODULE_INFO("PicoDrive", 0, 1, 34);
@@ -28,16 +29,31 @@ static int exit_callback(int arg1, int arg2, void *common)
        return 0;
 }
 
+/* Power Callback */
+static int power_callback(int unknown, int pwrflags, void *common)
+{
+       /* check for power switch and suspending as one is manual and the other automatic */
+       if (pwrflags & PSP_POWER_CB_POWER_SWITCH || pwrflags & PSP_POWER_CB_SUSPENDING)
+       {
+               lprintf("power_callback: flags: 0x%08X: suspending\n", pwrflags);
+               engineState = PGS_Menu;
+       }
+       sceDisplayWaitVblankStart();
+       return 0;
+}
+
 /* Callback thread */
 static int callback_thread(SceSize args, void *argp)
 {
        int cbid;
 
-       lprintf("callback_thread started with id %i, priority %i\n",
+       lprintf("callback_thread started with id %08x, priority %i\n",
                sceKernelGetThreadId(), sceKernelGetThreadCurrentPriority());
 
        cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL);
        sceKernelRegisterExitCallback(cbid);
+       cbid = sceKernelCreateCallback("Power Callback", power_callback, NULL);
+       scePowerRegisterCallback(0, cbid);
 
        sceKernelSleepThreadCB();
 
@@ -49,7 +65,7 @@ void psp_init(void)
        SceUID thid;
 
        lprintf("running in %08x kernel\n", sceKernelDevkitVersion()),
-       lprintf("entered psp_init, threadId %i, priority %i\n", sceKernelGetThreadId(),
+       lprintf("entered psp_init, threadId %08x, priority %i\n", sceKernelGetThreadId(),
                sceKernelGetThreadCurrentPriority());
 
        thid = sceKernelCreateThread("update_thread", callback_thread, 0x11, 0xFA0, 0, 0);