Skip to content

Commit

Permalink
Merge pull request #25 from joel16/kernel_plugin
Browse files Browse the repository at this point in the history
Kernel plugin for display/audio
  • Loading branch information
joel16 authored Aug 31, 2019
2 parents 0abdc34 + a5d1490 commit f8568a5
Show file tree
Hide file tree
Showing 24 changed files with 456 additions and 150 deletions.
3 changes: 2 additions & 1 deletion .travis/.build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,6 @@ rm -rf .git .travis common libs .gitattributes .gitignore .travis.yml ICON0.PNG
mkdir -p PSP/GAME/CMFileManager
mv app/EBOOT.PBP PSP/GAME/CMFileManager/APP.PBP && mv launcher/EBOOT.PBP PSP/GAME/CMFileManager/EBOOT.PBP
mv audio_driver/audio_driver.prx PSP/GAME/CMFileManager/audio_driver.prx
mv display_driver/display_driver.prx PSP/GAME/CMFileManager/display_driver.prx
zip -r CMFileManager-PSP.zip PSP/
rm -rf app audio_driver launcher PSP
rm -rf app audio_driver display_driver launcher PSP
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
SUBDIRS = app launcher
SUBDIRS = app audio_driver display_driver launcher

all:
@for dir in $(SUBDIRS); do $(MAKE) -C $$dir; done
Expand Down
4 changes: 2 additions & 2 deletions app/Makefile
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
TARGET = CMFileManager

SOURCES := data glib2d source source/audio source/menus
SOURCES := data drivers glib2d source source/audio source/menus
CFILES := $(foreach dir,$(SOURCES), $(wildcard $(dir)/*.c))
SFILES := $(foreach dir,$(SOURCES), $(wildcard $(dir)/*.S))
CPPFILES := $(foreach dir,$(SOURCES), $(wildcard $(dir)/*.cpp))
Expand All @@ -13,7 +13,7 @@ OBJS := $(addsuffix .o,$(BINFILES)) \
PSP_LARGE_MEMORY = 1

VERSION_MAJOR := 3
VERSION_MINOR := 0
VERSION_MINOR := 1
VERSION_MICRO := 0

INCDIR = ../libs/include ../libs/include/ogg ../libs/include/opus include include/menus glib2d
Expand Down
7 changes: 7 additions & 0 deletions app/drivers/audio_driver.S
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
.set noreorder

#include "pspstub.s"

STUB_START "audio_driver",0x40090000,0x00010005
STUB_FUNC 0x37516EBF,pspAudioSetFrequency
STUB_END
10 changes: 10 additions & 0 deletions app/drivers/display_driver.S
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
.set noreorder

#include "pspstub.s"

STUB_START "display_driver",0x40090000,0x00040005
STUB_FUNC 0x9C096DA0,pspGetBrightness
STUB_FUNC 0x193400C8,pspSetBrightness
STUB_FUNC 0xE3CA895B,pspDisplayEnable
STUB_FUNC 0x105212A9,pspDisplayDisable
STUB_END
140 changes: 140 additions & 0 deletions app/drivers/mutex-imports.S
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
.set noreorder

#include <pspimport.s>

IMPORT_START "ThreadManForUser", 0x40010000
IMPORT_FUNC "ThreadManForUser", 0xB7D098C6, sceKernelCreateMutex
IMPORT_FUNC "ThreadManForUser", 0xF8170FBE, sceKernelDeleteMutex
IMPORT_FUNC "ThreadManForUser", 0x6B30100F, sceKernelUnlockMutex
IMPORT_FUNC "ThreadManForUser", 0xB011B11F, sceKernelLockMutex
IMPORT_FUNC "ThreadManForUser", 0x5bf4dd27, sceKernelLockMutexCB
IMPORT_FUNC "ThreadManForUser", 0x0DDCD2C9, sceKernelTryLockMutex

IMPORT_FUNC "ThreadManForUser", 0x6E9EA350,_sceKernelReturnFromCallback
IMPORT_FUNC "ThreadManForUser", 0x0C106E53, sceKernelRegisterThreadEventHandler
IMPORT_FUNC "ThreadManForUser", 0x72F3C145, sceKernelReleaseThreadEventHandler
IMPORT_FUNC "ThreadManForUser", 0x369EEB6B, sceKernelReferThreadEventHandlerStatus
IMPORT_FUNC "ThreadManForUser", 0xE81CAF8F, sceKernelCreateCallback
IMPORT_FUNC "ThreadManForUser", 0xEDBA5844, sceKernelDeleteCallback
IMPORT_FUNC "ThreadManForUser", 0xC11BA8C4, sceKernelNotifyCallback
IMPORT_FUNC "ThreadManForUser", 0xBA4051D6, sceKernelCancelCallback
IMPORT_FUNC "ThreadManForUser", 0x2A3D44FF, sceKernelGetCallbackCount
IMPORT_FUNC "ThreadManForUser", 0x349D6D6C, sceKernelCheckCallback
IMPORT_FUNC "ThreadManForUser", 0x730ED8BC, sceKernelReferCallbackStatus
IMPORT_FUNC "ThreadManForUser", 0x9ACE131E, sceKernelSleepThread
IMPORT_FUNC "ThreadManForUser", 0x82826F70, sceKernelSleepThreadCB
IMPORT_FUNC "ThreadManForUser", 0xD59EAD2F, sceKernelWakeupThread
IMPORT_FUNC "ThreadManForUser", 0xFCCFAD26, sceKernelCancelWakeupThread
IMPORT_FUNC "ThreadManForUser", 0x9944F31F, sceKernelSuspendThread
IMPORT_FUNC "ThreadManForUser", 0x75156E8F, sceKernelResumeThread
IMPORT_FUNC "ThreadManForUser", 0x278C0DF5, sceKernelWaitThreadEnd
IMPORT_FUNC "ThreadManForUser", 0x840E8133, sceKernelWaitThreadEndCB
IMPORT_FUNC "ThreadManForUser", 0xCEADEB47, sceKernelDelayThread
IMPORT_FUNC "ThreadManForUser", 0x68DA9E36, sceKernelDelayThreadCB
IMPORT_FUNC "ThreadManForUser", 0xBD123D9E, sceKernelDelaySysClockThread
IMPORT_FUNC "ThreadManForUser", 0x1181E963, sceKernelDelaySysClockThreadCB
IMPORT_FUNC "ThreadManForUser", 0xD6DA4BA1, sceKernelCreateSema
IMPORT_FUNC "ThreadManForUser", 0x28B6489C, sceKernelDeleteSema
IMPORT_FUNC "ThreadManForUser", 0x3F53E640, sceKernelSignalSema
IMPORT_FUNC "ThreadManForUser", 0x4E3A1105, sceKernelWaitSema
IMPORT_FUNC "ThreadManForUser", 0x6D212BAC, sceKernelWaitSemaCB
IMPORT_FUNC "ThreadManForUser", 0x58B1F937, sceKernelPollSema
IMPORT_FUNC "ThreadManForUser", 0x8FFDF9A2, sceKernelCancelSema
IMPORT_FUNC "ThreadManForUser", 0xBC6FEBC5, sceKernelReferSemaStatus
IMPORT_FUNC "ThreadManForUser", 0x55C20A00, sceKernelCreateEventFlag
IMPORT_FUNC "ThreadManForUser", 0xEF9E4C70, sceKernelDeleteEventFlag
IMPORT_FUNC "ThreadManForUser", 0x1FB15A32, sceKernelSetEventFlag
IMPORT_FUNC "ThreadManForUser", 0x812346E4, sceKernelClearEventFlag
IMPORT_FUNC "ThreadManForUser", 0x402FCF22, sceKernelWaitEventFlag
IMPORT_FUNC "ThreadManForUser", 0x328C546A, sceKernelWaitEventFlagCB
IMPORT_FUNC "ThreadManForUser", 0x30FD48F0, sceKernelPollEventFlag
IMPORT_FUNC "ThreadManForUser", 0xCD203292, sceKernelCancelEventFlag
IMPORT_FUNC "ThreadManForUser", 0xA66B0120, sceKernelReferEventFlagStatus
IMPORT_FUNC "ThreadManForUser", 0x8125221D, sceKernelCreateMbx
IMPORT_FUNC "ThreadManForUser", 0x86255ADA, sceKernelDeleteMbx
IMPORT_FUNC "ThreadManForUser", 0xE9B3061E, sceKernelSendMbx
IMPORT_FUNC "ThreadManForUser", 0x18260574, sceKernelReceiveMbx
IMPORT_FUNC "ThreadManForUser", 0xF3986382, sceKernelReceiveMbxCB
IMPORT_FUNC "ThreadManForUser", 0x0D81716A, sceKernelPollMbx
IMPORT_FUNC "ThreadManForUser", 0x87D4DD36, sceKernelCancelReceiveMbx
IMPORT_FUNC "ThreadManForUser", 0xA8E8C846, sceKernelReferMbxStatus
IMPORT_FUNC "ThreadManForUser", 0x7C0DC2A0, sceKernelCreateMsgPipe
IMPORT_FUNC "ThreadManForUser", 0xF0B7DA1C, sceKernelDeleteMsgPipe
IMPORT_FUNC "ThreadManForUser", 0x876DBFAD, sceKernelSendMsgPipe
IMPORT_FUNC "ThreadManForUser", 0x7C41F2C2, sceKernelSendMsgPipeCB
IMPORT_FUNC "ThreadManForUser", 0x884C9F90, sceKernelTrySendMsgPipe
IMPORT_FUNC "ThreadManForUser", 0x74829B76, sceKernelReceiveMsgPipe
IMPORT_FUNC "ThreadManForUser", 0xFBFA697D, sceKernelReceiveMsgPipeCB
IMPORT_FUNC "ThreadManForUser", 0xDF52098F, sceKernelTryReceiveMsgPipe
IMPORT_FUNC "ThreadManForUser", 0x349B864D, sceKernelCancelMsgPipe
IMPORT_FUNC "ThreadManForUser", 0x33BE4024, sceKernelReferMsgPipeStatus
IMPORT_FUNC "ThreadManForUser", 0x56C039B5, sceKernelCreateVpl
IMPORT_FUNC "ThreadManForUser", 0x89B3D48C, sceKernelDeleteVpl
IMPORT_FUNC "ThreadManForUser", 0xBED27435, sceKernelAllocateVpl
IMPORT_FUNC "ThreadManForUser", 0xEC0A693F, sceKernelAllocateVplCB
IMPORT_FUNC "ThreadManForUser", 0xAF36D708, sceKernelTryAllocateVpl
IMPORT_FUNC "ThreadManForUser", 0xB736E9FF, sceKernelFreeVpl
IMPORT_FUNC "ThreadManForUser", 0x1D371B8A, sceKernelCancelVpl
IMPORT_FUNC "ThreadManForUser", 0x39810265, sceKernelReferVplStatus
IMPORT_FUNC "ThreadManForUser", 0xC07BB470, sceKernelCreateFpl
IMPORT_FUNC "ThreadManForUser", 0xED1410E0, sceKernelDeleteFpl
IMPORT_FUNC "ThreadManForUser", 0xD979E9BF, sceKernelAllocateFpl
IMPORT_FUNC "ThreadManForUser", 0xE7282CB6, sceKernelAllocateFplCB
IMPORT_FUNC "ThreadManForUser", 0x623AE665, sceKernelTryAllocateFpl
IMPORT_FUNC "ThreadManForUser", 0xF6414A71, sceKernelFreeFpl
IMPORT_FUNC "ThreadManForUser", 0xA8AA591F, sceKernelCancelFpl
IMPORT_FUNC "ThreadManForUser", 0xD8199E4C, sceKernelReferFplStatus
IMPORT_FUNC "ThreadManForUser", 0x0E927AED,_sceKernelReturnFromTimerHandler
IMPORT_FUNC "ThreadManForUser", 0x110DEC9A, sceKernelUSec2SysClock
IMPORT_FUNC "ThreadManForUser", 0xC8CD158C, sceKernelUSec2SysClockWide
IMPORT_FUNC "ThreadManForUser", 0xBA6B92E2, sceKernelSysClock2USec
IMPORT_FUNC "ThreadManForUser", 0xE1619D7C, sceKernelSysClock2USecWide
IMPORT_FUNC "ThreadManForUser", 0xDB738F35, sceKernelGetSystemTime
IMPORT_FUNC "ThreadManForUser", 0x82BC5777, sceKernelGetSystemTimeWide
IMPORT_FUNC "ThreadManForUser", 0x369ED59D, sceKernelGetSystemTimeLow
IMPORT_FUNC "ThreadManForUser", 0x6652B8CA, sceKernelSetAlarm
IMPORT_FUNC "ThreadManForUser", 0xB2C25152, sceKernelSetSysClockAlarm
IMPORT_FUNC "ThreadManForUser", 0x7E65B999, sceKernelCancelAlarm
IMPORT_FUNC "ThreadManForUser", 0xDAA3F564, sceKernelReferAlarmStatus
IMPORT_FUNC "ThreadManForUser", 0x20FFF560, sceKernelCreateVTimer
IMPORT_FUNC "ThreadManForUser", 0x328F9E52, sceKernelDeleteVTimer
IMPORT_FUNC "ThreadManForUser", 0xB3A59970, sceKernelGetVTimerBase
IMPORT_FUNC "ThreadManForUser", 0xB7C18B77, sceKernelGetVTimerBaseWide
IMPORT_FUNC "ThreadManForUser", 0x034A921F, sceKernelGetVTimerTime
IMPORT_FUNC "ThreadManForUser", 0xC0B3FFD2, sceKernelGetVTimerTimeWide
IMPORT_FUNC "ThreadManForUser", 0x542AD630, sceKernelSetVTimerTime
IMPORT_FUNC "ThreadManForUser", 0xFB6425C3, sceKernelSetVTimerTimeWide
IMPORT_FUNC "ThreadManForUser", 0xC68D9437, sceKernelStartVTimer
IMPORT_FUNC "ThreadManForUser", 0xD0AEEE87, sceKernelStopVTimer
IMPORT_FUNC "ThreadManForUser", 0xD8B299AE, sceKernelSetVTimerHandler
IMPORT_FUNC "ThreadManForUser", 0x53B00E9A, sceKernelSetVTimerHandlerWide
IMPORT_FUNC "ThreadManForUser", 0xD2D615EF, sceKernelCancelVTimerHandler
IMPORT_FUNC "ThreadManForUser", 0x5F32BEAA, sceKernelReferVTimerStatus
IMPORT_FUNC "ThreadManForUser", 0x446D8DE6, sceKernelCreateThread
IMPORT_FUNC "ThreadManForUser", 0x9FA03CD3, sceKernelDeleteThread
IMPORT_FUNC "ThreadManForUser", 0xF475845D, sceKernelStartThread
IMPORT_FUNC "ThreadManForUser", 0x532A522E,_sceKernelExitThread
IMPORT_FUNC "ThreadManForUser", 0xAA73C935, sceKernelExitThread
IMPORT_FUNC "ThreadManForUser", 0x809CE29B, sceKernelExitDeleteThread
IMPORT_FUNC "ThreadManForUser", 0x616403BA, sceKernelTerminateThread
IMPORT_FUNC "ThreadManForUser", 0x383F7BCC, sceKernelTerminateDeleteThread
IMPORT_FUNC "ThreadManForUser", 0x3AD58B8C, sceKernelSuspendDispatchThread
IMPORT_FUNC "ThreadManForUser", 0x27E22EC2, sceKernelResumeDispatchThread
IMPORT_FUNC "ThreadManForUser", 0xEA748E31, sceKernelChangeCurrentThreadAttr
IMPORT_FUNC "ThreadManForUser", 0x71BC9871, sceKernelChangeThreadPriority
IMPORT_FUNC "ThreadManForUser", 0x912354A7, sceKernelRotateThreadReadyQueue
IMPORT_FUNC "ThreadManForUser", 0x2C34E053, sceKernelReleaseWaitThread
IMPORT_FUNC "ThreadManForUser", 0x293B45B8, sceKernelGetThreadId
IMPORT_FUNC "ThreadManForUser", 0x94AA61EE, sceKernelGetThreadCurrentPriority
IMPORT_FUNC "ThreadManForUser", 0x3B183E26, sceKernelGetThreadExitStatus
IMPORT_FUNC "ThreadManForUser", 0xD13BDE95, sceKernelCheckThreadStack
IMPORT_FUNC "ThreadManForUser", 0x52089CA1, sceKernelGetThreadStackFreeSize
IMPORT_FUNC "ThreadManForUser", 0x17C1684E, sceKernelReferThreadStatus
IMPORT_FUNC "ThreadManForUser", 0xFFC36A14, sceKernelReferThreadRunStatus
IMPORT_FUNC "ThreadManForUser", 0x627E6F3A, sceKernelReferSystemStatus
IMPORT_FUNC "ThreadManForUser", 0x94416130, sceKernelGetThreadmanIdList
IMPORT_FUNC "ThreadManForUser", 0x57CF62DD, sceKernelGetThreadmanIdType
IMPORT_FUNC "ThreadManForUser", 0x64D4540E, sceKernelReferThreadProfiler
IMPORT_FUNC "ThreadManForUser", 0x8218B4DD, sceKernelReferGlobalProfiler
IMPORT_FUNC "ThreadManForUser", 0xA9C2CB9A, sceKernelReferMutexStatus
IMPORT_FUNC "ThreadManForUser", 0x87D9223C, sceKernelCancelMutex
4 changes: 4 additions & 0 deletions app/include/common.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,3 +60,7 @@ extern char initial_cwd[128];

extern bool is_ms_inserted;
extern bool is_psp_go;

// display driver function prototypes
extern int pspDisplayEnable(void);
extern int pspDisplayDisable(void);
4 changes: 4 additions & 0 deletions app/include/utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@ char *Utils_Basename(const char *filename);
void Utils_GetSizeString(char *string, u64 size);
void Utils_AppendArr(char subject[], const char insert[], int pos);
int Utils_Alphasort(const void *p1, const void *p2);
void Utils_InitAudioDriver(void);
void Utils_ExitAudioDriver(void);
void Utils_InitDisplayDriver(void);
void Utils_ExitDisplayDriver(void);
void Utils_InitUSB(void);
void Utils_ExitUSB(void);
void Utils_HandleUSB(void);
Expand Down
4 changes: 4 additions & 0 deletions app/source/audio/audio.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,9 @@ static Audio_Metadata empty_metadata = {0};
static Audio_Decoder decoder = {0}, empty_decoder = {0};
bool playing = true, paused = false;

// audio driver function prototype
int pspAudioSetFrequency(int frequency);

static void Audio_Decode(void *buf, unsigned int length, void *userdata) {
if (playing == false || paused == true) {
short *buf_short = (short *)buf;
Expand Down Expand Up @@ -142,6 +145,7 @@ void Audio_Init(const char *path) {

(* decoder.init)(path);
pspAudioInit((* decoder.channels)() == 2? PSP_AUDIO_FORMAT_STEREO : PSP_AUDIO_FORMAT_MONO);
pspAudioSetFrequency((* decoder.rate)() == 48000? 48000 : 44100);
pspAudioSetChannelCallback(0, Audio_Decode, NULL);
}

Expand Down
4 changes: 4 additions & 0 deletions app/source/common.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,7 @@ char initial_cwd[128];

bool is_ms_inserted;
bool is_psp_go;

// display driver function prototypes
int pspDisplayEnable(void);
int pspDisplayDisable(void);
4 changes: 4 additions & 0 deletions app/source/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -86,10 +86,14 @@ static int Init_Services(void) {
PSP_CTRL_CANCEL = Utils_GetCancelButton();

Utils_InitUSB();
Utils_InitAudioDriver();
Utils_InitDisplayDriver();
return 0;
}

static void Term_Services(void) {
Utils_ExitDisplayDriver();
Utils_ExitAudioDriver();
Utils_ExitUSB();

intraFontUnload(font);
Expand Down
11 changes: 10 additions & 1 deletion app/source/menus/menu_archive.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#include <archive.h>
#include <archive_entry.h>
#include <malloc.h>
#include <psppower.h>

#include "common.h"
#include "config.h"
Expand Down Expand Up @@ -126,6 +127,11 @@ int Archive_ExtractArchive(const char *path) {
}

ret = archive_write_disk_set_options(dst, ARCHIVE_EXTRACT_UNLINK);
if (ret != ARCHIVE_OK) {
Menu_DisplayError("archive_write_disk_set_options failed:", ret);
break;
}

ret = archive_write_header(dst, entry);
if (ret != ARCHIVE_OK) {
Menu_DisplayError("archive_write_header failed:", ret);
Expand All @@ -146,7 +152,8 @@ int Archive_ExtractArchive(const char *path) {

int Archive_ExtractFile(const char *path) {
int dialog_selection = 0;

scePowerLock(0);

while (1) {
Dialog_DisplayPrompt("Extract file", "This may take a few minutes.", "Do you want to continue?", &dialog_selection, true);
Utils_ReadControls();
Expand All @@ -165,11 +172,13 @@ int Archive_ExtractFile(const char *path) {
if (Utils_IsButtonPressed(PSP_CTRL_ENTER)) {
if (dialog_selection == 1) {
return Archive_ExtractArchive(path);
scePowerUnlock(0);
}
else
break;
}
}

scePowerUnlock(0);
return -1;
}
15 changes: 15 additions & 0 deletions app/source/menus/menu_audio.c
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ void Menu_PlayAudio(const char *path) {
intraFontSetStyle(font, 0.7f, WHITE, G2D_RGBA(0, 0, 0, 0), 0.f, INTRAFONT_ALIGN_LEFT);
length_time_width = intraFontMeasureText(font, length_time);

bool screen_disabled = false;

while(playing) {
g2dClear(config.dark_theme? BLACK_BG : WHITE);
G2D_DrawImage(default_artwork_blur, 0, 0);
Expand Down Expand Up @@ -92,6 +94,15 @@ void Menu_PlayAudio(const char *path) {

Utils_ReadControls();

if (Utils_IsButtonPressed(PSP_CTRL_START)) {
screen_disabled = !screen_disabled;

if (screen_disabled)
pspDisplayDisable();
else
pspDisplayEnable();
}

if (Utils_IsButtonPressed(PSP_CTRL_ENTER))
Audio_Pause();

Expand All @@ -106,4 +117,8 @@ void Menu_PlayAudio(const char *path) {
free(position_time);

Audio_Term();

// If user tries to exit with screen disabled, enable it.
if (screen_disabled)
pspDisplayEnable();
}
18 changes: 18 additions & 0 deletions app/source/menus/menu_ftp.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#include <pspnet.h>
#include <pspnet_apctl.h>
#include <pspnet_inet.h>
#include <psppower.h>
#include <psputility.h>
#include <stdio.h>
#include <stdlib.h>
Expand Down Expand Up @@ -105,6 +106,7 @@ void Menu_DisplayFTP(void) {
unsigned short int psp_port;
int ret = 0;

scePowerLock(0);
sceUtilityLoadNetModule(PSP_NET_MODULE_COMMON);
sceUtilityLoadNetModule(PSP_NET_MODULE_INET);

Expand Down Expand Up @@ -136,6 +138,8 @@ void Menu_DisplayFTP(void) {
int msg_width = intraFontMeasureText(font, msg);
int result_width = intraFontMeasureText(font, "Press Cross/Circle to exit.");

bool screen_disabled = false;

while (1) {
g2dClear(config.dark_theme? BLACK_BG : WHITE);
G2D_DrawRect(0, 0, 480, 20, config.dark_theme? STATUS_BAR_DARK : STATUS_BAR_LIGHT);
Expand Down Expand Up @@ -169,6 +173,15 @@ void Menu_DisplayFTP(void) {
if (((Utils_IsButtonHeld(PSP_CTRL_LTRIGGER)) && (Utils_IsButtonPressed(PSP_CTRL_RTRIGGER))) || ((Utils_IsButtonHeld(PSP_CTRL_RTRIGGER)) && (Utils_IsButtonPressed(PSP_CTRL_LTRIGGER))))
Screenshot_Capture();

if (Utils_IsButtonPressed(PSP_CTRL_START)) {
screen_disabled = !screen_disabled;

if (screen_disabled)
pspDisplayDisable();
else
pspDisplayEnable();
}

if ((Utils_IsButtonPressed(PSP_CTRL_ENTER)) || (Utils_IsButtonPressed(PSP_CTRL_CANCEL))) {
sceKernelDelayThread(100 * 1000);
break;
Expand All @@ -181,4 +194,9 @@ void Menu_DisplayFTP(void) {

sceUtilityUnloadNetModule(PSP_NET_MODULE_INET);
sceUtilityUnloadNetModule(PSP_NET_MODULE_COMMON);
scePowerUnlock(0);

// If user tries to exit with screen disabled, enable it.
if (screen_disabled)
pspDisplayEnable();
}
Loading

0 comments on commit f8568a5

Please sign in to comment.