2012-11-01 16:19:01 +01:00
// Copyright (c) 2012- PPSSPP Project.
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
2012-11-04 23:01:49 +01:00
// the Free Software Foundation, version 2.0 or later versions.
2012-11-01 16:19:01 +01:00
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License 2.0 for more details.
// A copy of the GPL 2.0 should have been included with the program.
// If not, see http://www.gnu.org/licenses/
// Official git repository and contact information can be found at
// https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/.
2013-12-30 00:11:29 +01:00
# include <algorithm>
2013-04-21 23:35:57 -07:00
# include <set>
2013-12-29 23:28:31 +01:00
# include "file/ini_file.h"
2012-11-01 16:19:01 +01:00
2020-08-10 00:12:51 -07:00
# include "Common/Serialize/Serializer.h"
# include "Common/Serialize/SerializeFuncs.h"
# include "Common/Serialize/SerializeMap.h"
# include "Common/Serialize/SerializeSet.h"
2013-12-29 23:28:31 +01:00
# include "Core/HLE/HLE.h"
2014-03-15 11:22:19 -07:00
# include "Core/HLE/FunctionWrappers.h"
2013-12-29 23:28:31 +01:00
# include "Core/MIPS/MIPS.h"
# include "Core/Reporting.h"
2014-03-15 10:38:46 -07:00
# include "Core/Config.h"
2018-11-27 22:45:51 +08:00
# include "Core/System.h"
2012-11-01 16:19:01 +01:00
2013-12-29 23:28:31 +01:00
# include "Core/HLE/sceKernel.h"
2014-07-22 23:30:40 -07:00
# include "Core/HLE/sceKernelMemory.h"
2013-12-29 23:28:31 +01:00
# include "Core/HLE/sceKernelThread.h"
# include "Core/HLE/sceUtility.h"
# include "Core/HLE/sceCtrl.h"
# include "Core/Util/PPGeDraw.h"
# include "Core/Dialog/PSPSaveDialog.h"
# include "Core/Dialog/PSPMsgDialog.h"
# include "Core/Dialog/PSPPlaceholderDialog.h"
# include "Core/Dialog/PSPOskDialog.h"
# include "Core/Dialog/PSPGamedataInstallDialog.h"
# include "Core/Dialog/PSPNetconfDialog.h"
2014-04-28 21:54:52 +08:00
# include "Core/Dialog/PSPScreenshotDialog.h"
2013-09-25 21:05:44 -04:00
2014-04-26 05:29:03 +08:00
# define PSP_AV_MODULE_AVCODEC 0
# define PSP_AV_MODULE_SASCORE 1
# define PSP_AV_MODULE_ATRAC3PLUS 2 // Requires PSP_AV_MODULE_AVCODEC loading first
# define PSP_AV_MODULE_MPEGBASE 3 // Requires PSP_AV_MODULE_AVCODEC loading first
# define PSP_AV_MODULE_MP3 4
# define PSP_AV_MODULE_VAUDIO 5
# define PSP_AV_MODULE_AAC 6
# define PSP_AV_MODULE_G729 7
2015-03-15 21:08:11 +08:00
# define PSP_USB_MODULE_PSPCM 1
# define PSP_USB_MODULE_ACC 2
# define PSP_USB_MODULE_MIC 3 // Requires PSP_USB_MODULE_ACC loading first
# define PSP_USB_MODULE_CAM 4 // Requires PSP_USB_MODULE_ACC loading first
# define PSP_USB_MODULE_GPS 5 // Requires PSP_USB_MODULE_ACC loading first
2013-03-07 22:25:07 -08:00
const int SCE_ERROR_MODULE_BAD_ID = 0x80111101 ;
2013-04-21 23:35:57 -07:00
const int SCE_ERROR_MODULE_ALREADY_LOADED = 0x80111102 ;
const int SCE_ERROR_MODULE_NOT_LOADED = 0x80111103 ;
2013-03-09 12:53:53 -08:00
const int SCE_ERROR_AV_MODULE_BAD_ID = 0x80110F01 ;
2014-04-27 13:43:51 +08:00
int oldStatus = 100 ; //random value
2013-03-07 22:25:07 -08:00
2016-04-18 20:08:07 -07:00
static const int noDeps [ ] = { 0 } ;
static const int httpModuleDeps [ ] = { 0x0102 , 0x0103 , 0x0104 , 0 } ;
static const int sslModuleDeps [ ] = { 0x0102 , 0 } ;
static const int httpStorageModuleDeps [ ] = { 0x00100 , 0x0102 , 0x0103 , 0x0104 , 0x0105 , 0 } ;
static const int atrac3PlusModuleDeps [ ] = { 0x0300 , 0 } ;
static const int mpegBaseModuleDeps [ ] = { 0x0300 , 0 } ;
2016-08-27 10:14:34 -07:00
static const int mp4ModuleDeps [ ] = { 0x0300 , 0 } ;
2016-04-18 20:08:07 -07:00
2014-07-22 23:30:40 -07:00
struct ModuleLoadInfo {
2016-04-18 20:08:07 -07:00
ModuleLoadInfo ( int m , u32 s ) : mod ( m ) , size ( s ) , dependencies ( noDeps ) {
}
ModuleLoadInfo ( int m , u32 s , const int * d ) : mod ( m ) , size ( s ) , dependencies ( d ) {
}
2014-07-22 23:30:40 -07:00
const int mod ;
const u32 size ;
2016-04-18 20:08:07 -07:00
const int * const dependencies ;
2014-07-22 23:30:40 -07:00
} ;
static const ModuleLoadInfo moduleLoadInfo [ ] = {
2016-04-18 20:08:07 -07:00
ModuleLoadInfo ( 0x0100 , 0x00014000 ) ,
ModuleLoadInfo ( 0x0101 , 0x00020000 ) ,
ModuleLoadInfo ( 0x0102 , 0x00058000 ) ,
ModuleLoadInfo ( 0x0103 , 0x00006000 ) ,
ModuleLoadInfo ( 0x0104 , 0x00002000 ) ,
ModuleLoadInfo ( 0x0105 , 0x00028000 , httpModuleDeps ) ,
ModuleLoadInfo ( 0x0106 , 0x00044000 , sslModuleDeps ) ,
ModuleLoadInfo ( 0x0107 , 0x00010000 ) ,
ModuleLoadInfo ( 0x0108 , 0x00008000 , httpStorageModuleDeps ) ,
ModuleLoadInfo ( 0x0200 , 0x00000000 ) ,
ModuleLoadInfo ( 0x0201 , 0x00000000 ) ,
ModuleLoadInfo ( 0x0202 , 0x00000000 ) ,
ModuleLoadInfo ( 0x0203 , 0x00000000 ) ,
ModuleLoadInfo ( 0x02ff , 0x00000000 ) ,
ModuleLoadInfo ( 0x0300 , 0x00000000 ) ,
ModuleLoadInfo ( 0x0301 , 0x00000000 ) ,
ModuleLoadInfo ( 0x0302 , 0x00008000 , atrac3PlusModuleDeps ) ,
ModuleLoadInfo ( 0x0303 , 0x0000c000 , mpegBaseModuleDeps ) ,
ModuleLoadInfo ( 0x0304 , 0x00004000 ) ,
ModuleLoadInfo ( 0x0305 , 0x0000a300 ) ,
ModuleLoadInfo ( 0x0306 , 0x00004000 ) ,
ModuleLoadInfo ( 0x0307 , 0x00000000 ) ,
ModuleLoadInfo ( 0x0308 , 0x0003c000 , mp4ModuleDeps ) ,
ModuleLoadInfo ( 0x03ff , 0x00000000 ) ,
ModuleLoadInfo ( 0x0400 , 0x0000c000 ) ,
ModuleLoadInfo ( 0x0401 , 0x00018000 ) ,
ModuleLoadInfo ( 0x0402 , 0x00048000 ) ,
ModuleLoadInfo ( 0x0403 , 0x0000e000 ) ,
ModuleLoadInfo ( 0x0500 , 0x00000000 ) ,
ModuleLoadInfo ( 0x0600 , 0x00000000 ) ,
ModuleLoadInfo ( 0x0601 , 0x00000000 ) ,
2014-07-22 23:30:40 -07:00
} ;
2013-03-17 19:01:58 -07:00
enum UtilityDialogType {
UTILITY_DIALOG_NONE ,
UTILITY_DIALOG_SAVEDATA ,
UTILITY_DIALOG_MSG ,
UTILITY_DIALOG_OSK ,
UTILITY_DIALOG_NET ,
2013-08-31 14:34:36 -07:00
UTILITY_DIALOG_SCREENSHOT ,
UTILITY_DIALOG_GAMESHARING ,
2013-09-13 23:07:43 +08:00
UTILITY_DIALOG_GAMEDATAINSTALL ,
2013-03-17 19:01:58 -07:00
} ;
// Only a single dialog is allowed at a time.
static UtilityDialogType currentDialogType ;
2019-10-26 00:30:19 +02:00
bool currentDialogActive ;
2013-03-17 19:01:58 -07:00
static PSPSaveDialog saveDialog ;
static PSPMsgDialog msgDialog ;
static PSPOskDialog oskDialog ;
2013-10-13 10:43:49 +08:00
static PSPNetconfDialog netDialog ;
2014-04-28 21:54:52 +08:00
static PSPScreenshotDialog screenshotDialog ;
2013-09-13 23:07:43 +08:00
static PSPGamedataInstallDialog gamedataInstallDialog ;
2012-11-01 16:19:01 +01:00
2014-07-22 23:30:40 -07:00
static std : : map < int , u32 > currentlyLoadedModules ;
2013-04-21 23:35:57 -07:00
2014-07-22 23:30:40 -07:00
void __UtilityInit ( ) {
2013-03-17 19:01:58 -07:00
currentDialogType = UTILITY_DIALOG_NONE ;
currentDialogActive = false ;
2012-12-24 01:41:15 -08:00
SavedataParam : : Init ( ) ;
2013-04-21 23:35:57 -07:00
currentlyLoadedModules . clear ( ) ;
2012-12-24 01:41:15 -08:00
}
2014-07-22 23:30:40 -07:00
void __UtilityDoState ( PointerWrap & p ) {
auto s = p . Section ( " sceUtility " , 1 , 2 ) ;
if ( ! s ) {
2013-09-14 20:23:03 -07:00
return ;
2014-07-22 23:30:40 -07:00
}
2013-09-14 20:23:03 -07:00
2020-08-09 21:20:42 -07:00
Do ( p , currentDialogType ) ;
Do ( p , currentDialogActive ) ;
2012-12-28 13:36:37 -08:00
saveDialog . DoState ( p ) ;
msgDialog . DoState ( p ) ;
oskDialog . DoState ( p ) ;
netDialog . DoState ( p ) ;
2013-06-17 19:55:43 -04:00
screenshotDialog . DoState ( p ) ;
2013-09-13 23:07:43 +08:00
gamedataInstallDialog . DoState ( p ) ;
2014-07-22 23:30:40 -07:00
if ( s > = 2 ) {
2020-08-09 21:20:42 -07:00
Do ( p , currentlyLoadedModules ) ;
2014-07-22 23:30:40 -07:00
} else {
std : : set < int > oldModules ;
2020-08-09 21:20:42 -07:00
Do ( p , oldModules ) ;
2014-07-22 23:30:40 -07:00
for ( auto it = oldModules . begin ( ) , end = oldModules . end ( ) ; it ! = end ; + + it ) {
currentlyLoadedModules [ * it ] = 0 ;
}
}
2012-12-28 13:36:37 -08:00
}
2014-07-22 23:30:40 -07:00
void __UtilityShutdown ( ) {
2013-05-31 01:07:37 -07:00
saveDialog . Shutdown ( true ) ;
msgDialog . Shutdown ( true ) ;
oskDialog . Shutdown ( true ) ;
netDialog . Shutdown ( true ) ;
2013-06-17 19:55:43 -04:00
screenshotDialog . Shutdown ( true ) ;
2013-09-13 23:07:43 +08:00
gamedataInstallDialog . Shutdown ( true ) ;
2012-11-01 16:19:01 +01:00
}
2014-12-08 04:40:08 -05:00
static int sceUtilitySavedataInitStart ( u32 paramAddr )
2012-11-01 16:19:01 +01:00
{
2013-03-17 19:01:58 -07:00
if ( currentDialogActive & & currentDialogType ! = UTILITY_DIALOG_SAVEDATA )
{
2018-11-27 22:45:51 +08:00
if ( PSP_CoreParameter ( ) . compat . flags ( ) . YugiohSaveFix )
2018-11-26 21:34:00 +08:00
{
2018-11-27 22:45:51 +08:00
WARN_LOG ( SCEUTILITY , " Yugioh Savedata Correction " ) ;
2018-11-26 21:34:00 +08:00
}
else {
WARN_LOG ( SCEUTILITY , " sceUtilitySavedataInitStart(%08x): wrong dialog type " , paramAddr ) ;
return SCE_ERROR_UTILITY_WRONG_TYPE ;
}
2013-03-17 19:01:58 -07:00
}
2014-04-27 13:43:51 +08:00
oldStatus = 100 ;
2013-03-17 19:01:58 -07:00
currentDialogType = UTILITY_DIALOG_SAVEDATA ;
currentDialogActive = true ;
2014-02-01 07:25:41 +08:00
int ret = saveDialog . Init ( paramAddr ) ;
DEBUG_LOG ( SCEUTILITY , " %08x=sceUtilitySavedataInitStart(%08x) " , ret , paramAddr ) ;
return ret ;
2012-11-01 16:19:01 +01:00
}
2014-12-08 04:40:08 -05:00
static int sceUtilitySavedataShutdownStart ( )
2012-11-01 16:19:01 +01:00
{
2013-03-17 19:01:58 -07:00
if ( currentDialogType ! = UTILITY_DIALOG_SAVEDATA )
{
2013-09-07 21:19:21 +02:00
WARN_LOG ( SCEUTILITY , " sceUtilitySavedataShutdownStart(): wrong dialog type " ) ;
2013-03-17 19:01:58 -07:00
return SCE_ERROR_UTILITY_WRONG_TYPE ;
}
2014-04-26 05:29:03 +08:00
2013-03-17 19:01:58 -07:00
currentDialogActive = false ;
2014-02-01 07:25:41 +08:00
int ret = saveDialog . Shutdown ( ) ;
DEBUG_LOG ( SCEUTILITY , " %08x=sceUtilitySavedataShutdownStart() " , ret ) ;
return ret ;
2012-11-01 16:19:01 +01:00
}
2014-12-08 04:40:08 -05:00
static int sceUtilitySavedataGetStatus ( )
2012-11-01 16:19:01 +01:00
{
2013-03-17 19:01:58 -07:00
if ( currentDialogType ! = UTILITY_DIALOG_SAVEDATA )
{
2013-09-07 21:19:21 +02:00
DEBUG_LOG ( SCEUTILITY , " sceUtilitySavedataGetStatus(): wrong dialog type " ) ;
2014-03-15 01:18:35 -07:00
hleEatCycles ( 200 ) ;
2013-03-17 19:01:58 -07:00
return SCE_ERROR_UTILITY_WRONG_TYPE ;
}
2013-03-17 17:49:37 -07:00
int status = saveDialog . GetStatus ( ) ;
2014-04-27 13:43:51 +08:00
if ( oldStatus ! = status ) {
oldStatus = status ;
DEBUG_LOG ( SCEUTILITY , " %08x=sceUtilitySavedataGetStatus() " , status ) ;
}
2014-03-15 01:18:35 -07:00
hleEatCycles ( 200 ) ;
2013-03-17 17:49:37 -07:00
return status ;
2012-12-08 23:39:47 +01:00
}
2014-12-08 04:40:08 -05:00
static int sceUtilitySavedataUpdate ( int animSpeed )
2012-12-08 23:39:47 +01:00
{
2013-03-17 19:01:58 -07:00
if ( currentDialogType ! = UTILITY_DIALOG_SAVEDATA )
{
2014-04-26 05:29:03 +08:00
WARN_LOG ( SCEUTILITY , " sceUtilitySavedataUpdate(%i): wrong dialog type " , animSpeed ) ;
2013-03-17 19:01:58 -07:00
return SCE_ERROR_UTILITY_WRONG_TYPE ;
}
2014-02-01 07:25:41 +08:00
2013-10-16 18:54:17 +02:00
int result = saveDialog . Update ( animSpeed ) ;
2014-04-26 05:29:03 +08:00
DEBUG_LOG ( SCEUTILITY , " %08x=sceUtilitySavedataUpdate(%i) " , result , animSpeed ) ;
2013-03-17 21:39:06 -07:00
if ( result > = 0 )
return hleDelayResult ( result , " savedata update " , 300 ) ;
return result ;
2012-11-01 16:19:01 +01:00
}
2012-11-22 20:46:22 +00:00
2014-12-08 04:40:08 -05:00
static u32 sceUtilityLoadAvModule ( u32 module )
2012-11-01 16:19:01 +01:00
{
2013-03-09 12:53:53 -08:00
if ( module > 7 )
{
2013-09-07 21:19:21 +02:00
ERROR_LOG_REPORT ( SCEUTILITY , " sceUtilityLoadAvModule(%i): invalid module id " , module ) ;
2013-03-09 12:53:53 -08:00
return SCE_ERROR_AV_MODULE_BAD_ID ;
}
2014-05-14 15:32:15 +08:00
2014-05-29 23:36:36 +08:00
INFO_LOG ( SCEUTILITY , " 0=sceUtilityLoadAvModule(%i) " , module ) ;
2013-03-09 12:53:53 -08:00
return hleDelayResult ( 0 , " utility av module loaded " , 25000 ) ;
2012-12-31 20:43:38 +08:00
}
2014-12-08 04:40:08 -05:00
static u32 sceUtilityUnloadAvModule ( u32 module )
2012-12-31 20:43:38 +08:00
{
2014-05-14 15:32:15 +08:00
INFO_LOG ( SCEUTILITY , " 0=sceUtilityUnloadAvModule(%i) " , module ) ;
2013-03-09 12:53:53 -08:00
return hleDelayResult ( 0 , " utility av module unloaded " , 800 ) ;
2012-11-01 16:19:01 +01:00
}
2016-04-18 20:17:49 -07:00
static const ModuleLoadInfo * __UtilityModuleInfo ( int module ) {
2014-07-22 23:30:40 -07:00
const ModuleLoadInfo * info = 0 ;
for ( size_t i = 0 ; i < ARRAY_SIZE ( moduleLoadInfo ) ; + + i ) {
if ( moduleLoadInfo [ i ] . mod = = module ) {
info = & moduleLoadInfo [ i ] ;
break ;
}
}
return info ;
}
static u32 sceUtilityLoadModule ( u32 module ) {
const ModuleLoadInfo * info = __UtilityModuleInfo ( module ) ;
if ( ! info ) {
2016-04-18 20:17:49 -07:00
return hleReportError ( SCEUTILITY , SCE_ERROR_MODULE_BAD_ID , " invalid module id " ) ;
2013-03-07 22:25:07 -08:00
}
2014-07-22 23:30:40 -07:00
if ( currentlyLoadedModules . find ( module ) ! = currentlyLoadedModules . end ( ) ) {
2016-04-18 20:17:49 -07:00
return hleLogError ( SCEUTILITY , SCE_ERROR_MODULE_ALREADY_LOADED , " already loaded " ) ;
2013-04-21 23:35:57 -07:00
}
2014-07-22 23:30:40 -07:00
// Some games, like Kamen Rider Climax Heroes OOO, require an error if dependencies aren't loaded yet.
2016-04-18 20:08:07 -07:00
for ( const int * dep = info - > dependencies ; * dep ! = 0 ; + + dep ) {
2014-07-22 23:30:40 -07:00
if ( currentlyLoadedModules . find ( * dep ) = = currentlyLoadedModules . end ( ) ) {
2016-04-18 20:19:27 -07:00
u32 result = hleLogError ( SCEUTILITY , SCE_KERNEL_ERROR_LIBRARY_NOTFOUND , " dependent module %04x not loaded " , * dep ) ;
2016-04-18 20:17:49 -07:00
return hleDelayResult ( result , " utility module load attempt " , 25000 ) ;
2014-07-22 23:30:40 -07:00
}
2013-10-22 21:08:36 +08:00
}
2014-07-22 23:30:40 -07:00
u32 allocSize = info - > size ;
char name [ 64 ] ;
snprintf ( name , sizeof ( name ) , " UtilityModule/%x " , module ) ;
2015-10-18 12:53:18 -07:00
if ( allocSize ! = 0 ) {
currentlyLoadedModules [ module ] = userMemory . Alloc ( allocSize , false , name ) ;
} else {
currentlyLoadedModules [ module ] = 0 ;
}
2013-10-22 21:08:36 +08:00
2014-07-22 23:30:40 -07:00
// TODO: Each module has its own timing, technically, but this is a low-end.
2013-03-07 22:25:07 -08:00
if ( module = = 0x3FF )
2016-04-18 20:17:49 -07:00
return hleDelayResult ( hleLogSuccessInfoI ( SCEUTILITY , 0 ) , " utility module loaded " , 130 ) ;
2013-03-07 22:25:07 -08:00
else
2016-04-18 20:17:49 -07:00
return hleDelayResult ( hleLogSuccessInfoI ( SCEUTILITY , 0 ) , " utility module loaded " , 25000 ) ;
2012-12-31 20:43:38 +08:00
}
2014-07-22 23:30:40 -07:00
static u32 sceUtilityUnloadModule ( u32 module ) {
const ModuleLoadInfo * info = __UtilityModuleInfo ( module ) ;
if ( ! info ) {
2016-04-18 20:17:49 -07:00
return hleReportError ( SCEUTILITY , SCE_ERROR_MODULE_BAD_ID , " invalid module id " ) ;
2013-03-07 22:25:07 -08:00
}
2014-07-22 23:30:40 -07:00
if ( currentlyLoadedModules . find ( module ) = = currentlyLoadedModules . end ( ) ) {
2016-04-18 20:17:49 -07:00
return hleLogWarning ( SCEUTILITY , SCE_ERROR_MODULE_NOT_LOADED , " not yet loaded " ) ;
2013-04-21 23:35:57 -07:00
}
2014-07-22 23:30:40 -07:00
if ( currentlyLoadedModules [ module ] ! = 0 ) {
userMemory . Free ( currentlyLoadedModules [ module ] ) ;
}
2013-04-21 23:35:57 -07:00
currentlyLoadedModules . erase ( module ) ;
2013-03-07 22:25:07 -08:00
// TODO: Each module has its own timing, technically, but this is a low-end.
if ( module = = 0x3FF )
2016-04-18 20:17:49 -07:00
return hleDelayResult ( hleLogSuccessInfoI ( SCEUTILITY , 0 ) , " utility module unloaded " , 110 ) ;
2013-03-07 22:25:07 -08:00
else
2016-04-18 20:17:49 -07:00
return hleDelayResult ( hleLogSuccessInfoI ( SCEUTILITY , 0 ) , " utility module unloaded " , 400 ) ;
2012-11-01 16:19:01 +01:00
}
2014-12-08 04:40:08 -05:00
static int sceUtilityMsgDialogInitStart ( u32 paramAddr )
2012-11-01 16:19:01 +01:00
{
2013-03-17 19:01:58 -07:00
if ( currentDialogActive & & currentDialogType ! = UTILITY_DIALOG_MSG )
{
2014-04-26 05:29:03 +08:00
WARN_LOG ( SCEUTILITY , " sceUtilityMsgDialogInitStart(%08x): wrong dialog type " , paramAddr ) ;
2013-03-17 19:01:58 -07:00
return SCE_ERROR_UTILITY_WRONG_TYPE ;
}
2014-04-26 05:29:03 +08:00
2014-04-27 13:43:51 +08:00
oldStatus = 100 ;
2013-03-17 19:01:58 -07:00
currentDialogType = UTILITY_DIALOG_MSG ;
currentDialogActive = true ;
2014-04-26 05:29:03 +08:00
int ret = msgDialog . Init ( paramAddr ) ;
INFO_LOG ( SCEUTILITY , " %08x=sceUtilityMsgDialogInitStart(%08x) " , ret , paramAddr ) ;
2014-02-01 07:25:41 +08:00
return ret ;
2012-11-01 16:19:01 +01:00
}
2014-12-08 04:40:08 -05:00
static int sceUtilityMsgDialogShutdownStart ( )
2012-11-01 16:19:01 +01:00
{
2013-03-17 19:01:58 -07:00
if ( currentDialogType ! = UTILITY_DIALOG_MSG )
{
2013-09-07 21:19:21 +02:00
WARN_LOG ( SCEUTILITY , " sceUtilityMsgDialogShutdownStart(): wrong dialog type " ) ;
2013-03-17 19:01:58 -07:00
return SCE_ERROR_UTILITY_WRONG_TYPE ;
}
2014-04-26 05:29:03 +08:00
2013-03-17 19:01:58 -07:00
currentDialogActive = false ;
2014-02-01 07:25:41 +08:00
int ret = msgDialog . Shutdown ( ) ;
2014-04-26 05:29:03 +08:00
DEBUG_LOG ( SCEUTILITY , " %08x=sceUtilityMsgDialogShutdownStart() " , ret ) ;
2014-02-01 07:25:41 +08:00
return ret ;
2012-11-01 16:19:01 +01:00
}
2014-12-08 04:40:08 -05:00
static int sceUtilityMsgDialogUpdate ( int animSpeed )
2012-11-01 16:19:01 +01:00
{
2013-03-17 19:01:58 -07:00
if ( currentDialogType ! = UTILITY_DIALOG_MSG )
{
2014-04-26 05:29:03 +08:00
WARN_LOG ( SCEUTILITY , " sceUtilityMsgDialogUpdate(%i): wrong dialog type " , animSpeed ) ;
2013-03-17 19:01:58 -07:00
return SCE_ERROR_UTILITY_WRONG_TYPE ;
}
2014-04-26 05:29:03 +08:00
2014-02-01 07:25:41 +08:00
int ret = msgDialog . Update ( animSpeed ) ;
2014-04-26 05:29:03 +08:00
DEBUG_LOG ( SCEUTILITY , " %08x=sceUtilityMsgDialogUpdate(%i) " , ret , animSpeed ) ;
2014-09-27 00:13:27 -07:00
if ( ret > = 0 )
return hleDelayResult ( ret , " msgdialog update " , 800 ) ;
2014-02-01 07:25:41 +08:00
return ret ;
2012-11-01 16:19:01 +01:00
}
2014-12-08 04:40:08 -05:00
static int sceUtilityMsgDialogGetStatus ( )
2012-11-01 16:19:01 +01:00
{
2013-03-17 19:01:58 -07:00
if ( currentDialogType ! = UTILITY_DIALOG_MSG )
{
2013-09-07 21:19:21 +02:00
DEBUG_LOG ( SCEUTILITY , " sceUtilityMsgDialogGetStatus(): wrong dialog type " ) ;
2013-03-17 19:01:58 -07:00
return SCE_ERROR_UTILITY_WRONG_TYPE ;
}
int status = msgDialog . GetStatus ( ) ;
2014-04-27 13:43:51 +08:00
if ( oldStatus ! = status ) {
oldStatus = status ;
DEBUG_LOG ( SCEUTILITY , " %08x=sceUtilityMsgDialogGetStatus() " , status ) ;
}
2013-03-17 19:01:58 -07:00
return status ;
2012-11-01 16:19:01 +01:00
}
2014-12-08 04:40:08 -05:00
static int sceUtilityMsgDialogAbort ( )
2013-03-30 22:54:00 -07:00
{
if ( currentDialogType ! = UTILITY_DIALOG_MSG )
{
2014-01-22 08:17:21 -08:00
WARN_LOG ( SCEUTILITY , " sceUtilityMsgDialogAbort(): wrong dialog type " ) ;
2013-03-30 22:54:00 -07:00
return SCE_ERROR_UTILITY_WRONG_TYPE ;
}
2014-04-26 05:29:03 +08:00
2014-02-01 07:25:41 +08:00
int ret = msgDialog . Abort ( ) ;
2014-04-26 05:29:03 +08:00
DEBUG_LOG ( SCEUTILITY , " %08x=sceUtilityMsgDialogAbort() " , ret ) ;
2014-02-01 07:25:41 +08:00
return ret ;
2013-03-30 22:54:00 -07:00
}
2012-11-18 13:04:49 +01:00
// On screen keyboard
2014-12-08 04:40:08 -05:00
static int sceUtilityOskInitStart ( u32 oskPtr )
2012-11-01 16:19:01 +01:00
{
2013-03-17 19:01:58 -07:00
if ( currentDialogActive & & currentDialogType ! = UTILITY_DIALOG_OSK )
{
2013-09-07 21:19:21 +02:00
WARN_LOG ( SCEUTILITY , " sceUtilityOskInitStart(%08x): wrong dialog type " , oskPtr ) ;
2013-03-17 19:01:58 -07:00
return SCE_ERROR_UTILITY_WRONG_TYPE ;
}
2014-04-26 05:29:03 +08:00
2014-04-27 13:43:51 +08:00
oldStatus = 100 ;
2013-03-17 19:01:58 -07:00
currentDialogType = UTILITY_DIALOG_OSK ;
currentDialogActive = true ;
2014-02-01 07:25:41 +08:00
int ret = oskDialog . Init ( oskPtr ) ;
2014-02-09 06:54:12 +08:00
INFO_LOG ( SCEUTILITY , " %08x=sceUtilityOskInitStart(%08x) " , ret , oskPtr ) ;
2014-02-01 07:25:41 +08:00
return ret ;
2012-11-01 16:19:01 +01:00
}
2014-12-08 04:40:08 -05:00
static int sceUtilityOskShutdownStart ( )
2012-11-01 16:19:01 +01:00
{
2013-03-17 19:01:58 -07:00
if ( currentDialogType ! = UTILITY_DIALOG_OSK )
{
2013-09-07 21:19:21 +02:00
WARN_LOG ( SCEUTILITY , " sceUtilityOskShutdownStart(): wrong dialog type " ) ;
2013-03-17 19:01:58 -07:00
return SCE_ERROR_UTILITY_WRONG_TYPE ;
}
2014-04-26 05:29:03 +08:00
2013-03-17 19:01:58 -07:00
currentDialogActive = false ;
2014-02-01 07:25:41 +08:00
int ret = oskDialog . Shutdown ( ) ;
DEBUG_LOG ( SCEUTILITY , " %08x=sceUtilityOskShutdownStart() " , ret ) ;
return ret ;
2012-11-01 16:19:01 +01:00
}
2014-12-08 04:40:08 -05:00
static int sceUtilityOskUpdate ( int animSpeed )
2012-11-01 16:19:01 +01:00
{
2013-03-17 19:01:58 -07:00
if ( currentDialogType ! = UTILITY_DIALOG_OSK )
{
2014-04-26 05:29:03 +08:00
WARN_LOG ( SCEUTILITY , " sceUtilityOskUpdate(%i): wrong dialog type " , animSpeed ) ;
2013-03-17 19:01:58 -07:00
return SCE_ERROR_UTILITY_WRONG_TYPE ;
}
2014-04-26 05:29:03 +08:00
2014-02-01 07:25:41 +08:00
int ret = oskDialog . Update ( animSpeed ) ;
2014-04-26 05:29:03 +08:00
DEBUG_LOG ( SCEUTILITY , " %08x=sceUtilityOskUpdate(%i) " , ret , animSpeed ) ;
2014-02-01 07:25:41 +08:00
return ret ;
2012-11-01 16:19:01 +01:00
}
2014-12-08 04:40:08 -05:00
static int sceUtilityOskGetStatus ( )
2012-11-01 16:19:01 +01:00
{
2013-03-17 19:01:58 -07:00
if ( currentDialogType ! = UTILITY_DIALOG_OSK )
{
2013-09-07 21:19:21 +02:00
DEBUG_LOG ( SCEUTILITY , " sceUtilityOskGetStatus(): wrong dialog type " ) ;
2013-03-17 19:01:58 -07:00
return SCE_ERROR_UTILITY_WRONG_TYPE ;
}
2012-12-25 15:28:34 +01:00
int status = oskDialog . GetStatus ( ) ;
2014-04-27 13:43:51 +08:00
if ( oldStatus ! = status ) {
oldStatus = status ;
DEBUG_LOG ( SCEUTILITY , " %08x=sceUtilityOskGetStatus() " , status ) ;
}
2012-12-15 17:13:58 +00:00
return status ;
2012-11-01 16:19:01 +01:00
}
2020-03-15 12:22:21 -07:00
static int sceUtilityNetconfInitStart ( u32 paramsAddr ) {
2013-10-13 10:43:49 +08:00
if ( currentDialogActive & & currentDialogType ! = UTILITY_DIALOG_NET ) {
2020-03-15 12:22:21 -07:00
return hleLogWarning ( SCEUTILITY , SCE_ERROR_UTILITY_WRONG_TYPE , " wrong dialog type " ) ;
2013-10-13 10:43:49 +08:00
}
2014-04-26 05:29:03 +08:00
2014-04-27 13:43:51 +08:00
oldStatus = 100 ;
2013-10-13 10:43:49 +08:00
currentDialogType = UTILITY_DIALOG_NET ;
2020-03-15 12:22:21 -07:00
currentDialogActive = true ;
return hleLogSuccessInfoI ( SCEUTILITY , netDialog . Init ( paramsAddr ) ) ;
2012-11-06 19:22:14 +01:00
}
2020-03-15 12:22:21 -07:00
static int sceUtilityNetconfShutdownStart ( ) {
2013-10-13 10:43:49 +08:00
if ( currentDialogType ! = UTILITY_DIALOG_NET ) {
2020-03-15 12:22:21 -07:00
return hleLogWarning ( SCEUTILITY , SCE_ERROR_UTILITY_WRONG_TYPE , " wrong dialog type " ) ;
2013-10-13 10:43:49 +08:00
}
2014-04-26 05:29:03 +08:00
2013-10-13 10:43:49 +08:00
currentDialogActive = false ;
2020-03-15 12:22:21 -07:00
return hleLogSuccessI ( SCEUTILITY , netDialog . Shutdown ( ) ) ;
2012-11-06 19:22:14 +01:00
}
2020-03-15 12:22:21 -07:00
static int sceUtilityNetconfUpdate ( int animSpeed ) {
if ( currentDialogType ! = UTILITY_DIALOG_NET ) {
return hleLogWarning ( SCEUTILITY , SCE_ERROR_UTILITY_WRONG_TYPE , " wrong dialog type " ) ;
}
return hleLogSuccessI ( SCEUTILITY , netDialog . Update ( animSpeed ) ) ;
2012-11-06 19:22:14 +01:00
}
2020-03-15 12:22:21 -07:00
static int sceUtilityNetconfGetStatus ( ) {
2013-10-13 10:43:49 +08:00
if ( currentDialogType ! = UTILITY_DIALOG_NET ) {
2020-03-15 12:22:21 -07:00
// Spam in Danball Senki BOOST.
return hleLogDebug ( SCEUTILITY , SCE_ERROR_UTILITY_WRONG_TYPE , " wrong dialog type " ) ;
2013-10-13 10:43:49 +08:00
}
int status = netDialog . GetStatus ( ) ;
2014-04-27 13:43:51 +08:00
if ( oldStatus ! = status ) {
oldStatus = status ;
2020-03-15 12:22:21 -07:00
return hleLogSuccessI ( SCEUTILITY , status ) ;
2014-04-27 13:43:51 +08:00
}
2020-03-15 12:22:21 -07:00
return hleLogSuccessVerboseI ( SCEUTILITY , status ) ;
2012-11-06 19:22:14 +01:00
}
2015-03-22 05:42:44 +08:00
static int sceUtilityCheckNetParam ( int id )
{
2015-03-22 05:58:00 +08:00
bool available = ( id > = 0 & & id < = 24 ) ;
int ret = available ? 0 : 0X80110601 ;
2015-03-22 06:01:06 +08:00
DEBUG_LOG ( SCEUTILITY , " %08x=sceUtilityCheckNetParam(%d) " , ret , id ) ;
2015-03-22 05:58:00 +08:00
return ret ;
2015-03-22 05:42:44 +08:00
}
2013-06-12 04:46:06 -04:00
//TODO: Implement all sceUtilityScreenshot* for real, it doesn't seem to be complex
//but it requires more investigation
2014-12-08 04:40:08 -05:00
static int sceUtilityScreenshotInitStart ( u32 paramAddr )
2013-06-12 04:46:06 -04:00
{
2013-08-31 14:34:36 -07:00
if ( currentDialogActive & & currentDialogType ! = UTILITY_DIALOG_SCREENSHOT )
{
2014-03-30 13:57:06 +08:00
WARN_LOG ( SCEUTILITY , " sceUtilityScreenshotInitStart(%08x): wrong dialog type " , paramAddr ) ;
2013-08-31 14:34:36 -07:00
return SCE_ERROR_UTILITY_WRONG_TYPE ;
}
2014-04-26 05:29:03 +08:00
2014-04-27 13:43:51 +08:00
oldStatus = 100 ;
2013-08-31 14:34:36 -07:00
currentDialogType = UTILITY_DIALOG_SCREENSHOT ;
currentDialogActive = true ;
2014-04-28 21:54:52 +08:00
u32 retval = screenshotDialog . Init ( paramAddr ) ;
2014-03-30 13:57:06 +08:00
WARN_LOG_REPORT ( SCEUTILITY , " %08x=sceUtilityScreenshotInitStart(%08x) " , retval , paramAddr ) ;
2013-06-12 05:22:26 -04:00
return retval ;
2013-06-12 04:46:06 -04:00
}
2014-12-08 04:40:08 -05:00
static int sceUtilityScreenshotShutdownStart ( )
2013-06-12 04:46:06 -04:00
{
2013-08-31 14:34:36 -07:00
if ( currentDialogType ! = UTILITY_DIALOG_SCREENSHOT )
{
2013-09-07 21:19:21 +02:00
WARN_LOG ( SCEUTILITY , " sceUtilityScreenshotShutdownStart(): wrong dialog type " ) ;
2013-08-31 14:34:36 -07:00
return SCE_ERROR_UTILITY_WRONG_TYPE ;
}
2014-04-26 05:29:03 +08:00
2013-08-31 14:34:36 -07:00
currentDialogActive = false ;
2014-02-01 07:25:41 +08:00
int ret = screenshotDialog . Shutdown ( ) ;
2014-04-26 05:29:03 +08:00
WARN_LOG ( SCEUTILITY , " %08x=sceUtilityScreenshotShutdownStart() " , ret ) ;
2014-02-01 07:25:41 +08:00
return ret ;
2013-06-12 04:46:06 -04:00
}
2014-12-08 04:40:08 -05:00
static int sceUtilityScreenshotUpdate ( u32 animSpeed )
2013-06-12 04:46:06 -04:00
{
2013-08-31 14:34:36 -07:00
if ( currentDialogType ! = UTILITY_DIALOG_SCREENSHOT )
{
2014-04-26 05:29:03 +08:00
WARN_LOG ( SCEUTILITY , " sceUtilityScreenshotUpdate(%i): wrong dialog type " , animSpeed ) ;
2013-08-31 14:34:36 -07:00
return SCE_ERROR_UTILITY_WRONG_TYPE ;
}
2014-04-26 05:29:03 +08:00
2014-02-01 07:25:41 +08:00
int ret = screenshotDialog . Update ( animSpeed ) ;
2014-04-26 05:29:03 +08:00
WARN_LOG ( SCEUTILITY , " %08x=sceUtilityScreenshotUpdate(%i) " , ret , animSpeed ) ;
2014-02-01 22:45:51 +08:00
return ret ;
2013-06-12 04:46:06 -04:00
}
2014-12-08 04:40:08 -05:00
static int sceUtilityScreenshotGetStatus ( )
2012-12-08 23:39:47 +01:00
{
2013-08-31 14:34:36 -07:00
if ( currentDialogType ! = UTILITY_DIALOG_SCREENSHOT )
{
2013-09-07 21:19:21 +02:00
DEBUG_LOG ( SCEUTILITY , " sceUtilityScreenshotGetStatus(): wrong dialog type " ) ;
2013-08-31 14:34:36 -07:00
return SCE_ERROR_UTILITY_WRONG_TYPE ;
}
2014-04-27 13:43:51 +08:00
int status = screenshotDialog . GetStatus ( ) ;
if ( oldStatus ! = status ) {
oldStatus = status ;
WARN_LOG ( SCEUTILITY , " %08x=sceUtilityScreenshotGetStatus() " , status ) ;
}
2014-04-26 05:29:03 +08:00
return status ;
2012-12-08 23:39:47 +01:00
}
2014-12-08 04:40:08 -05:00
static int sceUtilityScreenshotContStart ( u32 paramAddr )
2014-03-30 14:42:29 +08:00
{
if ( currentDialogType ! = UTILITY_DIALOG_SCREENSHOT )
{
2014-04-26 05:29:03 +08:00
WARN_LOG ( SCEUTILITY , " sceUtilityScreenshotContStart(): wrong dialog type " ) ;
2014-03-30 14:42:29 +08:00
return SCE_ERROR_UTILITY_WRONG_TYPE ;
}
2014-04-26 05:29:03 +08:00
2014-04-27 13:43:51 +08:00
int ret = screenshotDialog . ContStart ( ) ;
2014-03-30 14:42:29 +08:00
WARN_LOG ( SCEUTILITY , " %08x=sceUtilityScreenshotContStart(%08x) " , ret , paramAddr ) ;
return ret ;
}
2014-12-08 04:40:08 -05:00
static int sceUtilityGamedataInstallInitStart ( u32 paramsAddr )
2012-12-19 01:05:45 +01:00
{
2013-09-13 23:07:43 +08:00
if ( currentDialogActive & & currentDialogType ! = UTILITY_DIALOG_GAMEDATAINSTALL )
{
2013-09-13 23:57:31 +08:00
WARN_LOG ( SCEUTILITY , " sceUtilityGamedataInstallInitStart(%08x): wrong dialog type " , paramsAddr ) ;
2013-09-13 23:07:43 +08:00
return SCE_ERROR_UTILITY_WRONG_TYPE ;
}
2014-04-26 05:29:03 +08:00
2013-09-13 23:07:43 +08:00
currentDialogType = UTILITY_DIALOG_GAMEDATAINSTALL ;
2013-09-27 22:52:25 +08:00
currentDialogActive = true ;
2014-02-01 07:25:41 +08:00
int ret = gamedataInstallDialog . Init ( paramsAddr ) ;
2014-02-09 08:01:41 +08:00
INFO_LOG ( SCEUTILITY , " %08x=sceUtilityGamedataInstallInitStart(%08x) " , ret , paramsAddr ) ;
2014-02-01 07:25:41 +08:00
return ret ;
2013-09-13 23:07:43 +08:00
}
2014-12-08 04:40:08 -05:00
static int sceUtilityGamedataInstallShutdownStart ( ) {
2013-09-13 23:07:43 +08:00
if ( currentDialogType ! = UTILITY_DIALOG_GAMEDATAINSTALL )
{
WARN_LOG ( SCEUTILITY , " sceUtilityGamedataInstallShutdownStart(): wrong dialog type " ) ;
return SCE_ERROR_UTILITY_WRONG_TYPE ;
}
2014-04-26 05:29:03 +08:00
2013-09-13 23:07:43 +08:00
currentDialogActive = false ;
DEBUG_LOG ( SCEUTILITY , " sceUtilityGamedataInstallShutdownStart() " ) ;
return gamedataInstallDialog . Shutdown ( ) ;
}
2014-12-08 04:40:08 -05:00
static int sceUtilityGamedataInstallUpdate ( int animSpeed ) {
2013-09-27 22:52:25 +08:00
if ( currentDialogType ! = UTILITY_DIALOG_GAMEDATAINSTALL )
{
2014-04-26 05:29:03 +08:00
WARN_LOG ( SCEUTILITY , " sceUtilityGamedataInstallUpdate(%i): wrong dialog type " , animSpeed ) ;
2013-09-27 22:52:25 +08:00
return SCE_ERROR_UTILITY_WRONG_TYPE ;
}
2014-04-26 05:29:03 +08:00
2014-02-01 07:25:41 +08:00
int ret = gamedataInstallDialog . Update ( animSpeed ) ;
2014-04-26 05:29:03 +08:00
DEBUG_LOG ( SCEUTILITY , " %08x=sceUtilityGamedataInstallUpdate(%i) " , ret , animSpeed ) ;
2014-02-01 07:25:41 +08:00
return ret ;
2012-12-19 01:05:45 +01:00
}
2014-12-08 04:40:08 -05:00
static int sceUtilityGamedataInstallGetStatus ( )
2012-12-08 23:39:47 +01:00
{
2013-09-13 23:07:43 +08:00
if ( currentDialogType ! = UTILITY_DIALOG_GAMEDATAINSTALL )
{
2013-11-06 10:34:56 +01:00
// This is called incorrectly all the time by some games. So let's not bother warning.
// WARN_LOG(SCEUTILITY, "sceUtilityGamedataInstallGetStatus(): wrong dialog type");
2013-09-13 23:07:43 +08:00
return SCE_ERROR_UTILITY_WRONG_TYPE ;
}
int status = gamedataInstallDialog . GetStatus ( ) ;
DEBUG_LOG ( SCEUTILITY , " %08x=sceUtilityGamedataInstallGetStatus() " , status ) ;
return status ;
}
2014-12-08 04:40:08 -05:00
static int sceUtilityGamedataInstallAbort ( )
2013-09-13 23:07:43 +08:00
{
if ( currentDialogType ! = UTILITY_DIALOG_GAMEDATAINSTALL )
{
2014-04-26 05:29:03 +08:00
WARN_LOG ( SCEUTILITY , " sceUtilityGamedataInstallAbort(): wrong dialog type " ) ;
2013-09-13 23:07:43 +08:00
return SCE_ERROR_UTILITY_WRONG_TYPE ;
}
2014-04-26 05:29:03 +08:00
2013-09-13 23:07:43 +08:00
currentDialogActive = false ;
2014-02-01 07:25:41 +08:00
int ret = gamedataInstallDialog . Abort ( ) ;
DEBUG_LOG ( SCEUTILITY , " %08x=sceUtilityGamedataInstallDialogAbort " , ret ) ;
return ret ;
2012-12-08 23:39:47 +01:00
}
2012-12-12 21:08:55 +00:00
//TODO: should save to config file
2014-12-08 04:40:08 -05:00
static u32 sceUtilitySetSystemParamString ( u32 id , u32 strPtr )
2012-12-12 21:08:55 +00:00
{
2013-09-07 21:19:21 +02:00
WARN_LOG_REPORT ( SCEUTILITY , " sceUtilitySetSystemParamString(%i, %08x) " , id , strPtr ) ;
2012-12-12 21:08:55 +00:00
return 0 ;
}
2012-11-14 23:04:40 +00:00
2014-12-08 04:40:08 -05:00
static u32 sceUtilityGetSystemParamString ( u32 id , u32 destaddr , int destSize )
2012-11-14 23:04:40 +00:00
{
2013-09-07 21:19:21 +02:00
DEBUG_LOG ( SCEUTILITY , " sceUtilityGetSystemParamString(%i, %08x, %i) " , id , destaddr , destSize ) ;
2012-11-14 23:04:40 +00:00
char * buf = ( char * ) Memory : : GetPointer ( destaddr ) ;
switch ( id ) {
2012-11-22 20:46:22 +00:00
case PSP_SYSTEMPARAM_ID_STRING_NICKNAME :
2013-04-20 09:30:46 -07:00
// If there's not enough space for the string and null terminator, fail.
if ( destSize < = ( int ) g_Config . sNickName . length ( ) )
return PSP_SYSTEMPARAM_RETVAL_STRING_TOO_LONG ;
strncpy ( buf , g_Config . sNickName . c_str ( ) , destSize ) ;
2012-11-22 20:46:22 +00:00
break ;
2012-11-14 23:04:40 +00:00
2012-11-22 20:46:22 +00:00
default :
return PSP_SYSTEMPARAM_RETVAL_FAIL ;
2012-11-14 23:04:40 +00:00
}
2012-11-06 19:22:14 +01:00
2012-11-14 23:04:40 +00:00
return 0 ;
2012-11-01 16:19:01 +01:00
}
2017-06-06 19:07:11 +02:00
static u32 sceUtilitySetSystemParamInt ( u32 id , u32 value )
2017-04-09 19:58:43 +08:00
{
2017-04-10 20:33:56 +08:00
switch ( id ) {
case PSP_SYSTEMPARAM_ID_INT_ADHOC_CHANNEL :
if ( value ! = 0 & & value ! = 1 & & value ! = 6 & & value ! = 11 ) {
return ERROR_UTILITY_INVALID_ADHOC_CHANNEL ;
}
//Settings.getInstance().writeInt(SYSTEMPARAM_SETTINGS_OPTION_ADHOC_CHANNEL, value);
break ;
case PSP_SYSTEMPARAM_ID_INT_WLAN_POWERSAVE :
// Settings.getInstance().writeInt(SYSTEMPARAM_SETTINGS_OPTION_WLAN_POWER_SAVE, value);
break ;
default :
// PSP can only set above int parameters
return ERROR_UTILITY_INVALID_SYSTEM_PARAM_ID ;
}
2017-04-09 19:58:43 +08:00
return 0 ;
}
2014-12-08 04:40:08 -05:00
static u32 sceUtilityGetSystemParamInt ( u32 id , u32 destaddr )
2012-11-14 23:04:40 +00:00
{
2013-09-07 21:19:21 +02:00
DEBUG_LOG ( SCEUTILITY , " sceUtilityGetSystemParamInt(%i, %08x) " , id , destaddr ) ;
2012-11-27 10:18:36 +01:00
u32 param = 0 ;
2012-11-14 23:04:40 +00:00
switch ( id ) {
2012-11-22 20:46:22 +00:00
case PSP_SYSTEMPARAM_ID_INT_ADHOC_CHANNEL :
2013-04-19 21:59:24 +03:00
param = g_Config . iWlanAdhocChannel ;
2020-09-08 08:34:35 +07:00
if ( param = = PSP_SYSTEMPARAM_ADHOC_CHANNEL_AUTOMATIC ) {
// FIXME: Actually.. it's always returning 0x800ADF4 regardless using Auto channel or Not, and regardless the connection state either,
// Not sure whether this error code only returned after Adhocctl Initialized (ie. netAdhocctlInited) or also before initialized.
// FIXME: Outputted channel (might be unchanged?) either 0 when not connected to a group yet (ie. adhocctlState == ADHOCCTL_STATE_DISCONNECTED),
// or -1 (0xFFFFFFFF) when a scan is in progress (ie. adhocctlState == ADHOCCTL_STATE_SCANNING),
// or 0x60 early when in connected state (ie. adhocctlState == ADHOCCTL_STATE_CONNECTED) right after Creating a group, regardless the channel settings.
Memory : : Write_U32 ( param , destaddr ) ;
return 0x800ADF4 ;
}
2012-11-22 20:46:22 +00:00
break ;
case PSP_SYSTEMPARAM_ID_INT_WLAN_POWERSAVE :
2013-04-19 21:59:24 +03:00
param = g_Config . bWlanPowerSave ? PSP_SYSTEMPARAM_WLAN_POWERSAVE_ON : PSP_SYSTEMPARAM_WLAN_POWERSAVE_OFF ;
2012-11-22 20:46:22 +00:00
break ;
case PSP_SYSTEMPARAM_ID_INT_DATE_FORMAT :
2013-04-19 21:59:24 +03:00
param = g_Config . iDateFormat ;
2012-11-22 20:46:22 +00:00
break ;
case PSP_SYSTEMPARAM_ID_INT_TIME_FORMAT :
2020-07-14 18:59:23 -07:00
if ( g_Config . iTimeFormat = = PSP_SYSTEMPARAM_TIME_FORMAT_12HR )
param = PSP_SYSTEMPARAM_TIME_FORMAT_12HR ;
else
param = PSP_SYSTEMPARAM_TIME_FORMAT_24HR ;
2012-11-22 20:46:22 +00:00
break ;
case PSP_SYSTEMPARAM_ID_INT_TIMEZONE :
2013-04-19 21:59:24 +03:00
param = g_Config . iTimeZone ;
2012-11-22 20:46:22 +00:00
break ;
case PSP_SYSTEMPARAM_ID_INT_DAYLIGHTSAVINGS :
2013-04-19 21:59:24 +03:00
param = g_Config . bDayLightSavings ? PSP_SYSTEMPARAM_DAYLIGHTSAVINGS_SAVING : PSP_SYSTEMPARAM_DAYLIGHTSAVINGS_STD ;
2012-11-22 20:46:22 +00:00
break ;
case PSP_SYSTEMPARAM_ID_INT_LANGUAGE :
2013-09-16 18:08:09 -04:00
param = g_Config . iLanguage ;
2012-11-22 20:46:22 +00:00
break ;
2013-01-20 14:05:01 +08:00
case PSP_SYSTEMPARAM_ID_INT_BUTTON_PREFERENCE :
2013-06-21 09:59:35 +02:00
param = g_Config . iButtonPreference ;
2012-11-22 20:46:22 +00:00
break ;
2013-02-02 01:06:37 +08:00
case PSP_SYSTEMPARAM_ID_INT_LOCK_PARENTAL_LEVEL :
2013-04-20 09:01:03 -07:00
param = g_Config . iLockParentalLevel ;
2013-02-02 01:06:37 +08:00
break ;
2012-11-22 20:46:22 +00:00
default :
return PSP_SYSTEMPARAM_RETVAL_FAIL ;
2012-11-14 23:04:40 +00:00
}
2012-11-27 10:18:36 +01:00
Memory : : Write_U32 ( param , destaddr ) ;
2012-11-14 23:04:40 +00:00
return 0 ;
2012-11-01 16:19:01 +01:00
}
2014-12-08 04:40:08 -05:00
static u32 sceUtilityLoadNetModule ( u32 module )
2012-11-06 18:56:56 +01:00
{
2013-09-07 21:19:21 +02:00
DEBUG_LOG ( SCEUTILITY , " FAKE: sceUtilityLoadNetModule(%i) " , module ) ;
2012-11-06 18:56:56 +01:00
return 0 ;
}
2014-12-08 04:40:08 -05:00
static u32 sceUtilityUnloadNetModule ( u32 module )
2012-12-12 21:08:55 +00:00
{
2013-09-07 21:19:21 +02:00
DEBUG_LOG ( SCEUTILITY , " FAKE: sceUtilityUnloadNetModule(%i) " , module ) ;
2012-12-12 21:08:55 +00:00
return 0 ;
}
2020-03-15 13:04:32 -07:00
static int sceUtilityNpSigninInitStart ( u32 paramsPtr ) {
return hleLogError ( SCEUTILITY , 0 , " not implemented " ) ;
}
static int sceUtilityNpSigninUpdate ( int animSpeed ) {
return hleLogError ( SCEUTILITY , 0 , " not implemented " ) ;
}
static int sceUtilityNpSigninGetStatus ( ) {
return hleLogError ( SCEUTILITY , 0 , " not implemented " ) ;
}
2014-12-08 04:40:08 -05:00
static void sceUtilityInstallInitStart ( u32 unknown )
2012-12-19 01:05:45 +01:00
{
2013-09-07 21:19:21 +02:00
WARN_LOG_REPORT ( SCEUTILITY , " UNIMPL sceUtilityInstallInitStart() " ) ;
2012-12-19 01:05:45 +01:00
}
2014-12-08 04:40:08 -05:00
static int sceUtilityStoreCheckoutShutdownStart ( )
2013-04-29 12:40:09 +09:00
{
2013-09-07 21:19:21 +02:00
ERROR_LOG ( SCEUTILITY , " UNIMPL sceUtilityStoreCheckoutShutdownStart() " ) ;
2013-04-29 12:40:09 +09:00
return 0 ;
}
2014-12-08 04:40:08 -05:00
static int sceUtilityStoreCheckoutInitStart ( u32 paramsPtr )
2013-04-29 12:40:09 +09:00
{
2013-09-07 21:19:21 +02:00
ERROR_LOG_REPORT ( SCEUTILITY , " UNIMPL sceUtilityStoreCheckoutInitStart(%d) " , paramsPtr ) ;
2013-04-29 12:40:09 +09:00
return 0 ;
}
2014-12-08 04:40:08 -05:00
static int sceUtilityStoreCheckoutUpdate ( int drawSpeed )
2013-04-29 12:40:09 +09:00
{
2013-09-07 21:19:21 +02:00
ERROR_LOG ( SCEUTILITY , " UNIMPL sceUtilityStoreCheckoutUpdate(%d) " , drawSpeed ) ;
2013-04-29 12:40:09 +09:00
return 0 ;
}
2014-12-08 04:40:08 -05:00
static int sceUtilityStoreCheckoutGetStatus ( )
2013-04-29 12:40:09 +09:00
{
2013-09-07 21:19:21 +02:00
ERROR_LOG ( SCEUTILITY , " UNIMPL sceUtilityStoreCheckoutGetStatus() " ) ;
2013-04-29 12:40:09 +09:00
return 0 ;
}
2014-12-08 04:40:08 -05:00
static int sceUtilityGameSharingShutdownStart ( )
2013-08-31 14:34:36 -07:00
{
if ( currentDialogType ! = UTILITY_DIALOG_GAMESHARING )
{
2013-09-07 21:19:21 +02:00
WARN_LOG ( SCEUTILITY , " sceUtilityGameSharingShutdownStart(): wrong dialog type " ) ;
2013-08-31 14:34:36 -07:00
return SCE_ERROR_UTILITY_WRONG_TYPE ;
}
2014-04-26 05:29:03 +08:00
2013-08-31 14:34:36 -07:00
currentDialogActive = false ;
2013-09-07 21:19:21 +02:00
ERROR_LOG ( SCEUTILITY , " UNIMPL sceUtilityGameSharingShutdownStart() " ) ;
2013-08-31 14:34:36 -07:00
return 0 ;
}
2014-12-08 04:40:08 -05:00
static int sceUtilityGameSharingInitStart ( u32 paramsPtr )
2013-08-31 14:34:36 -07:00
{
if ( currentDialogActive & & currentDialogType ! = UTILITY_DIALOG_GAMESHARING )
{
2013-09-07 21:19:21 +02:00
WARN_LOG ( SCEUTILITY , " sceUtilityGameSharingInitStart(%08x) " , paramsPtr ) ;
2013-08-31 14:34:36 -07:00
return SCE_ERROR_UTILITY_WRONG_TYPE ;
}
2014-04-26 05:29:03 +08:00
2013-08-31 14:34:36 -07:00
currentDialogType = UTILITY_DIALOG_GAMESHARING ;
currentDialogActive = true ;
2013-09-07 21:19:21 +02:00
ERROR_LOG_REPORT ( SCEUTILITY , " UNIMPL sceUtilityGameSharingInitStart(%08x) " , paramsPtr ) ;
2013-08-31 14:34:36 -07:00
return 0 ;
}
2014-12-08 04:40:08 -05:00
static int sceUtilityGameSharingUpdate ( int animSpeed )
2013-08-31 14:34:36 -07:00
{
if ( currentDialogType ! = UTILITY_DIALOG_GAMESHARING )
{
2014-04-26 05:29:03 +08:00
WARN_LOG ( SCEUTILITY , " sceUtilityGameSharingUpdate(%i): wrong dialog type " , animSpeed ) ;
2013-08-31 14:34:36 -07:00
return SCE_ERROR_UTILITY_WRONG_TYPE ;
}
2014-04-26 05:29:03 +08:00
ERROR_LOG ( SCEUTILITY , " UNIMPL sceUtilityGameSharingUpdate(%i) " , animSpeed ) ;
2013-08-31 14:34:36 -07:00
return 0 ;
}
2014-12-08 04:40:08 -05:00
static int sceUtilityGameSharingGetStatus ( )
2013-08-31 14:34:36 -07:00
{
if ( currentDialogType ! = UTILITY_DIALOG_GAMESHARING )
{
2013-09-07 21:19:21 +02:00
DEBUG_LOG ( SCEUTILITY , " sceUtilityGameSharingGetStatus(): wrong dialog type " ) ;
2013-08-31 14:34:36 -07:00
return SCE_ERROR_UTILITY_WRONG_TYPE ;
}
2013-09-07 21:19:21 +02:00
ERROR_LOG ( SCEUTILITY , " UNIMPL sceUtilityGameSharingGetStatus() " ) ;
2013-08-31 14:34:36 -07:00
return 0 ;
}
2015-03-15 21:08:11 +08:00
static u32 sceUtilityLoadUsbModule ( u32 module )
{
if ( module < 1 | | module > 5 )
{
ERROR_LOG ( SCEUTILITY , " sceUtilityLoadUsbModule(%i): invalid module id " , module ) ;
}
2015-03-15 23:33:32 +08:00
ERROR_LOG_REPORT ( SCEUTILITY , " UNIMPL sceUtilityLoadUsbModule(%i) " , module ) ;
2015-03-15 21:08:11 +08:00
return 0 ;
}
static u32 sceUtilityUnloadUsbModule ( u32 module )
{
if ( module < 1 | | module > 5 )
{
ERROR_LOG ( SCEUTILITY , " sceUtilityUnloadUsbModule(%i): invalid module id " , module ) ;
}
2015-03-15 23:33:32 +08:00
ERROR_LOG_REPORT ( SCEUTILITY , " UNIMPL sceUtilityUnloadUsbModule(%i) " , module ) ;
2015-03-15 21:08:11 +08:00
return 0 ;
}
2012-11-01 16:19:01 +01:00
const HLEFunction sceUtility [ ] =
{
2015-03-22 16:57:56 -07:00
{ 0X1579A159 , & WrapU_U < sceUtilityLoadNetModule > , " sceUtilityLoadNetModule " , ' x ' , " x " } ,
{ 0X64D50C56 , & WrapU_U < sceUtilityUnloadNetModule > , " sceUtilityUnloadNetModule " , ' x ' , " x " } ,
{ 0XF88155F6 , & WrapI_V < sceUtilityNetconfShutdownStart > , " sceUtilityNetconfShutdownStart " , ' i ' , " " } ,
{ 0X4DB1E739 , & WrapI_U < sceUtilityNetconfInitStart > , " sceUtilityNetconfInitStart " , ' i ' , " x " } ,
{ 0X91E70E35 , & WrapI_I < sceUtilityNetconfUpdate > , " sceUtilityNetconfUpdate " , ' i ' , " i " } ,
{ 0X6332AA39 , & WrapI_V < sceUtilityNetconfGetStatus > , " sceUtilityNetconfGetStatus " , ' i ' , " " } ,
{ 0X5EEE6548 , & WrapI_I < sceUtilityCheckNetParam > , " sceUtilityCheckNetParam " , ' i ' , " i " } ,
{ 0X434D4B3A , nullptr , " sceUtilityGetNetParam " , ' ? ' , " " } ,
{ 0X4FED24D8 , nullptr , " sceUtilityGetNetParamLatestID " , ' ? ' , " " } ,
{ 0X67AF3428 , & WrapI_V < sceUtilityMsgDialogShutdownStart > , " sceUtilityMsgDialogShutdownStart " , ' i ' , " " } ,
{ 0X2AD8E239 , & WrapI_U < sceUtilityMsgDialogInitStart > , " sceUtilityMsgDialogInitStart " , ' i ' , " x " } ,
{ 0X95FC253B , & WrapI_I < sceUtilityMsgDialogUpdate > , " sceUtilityMsgDialogUpdate " , ' i ' , " i " } ,
{ 0X9A1C91D7 , & WrapI_V < sceUtilityMsgDialogGetStatus > , " sceUtilityMsgDialogGetStatus " , ' i ' , " " } ,
{ 0X4928BD96 , & WrapI_V < sceUtilityMsgDialogAbort > , " sceUtilityMsgDialogAbort " , ' i ' , " " } ,
{ 0X9790B33C , & WrapI_V < sceUtilitySavedataShutdownStart > , " sceUtilitySavedataShutdownStart " , ' i ' , " " } ,
{ 0X50C4CD57 , & WrapI_U < sceUtilitySavedataInitStart > , " sceUtilitySavedataInitStart " , ' i ' , " x " } ,
{ 0XD4B95FFB , & WrapI_I < sceUtilitySavedataUpdate > , " sceUtilitySavedataUpdate " , ' i ' , " i " } ,
{ 0X8874DBE0 , & WrapI_V < sceUtilitySavedataGetStatus > , " sceUtilitySavedataGetStatus " , ' i ' , " " } ,
{ 0X3DFAEBA9 , & WrapI_V < sceUtilityOskShutdownStart > , " sceUtilityOskShutdownStart " , ' i ' , " " } ,
{ 0XF6269B82 , & WrapI_U < sceUtilityOskInitStart > , " sceUtilityOskInitStart " , ' i ' , " x " } ,
{ 0X4B85C861 , & WrapI_I < sceUtilityOskUpdate > , " sceUtilityOskUpdate " , ' i ' , " i " } ,
{ 0XF3F76017 , & WrapI_V < sceUtilityOskGetStatus > , " sceUtilityOskGetStatus " , ' i ' , " " } ,
{ 0X41E30674 , & WrapU_UU < sceUtilitySetSystemParamString > , " sceUtilitySetSystemParamString " , ' x ' , " xx " } ,
2017-06-06 19:07:11 +02:00
{ 0X45C18506 , & WrapU_UU < sceUtilitySetSystemParamInt > , " sceUtilitySetSystemParamInt " , ' x ' , " xx " } ,
2015-03-22 16:57:56 -07:00
{ 0X34B78343 , & WrapU_UUI < sceUtilityGetSystemParamString > , " sceUtilityGetSystemParamString " , ' x ' , " xxi " } ,
{ 0XA5DA2406 , & WrapU_UU < sceUtilityGetSystemParamInt > , " sceUtilityGetSystemParamInt " , ' x ' , " xx " } ,
{ 0XC492F751 , & WrapI_U < sceUtilityGameSharingInitStart > , " sceUtilityGameSharingInitStart " , ' i ' , " x " } ,
{ 0XEFC6F80F , & WrapI_V < sceUtilityGameSharingShutdownStart > , " sceUtilityGameSharingShutdownStart " , ' i ' , " " } ,
{ 0X7853182D , & WrapI_I < sceUtilityGameSharingUpdate > , " sceUtilityGameSharingUpdate " , ' i ' , " i " } ,
{ 0X946963F3 , & WrapI_V < sceUtilityGameSharingGetStatus > , " sceUtilityGameSharingGetStatus " , ' i ' , " " } ,
{ 0X2995D020 , nullptr , " sceUtilitySavedataErrInitStart " , ' ? ' , " " } ,
{ 0XB62A4061 , nullptr , " sceUtilitySavedataErrShutdownStart " , ' ? ' , " " } ,
{ 0XED0FAD38 , nullptr , " sceUtilitySavedataErrUpdate " , ' ? ' , " " } ,
{ 0X88BC7406 , nullptr , " sceUtilitySavedataErrGetStatus " , ' ? ' , " " } ,
{ 0XBDA7D894 , nullptr , " sceUtilityHtmlViewerGetStatus " , ' ? ' , " " } ,
{ 0XCDC3AA41 , nullptr , " sceUtilityHtmlViewerInitStart " , ' ? ' , " " } ,
{ 0XF5CE1134 , nullptr , " sceUtilityHtmlViewerShutdownStart " , ' ? ' , " " } ,
{ 0X05AFB9E4 , nullptr , " sceUtilityHtmlViewerUpdate " , ' ? ' , " " } ,
{ 0X16A1A8D8 , nullptr , " sceUtilityAuthDialogGetStatus " , ' ? ' , " " } ,
{ 0X943CBA46 , nullptr , " sceUtilityAuthDialogInitStart " , ' ? ' , " " } ,
{ 0X0F3EEAAC , nullptr , " sceUtilityAuthDialogShutdownStart " , ' ? ' , " " } ,
{ 0X147F7C85 , nullptr , " sceUtilityAuthDialogUpdate " , ' ? ' , " " } ,
{ 0XC629AF26 , & WrapU_U < sceUtilityLoadAvModule > , " sceUtilityLoadAvModule " , ' x ' , " x " } ,
{ 0XF7D8D092 , & WrapU_U < sceUtilityUnloadAvModule > , " sceUtilityUnloadAvModule " , ' x ' , " x " } ,
{ 0X2A2B3DE0 , & WrapU_U < sceUtilityLoadModule > , " sceUtilityLoadModule " , ' x ' , " x " } ,
{ 0XE49BFE92 , & WrapU_U < sceUtilityUnloadModule > , " sceUtilityUnloadModule " , ' x ' , " x " } ,
{ 0X0251B134 , & WrapI_U < sceUtilityScreenshotInitStart > , " sceUtilityScreenshotInitStart " , ' i ' , " x " } ,
{ 0XF9E0008C , & WrapI_V < sceUtilityScreenshotShutdownStart > , " sceUtilityScreenshotShutdownStart " , ' i ' , " " } ,
2020-03-15 13:04:32 -07:00
{ 0XAB083EA9 , & WrapI_U < sceUtilityScreenshotUpdate > , " sceUtilityScreenshotUpdate " , ' i ' , " i " } ,
2015-03-22 16:57:56 -07:00
{ 0XD81957B7 , & WrapI_V < sceUtilityScreenshotGetStatus > , " sceUtilityScreenshotGetStatus " , ' i ' , " " } ,
{ 0X86A03A27 , & WrapI_U < sceUtilityScreenshotContStart > , " sceUtilityScreenshotContStart " , ' i ' , " x " } ,
{ 0X0D5BC6D2 , & WrapU_U < sceUtilityLoadUsbModule > , " sceUtilityLoadUsbModule " , ' x ' , " x " } ,
{ 0XF64910F0 , & WrapU_U < sceUtilityUnloadUsbModule > , " sceUtilityUnloadUsbModule " , ' x ' , " x " } ,
{ 0X24AC31EB , & WrapI_U < sceUtilityGamedataInstallInitStart > , " sceUtilityGamedataInstallInitStart " , ' i ' , " x " } ,
{ 0X32E32DCB , & WrapI_V < sceUtilityGamedataInstallShutdownStart > , " sceUtilityGamedataInstallShutdownStart " , ' i ' , " " } ,
{ 0X4AECD179 , & WrapI_I < sceUtilityGamedataInstallUpdate > , " sceUtilityGamedataInstallUpdate " , ' i ' , " i " } ,
{ 0XB57E95D9 , & WrapI_V < sceUtilityGamedataInstallGetStatus > , " sceUtilityGamedataInstallGetStatus " , ' i ' , " " } ,
{ 0X180F7B62 , & WrapI_V < sceUtilityGamedataInstallAbort > , " sceUtilityGamedataInstallAbort " , ' i ' , " " } ,
2020-03-15 13:04:32 -07:00
{ 0X16D02AF0 , & WrapI_U < sceUtilityNpSigninInitStart > , " sceUtilityNpSigninInitStart " , ' i ' , " x " } ,
{ 0XE19C97D6 , nullptr , " sceUtilityNpSigninShutdownStart " , ' i ' , " " } ,
{ 0XF3FBC572 , & WrapI_I < sceUtilityNpSigninUpdate > , " sceUtilityNpSigninUpdate " , ' i ' , " i " } ,
{ 0X86ABDB1B , & WrapI_V < sceUtilityNpSigninGetStatus > , " sceUtilityNpSigninGetStatus " , ' i ' , " " } ,
2015-03-22 16:57:56 -07:00
{ 0X1281DA8E , & WrapV_U < sceUtilityInstallInitStart > , " sceUtilityInstallInitStart " , ' v ' , " x " } ,
{ 0X5EF1C24A , nullptr , " sceUtilityInstallShutdownStart " , ' ? ' , " " } ,
{ 0XA03D29BA , nullptr , " sceUtilityInstallUpdate " , ' ? ' , " " } ,
{ 0XC4700FA3 , nullptr , " sceUtilityInstallGetStatus " , ' ? ' , " " } ,
{ 0X54A5C62F , & WrapI_V < sceUtilityStoreCheckoutShutdownStart > , " sceUtilityStoreCheckoutShutdownStart " , ' i ' , " " } ,
{ 0XDA97F1AA , & WrapI_U < sceUtilityStoreCheckoutInitStart > , " sceUtilityStoreCheckoutInitStart " , ' i ' , " x " } ,
{ 0XB8592D5F , & WrapI_I < sceUtilityStoreCheckoutUpdate > , " sceUtilityStoreCheckoutUpdate " , ' i ' , " i " } ,
{ 0X3AAD51DC , & WrapI_V < sceUtilityStoreCheckoutGetStatus > , " sceUtilityStoreCheckoutGetStatus " , ' i ' , " " } ,
{ 0XD17A0573 , nullptr , " sceUtilityPS3ScanShutdownStart " , ' ? ' , " " } ,
{ 0X42071A83 , nullptr , " sceUtilityPS3ScanInitStart " , ' ? ' , " " } ,
{ 0XD852CDCE , nullptr , " sceUtilityPS3ScanUpdate " , ' ? ' , " " } ,
{ 0X89317C8F , nullptr , " sceUtilityPS3ScanGetStatus " , ' ? ' , " " } ,
{ 0XE1BC175E , nullptr , " sceUtility_E1BC175E " , ' ? ' , " " } ,
{ 0X43E521B7 , nullptr , " sceUtility_43E521B7 " , ' ? ' , " " } ,
{ 0XDB4149EE , nullptr , " sceUtility_DB4149EE " , ' ? ' , " " } ,
{ 0XCFE7C460 , nullptr , " sceUtility_CFE7C460 " , ' ? ' , " " } ,
{ 0XC130D441 , nullptr , " sceUtilityPsnShutdownStart " , ' ? ' , " " } ,
{ 0XA7BB7C67 , nullptr , " sceUtilityPsnInitStart " , ' ? ' , " " } ,
{ 0X0940A1B9 , nullptr , " sceUtilityPsnUpdate " , ' ? ' , " " } ,
{ 0X094198B8 , nullptr , " sceUtilityPsnGetStatus " , ' ? ' , " " } ,
{ 0X9F313D14 , nullptr , " sceUtilityAutoConnectShutdownStart " , ' ? ' , " " } ,
{ 0X3A15CD0A , nullptr , " sceUtilityAutoConnectInitStart " , ' ? ' , " " } ,
{ 0XD23665F4 , nullptr , " sceUtilityAutoConnectUpdate " , ' ? ' , " " } ,
{ 0XD4C2BD73 , nullptr , " sceUtilityAutoConnectGetStatus " , ' ? ' , " " } ,
{ 0X0E0C27AF , nullptr , " sceUtilityAutoConnectAbort " , ' ? ' , " " } ,
{ 0X06A48659 , nullptr , " sceUtilityRssSubscriberShutdownStart " , ' ? ' , " " } ,
{ 0X4B0A8FE5 , nullptr , " sceUtilityRssSubscriberInitStart " , ' ? ' , " " } ,
{ 0XA084E056 , nullptr , " sceUtilityRssSubscriberUpdate " , ' ? ' , " " } ,
{ 0X2B96173B , nullptr , " sceUtilityRssSubscriberGetStatus " , ' ? ' , " " } ,
{ 0X149A7895 , nullptr , " sceUtilityDNASShutdownStart " , ' ? ' , " " } ,
{ 0XDDE5389D , nullptr , " sceUtilityDNASInitStart " , ' ? ' , " " } ,
{ 0X4A833BA4 , nullptr , " sceUtilityDNASUpdate " , ' ? ' , " " } ,
{ 0XA50E5B30 , nullptr , " sceUtilityDNASGetStatus " , ' ? ' , " " } ,
{ 0XE7B778D8 , nullptr , " sceUtilityRssReaderShutdownStart " , ' ? ' , " " } ,
{ 0X81C44706 , nullptr , " sceUtilityRssReaderInitStart " , ' ? ' , " " } ,
{ 0X6F56F9CF , nullptr , " sceUtilityRssReaderUpdate " , ' ? ' , " " } ,
{ 0X8326AB05 , nullptr , " sceUtilityRssReaderGetStatus " , ' ? ' , " " } ,
{ 0XB0FB7FF5 , nullptr , " sceUtilityRssReaderContStart " , ' ? ' , " " } ,
{ 0XBC6B6296 , nullptr , " sceNetplayDialogShutdownStart " , ' ? ' , " " } ,
{ 0X3AD50AE7 , nullptr , " sceNetplayDialogInitStart " , ' ? ' , " " } ,
{ 0X417BED54 , nullptr , " sceNetplayDialogUpdate " , ' ? ' , " " } ,
{ 0XB6CEE597 , nullptr , " sceNetplayDialogGetStatus " , ' ? ' , " " } ,
{ 0X28D35634 , nullptr , " sceUtility_28D35634 " , ' ? ' , " " } ,
{ 0X70267ADF , nullptr , " sceUtility_70267ADF " , ' ? ' , " " } ,
{ 0XECE1D3E5 , nullptr , " sceUtility_ECE1D3E5 " , ' ? ' , " " } ,
{ 0XEF3582B2 , nullptr , " sceUtility_EF3582B2 " , ' ? ' , " " } ,
2012-11-01 16:19:01 +01:00
} ;
void Register_sceUtility ( )
{
RegisterModule ( " sceUtility " , ARRAY_SIZE ( sceUtility ) , sceUtility ) ;
}