2018-12-23 00:16:03 +01:00
# include " stdafx.h "
2014-06-02 19:27:24 +02:00
# include "Emu/System.h"
2016-03-21 20:43:03 +01:00
# include "Emu/IdManager.h"
# include "Emu/Cell/PPUModule.h"
2014-08-23 22:40:04 +02:00
# include "cellSysutil.h"
2014-03-19 16:19:35 +01:00
2016-04-27 00:27:24 +02:00
# include "Utilities/StrUtil.h"
2018-12-31 20:03:30 +01:00
# include "Utilities/lockless.h"
2016-07-27 23:43:22 +02:00
2018-08-25 14:39:00 +02:00
LOG_CHANNEL ( cellSysutil ) ;
2014-01-08 22:16:13 +01:00
2019-01-04 14:45:32 +01:00
template < >
void fmt_class_string < CellSysutilError > : : format ( std : : string & out , u64 arg )
{
format_enum ( out , arg , [ ] ( auto error )
{
switch ( error )
{
STR_CASE ( CELL_SYSUTIL_ERROR_TYPE ) ;
STR_CASE ( CELL_SYSUTIL_ERROR_VALUE ) ;
STR_CASE ( CELL_SYSUTIL_ERROR_SIZE ) ;
STR_CASE ( CELL_SYSUTIL_ERROR_NUM ) ;
STR_CASE ( CELL_SYSUTIL_ERROR_BUSY ) ;
STR_CASE ( CELL_SYSUTIL_ERROR_STATUS ) ;
STR_CASE ( CELL_SYSUTIL_ERROR_MEMORY ) ;
}
return unknown ;
} ) ;
}
2016-07-27 23:43:22 +02:00
struct sysutil_cb_manager
{
2018-12-31 20:03:30 +01:00
struct alignas ( 8 ) registered_cb
2016-08-04 21:13:01 +02:00
{
2018-12-31 20:03:30 +01:00
vm : : ptr < CellSysutilCallback > first ;
vm : : ptr < void > second ;
} ;
2016-08-04 21:13:01 +02:00
2018-12-31 20:03:30 +01:00
atomic_t < registered_cb > callbacks [ 4 ] { } ;
2016-08-04 21:13:01 +02:00
2018-12-31 20:03:30 +01:00
lf_queue < std : : function < s32 ( ppu_thread & ) > > registered ;
2016-07-27 23:43:22 +02:00
} ;
extern void sysutil_register_cb ( std : : function < s32 ( ppu_thread & ) > & & cb )
2016-03-21 20:43:03 +01:00
{
2016-07-27 23:43:22 +02:00
const auto cbm = fxm : : get_always < sysutil_cb_manager > ( ) ;
cbm - > registered . push ( std : : move ( cb ) ) ;
}
extern void sysutil_send_system_cmd ( u64 status , u64 param )
{
if ( const auto cbm = fxm : : get < sysutil_cb_manager > ( ) )
2016-03-21 20:43:03 +01:00
{
2018-12-31 20:03:30 +01:00
for ( sysutil_cb_manager : : registered_cb cb : cbm - > callbacks )
2016-03-21 20:43:03 +01:00
{
if ( cb . first )
{
2016-07-27 23:43:22 +02:00
cbm - > registered . push ( [ = ] ( ppu_thread & ppu ) - > s32
2016-03-21 20:43:03 +01:00
{
// TODO: check it and find the source of the return value (void isn't equal to CELL_OK)
cb . first ( ppu , status , param , cb . second ) ;
return CELL_OK ;
} ) ;
}
}
}
}
2017-05-20 13:45:02 +02:00
template < >
void fmt_class_string < CellSysutilLang > : : format ( std : : string & out , u64 arg )
2016-03-21 20:43:03 +01:00
{
2017-05-20 13:45:02 +02:00
format_enum ( out , arg , [ ] ( CellSysutilLang value )
{
switch ( value )
{
case CELL_SYSUTIL_LANG_JAPANESE : return " Japanese " ;
case CELL_SYSUTIL_LANG_ENGLISH_US : return " English (US) " ;
case CELL_SYSUTIL_LANG_FRENCH : return " French " ;
case CELL_SYSUTIL_LANG_SPANISH : return " Spanish " ;
case CELL_SYSUTIL_LANG_GERMAN : return " German " ;
case CELL_SYSUTIL_LANG_ITALIAN : return " Italian " ;
case CELL_SYSUTIL_LANG_DUTCH : return " Dutch " ;
case CELL_SYSUTIL_LANG_PORTUGUESE_PT : return " Portuguese (PT) " ;
case CELL_SYSUTIL_LANG_RUSSIAN : return " Russian " ;
case CELL_SYSUTIL_LANG_KOREAN : return " Korean " ;
case CELL_SYSUTIL_LANG_CHINESE_T : return " Chinese (Trad.) " ;
case CELL_SYSUTIL_LANG_CHINESE_S : return " Chinese (Simp.) " ;
case CELL_SYSUTIL_LANG_FINNISH : return " Finnish " ;
case CELL_SYSUTIL_LANG_SWEDISH : return " Swedish " ;
case CELL_SYSUTIL_LANG_DANISH : return " Danish " ;
case CELL_SYSUTIL_LANG_NORWEGIAN : return " Norwegian " ;
case CELL_SYSUTIL_LANG_POLISH : return " Polish " ;
case CELL_SYSUTIL_LANG_ENGLISH_GB : return " English (UK) " ;
case CELL_SYSUTIL_LANG_PORTUGUESE_BR : return " Portuguese (BR) " ;
case CELL_SYSUTIL_LANG_TURKISH : return " Turkish " ;
}
return unknown ;
} ) ;
}
2016-03-21 20:43:03 +01:00
2017-05-20 13:45:02 +02:00
template < >
2017-09-12 23:42:00 +02:00
void fmt_class_string < CellSysutilParamId > : : format ( std : : string & out , u64 arg )
2016-04-25 12:49:12 +02:00
{
2016-08-03 22:51:05 +02:00
format_enum ( out , arg , [ ] ( auto value )
2016-04-25 12:49:12 +02:00
{
2016-08-03 22:51:05 +02:00
switch ( value )
2016-05-13 15:55:34 +02:00
{
case CELL_SYSUTIL_SYSTEMPARAM_ID_LANG : return " ID_LANG " ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_ENTER_BUTTON_ASSIGN : return " ID_ENTER_BUTTON_ASSIGN " ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_DATE_FORMAT : return " ID_DATE_FORMAT " ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_TIME_FORMAT : return " ID_TIME_FORMAT " ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_TIMEZONE : return " ID_TIMEZONE " ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_SUMMERTIME : return " ID_SUMMERTIME " ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_GAME_PARENTAL_LEVEL : return " ID_GAME_PARENTAL_LEVEL " ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_GAME_PARENTAL_LEVEL0_RESTRICT : return " ID_GAME_PARENTAL_LEVEL0_RESTRICT " ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_CURRENT_USER_HAS_NP_ACCOUNT : return " ID_CURRENT_USER_HAS_NP_ACCOUNT " ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_CAMERA_PLFREQ : return " ID_CAMERA_PLFREQ " ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_PAD_RUMBLE : return " ID_PAD_RUMBLE " ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_KEYBOARD_TYPE : return " ID_KEYBOARD_TYPE " ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_JAPANESE_KEYBOARD_ENTRY_METHOD : return " ID_JAPANESE_KEYBOARD_ENTRY_METHOD " ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_CHINESE_KEYBOARD_ENTRY_METHOD : return " ID_CHINESE_KEYBOARD_ENTRY_METHOD " ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_PAD_AUTOOFF : return " ID_PAD_AUTOOFF " ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_NICKNAME : return " ID_NICKNAME " ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_CURRENT_USERNAME : return " ID_CURRENT_USERNAME " ;
}
2016-08-03 22:51:05 +02:00
return unknown ;
} ) ;
}
2016-04-25 12:49:12 +02:00
2019-04-05 20:14:01 +02:00
s32 _cellSysutilGetSystemParamInt ( )
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
2017-09-12 23:42:00 +02:00
s32 cellSysutilGetSystemParamInt ( CellSysutilParamId id , vm : : ptr < s32 > value )
2015-07-06 01:21:15 +02:00
{
2016-08-03 22:51:05 +02:00
cellSysutil . warning ( " cellSysutilGetSystemParamInt(id=0x%x(%s), value=*0x%x) " , id , id , value ) ;
2016-03-21 20:43:03 +01:00
// TODO: load this information from config (preferably "sys/" group)
2013-08-19 01:06:11 +02:00
2017-09-12 23:42:00 +02:00
switch ( id )
2013-08-19 01:06:11 +02:00
{
case CELL_SYSUTIL_SYSTEMPARAM_ID_LANG :
2017-05-20 13:45:02 +02:00
* value = g_cfg . sys . language ;
2013-08-19 01:06:11 +02:00
break ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_ENTER_BUTTON_ASSIGN :
2018-10-03 14:18:47 +02:00
* value = g_cfg . sys . enter_button_assignment ;
2013-08-19 01:06:11 +02:00
break ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_DATE_FORMAT :
2014-09-01 02:51:48 +02:00
* value = CELL_SYSUTIL_DATE_FMT_DDMMYYYY ;
2013-08-19 01:06:11 +02:00
break ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_TIME_FORMAT :
2014-09-01 02:51:48 +02:00
* value = CELL_SYSUTIL_TIME_FMT_CLOCK24 ;
2013-08-19 01:06:11 +02:00
break ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_TIMEZONE :
2015-07-06 01:21:15 +02:00
* value = 180 ;
2013-08-19 01:06:11 +02:00
break ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_SUMMERTIME :
2015-07-06 01:21:15 +02:00
* value = 0 ;
2013-08-19 01:06:11 +02:00
break ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_GAME_PARENTAL_LEVEL :
2014-09-01 02:51:48 +02:00
* value = CELL_SYSUTIL_GAME_PARENTAL_OFF ;
2013-08-19 01:06:11 +02:00
break ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_GAME_PARENTAL_LEVEL0_RESTRICT :
2014-09-01 02:51:48 +02:00
* value = CELL_SYSUTIL_GAME_PARENTAL_LEVEL0_RESTRICT_OFF ;
2013-08-19 01:06:11 +02:00
break ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_CURRENT_USER_HAS_NP_ACCOUNT :
2014-09-01 02:51:48 +02:00
* value = 0 ;
2013-08-19 01:06:11 +02:00
break ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_CAMERA_PLFREQ :
2014-09-01 02:51:48 +02:00
* value = CELL_SYSUTIL_CAMERA_PLFREQ_DISABLED ;
2013-08-19 01:06:11 +02:00
break ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_PAD_RUMBLE :
2014-09-01 02:51:48 +02:00
* value = CELL_SYSUTIL_PAD_RUMBLE_OFF ;
2013-08-19 01:06:11 +02:00
break ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_KEYBOARD_TYPE :
2014-09-01 02:51:48 +02:00
* value = 0 ;
2013-08-19 01:06:11 +02:00
break ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_JAPANESE_KEYBOARD_ENTRY_METHOD :
2014-09-01 02:51:48 +02:00
* value = 0 ;
2013-08-19 01:06:11 +02:00
break ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_CHINESE_KEYBOARD_ENTRY_METHOD :
2014-09-01 02:51:48 +02:00
* value = 0 ;
2013-08-19 01:06:11 +02:00
break ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_PAD_AUTOOFF :
2014-09-01 02:51:48 +02:00
* value = 0 ;
2013-08-19 01:06:11 +02:00
break ;
2018-03-02 17:51:21 +01:00
case CELL_SYSUTIL_SYSTEMPARAM_ID_MAGNETOMETER :
* value = 0 ;
break ;
2013-08-19 01:06:11 +02:00
default :
return CELL_EINVAL ;
}
return CELL_OK ;
}
2017-09-12 23:42:00 +02:00
s32 cellSysutilGetSystemParamString ( CellSysutilParamId id , vm : : ptr < char > buf , u32 bufsize )
2013-11-29 05:56:26 +01:00
{
2016-08-03 22:51:05 +02:00
cellSysutil . trace ( " cellSysutilGetSystemParamString(id=0x%x(%s), buf=*0x%x, bufsize=%d) " , id , id , buf , bufsize ) ;
2013-11-29 05:56:26 +01:00
2014-08-31 17:01:48 +02:00
memset ( buf . get_ptr ( ) , 0 , bufsize ) ;
2014-01-14 20:03:48 +01:00
2017-09-12 23:42:00 +02:00
switch ( id )
2013-11-29 05:56:26 +01:00
{
case CELL_SYSUTIL_SYSTEMPARAM_ID_NICKNAME :
2014-08-31 17:01:48 +02:00
memcpy ( buf . get_ptr ( ) , " Unknown " , 8 ) ; // for example
2013-11-29 05:56:26 +01:00
break ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_CURRENT_USERNAME :
2014-08-31 17:01:48 +02:00
memcpy ( buf . get_ptr ( ) , " Unknown " , 8 ) ;
2013-11-29 05:56:26 +01:00
break ;
default :
return CELL_EINVAL ;
}
return CELL_OK ;
}
2018-12-23 00:16:03 +01:00
// Note: the way we do things here is inaccurate(but maybe sufficient)
// The real function goes over a table of 0x20 entries[ event_code:u32 callback_addr:u32 ]
// Those callbacks are registered through cellSysutilRegisterCallbackDispatcher(u32 event_code, vm::ptr<void> func_addr)
// The function goes through all the callback looking for one callback associated with event 0x100, if any is found it is called with parameters r3=0x101 r4=0
// This particular CB seems to be associated with sysutil itself
// Then it checks for events on an event_queue associated with sysutil, checks if any cb is associated with that event and calls them with parameters that come from the event
2018-10-11 00:17:19 +02:00
error_code cellSysutilCheckCallback ( ppu_thread & ppu )
2014-09-11 21:18:19 +02:00
{
2016-01-12 22:57:16 +01:00
cellSysutil . trace ( " cellSysutilCheckCallback() " ) ;
2013-11-16 22:12:30 +01:00
2016-07-27 23:43:22 +02:00
const auto cbm = fxm : : get_always < sysutil_cb_manager > ( ) ;
2019-01-03 16:18:31 +01:00
for ( auto & & func : cbm - > registered . pop_all ( ) )
2014-02-15 22:16:35 +01:00
{
2019-01-03 16:18:31 +01:00
if ( s32 res = func ( ppu ) )
2014-09-11 21:18:19 +02:00
{
2018-12-31 20:03:30 +01:00
// Currently impossible
2018-10-11 00:17:19 +02:00
return not_an_error ( res ) ;
2014-02-16 16:23:58 +01:00
}
2016-08-04 21:13:01 +02:00
2018-10-11 00:17:19 +02:00
if ( ppu . is_stopped ( ) )
{
return 0 ;
}
2014-02-15 22:16:35 +01:00
}
2014-02-01 11:17:15 +01:00
2013-11-16 22:12:30 +01:00
return CELL_OK ;
}
2014-09-11 21:18:19 +02:00
s32 cellSysutilRegisterCallback ( s32 slot , vm : : ptr < CellSysutilCallback > func , vm : : ptr < void > userdata )
2013-11-16 22:12:30 +01:00
{
2016-01-12 22:57:16 +01:00
cellSysutil . warning ( " cellSysutilRegisterCallback(slot=%d, func=*0x%x, userdata=*0x%x) " , slot , func , userdata ) ;
2013-11-16 22:12:30 +01:00
2016-07-27 23:43:22 +02:00
if ( slot > = 4 )
2014-09-11 21:18:19 +02:00
{
return CELL_SYSUTIL_ERROR_VALUE ;
}
2013-11-16 22:12:30 +01:00
2016-07-27 23:43:22 +02:00
const auto cbm = fxm : : get_always < sysutil_cb_manager > ( ) ;
2018-12-31 20:03:30 +01:00
cbm - > callbacks [ slot ] . store ( { func , userdata } ) ;
2016-07-27 23:43:22 +02:00
2013-11-16 22:12:30 +01:00
return CELL_OK ;
}
2016-03-21 20:43:03 +01:00
s32 cellSysutilUnregisterCallback ( u32 slot )
2013-11-16 22:12:30 +01:00
{
2016-01-12 22:57:16 +01:00
cellSysutil . warning ( " cellSysutilUnregisterCallback(slot=%d) " , slot ) ;
2014-02-15 22:16:35 +01:00
2016-07-27 23:43:22 +02:00
if ( slot > = 4 )
2014-09-11 21:18:19 +02:00
{
return CELL_SYSUTIL_ERROR_VALUE ;
}
2013-11-16 22:12:30 +01:00
2016-07-27 23:43:22 +02:00
const auto cbm = fxm : : get_always < sysutil_cb_manager > ( ) ;
2018-12-31 20:03:30 +01:00
cbm - > callbacks [ slot ] . store ( { } ) ;
2016-07-27 23:43:22 +02:00
2013-11-16 22:12:30 +01:00
return CELL_OK ;
}
2018-04-18 16:17:55 +02:00
s32 cellSysCacheClear ( )
2015-07-06 01:21:15 +02:00
{
2018-04-18 16:17:55 +02:00
cellSysutil . warning ( " cellSysCacheClear() " ) ;
// Get the param as a shared ptr, then decipher the cacheid from it
// (Instead of assuming naively that the param is passed as argument)
std : : shared_ptr < CellSysCacheParam > param = fxm : : get < CellSysCacheParam > ( ) ;
// Unit test for param ptr, since it may be null at the time of get()
if ( ! param )
2015-07-31 14:15:52 +02:00
{
return CELL_SYSCACHE_ERROR_NOTMOUNTED ;
}
2018-04-18 16:17:55 +02:00
const std : : string & cache_id = param - > cacheId ;
2018-07-04 13:00:48 +02:00
const std : : string & cache_path = " /dev_hdd1/cache/ " + cache_id ;
2018-04-18 16:17:55 +02:00
const std : : string & dir_path = vfs : : get ( cache_path ) ;
if ( ! fs : : exists ( dir_path ) | | ! fs : : is_dir ( dir_path ) )
{
return CELL_SYSCACHE_ERROR_ACCESS_ERROR ;
}
2014-05-02 08:30:32 +02:00
2018-07-04 15:58:38 +02:00
fs : : remove_all ( dir_path , false ) ;
2015-07-31 14:15:52 +02:00
2014-05-02 08:30:32 +02:00
return CELL_SYSCACHE_RET_OK_CLEARED ;
2014-02-12 19:33:25 +01:00
}
2015-07-06 01:21:15 +02:00
s32 cellSysCacheMount ( vm : : ptr < CellSysCacheParam > param )
2014-02-12 19:33:25 +01:00
{
2016-01-12 22:57:16 +01:00
cellSysutil . warning ( " cellSysCacheMount(param=*0x%x) " , param ) ;
2014-08-05 16:06:40 +02:00
2019-01-12 22:10:44 +01:00
if ( ! param | | ! memchr ( param - > cacheId , ' \0 ' , CELL_SYSCACHE_ID_SIZE ) )
{
return CELL_SYSCACHE_ERROR_PARAM ;
}
2018-03-02 17:51:21 +01:00
2019-01-12 22:10:44 +01:00
const std : : string & cache_id = param - > cacheId ;
2018-07-04 13:00:48 +02:00
const std : : string & cache_path = " /dev_hdd1/cache/ " + cache_id ;
2016-03-21 20:43:03 +01:00
strcpy_trunc ( param - > getCachePath , cache_path ) ;
// TODO: implement (what?)
fxm : : make_always < CellSysCacheParam > ( * param ) ;
2019-01-12 22:10:44 +01:00
if ( ! fs : : create_dir ( vfs : : get ( cache_path ) ) & & ! cache_id . empty ( ) )
2018-07-04 16:01:39 +02:00
{
return CELL_SYSCACHE_RET_OK_RELAYED ;
}
2014-02-12 19:33:25 +01:00
2018-07-04 16:01:39 +02:00
return CELL_SYSCACHE_RET_OK_CLEARED ;
2014-02-12 19:33:25 +01:00
}
2015-07-06 01:21:15 +02:00
bool g_bgm_playback_enabled = true ;
2014-06-09 15:35:35 +02:00
2015-07-06 01:21:15 +02:00
s32 cellSysutilEnableBgmPlayback ( )
2014-06-09 15:35:35 +02:00
{
2016-01-12 22:57:16 +01:00
cellSysutil . warning ( " cellSysutilEnableBgmPlayback() " ) ;
2014-06-09 15:35:35 +02:00
2014-06-27 13:11:56 +02:00
// TODO
2015-07-06 01:21:15 +02:00
g_bgm_playback_enabled = true ;
2014-06-09 18:28:52 +02:00
return CELL_OK ;
}
2015-07-06 01:21:15 +02:00
s32 cellSysutilEnableBgmPlaybackEx ( vm : : ptr < CellSysutilBgmPlaybackExtraParam > param )
2014-06-09 18:28:52 +02:00
{
2016-01-12 22:57:16 +01:00
cellSysutil . warning ( " cellSysutilEnableBgmPlaybackEx(param=*0x%x) " , param ) ;
2014-06-09 18:28:52 +02:00
2014-06-27 13:11:56 +02:00
// TODO
2018-03-02 17:51:21 +01:00
g_bgm_playback_enabled = true ;
2014-06-09 18:28:52 +02:00
return CELL_OK ;
}
2015-07-06 01:21:15 +02:00
s32 cellSysutilDisableBgmPlayback ( )
2014-06-09 18:28:52 +02:00
{
2016-01-12 22:57:16 +01:00
cellSysutil . warning ( " cellSysutilDisableBgmPlayback() " ) ;
2014-06-09 18:28:52 +02:00
2014-06-27 13:11:56 +02:00
// TODO
2015-07-06 01:21:15 +02:00
g_bgm_playback_enabled = false ;
2014-06-09 18:28:52 +02:00
return CELL_OK ;
}
2015-07-06 01:21:15 +02:00
s32 cellSysutilDisableBgmPlaybackEx ( vm : : ptr < CellSysutilBgmPlaybackExtraParam > param )
2014-06-09 18:28:52 +02:00
{
2016-01-12 22:57:16 +01:00
cellSysutil . warning ( " cellSysutilDisableBgmPlaybackEx(param=*0x%x) " , param ) ;
2014-06-09 18:28:52 +02:00
2014-06-27 13:11:56 +02:00
// TODO
2015-07-06 01:21:15 +02:00
g_bgm_playback_enabled = false ;
2014-06-09 18:28:52 +02:00
2014-06-09 15:35:35 +02:00
return CELL_OK ;
}
2015-07-06 01:21:15 +02:00
s32 cellSysutilGetBgmPlaybackStatus ( vm : : ptr < CellSysutilBgmPlaybackStatus > status )
2014-04-04 09:24:28 +02:00
{
2016-01-12 22:57:16 +01:00
cellSysutil . warning ( " cellSysutilGetBgmPlaybackStatus(status=*0x%x) " , status ) ;
2014-04-04 09:24:28 +02:00
2014-06-09 15:35:35 +02:00
// TODO
2014-06-27 13:11:56 +02:00
status - > playerState = CELL_SYSUTIL_BGMPLAYBACK_STATUS_STOP ;
2015-07-06 01:21:15 +02:00
status - > enableState = g_bgm_playback_enabled ? CELL_SYSUTIL_BGMPLAYBACK_STATUS_ENABLE : CELL_SYSUTIL_BGMPLAYBACK_STATUS_DISABLE ;
2014-06-27 13:11:56 +02:00
status - > currentFadeRatio = 0 ; // current volume ratio (0%)
2014-04-04 09:24:28 +02:00
memset ( status - > contentId , 0 , sizeof ( status - > contentId ) ) ;
2014-06-27 13:11:56 +02:00
memset ( status - > reserved , 0 , sizeof ( status - > reserved ) ) ;
2014-04-04 09:24:28 +02:00
return CELL_OK ;
}
2015-07-06 01:21:15 +02:00
s32 cellSysutilGetBgmPlaybackStatus2 ( vm : : ptr < CellSysutilBgmPlaybackStatus2 > status2 )
2014-06-09 18:28:52 +02:00
{
2016-01-12 22:57:16 +01:00
cellSysutil . warning ( " cellSysutilGetBgmPlaybackStatus2(status2=*0x%x) " , status2 ) ;
2014-06-09 18:28:52 +02:00
// TODO
2014-06-27 13:11:56 +02:00
status2 - > playerState = CELL_SYSUTIL_BGMPLAYBACK_STATUS_STOP ;
memset ( status2 - > reserved , 0 , sizeof ( status2 - > reserved ) ) ;
2014-06-09 18:28:52 +02:00
return CELL_OK ;
}
2015-08-01 18:14:49 +02:00
s32 cellSysutilSetBgmPlaybackExtraParam ( )
2014-04-25 07:14:40 +02:00
{
2016-03-21 20:43:03 +01:00
cellSysutil . todo ( " cellSysutilSetBgmPlaybackExtraParam() " ) ;
return CELL_OK ;
2015-08-01 18:14:49 +02:00
}
2014-08-05 16:06:40 +02:00
2015-08-01 18:14:49 +02:00
s32 cellSysutilRegisterCallbackDispatcher ( )
{
2016-08-08 18:01:06 +02:00
fmt : : throw_exception ( " Unimplemented " HERE ) ;
2015-08-01 18:14:49 +02:00
}
2017-02-12 19:03:08 +01:00
s32 cellSysutilUnregisterCallbackDispatcher ( )
{
fmt : : throw_exception ( " Unimplemented " HERE ) ;
}
s32 cellSysutilPacketRead ( )
{
fmt : : throw_exception ( " Unimplemented " HERE ) ;
}
2015-08-01 18:14:49 +02:00
s32 cellSysutilPacketWrite ( )
{
2016-08-08 18:01:06 +02:00
fmt : : throw_exception ( " Unimplemented " HERE ) ;
2015-08-01 18:14:49 +02:00
}
2017-02-12 19:03:08 +01:00
s32 cellSysutilPacketBegin ( )
{
fmt : : throw_exception ( " Unimplemented " HERE ) ;
}
s32 cellSysutilPacketEnd ( )
{
fmt : : throw_exception ( " Unimplemented " HERE ) ;
}
2015-08-01 18:14:49 +02:00
s32 cellSysutilGameDataAssignVmc ( )
{
2016-08-08 18:01:06 +02:00
fmt : : throw_exception ( " Unimplemented " HERE ) ;
2015-08-01 18:14:49 +02:00
}
s32 cellSysutilGameDataExit ( )
{
2016-08-08 18:01:06 +02:00
fmt : : throw_exception ( " Unimplemented " HERE ) ;
2014-04-25 07:14:40 +02:00
}
2015-08-01 18:14:49 +02:00
s32 cellSysutilGameExit_I ( )
{
2016-08-08 18:01:06 +02:00
fmt : : throw_exception ( " Unimplemented " HERE ) ;
2015-08-01 18:14:49 +02:00
}
s32 cellSysutilGamePowerOff_I ( )
{
2016-08-08 18:01:06 +02:00
fmt : : throw_exception ( " Unimplemented " HERE ) ;
2015-08-01 18:14:49 +02:00
}
s32 cellSysutilGameReboot_I ( )
{
2016-08-08 18:01:06 +02:00
fmt : : throw_exception ( " Unimplemented " HERE ) ;
2015-08-01 18:14:49 +02:00
}
2017-04-05 00:12:15 +02:00
s32 cellSysutilSharedMemoryAlloc ( )
{
fmt : : throw_exception ( " Unimplemented " HERE ) ;
}
s32 cellSysutilSharedMemoryFree ( )
{
fmt : : throw_exception ( " Unimplemented " HERE ) ;
}
2019-04-05 20:14:01 +02:00
s32 cellSysutilNotification ( )
{
fmt : : throw_exception ( " Unimplemented " HERE ) ;
}
2017-01-27 02:17:31 +01:00
s32 _ZN4cxml7Element11AppendChildERS0_ ( )
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
s32 _ZN4cxml8DocumentC1Ev ( )
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
s32 _ZN4cxml8DocumentD1Ev ( )
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
2017-07-21 17:41:11 +02:00
s32 _ZN4cxml8Document5ClearEv ( )
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
2017-12-02 21:34:21 +01:00
s32 _ZN4cxml8Document5WriteEPFiPKvjPvES3_ ( )
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
s32 _ZN4cxml8Document12RegisterFileEPKvjPNS_4FileE ( )
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
2017-01-27 02:17:31 +01:00
s32 _ZN4cxml8Document13CreateElementEPKciPNS_7ElementE ( )
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
s32 _ZN4cxml8Document14SetHeaderMagicEPKc ( )
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
s32 _ZN4cxml8Document16CreateFromBufferEPKvjb ( )
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
s32 _ZN4cxml8Document18GetDocumentElementEv ( )
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
s32 _ZNK4cxml4File7GetAddrEv ( )
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
2017-04-05 00:12:15 +02:00
s32 _ZNK4cxml7Element12GetAttributeEPKcPNS_9AttributeE ( )
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
2017-07-21 17:41:11 +02:00
s32 _ZNK4cxml7Element13GetFirstChildEv ( )
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
2017-04-05 00:12:15 +02:00
s32 _ZNK4cxml7Element14GetNextSiblingEv ( )
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
s32 _ZNK4cxml9Attribute6GetIntEPi ( )
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
s32 _ZNK4cxml9Attribute7GetFileEPNS_4FileE ( )
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
2017-01-27 02:17:31 +01:00
s32 _ZN8cxmlutil6SetIntERKN4cxml7ElementEPKci ( )
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
s32 _ZN8cxmlutil6GetIntERKN4cxml7ElementEPKcPi ( )
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
2017-12-02 21:34:21 +01:00
s32 _ZN8cxmlutil7SetFileERKN4cxml7ElementEPKcRKNS0_4FileE ( )
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
2017-07-21 17:41:11 +02:00
s32 _ZN8cxmlutil8GetFloatERKN4cxml7ElementEPKcPf ( )
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
2019-04-05 20:14:01 +02:00
s32 _ZN8cxmlutil8SetFloatERKN4cxml7ElementEPKcf ( )
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
2017-04-05 00:12:15 +02:00
s32 _ZN8cxmlutil9GetStringERKN4cxml7ElementEPKcPS5_Pj ( )
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
2017-01-27 02:17:31 +01:00
s32 _ZN8cxmlutil9SetStringERKN4cxml7ElementEPKcS5_ ( )
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
s32 _ZN8cxmlutil16CheckElementNameERKN4cxml7ElementEPKc ( )
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
s32 _ZN8cxmlutil16FindChildElementERKN4cxml7ElementEPKcS5_S5_ ( )
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
s32 _ZN8cxmlutil7GetFileERKN4cxml7ElementEPKcPNS0_4FileE ( )
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
2017-08-12 23:32:00 +02:00
s32 _ZN16sysutil_cxmlutil11FixedMemory3EndEi ( )
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
s32 _ZN16sysutil_cxmlutil11FixedMemory5BeginEi ( )
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
s32 _ZN16sysutil_cxmlutil11FixedMemory8AllocateEN4cxml14AllocationTypeEPvS3_jPS3_Pj ( )
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
s32 _ZN16sysutil_cxmlutil12PacketWriter5WriteEPKvjPv ( )
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
s32 _ZN16sysutil_cxmlutil12PacketWriterC1EiiRN4cxml8DocumentE ( )
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
2017-02-12 19:03:08 +01:00
s32 cellSysutil_E1EC7B6A ( vm : : ptr < u32 > unk )
{
cellSysutil . todo ( " cellSysutil_E1EC7B6A(unk=*0x%x) " , unk ) ;
* unk = 0 ;
return CELL_OK ;
}
2015-01-05 00:07:46 +01:00
extern void cellSysutil_SaveData_init ( ) ;
2015-04-13 16:05:44 +02:00
extern void cellSysutil_GameData_init ( ) ;
2015-04-15 20:33:44 +02:00
extern void cellSysutil_MsgDialog_init ( ) ;
2015-07-30 03:43:03 +02:00
extern void cellSysutil_OskDialog_init ( ) ;
2015-07-31 01:11:43 +02:00
extern void cellSysutil_Storage_init ( ) ;
2015-08-01 18:14:49 +02:00
extern void cellSysutil_Sysconf_init ( ) ;
extern void cellSysutil_SysutilAvc_init ( ) ;
extern void cellSysutil_WebBrowser_init ( ) ;
extern void cellSysutil_AudioOut_init ( ) ;
extern void cellSysutil_VideoOut_init ( ) ;
2015-01-05 00:07:46 +01:00
2016-03-21 20:43:03 +01:00
DECLARE ( ppu_module_manager : : cellSysutil ) ( " cellSysutil " , [ ] ( )
2014-09-11 21:18:19 +02:00
{
2015-04-13 16:05:44 +02:00
cellSysutil_SaveData_init ( ) ; // cellSaveData functions
cellSysutil_GameData_init ( ) ; // cellGameData, cellHddGame functions
2015-04-15 20:33:44 +02:00
cellSysutil_MsgDialog_init ( ) ; // cellMsgDialog functions
2015-07-30 03:43:03 +02:00
cellSysutil_OskDialog_init ( ) ; // cellOskDialog functions
2015-07-31 01:11:43 +02:00
cellSysutil_Storage_init ( ) ; // cellStorage functions
2015-08-01 18:14:49 +02:00
cellSysutil_Sysconf_init ( ) ; // cellSysconf functions
cellSysutil_SysutilAvc_init ( ) ; // cellSysutilAvc functions
cellSysutil_WebBrowser_init ( ) ; // cellWebBrowser, cellWebComponent functions
cellSysutil_AudioOut_init ( ) ; // cellAudioOut functions
cellSysutil_VideoOut_init ( ) ; // cellVideoOut functions
2015-04-13 16:05:44 +02:00
2019-04-05 20:14:01 +02:00
REG_FUNC ( cellSysutil , _cellSysutilGetSystemParamInt ) ;
2015-02-20 14:58:40 +01:00
REG_FUNC ( cellSysutil , cellSysutilGetSystemParamInt ) ;
REG_FUNC ( cellSysutil , cellSysutilGetSystemParamString ) ;
REG_FUNC ( cellSysutil , cellSysutilCheckCallback ) ;
REG_FUNC ( cellSysutil , cellSysutilRegisterCallback ) ;
REG_FUNC ( cellSysutil , cellSysutilUnregisterCallback ) ;
REG_FUNC ( cellSysutil , cellSysutilGetBgmPlaybackStatus ) ;
REG_FUNC ( cellSysutil , cellSysutilGetBgmPlaybackStatus2 ) ;
REG_FUNC ( cellSysutil , cellSysutilEnableBgmPlayback ) ;
REG_FUNC ( cellSysutil , cellSysutilEnableBgmPlaybackEx ) ;
REG_FUNC ( cellSysutil , cellSysutilDisableBgmPlayback ) ;
REG_FUNC ( cellSysutil , cellSysutilDisableBgmPlaybackEx ) ;
2015-08-01 18:14:49 +02:00
REG_FUNC ( cellSysutil , cellSysutilSetBgmPlaybackExtraParam ) ;
2015-02-20 14:58:40 +01:00
REG_FUNC ( cellSysutil , cellSysCacheMount ) ;
REG_FUNC ( cellSysutil , cellSysCacheClear ) ;
2015-08-01 18:14:49 +02:00
REG_FUNC ( cellSysutil , cellSysutilRegisterCallbackDispatcher ) ;
2017-02-12 19:03:08 +01:00
REG_FUNC ( cellSysutil , cellSysutilUnregisterCallbackDispatcher ) ;
REG_FUNC ( cellSysutil , cellSysutilPacketRead ) ;
2015-08-01 18:14:49 +02:00
REG_FUNC ( cellSysutil , cellSysutilPacketWrite ) ;
2017-02-12 19:03:08 +01:00
REG_FUNC ( cellSysutil , cellSysutilPacketBegin ) ;
REG_FUNC ( cellSysutil , cellSysutilPacketEnd ) ;
2015-02-18 17:22:06 +01:00
2015-08-01 18:14:49 +02:00
REG_FUNC ( cellSysutil , cellSysutilGameDataAssignVmc ) ;
REG_FUNC ( cellSysutil , cellSysutilGameDataExit ) ;
REG_FUNC ( cellSysutil , cellSysutilGameExit_I ) ;
REG_FUNC ( cellSysutil , cellSysutilGamePowerOff_I ) ;
REG_FUNC ( cellSysutil , cellSysutilGameReboot_I ) ;
2017-01-27 02:17:31 +01:00
2017-04-05 00:12:15 +02:00
REG_FUNC ( cellSysutil , cellSysutilSharedMemoryAlloc ) ;
REG_FUNC ( cellSysutil , cellSysutilSharedMemoryFree ) ;
2019-04-05 20:14:01 +02:00
REG_FUNC ( cellSysutil , cellSysutilNotification ) ;
2017-01-27 02:17:31 +01:00
REG_FUNC ( cellSysutil , _ZN4cxml7Element11AppendChildERS0_ ) ;
REG_FUNC ( cellSysutil , _ZN4cxml8DocumentC1Ev ) ;
REG_FUNC ( cellSysutil , _ZN4cxml8DocumentD1Ev ) ;
2017-07-21 17:41:11 +02:00
REG_FUNC ( cellSysutil , _ZN4cxml8Document5ClearEv ) ;
2017-12-02 21:34:21 +01:00
REG_FUNC ( cellSysutil , _ZN4cxml8Document5WriteEPFiPKvjPvES3_ ) ;
REG_FUNC ( cellSysutil , _ZN4cxml8Document12RegisterFileEPKvjPNS_4FileE ) ;
2017-01-27 02:17:31 +01:00
REG_FUNC ( cellSysutil , _ZN4cxml8Document13CreateElementEPKciPNS_7ElementE ) ;
REG_FUNC ( cellSysutil , _ZN4cxml8Document14SetHeaderMagicEPKc ) ;
REG_FUNC ( cellSysutil , _ZN4cxml8Document16CreateFromBufferEPKvjb ) ;
REG_FUNC ( cellSysutil , _ZN4cxml8Document18GetDocumentElementEv ) ;
REG_FUNC ( cellSysutil , _ZNK4cxml4File7GetAddrEv ) ;
2017-04-05 00:12:15 +02:00
REG_FUNC ( cellSysutil , _ZNK4cxml7Element12GetAttributeEPKcPNS_9AttributeE ) ;
2017-07-21 17:41:11 +02:00
REG_FUNC ( cellSysutil , _ZNK4cxml7Element13GetFirstChildEv ) ;
2017-04-05 00:12:15 +02:00
REG_FUNC ( cellSysutil , _ZNK4cxml7Element14GetNextSiblingEv ) ;
REG_FUNC ( cellSysutil , _ZNK4cxml9Attribute6GetIntEPi ) ;
REG_FUNC ( cellSysutil , _ZNK4cxml9Attribute7GetFileEPNS_4FileE ) ;
2017-01-27 02:17:31 +01:00
REG_FUNC ( cellSysutil , _ZN8cxmlutil6SetIntERKN4cxml7ElementEPKci ) ;
REG_FUNC ( cellSysutil , _ZN8cxmlutil6GetIntERKN4cxml7ElementEPKcPi ) ;
2017-12-02 21:34:21 +01:00
REG_FUNC ( cellSysutil , _ZN8cxmlutil7SetFileERKN4cxml7ElementEPKcRKNS0_4FileE ) ;
2017-07-21 17:41:11 +02:00
REG_FUNC ( cellSysutil , _ZN8cxmlutil8GetFloatERKN4cxml7ElementEPKcPf ) ;
2019-04-05 20:14:01 +02:00
REG_FUNC ( cellSysutil , _ZN8cxmlutil8SetFloatERKN4cxml7ElementEPKcf ) ;
2017-04-05 00:12:15 +02:00
REG_FUNC ( cellSysutil , _ZN8cxmlutil9GetStringERKN4cxml7ElementEPKcPS5_Pj ) ;
2017-01-27 02:17:31 +01:00
REG_FUNC ( cellSysutil , _ZN8cxmlutil9SetStringERKN4cxml7ElementEPKcS5_ ) ;
REG_FUNC ( cellSysutil , _ZN8cxmlutil16CheckElementNameERKN4cxml7ElementEPKc ) ;
REG_FUNC ( cellSysutil , _ZN8cxmlutil16FindChildElementERKN4cxml7ElementEPKcS5_S5_ ) ;
REG_FUNC ( cellSysutil , _ZN8cxmlutil7GetFileERKN4cxml7ElementEPKcPNS0_4FileE ) ;
2018-03-02 17:51:21 +01:00
2017-08-12 23:32:00 +02:00
REG_FUNC ( cellSysutil , _ZN16sysutil_cxmlutil11FixedMemory3EndEi ) ;
REG_FUNC ( cellSysutil , _ZN16sysutil_cxmlutil11FixedMemory5BeginEi ) ;
REG_FUNC ( cellSysutil , _ZN16sysutil_cxmlutil11FixedMemory8AllocateEN4cxml14AllocationTypeEPvS3_jPS3_Pj ) ;
REG_FUNC ( cellSysutil , _ZN16sysutil_cxmlutil12PacketWriter5WriteEPKvjPv ) ;
REG_FUNC ( cellSysutil , _ZN16sysutil_cxmlutil12PacketWriterC1EiiRN4cxml8DocumentE ) ;
2018-03-02 17:51:21 +01:00
2017-02-12 19:03:08 +01:00
REG_FNID ( cellSysutil , 0xE1EC7B6A , cellSysutil_E1EC7B6A ) ;
2015-02-18 17:22:06 +01:00
} ) ;