This commit is contained in:
Nekotekina 2014-08-16 19:01:25 +04:00
commit 152c2b87a4
29 changed files with 4610 additions and 1034 deletions

View file

@ -23,7 +23,7 @@ AutoPause::AutoPause(void)
m_pause_syscall.reserve(16);
initialized = false;
//Reload(false, false);
Reload(true, true); //Temporarily use auto enable
Reload();
}
//Notice: I would not allow to write the binary to file in this command.
@ -79,17 +79,11 @@ void AutoPause::Reload(void)
{
LOG_WARNING(HLE, "No Pause ID specified in pause.bin, Auto-Pause would not act.");
}
m_pause_syscall_enable = Ini.DBGAutoPauseSystemCall.GetValue();
m_pause_function_enable = Ini.DBGAutoPauseFunctionCall.GetValue();
initialized = true;
}
void AutoPause::Reload(bool enable_pause_syscall, bool enable_pause_function)
{
Reload();
m_pause_syscall_enable = enable_pause_syscall;
m_pause_function_enable = enable_pause_function;
}
void AutoPause::TryPause(u32 code) {
if (code < 1024)
{

View file

@ -20,8 +20,6 @@ namespace Debug {
public:
static AutoPause& getInstance(void);
void Reload(bool enable_pause_syscall, bool enable_pause_function);
void Reload(void);
void TryPause(u32 code);

View file

@ -15,11 +15,6 @@ extern void cellFont_unload();
extern Module *cellFont;
extern void sys_net_init();
extern Module *sys_net;
extern void sceNpTrophy_unload();
extern void sceNpTrophy_init();
extern Module *sceNpTrophy;
extern void sceNp_init();
extern Module *sceNp;
extern void cellUserInfo_init();
extern Module *cellUserInfo;
extern void cellSysutil_init();
@ -70,6 +65,23 @@ extern void cellVpost_init();
extern Module *cellVpost;
extern void libmixer_init();
extern Module *libmixer;
extern void sceNp_init();
extern Module *sceNp;
extern void sceNpClans_unload();
extern void sceNpClans_init();
extern Module *sceNpClans;
extern void sceNpCommerce2_unload();
extern void sceNpCommerce2_init();
extern Module *sceNpCommerce2;
extern void sceNpSns_unload();
extern void sceNpSns_init();
extern Module *sceNpSns;
extern void sceNpTrophy_unload();
extern void sceNpTrophy_init();
extern Module *sceNpTrophy;
extern void sceNpTus_unload();
extern void sceNpTus_init();
extern Module *sceNpTus;
extern void sysPrxForUser_init();
extern Module *sysPrxForUser;
extern void sys_fs_init();

View file

@ -1471,844 +1471,6 @@ int sceNpLookupUserProfileAsync()
return CELL_OK;
}
int sceNpClansSendInvitationResponse()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpClansUpdateClanInfo()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpClansRetrieveChallenges()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpClansSearchByProfile()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpClansGetMemberInfo()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpClansCancelMembershipRequest()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpClansGetAutoAcceptStatus()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpClansTerm()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpClansDisbandClan()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpClansGetClanInfo()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpClansAddBlacklistEntry()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpClansLeaveClan()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpClansGetBlacklist()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpClansSendMembershipRequest()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpClansRemoveBlacklistEntry()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpClansUpdateAutoAcceptStatus()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpClansGetClanListByNpId()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpClansCancelInvitation()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpClansRetrieveAnnouncements()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpClansPostChallenge()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpClansGetMemberList()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpClansRetrievePostedChallenges()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpClansSendMembershipResponse()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpClansCreateRequest()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpClansInit()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpClansChangeMemberRole()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpClansCreateClan()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpClansKickMember()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpClansSearchByName()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpClansPostAnnouncement()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpClansSendInvitation()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpClansGetClanList()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpClansRemoveChallenge()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpClansRemovePostedChallenge()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpClansDestroyRequest()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpClansJoinClan()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpClansRemoveAnnouncement()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpClansAbortRequest()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpClansUpdateMemberInfo()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpCommerce2DoCheckoutStartAsync()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpCommerce2GetProductInfoListGetResult()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpCommerce2GetContentRatingDescriptor()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpCommerce2GetBGDLAvailability()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpCommerce2GetStoreBrowseUserdata()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpCommerce2DestroyReq()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpCommerce2Init()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpCommerce2GetCategoryContentsStart()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpCommerce2DoDlListFinishAsync()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpCommerce2Term()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpCommerce2CreateSessionAbort()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpCommerce2DoDlListStartAsync()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpCommerce2DestroyCtx()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpCommerce2GetCategoryContentsCreateReq()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpCommerce2AbortReq()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpCommerce2GetProductInfoStart()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpCommerce2CreateSessionFinish()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpCommerce2GetContentInfo()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpCommerce2DoProductBrowseStartAsync()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpCommerce2GetProductInfoListStart()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpCommerce2DestroyGetCategoryContentsResult()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpCommerce2SetBGDLAvailability()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpCommerce2GetProductInfoCreateReq()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpCommerce2DoProductCodeFinishAsync()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpCommerce2GetContentRatingInfoFromCategoryInfo()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpCommerce2DoProductBrowseFinishAsync()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpCommerce2GetCategoryInfo()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpCommerce2GetProductInfoGetResult()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpCommerce2GetCategoryContentsGetResult()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpCommerce2CreateSessionStart()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpCommerce2DoCheckoutFinishAsync()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpCommerce2InitGetCategoryContentsResult()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpCommerce2GetGameProductInfoFromGetProductInfoListResult()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpCommerce2CreateCtx()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpCommerce2GetPrice()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpCommerce2GetGameSkuInfoFromGameProductInfo()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpCommerce2DoProductCodeStartAsync()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpCommerce2InitGetProductInfoListResult()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpCommerce2GetProductInfoListCreateReq()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpCommerce2GetGameProductInfoFromContentInfo()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpCommerce2GetContentRatingInfoFromGameProductInfo()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpCommerce2ExecuteStoreBrowse()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpCommerce2GetGameProductInfo()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpCommerce2DestroyGetProductInfoResult()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpCommerce2DestroyGetProductInfoListResult()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpCommerce2InitGetProductInfoResult()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpCommerce2GetCategoryInfoFromContentInfo()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusDeleteMultiSlotDataVUser()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusGetMultiSlotVariable()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusSetMultiSlotVariableAsync()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusSetDataVUser()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusGetMultiUserVariable()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusTryAndSetVariableVUserAsync()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusCreateTransactionCtx()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusPollAsync()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusAddAndGetVariableAsync()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusTerm()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusGetMultiSlotVariableVUser()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusGetMultiSlotDataStatusVUserAsync()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusGetMultiUserDataStatusVUser()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusDestroyTitleCtx()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusDeleteMultiSlotDataAsync()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusAbortTransaction()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusGetMultiUserDataStatus()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusTryAndSetVariableVUser()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusGetMultiUserDataStatusVUserAsync()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusGetDataVUserAsync()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusDestroyTransactionCtx()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusTryAndSetVariable()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusGetDataAsync()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusSetTimeout()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusGetMultiSlotDataStatusAsync()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusGetMultiUserVariableVUser()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusCreateTitleCtx()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusSetData()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusGetData()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusInit()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusAddAndGetVariable()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusGetMultiUserVariableVUserAsync()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusSetMultiSlotVariableVUserAsync()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusSetDataVUserAsync()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusGetMultiSlotDataStatusVUser()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusAddAndGetVariableVUserAsync()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusGetDataVUser()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusDeleteMultiSlotVariable()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusWaitAsync()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusGetMultiSlotVariableAsync()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusTryAndSetVariableAsync()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusDeleteMultiSlotVariableVUserAsync()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusDeleteMultiSlotVariableVUser()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusGetMultiUserDataStatusAsync()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusDeleteMultiSlotDataVUserAsync()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusGetMultiSlotDataStatus()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusGetMultiUserVariableAsync()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusSetMultiSlotVariable()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusDeleteMultiSlotData()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusSetDataAsync()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusDeleteMultiSlotVariableAsync()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusAddAndGetVariableVUser()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusSetMultiSlotVariableVUser()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpTusGetMultiSlotVariableVUserAsync()
{
UNIMPLEMENTED_FUNC(sceNp);
return CELL_OK;
}
int sceNpUtilBandwidthTestShutdown()
{
UNIMPLEMENTED_FUNC(sceNp);
@ -2562,146 +1724,6 @@ void sceNp_init()
sceNp->AddFunc(0xfd39ae13, sceNpBasicGetFriendPresenceByNpId);
sceNp->AddFunc(0xfe37a7f4, sceNpManagerGetNpId);
sceNp->AddFunc(0xff0a2378, sceNpLookupUserProfileAsync);
sceNp->AddFunc(0x095e12c6, sceNpClansSendInvitationResponse);
sceNp->AddFunc(0x09f9e1a9, sceNpClansUpdateClanInfo);
sceNp->AddFunc(0x0df25834, sceNpClansRetrieveChallenges);
sceNp->AddFunc(0x1221a1bf, sceNpClansSearchByProfile);
sceNp->AddFunc(0x20472da0, sceNpClansGetMemberInfo);
sceNp->AddFunc(0x299ccc9b, sceNpClansCancelMembershipRequest);
sceNp->AddFunc(0x38dadf1f, sceNpClansGetAutoAcceptStatus);
sceNp->AddFunc(0x42332cb7, sceNpClansTerm);
sceNp->AddFunc(0x4826f6d5, sceNpClansDisbandClan);
sceNp->AddFunc(0x487de998, sceNpClansGetClanInfo);
sceNp->AddFunc(0x4d06aef7, sceNpClansAddBlacklistEntry);
sceNp->AddFunc(0x560f717b, sceNpClansLeaveClan);
sceNp->AddFunc(0x56bc5a7c, sceNpClansGetBlacklist);
sceNp->AddFunc(0x59743b2b, sceNpClansSendMembershipRequest);
sceNp->AddFunc(0x5bff9da1, sceNpClansRemoveBlacklistEntry);
sceNp->AddFunc(0x5da94854, sceNpClansUpdateAutoAcceptStatus);
sceNp->AddFunc(0x672399a8, sceNpClansGetClanListByNpId);
sceNp->AddFunc(0x726dffd5, sceNpClansCancelInvitation);
sceNp->AddFunc(0x727aa7f8, sceNpClansRetrieveAnnouncements);
sceNp->AddFunc(0x83d65529, sceNpClansPostChallenge);
sceNp->AddFunc(0x856ff5c0, sceNpClansGetMemberList);
sceNp->AddFunc(0x8e785b97, sceNpClansRetrievePostedChallenges);
sceNp->AddFunc(0x942dbdc4, sceNpClansSendMembershipResponse);
sceNp->AddFunc(0x9a72232d, sceNpClansCreateRequest);
sceNp->AddFunc(0x9b820047, sceNpClansInit);
sceNp->AddFunc(0x9cac2085, sceNpClansChangeMemberRole);
sceNp->AddFunc(0xa6a31a38, sceNpClansCreateClan);
sceNp->AddFunc(0xaa7912b5, sceNpClansKickMember);
sceNp->AddFunc(0xace0cfba, sceNpClansSearchByName);
sceNp->AddFunc(0xada45b84, sceNpClansPostAnnouncement);
sceNp->AddFunc(0xbc05ef31, sceNpClansSendInvitation);
sceNp->AddFunc(0xca4181b4, sceNpClansGetClanList);
sceNp->AddFunc(0xce6dc0f0, sceNpClansRemoveChallenge);
sceNp->AddFunc(0xd3346dc4, sceNpClansRemovePostedChallenge);
sceNp->AddFunc(0xd6551cd1, sceNpClansDestroyRequest);
sceNp->AddFunc(0xdbf300ca, sceNpClansJoinClan);
sceNp->AddFunc(0xe2590f60, sceNpClansRemoveAnnouncement);
sceNp->AddFunc(0xe82969e2, sceNpClansAbortRequest);
sceNp->AddFunc(0xf4a2d52b, sceNpClansUpdateMemberInfo);
sceNp->AddFunc(0x104551a6, sceNpCommerce2DoCheckoutStartAsync);
sceNp->AddFunc(0x146618df, sceNpCommerce2GetProductInfoListGetResult);
sceNp->AddFunc(0x150fdca3, sceNpCommerce2GetContentRatingDescriptor);
sceNp->AddFunc(0x1fa1b312, sceNpCommerce2GetStoreBrowseUserdata);
sceNp->AddFunc(0x2a910f05, sceNpCommerce2DestroyReq);
sceNp->AddFunc(0x3539d233, sceNpCommerce2Init);
sceNp->AddFunc(0x371a2edd, sceNpCommerce2GetCategoryContentsStart);
sceNp->AddFunc(0x3d627d81, sceNpCommerce2GetBGDLAvailability);
sceNp->AddFunc(0x410d42be, sceNpCommerce2DoDlListFinishAsync);
sceNp->AddFunc(0x4d4a094c, sceNpCommerce2Term);
sceNp->AddFunc(0x62023e98, sceNpCommerce2CreateSessionAbort);
sceNp->AddFunc(0x6ca9efd4, sceNpCommerce2DoDlListStartAsync);
sceNp->AddFunc(0x6f67ea80, sceNpCommerce2DestroyCtx);
sceNp->AddFunc(0x7370d8d0, sceNpCommerce2GetCategoryContentsCreateReq);
sceNp->AddFunc(0x8df0057f, sceNpCommerce2AbortReq);
sceNp->AddFunc(0x8f46325b, sceNpCommerce2GetProductInfoStart);
sceNp->AddFunc(0x91f8843d, sceNpCommerce2CreateSessionFinish);
sceNp->AddFunc(0x972ab46c, sceNpCommerce2GetContentInfo);
sceNp->AddFunc(0x9825a0fc, sceNpCommerce2DoProductBrowseStartAsync);
sceNp->AddFunc(0x9cde07cc, sceNpCommerce2GetProductInfoListStart);
sceNp->AddFunc(0x9d9cb96b, sceNpCommerce2DestroyGetCategoryContentsResult);
sceNp->AddFunc(0xa5a863fe, sceNpCommerce2SetBGDLAvailability);
sceNp->AddFunc(0xa975ebb4, sceNpCommerce2GetProductInfoCreateReq);
sceNp->AddFunc(0xa9f945b3, sceNpCommerce2DoProductCodeFinishAsync);
sceNp->AddFunc(0xac78c1f3, sceNpCommerce2GetContentRatingInfoFromCategoryInfo);
sceNp->AddFunc(0xb23e3bd1, sceNpCommerce2DoProductBrowseFinishAsync);
sceNp->AddFunc(0xbd49eab2, sceNpCommerce2GetCategoryInfo);
sceNp->AddFunc(0xbf5f58ea, sceNpCommerce2GetProductInfoGetResult);
sceNp->AddFunc(0xca0ea996, sceNpCommerce2GetCategoryContentsGetResult);
sceNp->AddFunc(0xcc18cd2c, sceNpCommerce2CreateSessionStart);
sceNp->AddFunc(0xd43a130e, sceNpCommerce2DoCheckoutFinishAsync);
sceNp->AddFunc(0xd8a473a3, sceNpCommerce2InitGetCategoryContentsResult);
sceNp->AddFunc(0xd9956ce7, sceNpCommerce2GetGameProductInfoFromGetProductInfoListResult);
sceNp->AddFunc(0xd9fdcec2, sceNpCommerce2CreateCtx);
sceNp->AddFunc(0xda8e322d, sceNpCommerce2GetPrice);
sceNp->AddFunc(0xdb19194c, sceNpCommerce2GetGameSkuInfoFromGameProductInfo);
sceNp->AddFunc(0xde7ab33d, sceNpCommerce2DoProductCodeStartAsync);
sceNp->AddFunc(0xe0f90e44, sceNpCommerce2InitGetProductInfoListResult);
sceNp->AddFunc(0xe1e7b5ac, sceNpCommerce2GetProductInfoListCreateReq);
sceNp->AddFunc(0xe51a4944, sceNpCommerce2GetGameProductInfoFromContentInfo);
sceNp->AddFunc(0xec324c8f, sceNpCommerce2GetContentRatingInfoFromGameProductInfo);
sceNp->AddFunc(0xeef51be0, sceNpCommerce2ExecuteStoreBrowse);
sceNp->AddFunc(0xef645654, sceNpCommerce2GetGameProductInfo);
sceNp->AddFunc(0xef8eafcd, sceNpCommerce2DestroyGetProductInfoResult);
sceNp->AddFunc(0xf6139b58, sceNpCommerce2DestroyGetProductInfoListResult);
sceNp->AddFunc(0xf798f5e3, sceNpCommerce2InitGetProductInfoResult);
sceNp->AddFunc(0xfc216890, sceNpCommerce2GetCategoryInfoFromContentInfo);
sceNp->AddFunc(0x01711e81, sceNpTusDeleteMultiSlotDataVUser);
sceNp->AddFunc(0x0423e622, sceNpTusGetMultiSlotVariable);
sceNp->AddFunc(0x065b610d, sceNpTusSetMultiSlotVariableAsync);
sceNp->AddFunc(0x0835deb2, sceNpTusSetDataVUser);
sceNp->AddFunc(0x0d15043b, sceNpTusGetMultiUserVariable);
sceNp->AddFunc(0x17db7aa7, sceNpTusTryAndSetVariableVUserAsync);
sceNp->AddFunc(0x1904435e, sceNpTusCreateTransactionCtx);
sceNp->AddFunc(0x19bce18c, sceNpTusPollAsync);
sceNp->AddFunc(0x1fa5c87d, sceNpTusAddAndGetVariableAsync);
sceNp->AddFunc(0x225aed26, sceNpTusTerm);
sceNp->AddFunc(0x2357ba9e, sceNpTusGetMultiSlotVariableVUser);
sceNp->AddFunc(0x2ab21ea9, sceNpTusGetMultiSlotDataStatusVUserAsync);
sceNp->AddFunc(0x2d1b9f1a, sceNpTusGetMultiUserDataStatusVUser);
sceNp->AddFunc(0x2e162a62, sceNpTusDestroyTitleCtx);
sceNp->AddFunc(0x3175af23, sceNpTusDeleteMultiSlotDataAsync);
sceNp->AddFunc(0x325c6284, sceNpTusAbortTransaction);
sceNp->AddFunc(0x348dbcb4, sceNpTusGetMultiUserDataStatus);
sceNp->AddFunc(0x3602bc80, sceNpTusTryAndSetVariableVUser);
sceNp->AddFunc(0x368fec59, sceNpTusGetMultiUserDataStatusVUserAsync);
sceNp->AddFunc(0x38f364b0, sceNpTusGetDataVUserAsync);
sceNp->AddFunc(0x44eca8b4, sceNpTusDestroyTransactionCtx);
sceNp->AddFunc(0x47e9424a, sceNpTusTryAndSetVariable);
sceNp->AddFunc(0x5175abb9, sceNpTusGetDataAsync);
sceNp->AddFunc(0x59432970, sceNpTusSetTimeout);
sceNp->AddFunc(0x651fd79f, sceNpTusGetMultiSlotDataStatusAsync);
sceNp->AddFunc(0x6c511024, sceNpTusGetMultiUserVariableVUser);
sceNp->AddFunc(0x7caf58ee, sceNpTusCreateTitleCtx);
sceNp->AddFunc(0x7d5f0f0e, sceNpTusSetData);
sceNp->AddFunc(0x8ddd0d85, sceNpTusGetData);
sceNp->AddFunc(0x8f87a06b, sceNpTusInit);
sceNp->AddFunc(0x94989003, sceNpTusAddAndGetVariable);
sceNp->AddFunc(0x9549d22c, sceNpTusGetMultiUserVariableVUserAsync);
sceNp->AddFunc(0x96a06212, sceNpTusSetMultiSlotVariableVUserAsync);
sceNp->AddFunc(0x9cc0cf44, sceNpTusSetDataVUserAsync);
sceNp->AddFunc(0xa3abfadb, sceNpTusGetMultiSlotDataStatusVUser);
sceNp->AddFunc(0xa7993bf3, sceNpTusAddAndGetVariableVUserAsync);
sceNp->AddFunc(0xae4e590e, sceNpTusGetDataVUser);
sceNp->AddFunc(0xaf985783, sceNpTusDeleteMultiSlotVariable);
sceNp->AddFunc(0xb8e8ff22, sceNpTusWaitAsync);
sceNp->AddFunc(0xbb2877f2, sceNpTusGetMultiSlotVariableAsync);
sceNp->AddFunc(0xbbb244b7, sceNpTusTryAndSetVariableAsync);
sceNp->AddFunc(0xc2e18da8, sceNpTusDeleteMultiSlotVariableVUserAsync);
sceNp->AddFunc(0xc4e51fbf, sceNpTusDeleteMultiSlotVariableVUser);
sceNp->AddFunc(0xc66ba67e, sceNpTusGetMultiUserDataStatusAsync);
sceNp->AddFunc(0xc815b219, sceNpTusDeleteMultiSlotDataVUserAsync);
sceNp->AddFunc(0xc848d425, sceNpTusGetMultiSlotDataStatus);
sceNp->AddFunc(0xcc7a31cd, sceNpTusGetMultiUserVariableAsync);
sceNp->AddFunc(0xcc86a8f6, sceNpTusSetMultiSlotVariable);
sceNp->AddFunc(0xe0719847, sceNpTusDeleteMultiSlotData);
sceNp->AddFunc(0xe847341f, sceNpTusSetDataAsync);
sceNp->AddFunc(0xf5363608, sceNpTusDeleteMultiSlotVariableAsync);
sceNp->AddFunc(0xf60be06f, sceNpTusAddAndGetVariableVUser);
sceNp->AddFunc(0xf819be91, sceNpTusSetMultiSlotVariableVUser);
sceNp->AddFunc(0xfc7d346e, sceNpTusGetMultiSlotVariableVUserAsync);
sceNp->AddFunc(0x432b3cbf, sceNpUtilBandwidthTestShutdown);
sceNp->AddFunc(0xc2ced2b7, sceNpUtilBandwidthTestInitStart);
sceNp->AddFunc(0xc880f37d, sceNpUtilBandwidthTestGetStatus);

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,293 @@
#include "stdafx.h"
#include "Emu/SysCalls/Modules.h"
#include "Emu/System.h"
#include "cellRtc.h"
#include "sceNp.h"
#include "sceNpClans.h"
//void sceNpClans_unload();
//void sceNpClans_init();
//Module sceNpClans(0x003a, sceNpClans_init, nullptr, sceNpClans_unload);
Module *sceNpClans = nullptr;
int sceNpClansInit()
{
UNIMPLEMENTED_FUNC(sceNpClans);
return CELL_OK;
}
int sceNpClansTerm()
{
UNIMPLEMENTED_FUNC(sceNpClans);
return CELL_OK;
}
int sceNpClansCreateRequest()
{
UNIMPLEMENTED_FUNC(sceNpClans);
return CELL_OK;
}
int sceNpClansDestroyRequest()
{
UNIMPLEMENTED_FUNC(sceNpClans);
return CELL_OK;
}
int sceNpClansAbortRequest()
{
UNIMPLEMENTED_FUNC(sceNpClans);
return CELL_OK;
}
int sceNpClansCreateClan()
{
UNIMPLEMENTED_FUNC(sceNpClans);
return CELL_OK;
}
int sceNpClansDisbandClan()
{
UNIMPLEMENTED_FUNC(sceNpClans);
return CELL_OK;
}
int sceNpClansGetClanList()
{
UNIMPLEMENTED_FUNC(sceNpClans);
return CELL_OK;
}
int sceNpClansGetClanListByNpId()
{
UNIMPLEMENTED_FUNC(sceNpClans);
return CELL_OK;
}
int sceNpClansSearchByProfile()
{
UNIMPLEMENTED_FUNC(sceNpClans);
return CELL_OK;
}
int sceNpClansSearchByName()
{
UNIMPLEMENTED_FUNC(sceNpClans);
return CELL_OK;
}
int sceNpClansGetClanInfo()
{
UNIMPLEMENTED_FUNC(sceNpClans);
return CELL_OK;
}
int sceNpClansUpdateClanInfo()
{
UNIMPLEMENTED_FUNC(sceNpClans);
return CELL_OK;
}
int sceNpClansGetMemberList()
{
UNIMPLEMENTED_FUNC(sceNpClans);
return CELL_OK;
}
int sceNpClansGetMemberInfo()
{
UNIMPLEMENTED_FUNC(sceNpClans);
return CELL_OK;
}
int sceNpClansUpdateMemberInfo()
{
UNIMPLEMENTED_FUNC(sceNpClans);
return CELL_OK;
}
int sceNpClansChangeMemberRole()
{
UNIMPLEMENTED_FUNC(sceNpClans);
return CELL_OK;
}
int sceNpClansGetAutoAcceptStatus()
{
UNIMPLEMENTED_FUNC(sceNpClans);
return CELL_OK;
}
int sceNpClansUpdateAutoAcceptStatus()
{
UNIMPLEMENTED_FUNC(sceNpClans);
return CELL_OK;
}
int sceNpClansJoinClan()
{
UNIMPLEMENTED_FUNC(sceNpClans);
return CELL_OK;
}
int sceNpClansLeaveClan()
{
UNIMPLEMENTED_FUNC(sceNpClans);
return CELL_OK;
}
int sceNpClansKickMember()
{
UNIMPLEMENTED_FUNC(sceNpClans);
return CELL_OK;
}
int sceNpClansSendInvitation()
{
UNIMPLEMENTED_FUNC(sceNpClans);
return CELL_OK;
}
int sceNpClansCancelInvitation()
{
UNIMPLEMENTED_FUNC(sceNpClans);
return CELL_OK;
}
int sceNpClansSendInvitationResponse()
{
UNIMPLEMENTED_FUNC(sceNpClans);
return CELL_OK;
}
int sceNpClansSendMembershipRequest()
{
UNIMPLEMENTED_FUNC(sceNpClans);
return CELL_OK;
}
int sceNpClansCancelMembershipRequest()
{
UNIMPLEMENTED_FUNC(sceNpClans);
return CELL_OK;
}
int sceNpClansSendMembershipResponse()
{
UNIMPLEMENTED_FUNC(sceNpClans);
return CELL_OK;
}
int sceNpClansGetBlacklist()
{
UNIMPLEMENTED_FUNC(sceNpClans);
return CELL_OK;
}
int sceNpClansAddBlacklistEntry()
{
UNIMPLEMENTED_FUNC(sceNpClans);
return CELL_OK;
}
int sceNpClansRemoveBlacklistEntry()
{
UNIMPLEMENTED_FUNC(sceNpClans);
return CELL_OK;
}
int sceNpClansRetrieveAnnouncements()
{
UNIMPLEMENTED_FUNC(sceNpClans);
return CELL_OK;
}
int sceNpClansPostAnnouncement()
{
UNIMPLEMENTED_FUNC(sceNpClans);
return CELL_OK;
}
int sceNpClansRemoveAnnouncement()
{
UNIMPLEMENTED_FUNC(sceNpClans);
return CELL_OK;
}
int sceNpClansPostChallenge()
{
UNIMPLEMENTED_FUNC(sceNpClans);
return CELL_OK;
}
int sceNpClansRetrievePostedChallenges()
{
UNIMPLEMENTED_FUNC(sceNpClans);
return CELL_OK;
}
int sceNpClansRemovePostedChallenge()
{
UNIMPLEMENTED_FUNC(sceNpClans);
return CELL_OK;
}
int sceNpClansRetrieveChallenges()
{
UNIMPLEMENTED_FUNC(sceNpClans);
return CELL_OK;
}
int sceNpClansRemoveChallenge()
{
UNIMPLEMENTED_FUNC(sceNpClans);
return CELL_OK;
}
void sceNpClans_unload()
{
// TODO: Unload Clans module
}
void sceNpClans_init()
{
sceNpClans->AddFunc(0x9b820047, sceNpClansInit);
sceNpClans->AddFunc(0x42332cb7, sceNpClansTerm);
sceNpClans->AddFunc(0x9a72232d, sceNpClansCreateRequest);
sceNpClans->AddFunc(0xd6551cd1, sceNpClansDestroyRequest);
sceNpClans->AddFunc(0xe82969e2, sceNpClansAbortRequest);
sceNpClans->AddFunc(0xa6a31a38, sceNpClansCreateClan);
sceNpClans->AddFunc(0x4826f6d5, sceNpClansDisbandClan);
sceNpClans->AddFunc(0xca4181b4, sceNpClansGetClanList);
sceNpClans->AddFunc(0x672399a8, sceNpClansGetClanListByNpId);
sceNpClans->AddFunc(0x1221a1bf, sceNpClansSearchByProfile);
sceNpClans->AddFunc(0xace0cfba, sceNpClansSearchByName);
sceNpClans->AddFunc(0x487de998, sceNpClansGetClanInfo);
sceNpClans->AddFunc(0x09f9e1a9, sceNpClansUpdateClanInfo);
sceNpClans->AddFunc(0x856ff5c0, sceNpClansGetMemberList);
sceNpClans->AddFunc(0x20472da0, sceNpClansGetMemberInfo);
sceNpClans->AddFunc(0xf4a2d52b, sceNpClansUpdateMemberInfo);
sceNpClans->AddFunc(0x9cac2085, sceNpClansChangeMemberRole);
sceNpClans->AddFunc(0x38dadf1f, sceNpClansGetAutoAcceptStatus);
sceNpClans->AddFunc(0x5da94854, sceNpClansUpdateAutoAcceptStatus);
sceNpClans->AddFunc(0xdbf300ca, sceNpClansJoinClan);
sceNpClans->AddFunc(0x560f717b, sceNpClansLeaveClan);
sceNpClans->AddFunc(0xaa7912b5, sceNpClansKickMember);
sceNpClans->AddFunc(0xbc05ef31, sceNpClansSendInvitation);
sceNpClans->AddFunc(0x726dffd5, sceNpClansCancelInvitation);
sceNpClans->AddFunc(0x095e12c6, sceNpClansSendInvitationResponse);
sceNpClans->AddFunc(0x59743b2b, sceNpClansSendMembershipRequest);
sceNpClans->AddFunc(0x299ccc9b, sceNpClansCancelMembershipRequest);
sceNpClans->AddFunc(0x942dbdc4, sceNpClansSendMembershipResponse);
sceNpClans->AddFunc(0x56bc5a7c, sceNpClansGetBlacklist);
sceNpClans->AddFunc(0x4d06aef7, sceNpClansAddBlacklistEntry);
sceNpClans->AddFunc(0x5bff9da1, sceNpClansRemoveBlacklistEntry);
sceNpClans->AddFunc(0x727aa7f8, sceNpClansRetrieveAnnouncements);
sceNpClans->AddFunc(0xada45b84, sceNpClansPostAnnouncement);
sceNpClans->AddFunc(0xe2590f60, sceNpClansRemoveAnnouncement);
sceNpClans->AddFunc(0x83d65529, sceNpClansPostChallenge);
sceNpClans->AddFunc(0x8e785b97, sceNpClansRetrievePostedChallenges);
sceNpClans->AddFunc(0xd3346dc4, sceNpClansRemovePostedChallenge);
sceNpClans->AddFunc(0x0df25834, sceNpClansRetrieveChallenges);
sceNpClans->AddFunc(0xce6dc0f0, sceNpClansRemoveChallenge);
}

View file

@ -0,0 +1,253 @@
#pragma once
// Return codes
enum
{
SCE_NP_CLANS_ERROR_ALREADY_INITIALIZED = 0x80022701,
SCE_NP_CLANS_ERROR_NOT_INITIALIZED = 0x80022702,
SCE_NP_CLANS_ERROR_NOT_SUPPORTED = 0x80022703,
SCE_NP_CLANS_ERROR_OUT_OF_MEMORY = 0x80022704,
SCE_NP_CLANS_ERROR_INVALID_ARGUMENT = 0x80022705,
SCE_NP_CLANS_ERROR_EXCEEDS_MAX = 0x80022706,
SCE_NP_CLANS_ERROR_BAD_RESPONSE = 0x80022707,
SCE_NP_CLANS_ERROR_BAD_DATA = 0x80022708,
SCE_NP_CLANS_ERROR_BAD_REQUEST = 0x80022709,
SCE_NP_CLANS_ERROR_INVALID_SIGNATURE = 0x8002270a,
SCE_NP_CLANS_ERROR_INSUFFICIENT = 0x8002270b,
SCE_NP_CLANS_ERROR_INTERNAL_BUFFER = 0x8002270c,
SCE_NP_CLANS_ERROR_SERVER_MAINTENANCE = 0x8002270d,
SCE_NP_CLANS_ERROR_SERVER_END_OF_SERVICE = 0x8002270e,
SCE_NP_CLANS_ERROR_SERVER_BEFORE_START_OF_SERVICE = 0x8002270f,
SCE_NP_CLANS_ERROR_ABORTED = 0x80022710,
SCE_NP_CLANS_ERROR_SERVICE_UNAVAILABLE = 0x80022711,
SCE_NP_CLANS_SERVER_ERROR_BAD_REQUEST = 0x80022801,
SCE_NP_CLANS_SERVER_ERROR_INVALID_TICKET = 0x80022802,
SCE_NP_CLANS_SERVER_ERROR_INVALID_SIGNATURE = 0x80022803,
SCE_NP_CLANS_SERVER_ERROR_TICKET_EXPIRED = 0x80022804,
SCE_NP_CLANS_SERVER_ERROR_INVALID_NPID = 0x80022805,
SCE_NP_CLANS_SERVER_ERROR_FORBIDDEN = 0x80022806,
SCE_NP_CLANS_SERVER_ERROR_INTERNAL_SERVER_ERROR = 0x80022807,
SCE_NP_CLANS_SERVER_ERROR_BANNED = 0x8002280a,
SCE_NP_CLANS_SERVER_ERROR_BLACKLISTED = 0x80022811,
SCE_NP_CLANS_SERVER_ERROR_INVALID_ENVIRONMENT = 0x8002281d,
SCE_NP_CLANS_SERVER_ERROR_NO_SUCH_CLAN_SERVICE = 0x8002282f,
SCE_NP_CLANS_SERVER_ERROR_NO_SUCH_CLAN = 0x80022830,
SCE_NP_CLANS_SERVER_ERROR_NO_SUCH_CLAN_MEMBER = 0x80022831,
SCE_NP_CLANS_SERVER_ERROR_BEFORE_HOURS = 0x80022832,
SCE_NP_CLANS_SERVER_ERROR_CLOSED_SERVICE = 0x80022833,
SCE_NP_CLANS_SERVER_ERROR_PERMISSION_DENIED = 0x80022834,
SCE_NP_CLANS_SERVER_ERROR_CLAN_LIMIT_REACHED = 0x80022835,
SCE_NP_CLANS_SERVER_ERROR_CLAN_LEADER_LIMIT_REACHED = 0x80022836,
SCE_NP_CLANS_SERVER_ERROR_CLAN_MEMBER_LIMIT_REACHED = 0x80022837,
SCE_NP_CLANS_SERVER_ERROR_CLAN_JOINED_LIMIT_REACHED = 0x80022838,
SCE_NP_CLANS_SERVER_ERROR_MEMBER_STATUS_INVALID = 0x80022839,
SCE_NP_CLANS_SERVER_ERROR_DUPLICATED_CLAN_NAME = 0x8002283a,
SCE_NP_CLANS_SERVER_ERROR_CLAN_LEADER_CANNOT_LEAVE = 0x8002283b,
SCE_NP_CLANS_SERVER_ERROR_INVALID_ROLE_PRIORITY = 0x8002283c,
SCE_NP_CLANS_SERVER_ERROR_ANNOUNCEMENT_LIMIT_REACHED = 0x8002283d,
SCE_NP_CLANS_SERVER_ERROR_CLAN_CONFIG_MASTER_NOT_FOUND = 0x8002283e,
SCE_NP_CLANS_SERVER_ERROR_DUPLICATED_CLAN_TAG = 0x8002283f,
SCE_NP_CLANS_SERVER_ERROR_EXCEEDS_CREATE_CLAN_FREQUENCY = 0x80022840,
SCE_NP_CLANS_SERVER_ERROR_CLAN_PASSPHRASE_INCORRECT = 0x80022841,
SCE_NP_CLANS_SERVER_ERROR_CANNOT_RECORD_BLACKLIST_ENTRY = 0x80022842,
SCE_NP_CLANS_SERVER_ERROR_NO_SUCH_CLAN_ANNOUNCEMENT = 0x80022843,
SCE_NP_CLANS_SERVER_ERROR_VULGAR_WORDS_POSTED = 0x80022844,
SCE_NP_CLANS_SERVER_ERROR_BLACKLIST_LIMIT_REACHED = 0x80022845,
SCE_NP_CLANS_SERVER_ERROR_NO_SUCH_BLACKLIST_ENTRY = 0x80022846,
SCE_NP_CLANS_SERVER_ERROR_INVALID_NP_MESSAGE_FORMAT = 0x8002284b,
SCE_NP_CLANS_SERVER_ERROR_FAILED_TO_SEND_NP_MESSAGE = 0x8002284c,
};
// Clan roles
enum
{
SCE_NP_CLANS_ROLE_UNKNOWN = 0,
SCE_NP_CLANS_ROLE_NON_MEMBER = 1,
SCE_NP_CLANS_ROLE_MEMBER = 2,
SCE_NP_CLANS_ROLE_SUB_LEADER = 3,
SCE_NP_CLANS_ROLE_LEADER = 4,
};
// Clan member status
enum
{
SCE_NP_CLANS_MEMBER_STATUS_UNKNOWN = 0,
SCE_NP_CLANS_MEMBER_STATUS_NORMAL = 1,
SCE_NP_CLANS_MEMBER_STATUS_INVITED = 2,
SCE_NP_CLANS_MEMBER_STATUS_PENDING = 3,
};
// Clan search operators
enum
{
SCE_NP_CLANS_SEARCH_OPERATOR_EQUAL_TO = 0,
SCE_NP_CLANS_SEARCH_OPERATOR_NOT_EQUAL_TO = 1,
SCE_NP_CLANS_SEARCH_OPERATOR_GREATER_THAN = 2,
SCE_NP_CLANS_SEARCH_OPERATOR_GREATER_THAN_OR_EQUAL_TO = 3,
SCE_NP_CLANS_SEARCH_OPERATOR_LESS_THAN = 4,
SCE_NP_CLANS_SEARCH_OPERATOR_LESS_THAN_OR_EQUAL_TO = 5,
SCE_NP_CLANS_SEARCH_OPERATOR_SIMILAR_TO = 6,
};
// Constants for clan functions and structures
enum
{
SCE_NP_CLANS_ANNOUNCEMENT_MESSAGE_BODY_MAX_LENGTH = 1536,
SCE_NP_CLANS_CLAN_BINARY_ATTRIBUTE1_MAX_SIZE = 190,
SCE_NP_CLANS_CLAN_BINARY_DATA_MAX_SIZE = 10240,
SCE_NP_CLANS_MEMBER_BINARY_ATTRIBUTE1_MAX_SIZE = 16,
SCE_NP_CLANS_MEMBER_DESCRIPTION_MAX_LENGTH = 255,
SCE_NP_CLANS_MEMBER_BINARY_DATA_MAX_SIZE = 1024,
SCE_NP_CLANS_MESSAGE_BODY_MAX_LENGTH = 1536,
SCE_NP_CLANS_MESSAGE_SUBJECT_MAX_LENGTH = 54,
SCE_NP_CLANS_MESSAGE_BODY_CHARACTER_MAX = 512,
SCE_NP_CLANS_MESSAGE_SUBJECT_CHARACTER_MAX = 18,
SCE_NP_CLANS_MESSAGE_BINARY_DATA_MAX_SIZE = 1024,
SCE_NP_CLANS_PAGING_REQUEST_START_POSITION_MAX = 1000000,
SCE_NP_CLANS_PAGING_REQUEST_PAGE_MAX = 100,
};
// Request handle for clan API
struct SceNpClansRequest;
typedef SceNpClansRequest* SceNpClansRequestHandle;
// Paging request structure
struct SceNpClansPagingRequest
{
be_t<u32> startPos;
be_t<u32> max;
};
// Paging result structure
struct SceNpClansPagingResult
{
be_t<u32> count;
be_t<u32> total;
};
// Basic clan information
struct SceNpClansClanBasicInfo
{
be_t<u32> clanId;
be_t<u32> numMembers;
s8 name[SCE_NP_CLANS_CLAN_NAME_MAX_LENGTH + 1];
s8 tag[SCE_NP_CLANS_CLAN_TAG_MAX_LENGTH + 1];
//u8 reserved[2];
};
// Clan entry structure
struct SceNpClansEntry
{
SceNpClansClanBasicInfo info;
be_t<u32> role;
be_t<s32> status;
bool allowMsg;
//u8 reserved[3];
};
// Clan search attribute structure
struct SceNpClansSearchableAttr
{
be_t<u32> fields;
be_t<u32> intAttr1;
be_t<u32> intAttr2;
be_t<u32> intAttr3;
u8 binAttr1[SCE_NP_CLANS_CLAN_BINARY_ATTRIBUTE1_MAX_SIZE];
//u8 reserved[2];
};
// Clan search profile structure
struct SceNpClansSearchableProfile
{
SceNpClansSearchableAttr attr;
be_t<u32> fields;
be_t<u32> numMembers;
be_t<s32> tagSearchOp;
be_t<s32> numMemberSearchOp;
be_t<s32> intAttr1SearchOp;
be_t<s32> intAttr2SearchOp;
be_t<s32> intAttr3SearchOp;
be_t<s32> binAttr1SearchOp;
s8 tag[SCE_NP_CLANS_CLAN_TAG_MAX_LENGTH + 1];
//u8 reserved[3];
};
// Clan search name structure
struct SceNpClansSearchableName
{
be_t<s32> nameSearchOp;
s8 name[SCE_NP_CLANS_CLAN_NAME_MAX_LENGTH + 1];
//u8 reserved[3];
};
// Updatable clan information structure
struct SceNpClansUpdatableClanInfo
{
be_t<u32> fields;
s8 description[SCE_NP_CLANS_CLAN_DESCRIPTION_MAX_LENGTH + 1];
SceNpClansSearchableAttr attr;
u8 binData1;
be_t<u32> binData1Size;
};
// Clan information structure
struct SceNpClansClanInfo
{
CellRtcTick dateCreated;
SceNpClansClanBasicInfo info;
SceNpClansUpdatableClanInfo updatable;
};
// Updatable member information structure
struct SceNpClansUpdatableMemberInfo
{
be_t<u32> fields;
u8 binData1;
be_t<u32> binData1Size;
u8 binAttr1[SCE_NP_CLANS_CLAN_BINARY_ATTRIBUTE1_MAX_SIZE + 1];
s8 description[SCE_NP_CLANS_MEMBER_DESCRIPTION_MAX_LENGTH + 1];
bool allowMsg;
//u8 reserved[3];
};
// Member entry structure
struct SceNpClansMemberEntry
{
SceNpId npid;
be_t<u32> role;
be_t<s32> status;
SceNpClansUpdatableMemberInfo updatable;
};
// Clan message structure
struct SceNpClansMessage
{
s8 subject[SCE_NP_CLANS_MESSAGE_SUBJECT_MAX_LENGTH + 1];
s8 body[SCE_NP_CLANS_MESSAGE_BODY_MAX_LENGTH + 1];
be_t<u32> options;
};
// Clan message data structure
struct SceNpClansMessageData
{
u8 binData1;
be_t<u32> binData1Size;
};
// Clan message entry structure
struct SceNpClansMessageEntry
{
CellRtcTick postDate;
be_t<u32> mId;
SceNpClansMessage message;
SceNpClansMessageData data;
SceNpId npid;
u8 reserved[4];
};
// Blacklist entry structure
struct SceNpClansBlacklistEntry
{
SceNpId entry;
SceNpId registeredBy;
};

View file

@ -0,0 +1,347 @@
#include "stdafx.h"
#include "Emu/SysCalls/Modules.h"
#include "cellRtc.h"
#include "sceNpCommerce2.h"
//void sceNpCommerce2_unload();
//void sceNpCommerce2_init();
//Module sceNpCommerce2(0x0044, sceNpCommerce2_init, nullptr, sceNpCommerce2_unload);
Module *sceNpCommerce2 = nullptr;
int sceNpCommerce2ExecuteStoreBrowse()
{
UNIMPLEMENTED_FUNC(sceNpCommerce2);
return CELL_OK;
}
int sceNpCommerce2GetStoreBrowseUserdata()
{
UNIMPLEMENTED_FUNC(sceNpCommerce2);
return CELL_OK;
}
int sceNpCommerce2Init()
{
UNIMPLEMENTED_FUNC(sceNpCommerce2);
return CELL_OK;
}
int sceNpCommerce2Term()
{
UNIMPLEMENTED_FUNC(sceNpCommerce2);
return CELL_OK;
}
int sceNpCommerce2CreateCtx()
{
UNIMPLEMENTED_FUNC(sceNpCommerce2);
return CELL_OK;
}
int sceNpCommerce2DestroyCtx()
{
UNIMPLEMENTED_FUNC(sceNpCommerce2);
return CELL_OK;
}
int sceNpCommerce2CreateSessionStart()
{
UNIMPLEMENTED_FUNC(sceNpCommerce2);
return CELL_OK;
}
int sceNpCommerce2CreateSessionAbort()
{
UNIMPLEMENTED_FUNC(sceNpCommerce2);
return CELL_OK;
}
int sceNpCommerce2CreateSessionFinish()
{
UNIMPLEMENTED_FUNC(sceNpCommerce2);
return CELL_OK;
}
int sceNpCommerce2GetCategoryContentsCreateReq()
{
UNIMPLEMENTED_FUNC(sceNpCommerce2);
return CELL_OK;
}
int sceNpCommerce2GetCategoryContentsStart()
{
UNIMPLEMENTED_FUNC(sceNpCommerce2);
return CELL_OK;
}
int sceNpCommerce2GetCategoryContentsGetResult()
{
UNIMPLEMENTED_FUNC(sceNpCommerce2);
return CELL_OK;
}
int sceNpCommerce2InitGetCategoryContentsResult()
{
UNIMPLEMENTED_FUNC(sceNpCommerce2);
return CELL_OK;
}
int sceNpCommerce2GetCategoryInfo()
{
UNIMPLEMENTED_FUNC(sceNpCommerce2);
return CELL_OK;
}
int sceNpCommerce2GetContentInfo()
{
UNIMPLEMENTED_FUNC(sceNpCommerce2);
return CELL_OK;
}
int sceNpCommerce2GetCategoryInfoFromContentInfo()
{
UNIMPLEMENTED_FUNC(sceNpCommerce2);
return CELL_OK;
}
int sceNpCommerce2GetGameProductInfoFromContentInfo()
{
UNIMPLEMENTED_FUNC(sceNpCommerce2);
return CELL_OK;
}
int sceNpCommerce2DestroyGetCategoryContentsResult()
{
UNIMPLEMENTED_FUNC(sceNpCommerce2);
return CELL_OK;
}
int sceNpCommerce2GetProductInfoCreateReq()
{
UNIMPLEMENTED_FUNC(sceNpCommerce2);
return CELL_OK;
}
int sceNpCommerce2GetProductInfoStart()
{
UNIMPLEMENTED_FUNC(sceNpCommerce2);
return CELL_OK;
}
int sceNpCommerce2GetProductInfoGetResult()
{
UNIMPLEMENTED_FUNC(sceNpCommerce2);
return CELL_OK;
}
int sceNpCommerce2InitGetProductInfoResult()
{
UNIMPLEMENTED_FUNC(sceNpCommerce2);
return CELL_OK;
}
int sceNpCommerce2GetGameProductInfo()
{
UNIMPLEMENTED_FUNC(sceNpCommerce2);
return CELL_OK;
}
int sceNpCommerce2DestroyGetProductInfoResult()
{
UNIMPLEMENTED_FUNC(sceNpCommerce2);
return CELL_OK;
}
int sceNpCommerce2GetProductInfoListCreateReq()
{
UNIMPLEMENTED_FUNC(sceNpCommerce2);
return CELL_OK;
}
int sceNpCommerce2GetProductInfoListStart()
{
UNIMPLEMENTED_FUNC(sceNpCommerce2);
return CELL_OK;
}
int sceNpCommerce2GetProductInfoListGetResult()
{
UNIMPLEMENTED_FUNC(sceNpCommerce2);
return CELL_OK;
}
int sceNpCommerce2InitGetProductInfoListResult()
{
UNIMPLEMENTED_FUNC(sceNpCommerce2);
return CELL_OK;
}
int sceNpCommerce2GetGameProductInfoFromGetProductInfoListResult()
{
UNIMPLEMENTED_FUNC(sceNpCommerce2);
return CELL_OK;
}
int sceNpCommerce2DestroyGetProductInfoListResult()
{
UNIMPLEMENTED_FUNC(sceNpCommerce2);
return CELL_OK;
}
int sceNpCommerce2GetContentRatingInfoFromGameProductInfo()
{
UNIMPLEMENTED_FUNC(sceNpCommerce2);
return CELL_OK;
}
int sceNpCommerce2GetContentRatingInfoFromCategoryInfo()
{
UNIMPLEMENTED_FUNC(sceNpCommerce2);
return CELL_OK;
}
int sceNpCommerce2GetContentRatingDescriptor()
{
UNIMPLEMENTED_FUNC(sceNpCommerce2);
return CELL_OK;
}
int sceNpCommerce2GetGameSkuInfoFromGameProductInfo()
{
UNIMPLEMENTED_FUNC(sceNpCommerce2);
return CELL_OK;
}
int sceNpCommerce2GetPrice()
{
UNIMPLEMENTED_FUNC(sceNpCommerce2);
return CELL_OK;
}
int sceNpCommerce2DoCheckoutStartAsync()
{
UNIMPLEMENTED_FUNC(sceNpCommerce2);
return CELL_OK;
}
int sceNpCommerce2DoCheckoutFinishAsync()
{
UNIMPLEMENTED_FUNC(sceNpCommerce2);
return CELL_OK;
}
int sceNpCommerce2DoProductBrowseStartAsync()
{
UNIMPLEMENTED_FUNC(sceNpCommerce2);
return CELL_OK;
}
int sceNpCommerce2DoProductBrowseFinishAsync()
{
UNIMPLEMENTED_FUNC(sceNpCommerce2);
return CELL_OK;
}
int sceNpCommerce2DoDlListStartAsync()
{
UNIMPLEMENTED_FUNC(sceNpCommerce2);
return CELL_OK;
}
int sceNpCommerce2DoDlListFinishAsync()
{
UNIMPLEMENTED_FUNC(sceNpCommerce2);
return CELL_OK;
}
int sceNpCommerce2DoProductCodeStartAsync()
{
UNIMPLEMENTED_FUNC(sceNpCommerce2);
return CELL_OK;
}
int sceNpCommerce2DoProductCodeFinishAsync()
{
UNIMPLEMENTED_FUNC(sceNpCommerce2);
return CELL_OK;
}
int sceNpCommerce2GetBGDLAvailability()
{
UNIMPLEMENTED_FUNC(sceNpCommerce2);
return CELL_OK;
}
int sceNpCommerce2SetBGDLAvailability()
{
UNIMPLEMENTED_FUNC(sceNpCommerce2);
return CELL_OK;
}
int sceNpCommerce2AbortReq()
{
UNIMPLEMENTED_FUNC(sceNpCommerce2);
return CELL_OK;
}
int sceNpCommerce2DestroyReq()
{
UNIMPLEMENTED_FUNC(sceNpCommerce2);
return CELL_OK;
}
void sceNpCommerce2_unload()
{
// TODO: Unload SNS module
}
void sceNpCommerce2_init()
{
sceNpCommerce2->AddFunc(0xeef51be0, sceNpCommerce2ExecuteStoreBrowse);
sceNpCommerce2->AddFunc(0x1fa1b312, sceNpCommerce2GetStoreBrowseUserdata);
sceNpCommerce2->AddFunc(0x3539d233, sceNpCommerce2Init);
sceNpCommerce2->AddFunc(0x4d4a094c, sceNpCommerce2Term);
sceNpCommerce2->AddFunc(0xd9fdcec2, sceNpCommerce2CreateCtx);
sceNpCommerce2->AddFunc(0x6f67ea80, sceNpCommerce2DestroyCtx);
sceNpCommerce2->AddFunc(0xcc18cd2c, sceNpCommerce2CreateSessionStart);
sceNpCommerce2->AddFunc(0x62023e98, sceNpCommerce2CreateSessionAbort);
sceNpCommerce2->AddFunc(0x91f8843d, sceNpCommerce2CreateSessionFinish);
sceNpCommerce2->AddFunc(0x7370d8d0, sceNpCommerce2GetCategoryContentsCreateReq);
sceNpCommerce2->AddFunc(0x371a2edd, sceNpCommerce2GetCategoryContentsStart);
sceNpCommerce2->AddFunc(0xca0ea996, sceNpCommerce2GetCategoryContentsGetResult);
sceNpCommerce2->AddFunc(0xd8a473a3, sceNpCommerce2InitGetCategoryContentsResult);
sceNpCommerce2->AddFunc(0xbd49eab2, sceNpCommerce2GetCategoryInfo);
sceNpCommerce2->AddFunc(0x972ab46c, sceNpCommerce2GetContentInfo);
sceNpCommerce2->AddFunc(0xfc216890, sceNpCommerce2GetCategoryInfoFromContentInfo);
sceNpCommerce2->AddFunc(0xe51a4944, sceNpCommerce2GetGameProductInfoFromContentInfo);
sceNpCommerce2->AddFunc(0x9d9cb96b, sceNpCommerce2DestroyGetCategoryContentsResult);
sceNpCommerce2->AddFunc(0xa975ebb4, sceNpCommerce2GetProductInfoCreateReq);
sceNpCommerce2->AddFunc(0x8f46325b, sceNpCommerce2GetProductInfoStart);
sceNpCommerce2->AddFunc(0xbf5f58ea, sceNpCommerce2GetProductInfoGetResult);
sceNpCommerce2->AddFunc(0xf798f5e3, sceNpCommerce2InitGetProductInfoResult);
sceNpCommerce2->AddFunc(0xef645654, sceNpCommerce2GetGameProductInfo);
sceNpCommerce2->AddFunc(0xef8eafcd, sceNpCommerce2DestroyGetProductInfoResult);
sceNpCommerce2->AddFunc(0xe1e7b5ac, sceNpCommerce2GetProductInfoListCreateReq);
sceNpCommerce2->AddFunc(0x9cde07cc, sceNpCommerce2GetProductInfoListStart);
sceNpCommerce2->AddFunc(0x146618df, sceNpCommerce2GetProductInfoListGetResult);
sceNpCommerce2->AddFunc(0xe0f90e44, sceNpCommerce2InitGetProductInfoListResult);
sceNpCommerce2->AddFunc(0xd9956ce7, sceNpCommerce2GetGameProductInfoFromGetProductInfoListResult);
sceNpCommerce2->AddFunc(0xf6139b58, sceNpCommerce2DestroyGetProductInfoListResult);
sceNpCommerce2->AddFunc(0xec324c8f, sceNpCommerce2GetContentRatingInfoFromGameProductInfo);
sceNpCommerce2->AddFunc(0xac78c1f3, sceNpCommerce2GetContentRatingInfoFromCategoryInfo);
sceNpCommerce2->AddFunc(0x150fdca3, sceNpCommerce2GetContentRatingDescriptor);
sceNpCommerce2->AddFunc(0xdb19194c, sceNpCommerce2GetGameSkuInfoFromGameProductInfo);
sceNpCommerce2->AddFunc(0xda8e322d, sceNpCommerce2GetPrice);
sceNpCommerce2->AddFunc(0x104551a6, sceNpCommerce2DoCheckoutStartAsync);
sceNpCommerce2->AddFunc(0xd43a130e, sceNpCommerce2DoCheckoutFinishAsync);
sceNpCommerce2->AddFunc(0x9825a0fc, sceNpCommerce2DoProductBrowseStartAsync);
sceNpCommerce2->AddFunc(0xb23e3bd1, sceNpCommerce2DoProductBrowseFinishAsync);
sceNpCommerce2->AddFunc(0x6ca9efd4, sceNpCommerce2DoDlListStartAsync);
sceNpCommerce2->AddFunc(0x410d42be, sceNpCommerce2DoDlListFinishAsync);
sceNpCommerce2->AddFunc(0xde7ab33d, sceNpCommerce2DoProductCodeStartAsync);
sceNpCommerce2->AddFunc(0xa9f945b3, sceNpCommerce2DoProductCodeFinishAsync);
sceNpCommerce2->AddFunc(0x3d627d81, sceNpCommerce2GetBGDLAvailability);
sceNpCommerce2->AddFunc(0xa5a863fe, sceNpCommerce2SetBGDLAvailability);
sceNpCommerce2->AddFunc(0x8df0057f, sceNpCommerce2AbortReq);
sceNpCommerce2->AddFunc(0x2a910f05, sceNpCommerce2DestroyReq);
}

View file

@ -0,0 +1,275 @@
#pragma once
// Return codes
enum
{
SCE_NP_COMMERCE2_ERROR_NOT_INITIALIZED = 0x80023001,
SCE_NP_COMMERCE2_ERROR_ALREADY_INITIALIZED = 0x80023002,
SCE_NP_COMMERCE2_ERROR_INVALID_ARGUMENT = 0x80023003,
SCE_NP_COMMERCE2_ERROR_UNSUPPORTED_VERSION = 0x80023004,
SCE_NP_COMMERCE2_ERROR_CTX_MAX = 0x80023005,
SCE_NP_COMMERCE2_ERROR_INVALID_INDEX = 0x80023006,
SCE_NP_COMMERCE2_ERROR_INVALID_SKUID = 0x80023007,
SCE_NP_COMMERCE2_ERROR_INVALID_SKU_NUM = 0x80023008,
SCE_NP_COMMERCE2_ERROR_INVALID_MEMORY_CONTAINER = 0x80023009,
SCE_NP_COMMERCE2_ERROR_INSUFFICIENT_MEMORY_CONTAINER = 0x8002300a,
SCE_NP_COMMERCE2_ERROR_OUT_OF_MEMORY = 0x8002300b,
SCE_NP_COMMERCE2_ERROR_CTX_NOT_FOUND = 0x8002300c,
SCE_NP_COMMERCE2_ERROR_CTXID_NOT_AVAILABLE = 0x8002300d,
SCE_NP_COMMERCE2_ERROR_REQ_NOT_FOUND = 0x8002300e,
SCE_NP_COMMERCE2_ERROR_REQID_NOT_AVAILABLE = 0x8002300f,
SCE_NP_COMMERCE2_ERROR_ABORTED = 0x80023010,
SCE_NP_COMMERCE2_ERROR_RESPONSE_BUF_TOO_SMALL = 0x80023012,
SCE_NP_COMMERCE2_ERROR_COULD_NOT_RECV_WHOLE_RESPONSE_DATA = 0x80023013,
SCE_NP_COMMERCE2_ERROR_INVALID_RESULT_DATA = 0x80023014,
SCE_NP_COMMERCE2_ERROR_UNKNOWN = 0x80023015,
SCE_NP_COMMERCE2_ERROR_SERVER_MAINTENANCE = 0x80023016,
SCE_NP_COMMERCE2_ERROR_SERVER_UNKNOWN = 0x80023017,
SCE_NP_COMMERCE2_ERROR_INSUFFICIENT_BUF_SIZE = 0x80023018,
SCE_NP_COMMERCE2_ERROR_REQ_MAX = 0x80023019,
SCE_NP_COMMERCE2_ERROR_INVALID_TARGET_TYPE = 0x8002301a,
SCE_NP_COMMERCE2_ERROR_INVALID_TARGET_ID = 0x8002301b,
SCE_NP_COMMERCE2_ERROR_INVALID_SIZE = 0x8002301c,
SCE_NP_COMMERCE2_ERROR_DATA_NOT_FOUND = 0x80023087,
SCE_NP_COMMERCE2_SERVER_ERROR_BAD_REQUEST = 0x80023101,
SCE_NP_COMMERCE2_SERVER_ERROR_UNKNOWN_ERROR = 0x80023102,
SCE_NP_COMMERCE2_SERVER_ERROR_SESSION_EXPIRED = 0x80023105,
SCE_NP_COMMERCE2_SERVER_ERROR_ACCESS_PERMISSION_DENIED = 0x80023107,
SCE_NP_COMMERCE2_SERVER_ERROR_NO_SUCH_CATEGORY = 0x80023110,
SCE_NP_COMMERCE2_SERVER_ERROR_NO_SUCH_PRODUCT = 0x80023111,
SCE_NP_COMMERCE2_SERVER_ERROR_NOT_ELIGIBILITY = 0x80023113,
SCE_NP_COMMERCE2_SERVER_ERROR_INVALID_SKU = 0x8002311a,
SCE_NP_COMMERCE2_SERVER_ERROR_ACCOUNT_SUSPENDED1 = 0x8002311b,
SCE_NP_COMMERCE2_SERVER_ERROR_ACCOUNT_SUSPENDED2 = 0x8002311c,
SCE_NP_COMMERCE2_SERVER_ERROR_OVER_SPENDING_LIMIT = 0x80023120,
SCE_NP_COMMERCE2_SERVER_ERROR_INVALID_VOUCHER = 0x8002312f,
SCE_NP_COMMERCE2_SERVER_ERROR_VOUCHER_ALREADY_CONSUMED = 0x80023130,
SCE_NP_COMMERCE2_SERVER_ERROR_EXCEEDS_AGE_LIMIT_IN_BROWSING = 0x80023139,
SCE_NP_COMMERCE2_SYSTEM_UTIL_ERROR_INVALID_VOUCHER = 0x80024002,
SCE_NP_COMMERCE_ERROR_REQ_BUSY = 0x8002940d,
};
// Event types
enum
{
SCE_NP_COMMERCE2_EVENT_REQUEST_ERROR = 0x0001,
SCE_NP_COMMERCE2_EVENT_CREATE_SESSION_DONE = 0x0011,
SCE_NP_COMMERCE2_EVENT_CREATE_SESSION_ABORT = 0x0012,
SCE_NP_COMMERCE2_EVENT_DO_CHECKOUT_STARTED = 0x0021,
SCE_NP_COMMERCE2_EVENT_DO_CHECKOUT_SUCCESS = 0x0022,
SCE_NP_COMMERCE2_EVENT_DO_CHECKOUT_BACK = 0x0023,
SCE_NP_COMMERCE2_EVENT_DO_CHECKOUT_FINISHED = 0x0024,
SCE_NP_COMMERCE2_EVENT_DO_DL_LIST_STARTED = 0x0031,
SCE_NP_COMMERCE2_EVENT_DO_DL_LIST_SUCCESS = 0x0032,
SCE_NP_COMMERCE2_EVENT_DO_DL_LIST_FINISHED = 0x0034,
SCE_NP_COMMERCE2_EVENT_DO_PROD_BROWSE_STARTED = 0x0041,
SCE_NP_COMMERCE2_EVENT_DO_PROD_BROWSE_SUCCESS = 0x0042,
SCE_NP_COMMERCE2_EVENT_DO_PROD_BROWSE_BACK = 0x0043,
SCE_NP_COMMERCE2_EVENT_DO_PROD_BROWSE_FINISHED = 0x0044,
SCE_NP_COMMERCE2_EVENT_DO_PROD_BROWSE_OPENED = 0x0045,
SCE_NP_COMMERCE2_EVENT_DO_PRODUCT_CODE_STARTED = 0x0051,
SCE_NP_COMMERCE2_EVENT_DO_PRODUCT_CODE_SUCCESS = 0x0052,
SCE_NP_COMMERCE2_EVENT_DO_PRODUCT_CODE_BACK = 0x0053,
SCE_NP_COMMERCE2_EVENT_DO_PRODUCT_CODE_FINISHED = 0x0054,
SCE_NP_COMMERCE2_EVENT_EMPTY_STORE_CHECK_DONE = 0x0061,
SCE_NP_COMMERCE2_EVENT_EMPTY_STORE_CHECK_ABORT = 0x0062,
};
// Category data type
enum SceNpCommerce2CategoryDataType
{
SCE_NP_COMMERCE2_CAT_DATA_TYPE_THIN = 0,
SCE_NP_COMMERCE2_CAT_DATA_TYPE_NORMAL,
SCE_NP_COMMERCE2_CAT_DATA_TYPE_MAX
};
// Game product data type
enum SceNpCommerce2GameProductDataType
{
SCE_NP_COMMERCE2_GAME_PRODUCT_DATA_TYPE_THIN = 0,
SCE_NP_COMMERCE2_GAME_PRODUCT_DATA_TYPE_NORMAL,
SCE_NP_COMMERCE2_GAME_PRODUCT_DATA_TYPE_MAX
};
// SKU data type
enum SceNpCommerce2GameSkuDataType
{
SCE_NP_COMMERCE2_GAME_SKU_DATA_TYPE_THIN = 0,
SCE_NP_COMMERCE2_GAME_SKU_DATA_TYPE_NORMAL,
SCE_NP_COMMERCE2_GAME_SKU_DATA_TYPE_MAX
};
// Constanc for commerce functions and structures
enum
{
SCE_NP_COMMERCE2_CURRENCY_CODE_LEN = 3,
SCE_NP_COMMERCE2_CURRENCY_SYMBOL_LEN = 3,
SCE_NP_COMMERCE2_THOUSAND_SEPARATOR_LEN = 4,
SCE_NP_COMMERCE2_DECIMAL_LETTER_LEN = 4,
SCE_NP_COMMERCE2_SP_NAME_LEN = 256,
SCE_NP_COMMERCE2_CATEGORY_ID_LEN = 56,
SCE_NP_COMMERCE2_CATEGORY_NAME_LEN = 256,
SCE_NP_COMMERCE2_CATEGORY_DESCRIPTION_LEN = 1024,
SCE_NP_COMMERCE2_PRODUCT_ID_LEN = 48,
SCE_NP_COMMERCE2_PRODUCT_NAME_LEN = 256,
SCE_NP_COMMERCE2_PRODUCT_SHORT_DESCRIPTION_LEN = 1024,
SCE_NP_COMMERCE2_PRODUCT_LONG_DESCRIPTION_LEN = 4000,
SCE_NP_COMMERCE2_SKU_ID_LEN = 56,
SCE_NP_COMMERCE2_SKU_NAME_LEN = 180,
SCE_NP_COMMERCE2_URL_LEN = 256,
SCE_NP_COMMERCE2_RATING_SYSTEM_ID_LEN = 16,
SCE_NP_COMMERCE2_RATING_DESCRIPTION_LEN = 60,
SCE_NP_COMMERCE2_RECV_BUF_SIZE = 262144,
SCE_NP_COMMERCE2_PRODUCT_CODE_BLOCK_LEN = 4,
SCE_NP_COMMERCE2_GETCAT_MAX_COUNT = 60,
SCE_NP_COMMERCE2_DO_CHECKOUT_MEMORY_CONTAINER_SIZE = 10485760,
SCE_NP_COMMERCE2_DO_PROD_BROWSE_MEMORY_CONTAINER_SIZE = 16777216,
SCE_NP_COMMERCE2_DO_DL_LIST_MEMORY_CONTAINER_SIZE = 10485760,
SCE_NP_COMMERCE2_DO_PRODUCT_CODE_MEMORY_CONTAINER_SIZE = 16777216,
};
// Common structure used when receiving data
struct SceNpCommerce2CommonData
{
be_t<u32> version;
be_t<u32> buf_head;
be_t<u32> buf_size;
be_t<u32> data;
be_t<u32> data_size;
be_t<u32> data2;
//be_t<u32> reserved[4];
};
// Structure indicating the range of results obtained
struct SceNpCommerce2Range
{
be_t<u32> startPosition;
be_t<u32> count;
be_t<u32> totalCountOfResults;
};
// Structure for session information
struct SceNpCommerce2SessionInfo
{
s8 currencyCode[SCE_NP_COMMERCE2_CURRENCY_CODE_LEN + 1];
be_t<u32> decimals;
s8 currencySymbol[SCE_NP_COMMERCE2_CURRENCY_SYMBOL_LEN + 1];
be_t<u32> symbolPosition;
bool symbolWithSpace;
u8 padding1[3];
s8 thousandSeparator[SCE_NP_COMMERCE2_THOUSAND_SEPARATOR_LEN + 1];
s8 decimalLetter[SCE_NP_COMMERCE2_DECIMAL_LETTER_LEN + 1];
u8 padding2[1];
//be_t<u32> reserved[4];
};
// Structure for category information
struct SceNpCommerce2CategoryInfo
{
SceNpCommerce2CommonData commonData;
SceNpCommerce2CategoryDataType dataType;
s8 categoryId;
CellRtcTick releaseDate;
s8 categoryName;
s8 categoryDescription;
s8 imageUrl;
s8 spName;
be_t<u32> countOfSubCategory;
be_t<u32> countOfProduct;
};
// Structure for content information within the category
struct SceNpCommerce2ContentInfo
{
SceNpCommerce2CommonData commonData;
be_t<u32> contentType;
};
// Structure for initialized product data
struct SceNpCommerce2GetProductInfoResult
{
SceNpCommerce2CommonData commonData;
};
// Structure for game product information
struct SceNpCommerce2GameProductInfo
{
SceNpCommerce2CommonData commonData;
SceNpCommerce2GameProductDataType dataType;
s8 productId;
be_t<u32> countOfSku;
u8 padding[4];
CellRtcTick releaseDate;
s8 productName;
s8 productShortDescription;
s8 imageUrl;
s8 spName;
s8 productLongDescription;
s8 legalDescription;
};
// Structure for initialized product info list
struct SceNpCommerce2GetProductInfoListResult
{
SceNpCommerce2CommonData commonData;
};
// Structure for rating information
struct SceNpCommerce2ContentRatingInfo
{
SceNpCommerce2CommonData commonData;
s8 ratingSystemId;
s8 imageUrl;
be_t<u32> countOfContentRatingDescriptor;
};
// Structure for a rating descriptor
struct SceNpCommerce2ContentRatingDescriptor
{
SceNpCommerce2CommonData commonData;
be_t<u32> descriptorType;
s8 imageUrl;
s8 contentRatingDescription;
};
// Structure for SKU information
struct SceNpCommerce2GameSkuInfo
{
SceNpCommerce2CommonData commonData;
SceNpCommerce2GameSkuDataType dataType;
s8 skuId;
be_t<u32> skuType;
be_t<u32> countUntilExpiration;
be_t<u32> timeUntilExpiration;
be_t<u32> purchasabilityFlag;
be_t<u32> annotation;
bool downloadable;
u8 padding[3];
be_t<u32> price;
s8 skuName;
s8 productId;
s8 contentLinkUrl;
be_t<u32> countOfRewardInfo;
//be_t<u32> reserved[8];
};
// Structure of parameters for in-game product browsing
struct SceNpCommerce2ProductBrowseParam
{
be_t<u32> size;
};
// Structure of parameters for promotion code input
struct SceNpCommerce2ProductCodeParam
{
be_t<u32> size;
be_t<u32> inputMode; // Unsigned ints go into be_t<u32>, right?
s8 code1[SCE_NP_COMMERCE2_PRODUCT_CODE_BLOCK_LEN + 1];
//s8 padding1[3];
s8 code2[SCE_NP_COMMERCE2_PRODUCT_CODE_BLOCK_LEN + 1];
//s8 padding2[3];
s8 code3[SCE_NP_COMMERCE2_PRODUCT_CODE_BLOCK_LEN + 1];
//s8 padding3[3];
};
typedef void(*SceNpCommerce2Handler)(u32 ctx_id, u32 subject_id, s32 event, s32 error_code, u32 arg);

View file

@ -0,0 +1,18 @@
#include "stdafx.h"
#include "Emu/SysCalls/Modules.h"
#include "sceNpSns.h"
//void sceNpSns_unload();
//void sceNpSns_init();
//Module sceNpSns(0x0059, sceNpSns_init, nullptr, sceNpSns_unload);
Module *sceNpSns = nullptr;
void sceNpSns_unload()
{
// TODO: Unload SNS module
}
void sceNpSns_init()
{
// TODO: Register SNS module functions here
}

View file

@ -0,0 +1,38 @@
#pragma once
// Return codes
enum
{
SCE_NP_SNS_ERROR_UNKNOWN = 0x80024501,
SCE_NP_SNS_ERROR_NOT_SIGN_IN = 0x80024502,
SCE_NP_SNS_ERROR_INVALID_ARGUMENT = 0x80024503,
SCE_NP_SNS_ERROR_OUT_OF_MEMORY = 0x80024504,
SCE_NP_SNS_ERROR_SHUTDOWN = 0x80024505,
SCE_NP_SNS_ERROR_BUSY = 0x80024506,
SCE_NP_SNS_FB_ERROR_ALREADY_INITIALIZED = 0x80024511,
SCE_NP_SNS_FB_ERROR_NOT_INITIALIZED = 0x80024512,
SCE_NP_SNS_FB_ERROR_EXCEEDS_MAX = 0x80024513,
SCE_NP_SNS_FB_ERROR_UNKNOWN_HANDLE = 0x80024514,
SCE_NP_SNS_FB_ERROR_ABORTED = 0x80024515,
SCE_NP_SNS_FB_ERROR_ALREADY_ABORTED = 0x80024516,
SCE_NP_SNS_FB_ERROR_CONFIG_DISABLED = 0x80024517,
SCE_NP_SNS_FB_ERROR_FBSERVER_ERROR_RESPONSE = 0x80024518,
SCE_NP_SNS_FB_ERROR_THROTTLE_CLOSED = 0x80024519,
SCE_NP_SNS_FB_ERROR_OPERATION_INTERVAL_VIOLATION = 0x8002451a,
SCE_NP_SNS_FB_ERROR_UNLOADED_THROTTLE = 0x8002451b,
SCE_NP_SNS_FB_ERROR_ACCESS_NOT_ALLOWED = 0x8002451c,
};
// Constants for SNS functions
enum
{
SCE_NP_SNS_FB_INVALID_HANDLE = 0,
SCE_NP_SNS_FB_HANDLE_SLOT_MAX = 4,
};
// Intilization parameters for functionalities coordinated with Facebook
struct SceNpSnsFbInitParams
{
be_t<u32> pool;
be_t<u32> poolSize;
};

View file

@ -8,6 +8,7 @@
#include "Emu/SysCalls/Modules.h"
#include "Emu/FS/vfsDir.h"
#include "cellRtc.h"
#include "sceNp.h"
#include "sceNpTrophy.h"

View file

@ -1,6 +1,6 @@
#pragma once
#include "cellRtc.h"
// Error codes
enum
{
SCE_NP_TROPHY_ERROR_ALREADY_INITIALIZED = 0x80022901,

View file

@ -0,0 +1,397 @@
#include "stdafx.h"
#include "Emu/SysCalls/Modules.h"
#include "cellRtc.h"
#include "sceNp.h"
#include "sceNpTus.h"
//void sceNpTus_unload();
//void sceNpTus_init();
//Module sceNpTus(0x0045, sceNpTus_init, nullptr, sceNpTus_unload);
Module *sceNpTus = nullptr;
int sceNpTusInit()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusTerm()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusCreateTitleCtx()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusDestroyTitleCtx()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusCreateTransactionCtx()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusDestroyTransactionCtx()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusSetTimeout()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusAbortTransaction()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusWaitAsync()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusPollAsync()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusSetMultiSlotVariable()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusSetMultiSlotVariableVUser()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusSetMultiSlotVariableAsync()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusSetMultiSlotVariableVUserAsync()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusGetMultiSlotVariable()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusGetMultiSlotVariableVUser()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusGetMultiSlotVariableAsync()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusGetMultiSlotVariableVUserAsync()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusGetMultiUserVariable()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusGetMultiUserVariableVUser()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusGetMultiUserVariableAsync()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusGetMultiUserVariableVUserAsync()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusAddAndGetVariable()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusAddAndGetVariableVUser()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusAddAndGetVariableAsync()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusAddAndGetVariableVUserAsync()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusTryAndSetVariable()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusTryAndSetVariableVUser()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusTryAndSetVariableAsync()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusTryAndSetVariableVUserAsync()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusDeleteMultiSlotVariable()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusDeleteMultiSlotVariableVUser()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusDeleteMultiSlotVariableAsync()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusDeleteMultiSlotVariableVUserAsync()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusSetData()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusSetDataVUser()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusSetDataAsync()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusSetDataVUserAsync()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusGetData()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusGetDataVUser()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusGetDataAsync()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusGetDataVUserAsync()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusGetMultiSlotDataStatus()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusGetMultiSlotDataStatusVUser()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusGetMultiSlotDataStatusAsync()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusGetMultiSlotDataStatusVUserAsync()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusGetMultiUserDataStatus()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusGetMultiUserDataStatusVUser()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusGetMultiUserDataStatusAsync()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusGetMultiUserDataStatusVUserAsync()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusDeleteMultiSlotData()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusDeleteMultiSlotDataVUser()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusDeleteMultiSlotDataAsync()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
int sceNpTusDeleteMultiSlotDataVUserAsync()
{
UNIMPLEMENTED_FUNC(sceNpTus);
return CELL_OK;
}
void sceNpTus_unload()
{
// TODO: Unload Tus module
}
void sceNpTus_init()
{
sceNpTus->AddFunc(0x8f87a06b, sceNpTusInit);
sceNpTus->AddFunc(0x225aed26, sceNpTusTerm);
sceNpTus->AddFunc(0x7caf58ee, sceNpTusCreateTitleCtx);
sceNpTus->AddFunc(0x2e162a62, sceNpTusDestroyTitleCtx);
sceNpTus->AddFunc(0x1904435e, sceNpTusCreateTransactionCtx);
sceNpTus->AddFunc(0x44eca8b4, sceNpTusDestroyTransactionCtx);
sceNpTus->AddFunc(0x59432970, sceNpTusSetTimeout);
sceNpTus->AddFunc(0x325c6284, sceNpTusAbortTransaction);
sceNpTus->AddFunc(0xb8e8ff22, sceNpTusWaitAsync);
sceNpTus->AddFunc(0x19bce18c, sceNpTusPollAsync);
sceNpTus->AddFunc(0xcc86a8f6, sceNpTusSetMultiSlotVariable);
sceNpTus->AddFunc(0xf819be91, sceNpTusSetMultiSlotVariableVUser);
sceNpTus->AddFunc(0x065b610d, sceNpTusSetMultiSlotVariableAsync);
sceNpTus->AddFunc(0x96a06212, sceNpTusSetMultiSlotVariableVUserAsync);
sceNpTus->AddFunc(0x0423e622, sceNpTusGetMultiSlotVariable);
sceNpTus->AddFunc(0x2357ba9e, sceNpTusGetMultiSlotVariableVUser);
sceNpTus->AddFunc(0xbb2877f2, sceNpTusGetMultiSlotVariableAsync);
sceNpTus->AddFunc(0xfc7d346e, sceNpTusGetMultiSlotVariableVUserAsync);
sceNpTus->AddFunc(0x0d15043b, sceNpTusGetMultiUserVariable);
sceNpTus->AddFunc(0x6c511024, sceNpTusGetMultiUserVariableVUser);
sceNpTus->AddFunc(0xcc7a31cd, sceNpTusGetMultiUserVariableAsync);
sceNpTus->AddFunc(0x9549d22c, sceNpTusGetMultiUserVariableVUserAsync);
sceNpTus->AddFunc(0x94989003, sceNpTusAddAndGetVariable);
sceNpTus->AddFunc(0xf60be06f, sceNpTusAddAndGetVariableVUser);
sceNpTus->AddFunc(0x1fa5c87d, sceNpTusAddAndGetVariableAsync);
sceNpTus->AddFunc(0xa7993bf3, sceNpTusAddAndGetVariableVUserAsync);
sceNpTus->AddFunc(0x47e9424a, sceNpTusTryAndSetVariable);
sceNpTus->AddFunc(0x3602bc80, sceNpTusTryAndSetVariableVUser);
sceNpTus->AddFunc(0xbbb244b7, sceNpTusTryAndSetVariableAsync);
sceNpTus->AddFunc(0x17db7aa7, sceNpTusTryAndSetVariableVUserAsync);
sceNpTus->AddFunc(0xaf985783, sceNpTusDeleteMultiSlotVariable);
sceNpTus->AddFunc(0xc4e51fbf, sceNpTusDeleteMultiSlotVariableVUser);
sceNpTus->AddFunc(0xf5363608, sceNpTusDeleteMultiSlotVariableAsync);
sceNpTus->AddFunc(0xc2e18da8, sceNpTusDeleteMultiSlotVariableVUserAsync);
sceNpTus->AddFunc(0x7d5f0f0e, sceNpTusSetData);
sceNpTus->AddFunc(0x0835deb2, sceNpTusSetDataVUser);
sceNpTus->AddFunc(0xe847341f, sceNpTusSetDataAsync);
sceNpTus->AddFunc(0x9cc0cf44, sceNpTusSetDataVUserAsync);
sceNpTus->AddFunc(0x8ddd0d85, sceNpTusGetData);
sceNpTus->AddFunc(0xae4e590e, sceNpTusGetDataVUser);
sceNpTus->AddFunc(0x5175abb9, sceNpTusGetDataAsync);
sceNpTus->AddFunc(0x38f364b0, sceNpTusGetDataVUserAsync);
sceNpTus->AddFunc(0xc848d425, sceNpTusGetMultiSlotDataStatus);
sceNpTus->AddFunc(0xa3abfadb, sceNpTusGetMultiSlotDataStatusVUser);
sceNpTus->AddFunc(0x651fd79f, sceNpTusGetMultiSlotDataStatusAsync);
sceNpTus->AddFunc(0x2ab21ea9, sceNpTusGetMultiSlotDataStatusVUserAsync);
sceNpTus->AddFunc(0x348dbcb4, sceNpTusGetMultiUserDataStatus);
sceNpTus->AddFunc(0x2d1b9f1a, sceNpTusGetMultiUserDataStatusVUser);
sceNpTus->AddFunc(0xc66ba67e, sceNpTusGetMultiUserDataStatusAsync);
sceNpTus->AddFunc(0x368fec59, sceNpTusGetMultiUserDataStatusVUserAsync);
sceNpTus->AddFunc(0xe0719847, sceNpTusDeleteMultiSlotData);
sceNpTus->AddFunc(0x01711e81, sceNpTusDeleteMultiSlotDataVUser);
sceNpTus->AddFunc(0x3175af23, sceNpTusDeleteMultiSlotDataAsync);
sceNpTus->AddFunc(0xc815b219, sceNpTusDeleteMultiSlotDataVUserAsync);
}

View file

@ -0,0 +1,46 @@
#pragma once
// Constants for TUS functions and structures
enum
{
SCE_NP_TUS_DATA_INFO_MAX_SIZE = 384,
SCE_NP_TUS_MAX_CTX_NUM = 32,
SCE_NP_TUS_MAX_SLOT_NUM_PER_TRANS = 64,
SCE_NP_TUS_MAX_USER_NUM_PER_TRANS = 101,
};
SceNpOnlineId SceNpTusVirtualUserId;
// Structure for representing a TUS variable
struct SceNpTusVariable
{
SceNpId ownerId;
be_t<s32> hasData;
//u8 pad[4];
CellRtcTick lastChangedDate;
SceNpId lastChangedAuthorId;
be_t<s64> variable;
be_t<s64> oldVariable;
//u8 reserved[16];
};
// Structure for representing the accessory information of a TUS data
struct SceNpTusDataInfo
{
be_t<u32> infoSize;
//u8 pad[4];
u8 data[SCE_NP_TUS_DATA_INFO_MAX_SIZE];
};
// Structure for respreseting the status of TUS data
struct SceNpTusDataStatus
{
SceNpId ownerId;
be_t<s32> hasData;
CellRtcTick lastChangedDate;
SceNpId lastChangedAuthorId;
be_t<u32> data;
be_t<u32> dataSize;
//u8 pad[4];
SceNpTusDataInfo info;
};

View file

@ -193,8 +193,8 @@ static func_caller* sc_table[kSyscallTableLength] =
bind_func(sys_spu_thread_group_start), //173 (0x0AD)
bind_func(sys_spu_thread_group_suspend), //174 (0x0AE)
bind_func(sys_spu_thread_group_resume), //175 (0x0AF)
null_func,//bind_func(sys_spu_thread_group_yield) //176 (0x0B0)
null_func,//bind_func(sys_spu_thread_group_terminate) //177 (0x0B1)
bind_func(sys_spu_thread_group_yield), //176 (0x0B0)
bind_func(sys_spu_thread_group_terminate), //177 (0x0B1)
bind_func(sys_spu_thread_group_join), //178 (0x0B2)
null_func,//bind_func(sys_spu_thread_group_set_priority)//179 (0x0B3)
null_func,//bind_func(sys_spu_thread_group_get_priority)//180 (0x0B4)

View file

@ -160,10 +160,19 @@ s32 sys_spu_thread_group_destroy(u32 id)
return CELL_ESRCH;
}
if (group_info->lock) // ???
//TODO: New method to check busy. and even maybe in other sys_spu_thread_group_ calls.
//TODO: SPU_THREAD_GROUP lock may not be gracefully implemented now.
// But it could still be set using simple way?
//Check the state it should be in NOT_INITIALIZED / INITIALIZED.
if ((group_info->m_state != SPU_THREAD_GROUP_STATUS_INITIALIZED)
&& (group_info->m_state != SPU_THREAD_GROUP_STATUS_NOT_INITIALIZED))
{
return CELL_EBUSY;
sc_spu.Error("sys_spu_thread_group_destroy(id=%d) is not in NOT_INITIALIZED / INITIALIZED, state=%d", id, group_info->m_state);
return CELL_ESTAT; //Indeed this should not be encountered. If program itself all right.
}
//SET BUSY
for (u32 i = 0; i < group_info->list.size(); i++)
{
@ -172,6 +181,9 @@ s32 sys_spu_thread_group_destroy(u32 id)
Emu.GetCPU().RemoveThread(group_info->list[i]);
}
group_info->m_state = SPU_THREAD_GROUP_STATUS_UNKNOWN;
//REMOVE BUSY
Emu.GetIdManager().RemoveID(id);
return CELL_OK;
}
@ -189,6 +201,14 @@ s32 sys_spu_thread_group_start(u32 id)
// TODO: check group state
//Check for BUSY?
//SET BUSY
//Different from what i expected. Or else there would not be any with RUNNING.
group_info->m_state = SPU_THREAD_GROUP_STATUS_READY; //Added Group State
//Notice: I can not know the action preformed below be following the definition, but left unchanged.
for (u32 i = 0; i < group_info->list.size(); i++)
{
CPUThread* t = Emu.GetCPU().GetThread(group_info->list[i]);
@ -198,6 +218,9 @@ s32 sys_spu_thread_group_start(u32 id)
}
}
group_info->m_state = SPU_THREAD_GROUP_STATUS_RUNNING; //SPU Thread Group now all in running.
//REMOVE BUSY
return CELL_OK;
}
@ -213,6 +236,17 @@ s32 sys_spu_thread_group_suspend(u32 id)
}
// TODO: check group state
//Experimental implementation for the state checking
if ((group_info->m_state != SPU_THREAD_GROUP_STATUS_READY)
&& (group_info->m_state != SPU_THREAD_GROUP_STATUS_RUNNING)
&& (group_info->m_state != SPU_THREAD_GROUP_STATUS_WAITING))
{
return CELL_ESTAT;
}
//Check for BUSY?
//SET BUSY
for (u32 i = 0; i < group_info->list.size(); i++)
{
@ -222,6 +256,18 @@ s32 sys_spu_thread_group_suspend(u32 id)
}
}
//Now the state changes.
if ((group_info->m_state == SPU_THREAD_GROUP_STATUS_READY)
|| (group_info->m_state == SPU_THREAD_GROUP_STATUS_RUNNING))
{
group_info->m_state = SPU_THREAD_GROUP_STATUS_SUSPENDED;
}
else if (group_info->m_state == SPU_THREAD_GROUP_STATUS_WAITING)
{
group_info->m_state = SPU_THREAD_GROUP_STATUS_WAITING_AND_SUSPENDED;
}
//REMOVE BUSY
return CELL_OK;
}
@ -237,6 +283,24 @@ s32 sys_spu_thread_group_resume(u32 id)
}
// TODO: check group state
if ((group_info->m_state != SPU_THREAD_GROUP_STATUS_SUSPENDED)
&& (group_info->m_state != SPU_THREAD_GROUP_STATUS_WAITING_AND_SUSPENDED))
{
return CELL_ESTAT;
}
//Maybe check for BUSY
//SET BUSY
if (group_info->m_state == SPU_THREAD_GROUP_STATUS_SUSPENDED)
{
group_info->m_state = SPU_THREAD_GROUP_STATUS_READY;
}
else if (group_info->m_state == SPU_THREAD_GROUP_STATUS_WAITING_AND_SUSPENDED)
{
group_info->m_state = SPU_THREAD_GROUP_STATUS_WAITING;
}
for (u32 i = 0; i < group_info->list.size(); i++)
{
@ -246,6 +310,94 @@ s32 sys_spu_thread_group_resume(u32 id)
}
}
if (group_info->m_state == SPU_THREAD_GROUP_STATUS_READY)
{
group_info->m_state = SPU_THREAD_GROUP_STATUS_RUNNING;
}
//REMOVE BUSY
return CELL_OK;
}
//176: Left doing nothing, indeed
s32 sys_spu_thread_group_yield(u32 id)
{
sc_spu.Error("sys_spu_thread_group_yield(id=%d)", id);
SpuGroupInfo* group_info;
if (!Emu.GetIdManager().GetIDData(id, group_info))
{
return CELL_ESRCH;
}
////TODO::implement sys_spu_thread_group_yield.
//Sorry i don't know where to get the caller group. So Only checking.
//Removed some stupid comments.
//Check the priority of the target spu group info.
//And check the state of target spu.
//if ((group_info->m_prio < current_thread.GetPrio())
// ||(group_info->m_state != SPU_THREAD_GROUP_STATUS_READY))
//{
// return CELL_OK;
//}
////Maybe Check for BUSY
////SET BUSY
//for (u32 i = 0; i < current_group_info->list.size(); i++)
//{
//if (CPUThread* t = Emu.GetCPU().GetThread(current_group_info->list[i]))
//{
//Not finding anything that suite the yield test. Do nothing.
//t->WaitFor(group_info);
//}
//}
//Do nothing now, so not entering the WAITING state.
//current_group_info->m_state = SPU_THREAD_GROUP_STATUS_WAITING;
////CLEAR BUSY
return CELL_OK;
}
//177: Left omit the EPERM check.
s32 sys_spu_thread_group_terminate(u32 id, int value)
{
sc_spu.Error("sys_spu_thread_group_terminate(id=%d, value=%d)", id, value);
SpuGroupInfo* group_info;
if (!Emu.GetIdManager().GetIDData(id, group_info))
{
return CELL_ESRCH;
}
if ((group_info->m_state != SPU_THREAD_GROUP_STATUS_NOT_INITIALIZED)
&& (group_info->m_state != SPU_THREAD_GROUP_STATUS_INITIALIZED)
&& (group_info->m_state != SPU_THREAD_GROUP_STATUS_WAITING))
{
return CELL_ESTAT;
}
//TODO::I don't know who should i be referred to check the EPERM.
//Also i don't know how to check that is a primary or not. so disabled the EPERM check.
//Removed some stupid comments made.
//Attention. This action may not check for BUSY
//SET BUSY
for (u32 i = 0; i < group_info->list.size(); i++)
{
if (CPUThread* t = Emu.GetCPU().GetThread(group_info->list[i]))
{
t->Stop();
}
}
group_info->m_state = SPU_THREAD_GROUP_STATUS_INITIALIZED; // In initialized state but not running, maybe.
//Remove BUSY
group_info->m_exit_status = value;
////TODO::implement sys_spu_thread_group_terminate
return CELL_OK;
}
@ -280,7 +432,7 @@ s32 sys_spu_thread_group_join(u32 id, mem32_t cause, mem32_t status)
return CELL_ESRCH;
}
if (group_info->lock.exchange(1)) // acquire lock
if (group_info->lock.exchange(1)) // acquire lock TODO:: The lock might be replaced.
{
return CELL_EBUSY;
}
@ -305,7 +457,7 @@ s32 sys_spu_thread_group_join(u32 id, mem32_t cause, mem32_t status)
}
}
group_info->lock = 0; // release lock
group_info->lock = 0; // release lock TODO: this LOCK may be replaced.
return CELL_OK;
}

View file

@ -2,6 +2,17 @@
u32 LoadSpuImage(vfsStream& stream, u32& spu_ep);
enum
{
SYS_SPU_THREAD_GROUP_TYPE_NORMAL = 0x00,
SYS_SPU_THREAD_GROUP_TYPE_SEQUENTIAL = 0x01,
SYS_SPU_THREAD_GROUP_TYPE_SYSTEM = 0x02,
SYS_SPU_THREAD_GROUP_TYPE_MEMORY_FROM_CONTAINER = 0x04,
SYS_SPU_THREAD_GROUP_TYPE_NON_CONTEXT = 0x08,
SYS_SPU_THREAD_GROUP_TYPE_EXCLUSIVE_NON_CONTEXT = 0x18,
SYS_SPU_THREAD_GROUP_TYPE_COOPERATE_WITH_SYSTEM = 0x20
};
enum
{
SYS_SPU_THREAD_GROUP_JOIN_GROUP_EXIT = 0x0001,
@ -9,6 +20,18 @@ enum
SYS_SPU_THREAD_GROUP_JOIN_TERMINATED = 0x0004
};
enum {
SPU_THREAD_GROUP_STATUS_NOT_INITIALIZED,
SPU_THREAD_GROUP_STATUS_INITIALIZED,
SPU_THREAD_GROUP_STATUS_READY,
SPU_THREAD_GROUP_STATUS_WAITING,
SPU_THREAD_GROUP_STATUS_SUSPENDED,
SPU_THREAD_GROUP_STATUS_WAITING_AND_SUSPENDED,
SPU_THREAD_GROUP_STATUS_RUNNING,
SPU_THREAD_GROUP_STATUS_STOPPED,
SPU_THREAD_GROUP_STATUS_UNKNOWN
};
enum
{
SYS_SPU_SEGMENT_TYPE_COPY = 0x0001,
@ -65,6 +88,8 @@ struct SpuGroupInfo
int m_type;
int m_ct;
u32 m_count;
int m_state; //SPU Thread Group State.
int m_exit_status;
SpuGroupInfo(const std::string& name, u32 num, int prio, int type, u32 ct)
: m_name(name)
@ -74,8 +99,11 @@ struct SpuGroupInfo
, lock(0)
, m_count(num)
{
m_state = SPU_THREAD_GROUP_STATUS_NOT_INITIALIZED; //Before all the nums done, it is not initialized.
list.resize(256);
for (auto& v : list) v = 0;
m_state = SPU_THREAD_GROUP_STATUS_INITIALIZED; //Then Ready to Start. Cause Reference use New i can only place this here.
m_exit_status = 0;
}
};
@ -88,6 +116,8 @@ s32 sys_spu_thread_group_destroy(u32 id);
s32 sys_spu_thread_group_start(u32 id);
s32 sys_spu_thread_group_suspend(u32 id);
s32 sys_spu_thread_group_resume(u32 id);
s32 sys_spu_thread_group_yield(u32 id);
s32 sys_spu_thread_group_terminate(u32 id, int value);
s32 sys_spu_thread_group_create(mem32_t id, u32 num, int prio, mem_ptr_t<sys_spu_thread_group_attribute> attr);
s32 sys_spu_thread_create(mem32_t thread_id, mem32_t entry, u64 arg, int prio, u32 stacksize, u64 flags, u32 threadname_addr);
s32 sys_spu_thread_group_join(u32 id, mem32_t cause, mem32_t status);

View file

@ -0,0 +1,299 @@
#include "stdafx.h"
#include "Emu/System.h"
#include "AutoPauseManager.h"
enum
{
id_add,
id_remove,
id_config
};
//TODO::Get the enable configuration from ini.
AutoPauseManagerDialog::AutoPauseManagerDialog(wxWindow* parent)
: wxDialog(parent, wxID_ANY, "Auto-Pause Manager")
{
SetMinSize(wxSize(400, 360));
wxBoxSizer* s_main = new wxBoxSizer(wxVERTICAL);
m_entry_convert.clear();
m_entry_convert.str("");
m_entry_convert << "To use Auto-Pause: need the IDs of Function call or System call. Need Restart game."
<< " Disable/enable using setting Misc.";
wxStaticText* s_description = new wxStaticText(this, wxID_ANY, m_entry_convert.str(),wxDefaultPosition, wxDefaultSize, 0);
s_description->Wrap(400);
s_main->Add(s_description, 0, wxALL, 5);
m_list = new wxListView(this);
m_list->InsertColumn(0, "Call ID");
m_list->InsertColumn(1, "Type");
m_list->Bind(wxEVT_LIST_ITEM_ACTIVATED, &AutoPauseManagerDialog::OnEntryConfig, this);
m_list->Bind(wxEVT_RIGHT_DOWN, &AutoPauseManagerDialog::OnRightClick, this);
s_main->Add(m_list, 1, wxALL | wxEXPAND, 5);
wxBoxSizer* s_action = new wxBoxSizer(wxHORIZONTAL);
s_action->Add(new wxButton(this, wxID_CLEAR, wxT("Cl&ear"), wxDefaultPosition, wxDefaultSize, 0), 0, wxALL, 5);
s_action->Add(new wxButton(this, wxID_REFRESH, wxT("&Reload"), wxDefaultPosition, wxDefaultSize, 0), 0, wxALL, 5);
s_action->Add(new wxButton(this, wxID_SAVE, wxT("&Save"), wxDefaultPosition, wxDefaultSize, 0), 0, wxALL, 5);
s_action->Add(new wxButton(this, wxID_CANCEL, wxT("&Close"), wxDefaultPosition, wxDefaultSize, 0), 0, wxALL, 5);
s_main->Add(s_action, 0, wxALL, 5);
Bind(wxEVT_MENU, &AutoPauseManagerDialog::OnAdd, this, id_add);
Bind(wxEVT_MENU, &AutoPauseManagerDialog::OnRemove, this, id_remove);
Bind(wxEVT_MENU, &AutoPauseManagerDialog::OnEntryConfig, this, id_config);
Bind(wxEVT_BUTTON, &AutoPauseManagerDialog::OnClear, this, wxID_CLEAR);
Bind(wxEVT_BUTTON, &AutoPauseManagerDialog::OnReload, this, wxID_REFRESH);
Bind(wxEVT_BUTTON, &AutoPauseManagerDialog::OnSave, this, wxID_SAVE);
Emu.Stop();
LoadEntries();
UpdateList();
SetSizerAndFit(s_main);
Layout();
Centre(wxBOTH);
}
//Copied some from AutoPause.
void AutoPauseManagerDialog::LoadEntries(void)
{
m_entries.clear();
m_entries.reserve(16);
if (rExists("pause.bin"))
{
rFile list;
list.Open("pause.bin", rFile::read);
//System calls ID and Function calls ID are all u32 iirc.
u32 num;
size_t fmax = list.Length();
size_t fcur = 0;
list.Seek(0);
while (fcur <= fmax - sizeof(u32))
{
list.Read(&num, sizeof(u32));
fcur += sizeof(u32);
if (num == 0xFFFFFFFF) break;
m_entries.emplace_back(num);
}
list.Close();
}
}
//Copied some from AutoPause.
//Tip: This one doesn't check for the file is being read or not.
//This would always use a 0xFFFFFFFF as end of the pause.bin
void AutoPauseManagerDialog::SaveEntries(void)
{
if (rExists("pause.bin"))
{
rRemoveFile("pause.bin");
}
rFile list;
list.Open("pause.bin", rFile::write);
//System calls ID and Function calls ID are all u32 iirc.
u32 num = 0;
list.Seek(0);
for (size_t i = 0; i < m_entries.size(); ++i)
{
if (num == 0xFFFFFFFF) continue;
num = m_entries[i];
list.Write(&num, sizeof(u32));
}
num = 0xFFFFFFFF;
list.Write(&num, sizeof(u32));
list.Close();
}
void AutoPauseManagerDialog::UpdateList(void)
{
m_list->Freeze();
m_list->DeleteAllItems();
for (size_t i = 0; i < m_entries.size(); ++i)
{
m_list->InsertItem(i, i);
if (m_entries[i] != 0xFFFFFFFF)
{
m_entry_convert.clear();
m_entry_convert.str("");
m_entry_convert << std::hex << std::setw(8) << std::setfill('0') << m_entries[i];
m_list->SetItem(i, 0, m_entry_convert.str());
}
else
{
m_list->SetItem(i, 0, "Unset");
}
if (m_entries[i] < 1024)
{
m_list->SetItem(i, 1, "System Call");
}
else
{
m_list->SetItem(i, 1, "Function Call");
}
}
m_list->SetColumnWidth(0, wxLIST_AUTOSIZE_USEHEADER);
m_list->SetColumnWidth(1, wxLIST_AUTOSIZE_USEHEADER);
m_list->Thaw();
}
void AutoPauseManagerDialog::OnEntryConfig(wxCommandEvent& event)
{
int idx = m_list->GetFirstSelected();
if (idx != wxNOT_FOUND)
{
AutoPauseSettingsDialog(this, &m_entries[idx]).ShowModal();
UpdateList();
}
}
void AutoPauseManagerDialog::OnRightClick(wxMouseEvent& event)
{
wxMenu* menu = new wxMenu();
int idx = m_list->GetFirstSelected();
menu->Append(id_add, "&Add");
menu->Append(id_remove, "&Remove")->Enable(idx != wxNOT_FOUND);
menu->AppendSeparator();
menu->Append(id_config, "&Config")->Enable(idx != wxNOT_FOUND);
PopupMenu(menu);
}
void AutoPauseManagerDialog::OnAdd(wxCommandEvent& event)
{
m_entries.emplace_back(0xFFFFFFFF);
UpdateList();
u32 idx = m_entries.size() - 1;
for (int i = 0; i < m_list->GetItemCount(); ++i)
{
m_list->SetItemState(i, i == idx ? wxLIST_STATE_SELECTED : ~wxLIST_STATE_SELECTED, wxLIST_STATE_SELECTED);
}
wxCommandEvent ce;
OnEntryConfig(ce);
}
void AutoPauseManagerDialog::OnRemove(wxCommandEvent& event)
{
for (int sel = m_list->GetNextSelected(-1), offs = 0; sel != wxNOT_FOUND; sel = m_list->GetNextSelected(sel), --offs)
{
m_entries.erase(m_entries.begin() + (sel + offs));
}
UpdateList();
}
void AutoPauseManagerDialog::OnSave(wxCommandEvent& event)
{
SaveEntries();
LOG_SUCCESS(HLE,"Auto-Pause: File pause.bin was updated.");
//event.Skip();
}
void AutoPauseManagerDialog::OnClear(wxCommandEvent& event)
{
m_entries.clear();
UpdateList();
}
void AutoPauseManagerDialog::OnReload(wxCommandEvent& event)
{
LoadEntries();
UpdateList();
}
AutoPauseSettingsDialog::AutoPauseSettingsDialog(wxWindow* parent, u32 *entry)
: wxDialog(parent, wxID_ANY, "Auto-Pause Setting")
, m_presult(entry)
{
m_entry = *m_presult;
//SetSizeHints(wxSize(400, -1), wxDefaultSize);
SetMinSize(wxSize(400, -1));
wxBoxSizer* s_main = new wxBoxSizer(wxVERTICAL);
m_entry_convert.clear();
m_entry_convert.str("");
m_entry_convert << "Specify ID of System Call or Function Call below."
<< " Please remember give the Hexidemical id.";
wxStaticText* s_description = new wxStaticText(this, wxID_ANY, m_entry_convert.str(), wxDefaultPosition, wxDefaultSize, 0);
s_description->Wrap(400);
s_main->Add(s_description, 0, wxALL, 5);
wxBoxSizer* s_config = new wxBoxSizer(wxHORIZONTAL);
m_id = new wxTextCtrl(this, wxID_STATIC, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0);
s_config->Add(m_id, 1, wxALL | wxEXPAND, 5);
s_config->Add(new wxButton(this, wxID_OK, wxT("&OK"), wxDefaultPosition, wxDefaultSize, 0), 0, wxALL, 5);
s_config->Add(new wxButton(this, wxID_CANCEL, wxT("&Cancel"), wxDefaultPosition, wxDefaultSize, 0), 0, wxALL, 5);
s_main->Add(s_config, 0, wxEXPAND, 5);
m_current_converted = new wxStaticText(this, wxID_ANY, wxT("Currently it gets an id of \"Unset\"."), wxDefaultPosition, wxDefaultSize, 0);
s_main->Add(m_current_converted, 0, wxALL, 5);
m_entry_convert.clear();
m_entry_convert.str("");
m_entry_convert << std::hex << std::setw(8) << std::setfill('0') << m_entry;
m_id->SetValue(m_entry_convert.str());
SetTitle("Auto-Pause Setting: "+m_entry_convert.str());
Bind(wxEVT_BUTTON, &AutoPauseSettingsDialog::OnOk, this, wxID_OK);
Bind(wxEVT_TEXT, &AutoPauseSettingsDialog::OnUpdateValue, this, wxID_STATIC);
SetSizerAndFit(s_main);
//SetSize(wxSize(400, -1));
Layout();
Centre(wxBOTH);
wxCommandEvent ce;
OnUpdateValue(ce);
}
void AutoPauseSettingsDialog::OnOk(wxCommandEvent& event)
{
//Luckily StringStream omit those not hex.
m_entry_convert.clear();
m_entry_convert.str("");
m_entry_convert << std::hex << m_id->GetValue();
m_entry_convert >> m_entry;
*m_presult = m_entry;
EndModal(wxID_OK);
}
void AutoPauseSettingsDialog::OnUpdateValue(wxCommandEvent& event)
{
//Luckily StringStream omit those not hex.
m_entry_convert.clear();
m_entry_convert.str("");
m_entry_convert << std::hex << m_id->GetValue();
m_entry_convert >> m_entry;
m_entry_convert.clear();
m_entry_convert.str("");
m_entry_convert << std::hex << /*std::setw(8) << std::setfill('0') <<*/ m_entry;
m_entry_convert.clear();
if (m_entry_convert.str() == m_id->GetValue())
{
m_current_converted->SetLabelText("Currently it gets an id of \"" + m_entry_convert.str() + "\" - SAME.");
}
else {
m_current_converted->SetLabelText("Currently it gets an id of \"" + m_entry_convert.str() + "\".");
}
event.Skip();
}

View file

@ -0,0 +1,45 @@
#pragma once
#include "stdafx.h"
#include <iomanip>
#include <sstream>
#include "Utilities/Log.h"
#include "Utilities/rFile.h"
class AutoPauseManagerDialog : public wxDialog
{
wxListView *m_list;
std::vector<u32> m_entries;
//Used when i want to convert u32 id to string
std::stringstream m_entry_convert;
public:
AutoPauseManagerDialog(wxWindow* parent);
void UpdateList(void);
void OnEntryConfig(wxCommandEvent& event);
void OnRightClick(wxMouseEvent& event);
void OnAdd(wxCommandEvent& event);
void OnRemove(wxCommandEvent& event);
void OnClear(wxCommandEvent& event);
void OnReload(wxCommandEvent& event);
void OnSave(wxCommandEvent& event);
void LoadEntries(void);
void SaveEntries(void);
};
class AutoPauseSettingsDialog : public wxDialog
{
u32 m_entry;
u32 *m_presult;
wxTextCtrl* m_id;
wxStaticText* m_current_converted;
std::stringstream m_entry_convert;
public:
AutoPauseSettingsDialog(wxWindow* parent, u32 *entry);
void OnOk(wxCommandEvent& event);
void OnUpdateValue(wxCommandEvent& event);
};

View file

@ -16,6 +16,8 @@
#include "Gui/VFSManager.h"
#include "Gui/AboutDialog.h"
#include "Gui/GameViewer.h"
#include "Gui/AutoPauseManager.h"
#include "Gui/SaveDataUtility.h"
#include <wx/dynlib.h>
#include "Loader/PKG.h"
@ -37,6 +39,8 @@ enum IDs
id_config_pad,
id_config_vfs_manager,
id_config_vhdd_manager,
id_config_autopause_manager,
id_config_savedata_manager,
id_tools_compiler,
id_tools_memory_viewer,
id_tools_rsx_debugger,
@ -85,8 +89,11 @@ MainFrame::MainFrame()
menu_conf->Append(id_config_emu, "Settings");
menu_conf->Append(id_config_pad, "PAD Settings");
menu_conf->AppendSeparator();
menu_conf->Append(id_config_autopause_manager, "Auto-Pause Settings");
menu_conf->AppendSeparator();
menu_conf->Append(id_config_vfs_manager, "Virtual File System Manager");
menu_conf->Append(id_config_vhdd_manager, "Virtual HDD Manager");
menu_conf->Append(id_config_savedata_manager, "Save Data Utility");
wxMenu* menu_tools = new wxMenu();
menubar->Append(menu_tools, "Tools");
@ -123,6 +130,8 @@ MainFrame::MainFrame()
Bind(wxEVT_MENU, &MainFrame::ConfigPad, this, id_config_pad);
Bind(wxEVT_MENU, &MainFrame::ConfigVFS, this, id_config_vfs_manager);
Bind(wxEVT_MENU, &MainFrame::ConfigVHDD, this, id_config_vhdd_manager);
Bind(wxEVT_MENU, &MainFrame::ConfigAutoPause, this, id_config_autopause_manager);
Bind(wxEVT_MENU, &MainFrame::ConfigSaveData, this, id_config_savedata_manager);
Bind(wxEVT_MENU, &MainFrame::OpenELFCompiler, this, id_tools_compiler);
Bind(wxEVT_MENU, &MainFrame::OpenMemoryViewer, this, id_tools_memory_viewer);
@ -389,6 +398,9 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event))
wxCheckBox* chbox_hle_savetty = new wxCheckBox(p_hle, wxID_ANY, "Save TTY output to file");
wxCheckBox* chbox_hle_exitonstop = new wxCheckBox(p_hle, wxID_ANY, "Exit RPCS3 when process finishes");
wxCheckBox* chbox_hle_always_start = new wxCheckBox(p_hle, wxID_ANY, "Always start after boot");
//Auto-Pause related
wxCheckBox* chbox_dbg_ap_systemcall = new wxCheckBox(p_hle, wxID_ANY, "Auto-Pause at System Call");
wxCheckBox* chbox_dbg_ap_functioncall = new wxCheckBox(p_hle, wxID_ANY, "Auto-Pause at Function Call");
cbox_cpu_decoder->Append("PPU Interpreter & DisAsm");
cbox_cpu_decoder->Append("PPU Interpreter");
@ -464,6 +476,9 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event))
chbox_hle_savetty ->SetValue(Ini.HLESaveTTY.GetValue());
chbox_hle_exitonstop ->SetValue(Ini.HLEExitOnStop.GetValue());
chbox_hle_always_start ->SetValue(Ini.HLEAlwaysStart.GetValue());
//Auto-Pause related
chbox_dbg_ap_systemcall ->SetValue(Ini.DBGAutoPauseSystemCall.GetValue());
chbox_dbg_ap_functioncall->SetValue(Ini.DBGAutoPauseFunctionCall.GetValue());
cbox_cpu_decoder ->SetSelection(Ini.CPUDecoderMode.GetValue() ? Ini.CPUDecoderMode.GetValue() - 1 : 0);
cbox_spu_decoder ->SetSelection(Ini.SPUDecoderMode.GetValue() ? Ini.SPUDecoderMode.GetValue() - 1 : 0);
@ -532,6 +547,9 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event))
s_subpanel_hle->Add(chbox_hle_savetty, wxSizerFlags().Border(wxALL, 5).Expand());
s_subpanel_hle->Add(chbox_hle_exitonstop, wxSizerFlags().Border(wxALL, 5).Expand());
s_subpanel_hle->Add(chbox_hle_always_start, wxSizerFlags().Border(wxALL, 5).Expand());
//Auto-Pause
s_subpanel_hle->Add(chbox_dbg_ap_systemcall, wxSizerFlags().Border(wxALL, 5).Expand());
s_subpanel_hle->Add(chbox_dbg_ap_functioncall, wxSizerFlags().Border(wxALL, 5).Expand());
// System
s_subpanel_system->Add(s_round_sys_lang, wxSizerFlags().Border(wxALL, 5).Expand());
@ -576,6 +594,9 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event))
Ini.HLELogLvl.SetValue(cbox_hle_loglvl->GetSelection());
Ini.SysLanguage.SetValue(cbox_sys_lang->GetSelection());
Ini.HLEAlwaysStart.SetValue(chbox_hle_always_start->GetValue());
//Auto-Pause
Ini.DBGAutoPauseFunctionCall.SetValue(chbox_dbg_ap_functioncall->GetValue());
Ini.DBGAutoPauseSystemCall.SetValue(chbox_dbg_ap_systemcall->GetValue());
Ini.Save();
}
@ -598,6 +619,16 @@ void MainFrame::ConfigVHDD(wxCommandEvent& WXUNUSED(event))
VHDDManagerDialog(this).ShowModal();
}
void MainFrame::ConfigAutoPause(wxCommandEvent& WXUNUSED(event))
{
AutoPauseManagerDialog(this).ShowModal();
}
void MainFrame::ConfigSaveData(wxCommandEvent& event)
{
SaveDataListDialog(this, true).ShowModal();
}
void MainFrame::OpenELFCompiler(wxCommandEvent& WXUNUSED(event))
{
(new CompilerELF(this)) -> Show();

View file

@ -38,6 +38,8 @@ private:
void ConfigPad(wxCommandEvent& event);
void ConfigVFS(wxCommandEvent& event);
void ConfigVHDD(wxCommandEvent& event);
void ConfigAutoPause(wxCommandEvent& event);
void ConfigSaveData(wxCommandEvent& event);
void OpenELFCompiler(wxCommandEvent& evt);
void OpenMemoryViewer(wxCommandEvent& evt);
void OpenRSXDebugger(wxCommandEvent& evt);

View file

@ -0,0 +1,340 @@
#include "stdafx.h"
#include "SaveDataUtility.h"
//Cause i can not decide what struct to be used to fill those. Just use no real data now.
//Currently variable info isn't used. it supposed to be a container for the information passed by other.
SaveDataInfoDialog::SaveDataInfoDialog(wxWindow* parent, const SaveDataInformation& info)
: wxDialog(parent, wxID_ANY, "Save Data Information")
{
SetMinSize(wxSize(400, 300));
wxBoxSizer* s_main = new wxBoxSizer(wxVERTICAL);
m_list = new wxListView(this);
m_list->InsertColumn(0, "Name");
m_list->InsertColumn(1, "Detail");
s_main->Add(m_list, 1, wxALL | wxEXPAND, 5);
wxBoxSizer* s_actions = new wxBoxSizer(wxHORIZONTAL);
s_actions->Add(0, 0, 1, wxEXPAND, 5); //Add a spacer to make Close on the Right-Down corner of this dialog.
s_actions->Add(new wxButton(this, wxID_CANCEL, wxT("&Close"), wxDefaultPosition, wxDefaultSize, 0), 0, wxALL, 5);
s_main->Add(s_actions, 0, wxEXPAND, 5);
SetSizerAndFit(s_main);
Layout();
Centre(wxBOTH);
SetSize(wxSize(400, 300));
UpdateData();
}
//This is intended to write the information of save data to wxListView.
//However been not able to decide which data struct i should use, i use static content for this to make it stub.
void SaveDataInfoDialog::UpdateData()
{
m_list->Freeze();
m_list->DeleteAllItems();
m_list->InsertItem(0, 0);
m_list->SetItem(0, 0, "User ID");
m_list->SetItem(0, 1, "00000000 (None)");
m_list->InsertItem(1, 1);
m_list->SetItem(1, 0, "Game Title");
m_list->SetItem(1, 1, "Happy with rpcs3 (free)");
m_list->InsertItem(2, 2);
m_list->SetItem(2, 0, "Subtitle");
m_list->SetItem(2, 1, "You devs are great");
m_list->InsertItem(3, 3);
m_list->SetItem(3, 0, "Detail");
m_list->SetItem(3, 1, "Stub it first");
m_list->InsertItem(4, 4);
m_list->SetItem(4, 0, "Copy-Able?");
m_list->SetItem(4, 1, "1 (Not allowed)");
m_list->InsertItem(5, 5);
m_list->SetItem(5, 0, "Play Time");
m_list->SetItem(5, 1, "00:00:00");
//Maybe there should be more details of save data.
//But i'm getting bored for assign it one by one.
m_list->SetColumnWidth(0, wxLIST_AUTOSIZE_USEHEADER);
m_list->SetColumnWidth(1, wxLIST_AUTOSIZE_USEHEADER);
m_list->Thaw();
}
//This dialog represents the Menu of Save Data Utility - which pop up after when you roll to a save and press triangle.
//I've ever thought of make it a right-click menu or a show-hide panel of the main dialog.
//Well only when those function calls related get implemented we can tell what this GUI should be, seriously.
SaveDataManageDialog::SaveDataManageDialog(wxWindow* parent, unsigned int* sort_type, SaveDataEntry& save)
: wxDialog(parent, wxID_ANY, "Save Data Pop-up Menu")
{
SetMinSize(wxSize(400, 110));
wxBoxSizer* s_manage = new wxBoxSizer(wxVERTICAL);
wxBoxSizer* s_sort = new wxBoxSizer(wxHORIZONTAL);
s_sort->Add(new wxStaticText(this, wxID_ANY, wxT("Sort By"), wxDefaultPosition, wxDefaultSize, 0), 0, wxALL | wxEXPAND, 5);
m_sort_options = new wxComboBox(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_DROPDOWN | wxCB_READONLY);
//You might change this - of corse we should know what to been set - maybe after functions related been implemented.
m_sort_options->Append(wxT("User Id"));
m_sort_options->Append(wxT("Game Title"));
m_sort_options->Append(wxT("Game Subtitle"));
m_sort_options->Append(wxT("Play Time"));
m_sort_options->Append(wxT("Data Size"));
m_sort_options->Append(wxT("Last Modified"));
m_sort_options->Append(wxT("Created Time"));
m_sort_options->Append(wxT("Accessed Time"));
m_sort_options->Append(wxT("Modified Time"));
m_sort_options->Append(wxT("Modify Time"));
m_sort_type = sort_type;
if (m_sort_type != nullptr)
{
//Check sort type and set it to combo box
if (*m_sort_type >= m_sort_options->GetCount())
{
*m_sort_type = 0;
}
}
m_sort_options->SetSelection(*m_sort_type);
s_sort->Add(m_sort_options, 1, wxALL | wxEXPAND, 5);
wxButton* s_sort_action = new wxButton(this, wxID_ANY, wxT("&Apply!"), wxDefaultPosition, wxDefaultSize, 0);
s_sort_action->Bind(wxEVT_BUTTON, &SaveDataManageDialog::OnApplySort, this);
s_sort->Add(s_sort_action, 0, wxALL, 5);
s_manage->Add(s_sort, 1, wxEXPAND, 5);
wxBoxSizer* s_actions = new wxBoxSizer(wxHORIZONTAL);
wxButton* s_copy = new wxButton(this, wxID_ANY, wxT("&Copy"), wxDefaultPosition, wxDefaultSize, 0);
s_copy->Bind(wxEVT_BUTTON, &SaveDataManageDialog::OnCopy, this);
s_actions->Add(s_copy, 0, wxALL, 5);
wxButton* s_delete = new wxButton(this, wxID_ANY, wxT("&Delete"), wxDefaultPosition, wxDefaultSize, 0);
s_delete->Bind(wxEVT_BUTTON, &SaveDataManageDialog::OnDelete, this);
s_actions->Add(s_delete, 0, wxALL, 5);
wxButton* s_info = new wxButton(this, wxID_ANY, wxT("&Info"), wxDefaultPosition, wxDefaultSize, 0);
s_info->Bind(wxEVT_BUTTON, &SaveDataManageDialog::OnInfo, this);
s_actions->Add(s_info, 0, wxALL, 5);
s_actions->Add(new wxButton(this, wxID_CANCEL, wxT("&Close"), wxDefaultPosition, wxDefaultSize, 0), 0, wxALL, 5);
s_manage->Add(s_actions, 1, wxEXPAND, 5);
SetSizerAndFit(s_manage);
Layout();
Center(wxBOTH);
}
//Display information about the current selected save data.
//If selected is "New Save Data" or other invalid, this dialog would be initialized with "Info" disabled or not visible.
void SaveDataManageDialog::OnInfo(wxCommandEvent& event)
{
LOG_WARNING(HLE, "Stub - SaveDataUtility: SaveDataManageDialog: OnInfo called.");
SaveDataInformation info; //It should get a real one for information.. finally
SaveDataInfoDialog(this, info).ShowModal();
}
//Copy selected save data to another. Might need a dialog but i just leave it as this. Or Modal Dialog.
void SaveDataManageDialog::OnCopy(wxCommandEvent& event)
{
LOG_WARNING(HLE, "Stub - SaveDataUtility: SaveDataManageDialog: OnCopy called.");
event.Skip();
}
//Delete selected save data, need confirm. just a stub now.
void SaveDataManageDialog::OnDelete(wxCommandEvent& event)
{
LOG_WARNING(HLE, "Stub - SaveDataUtility: SaveDataManageDialog: OnDelete called.");
event.Skip();
}
//This should return the sort setting of the save data list. Also not implemented really.
void SaveDataManageDialog::OnApplySort(wxCommandEvent& event)
{
*m_sort_type = m_sort_options->GetSelection();
LOG_WARNING(HLE, "Stub - SaveDataUtility: SaveDataManageDialog: OnApplySort called. NAME=%s",
m_sort_options->GetStringSelection().ToStdString().c_str());
//event.Skip();
}
//Show up the savedata list, either to choose one to save/load or to manage saves.
//I suggest to use function callbacks to give save data list or get save data entry. (Not implemented or stubbed)
SaveDataListDialog::SaveDataListDialog(wxWindow* parent, bool enable_manage)
: wxDialog(parent, wxID_ANY, "Save Data Utility")
{
SetMinSize(wxSize(400, 400));
wxBoxSizer* s_main = new wxBoxSizer(wxVERTICAL);
m_entry_convert.clear();
m_entry_convert.str("");
m_entry_convert << "This is only a stub now. Don't expect real effect from this."
<< "Cause related functions hasn't been implemented yet.";
wxStaticText* s_description = new wxStaticText(this, wxID_ANY, m_entry_convert.str(), wxDefaultPosition, wxDefaultSize, 0);
s_description->Wrap(400);
s_main->Add(s_description, 0, wxALL, 5);
m_list = new wxListView(this);
m_list->InsertColumn(0, "Game ID");
m_list->InsertColumn(1, "Save ID");
m_list->InsertColumn(2, "Detail");
m_list->Bind(wxEVT_LIST_ITEM_ACTIVATED, &SaveDataListDialog::OnEntryInfo, this);
m_list->Bind(wxEVT_RIGHT_DOWN, &SaveDataListDialog::OnRightClick, this);
s_main->Add(m_list, 1, wxALL | wxEXPAND, 5);
wxBoxSizer* s_action = new wxBoxSizer(wxHORIZONTAL);
//If do not need manage, hide it, like just a save data picker.
if (!enable_manage)
{
wxButton *m_select = new wxButton(this, wxID_OK, wxT("&Select"), wxDefaultPosition, wxDefaultSize, 0);
m_select->Bind(wxEVT_BUTTON, &SaveDataListDialog::OnSelect, this);
s_action->Add(m_select, 0, wxALL, 5);
SetTitle("Save Data Chooser");
}
else {
wxButton *m_manage = new wxButton(this, wxID_ANY, wxT("&Manage"), wxDefaultPosition, wxDefaultSize, 0);
m_manage->Bind(wxEVT_BUTTON, &SaveDataListDialog::OnManage, this);
s_action->Add(m_manage, 0, wxALL, 5);
}
s_action->Add(0, 0, 1, wxEXPAND, 5);
s_action->Add(new wxButton(this, wxID_CANCEL, wxT("&Close"), wxDefaultPosition, wxDefaultSize, 0), 0, wxALL, 5);
s_main->Add(s_action, 0, wxEXPAND, 5);
Bind(wxEVT_MENU, &SaveDataListDialog::OnEntryCopy, this, id_copy);
Bind(wxEVT_MENU, &SaveDataListDialog::OnEntryRemove, this, id_remove);
Bind(wxEVT_MENU, &SaveDataListDialog::OnEntryInfo, this, id_info);
//Looks stupid, isn't it. I can't find Bind for range use..
Bind(wxEVT_MENU, &SaveDataListDialog::OnSort, this, 0);
Bind(wxEVT_MENU, &SaveDataListDialog::OnSort, this, 1);
Bind(wxEVT_MENU, &SaveDataListDialog::OnSort, this, 2);
SetSizerAndFit(s_main);
Layout();
Centre(wxBOTH);
LoadEntries();
UpdateList();
}
//After you pick a menu item from the sort sub-menu
void SaveDataListDialog::OnSort(wxCommandEvent& event)
{
int idx = event.GetId();
LOG_WARNING(HLE, "Stub - SaveDataUtility: SaveDataListDialog: OnSort called. Type Value:%d", idx);
if ((idx < m_sort_options->GetMenuItemCount())
&& (idx >= 0))
{
m_sort_type = idx;
}
}
//Copy a existing save, need to get more arguments. maybe a new dialog.
void SaveDataListDialog::OnEntryCopy(wxCommandEvent& event)
{
int idx = m_list->GetFirstSelected();
if (idx != wxNOT_FOUND)
{
LOG_WARNING(HLE, "Stub - SaveDataUtility: SaveDataListDialog: OnEntryCopy called.");
//Some Operations?
UpdateList();
}
}
//Remove a save file, need to be confirmed.
void SaveDataListDialog::OnEntryRemove(wxCommandEvent& event)
{
int idx = m_list->GetFirstSelected();
if (idx != wxNOT_FOUND)
{
LOG_WARNING(HLE, "Stub - SaveDataUtility: SaveDataListDialog: OnEntryRemove called.");
//Some Operations?
UpdateList();
}
}
//Display info dialog directly.
void SaveDataListDialog::OnEntryInfo(wxCommandEvent& event)
{
int idx = m_list->GetFirstSelected();
if (idx != wxNOT_FOUND)
{
LOG_WARNING(HLE, "Stub - SaveDataUtility: SaveDataListDialog: OnEntryInfo called.");
SaveDataInformation info; //Only a stub now.
SaveDataInfoDialog(this, info).ShowModal();
}
}
//Display info dialog directly.
void SaveDataListDialog::OnManage(wxCommandEvent& event)
{
int idx = m_list->GetFirstSelected();
if (idx != wxNOT_FOUND)
{
LOG_WARNING(HLE, "Stub - SaveDataUtility: SaveDataListDialog: OnManage called.");
SaveDataEntry save; //Only a stub now.
SaveDataManageDialog(this, &m_sort_type, save).ShowModal();
}
}
//When you press that select button in the Chooser mode.
void SaveDataListDialog::OnSelect(wxCommandEvent& event)
{
int idx = m_list->GetFirstSelected();
if (idx != wxNOT_FOUND)
{
LOG_WARNING(HLE, "Stub - SaveDataUtility: SaveDataListDialog: OnSelect called.");
EndModal(wxID_OK);
}
}
//Pop-up a small context-menu, being a replacement for SaveDataManageDialog
void SaveDataListDialog::OnRightClick(wxMouseEvent& event)
{
wxMenu* menu = new wxMenu();
int idx = m_list->GetFirstSelected();
//This is also a stub for the sort setting. Ids is set according to their sort-type integer.
m_sort_options = new wxMenu();
m_sort_options->Append(0, "UserID");
m_sort_options->Append(1, "Title");
m_sort_options->Append(2, "Subtitle");
menu->AppendSubMenu(m_sort_options, "&Sort");
menu->AppendSeparator();
menu->Append(id_copy, "&Copy")->Enable(idx != wxNOT_FOUND);
menu->Append(id_remove, "&Remove")->Enable(idx != wxNOT_FOUND);
menu->AppendSeparator();
menu->Append(id_info, "&Info");
PopupMenu(menu);
}
//This is intended to load the save data list from a way. However that is not certain for a stub. Does nothing now.
void SaveDataListDialog::LoadEntries(void)
{
}
//Setup some static items just for display.
void SaveDataListDialog::UpdateList(void)
{
m_list->Freeze();
m_list->DeleteAllItems();
m_list->InsertItem(0, 0);
m_list->SetItem(0, 0, "TEST00000");
m_list->SetItem(0, 1, "00");
m_list->SetItem(0, 2, "Final battle");
m_list->InsertItem(0, 0);
m_list->SetItem(0, 0, "XXXX99876");
m_list->SetItem(0, 1, "30");
m_list->SetItem(0, 2, "This is a fake game");
m_list->SetColumnWidth(0, wxLIST_AUTOSIZE_USEHEADER);
m_list->SetColumnWidth(1, wxLIST_AUTOSIZE_USEHEADER);
m_list->Thaw();
}

View file

@ -0,0 +1,84 @@
#pragma once
#include "stdafx.h"
#include <iomanip>
#include <sstream>
#include "Utilities/Log.h"
#include "Utilities/rFile.h"
//TODO: Implement function calls related to Save Data List.
//Those function calls may be needed to use this GUI.
//Currently this is only a stub.
//A stub for the struct sent to SaveDataInfoDialog.
struct SaveDataInformation
{
};
//A stub for the sorting.
enum
{
SAVE_DATA_LIST_SORT_BY_USERID
};
//A stub for a single entry of save data. used to make a save data list or do management.
struct SaveDataEntry
{
};
enum
{
//Reserved some Ids for Sort-By Submenu.
id_copy = 64,
id_remove,
id_info
};
//Used to display the information of a savedata.
//Not sure about what information should be displayed.
class SaveDataInfoDialog :public wxDialog
{
wxListView* m_list;
void UpdateData();
public:
SaveDataInfoDialog(wxWindow* parent, const SaveDataInformation& info);
};
//Simple way to show up the sort menu and other operations
//Like what you get when press Triangle on SaveData.
class SaveDataManageDialog :public wxDialog
{
wxComboBox* m_sort_options;
unsigned int* m_sort_type;
void OnInfo(wxCommandEvent& event);
void OnCopy(wxCommandEvent& event);
void OnDelete(wxCommandEvent& event);
void OnApplySort(wxCommandEvent& event);
public:
SaveDataManageDialog(wxWindow* parent, unsigned int* sort_type, SaveDataEntry& save);
};
//Display a list of SaveData. Would need to be initialized.
//Can also be used as a Save Data Chooser.
class SaveDataListDialog : public wxDialog
{
wxListView* m_list;
wxMenu* m_sort_options;
unsigned int m_sort_type;
std::stringstream m_entry_convert;
void OnSelect(wxCommandEvent& event);
void OnManage(wxCommandEvent& event);
void OnRightClick(wxMouseEvent& event);
void OnSort(wxCommandEvent& event);
void OnEntryCopy(wxCommandEvent& event);
void OnEntryRemove(wxCommandEvent& event);
void OnEntryInfo(wxCommandEvent& event);
void LoadEntries(void);
void UpdateList(void);
public:
SaveDataListDialog(wxWindow* parent, bool enable_manage);
};

View file

@ -152,6 +152,10 @@ public:
IniEntry<u8> HLELogLvl;
IniEntry<bool> HLEAlwaysStart;
//Auto-Pause
IniEntry<bool> DBGAutoPauseSystemCall;
IniEntry<bool> DBGAutoPauseFunctionCall;
// Language
IniEntry<u8> SysLanguage;
@ -217,6 +221,10 @@ public:
HLELogLvl.Init("HLE_HLELogLvl", path);
HLEAlwaysStart.Init("HLE_HLEAlwaysStart", path);
// Auto-Pause
DBGAutoPauseFunctionCall.Init("DBG_AutoPauseFunctionCall", path);
DBGAutoPauseSystemCall.Init("DBG_AutoPauseSystemCall", path);
// Language
SysLanguage.Init("Sytem_SysLanguage", path);
}
@ -277,6 +285,9 @@ public:
HLEExitOnStop.Load(false);
HLELogLvl.Load(3);
HLEAlwaysStart.Load(true);
//Auto-Pause
DBGAutoPauseFunctionCall.Load(false);
DBGAutoPauseSystemCall.Load(false);
// Language
SysLanguage.Load(1);
@ -339,6 +350,9 @@ public:
HLEExitOnStop.Save();
HLELogLvl.Save();
HLEAlwaysStart.Save();
//Auto-Pause
DBGAutoPauseFunctionCall.Save();
DBGAutoPauseSystemCall.Save();
// Language
SysLanguage.Save();

View file

@ -180,7 +180,11 @@
<ClCompile Include="Emu\SysCalls\Modules\libsnd3.cpp" />
<ClCompile Include="Emu\SysCalls\Modules\libsynth2.cpp" />
<ClCompile Include="Emu\SysCalls\Modules\sceNp.cpp" />
<ClCompile Include="Emu\SysCalls\Modules\sceNpClans.cpp" />
<ClCompile Include="Emu\SysCalls\Modules\sceNpCommerce2.cpp" />
<ClCompile Include="Emu\SysCalls\Modules\sceNpSns.cpp" />
<ClCompile Include="Emu\SysCalls\Modules\sceNpTrophy.cpp" />
<ClCompile Include="Emu\SysCalls\Modules\sceNpTus.cpp" />
<ClCompile Include="Emu\SysCalls\Modules\SC_Keyboard.cpp" />
<ClCompile Include="Emu\SysCalls\Modules\SC_Mouse.cpp" />
<ClCompile Include="Emu\SysCalls\Modules\SC_Pad.cpp" />
@ -372,7 +376,11 @@
<ClInclude Include="Emu\SysCalls\Modules\libsnd3.h" />
<ClInclude Include="Emu\SysCalls\Modules\libsynth2.h" />
<ClInclude Include="Emu\SysCalls\Modules\sceNp.h" />
<ClInclude Include="Emu\SysCalls\Modules\sceNpClans.h" />
<ClInclude Include="Emu\SysCalls\Modules\sceNpCommerce2.h" />
<ClInclude Include="Emu\SysCalls\Modules\sceNpSns.h" />
<ClInclude Include="Emu\SysCalls\Modules\sceNpTrophy.h" />
<ClInclude Include="Emu\SysCalls\Modules\sceNpTus.h" />
<ClInclude Include="Emu\SysCalls\Modules\sysPrxForUser.h" />
<ClInclude Include="Emu\SysCalls\Modules\sys_net.h" />
<ClInclude Include="Emu\SysCalls\SC_FUNC.h" />

View file

@ -212,9 +212,21 @@
<ClCompile Include="Emu\SysCalls\Modules\sceNp.cpp">
<Filter>Emu\SysCalls\Modules</Filter>
</ClCompile>
<ClCompile Include="Emu\SysCalls\Modules\sceNpClans.cpp">
<Filter>Emu\SysCalls\Modules</Filter>
</ClCompile>
<ClCompile Include="Emu\SysCalls\Modules\sceNpCommerce2.cpp">
<Filter>Emu\SysCalls\Modules</Filter>
</ClCompile>
<ClCompile Include="Emu\SysCalls\Modules\sceNpSns.cpp">
<Filter>Emu\SysCalls\Modules</Filter>
</ClCompile>
<ClCompile Include="Emu\SysCalls\Modules\sceNpTrophy.cpp">
<Filter>Emu\SysCalls\Modules</Filter>
</ClCompile>
<ClCompile Include="Emu\SysCalls\Modules\sceNpTus.cpp">
<Filter>Emu\SysCalls\Modules</Filter>
</ClCompile>
<ClCompile Include="Emu\SysCalls\Modules\sysPrxForUser.cpp">
<Filter>Emu\SysCalls\Modules</Filter>
</ClCompile>
@ -700,9 +712,21 @@
<ClInclude Include="Emu\SysCalls\Modules\sceNp.h">
<Filter>Emu\SysCalls\Modules</Filter>
</ClInclude>
<ClInclude Include="Emu\SysCalls\Modules\sceNpClans.h">
<Filter>Emu\SysCalls\Modules</Filter>
</ClInclude>
<ClInclude Include="Emu\SysCalls\Modules\sceNpCommerce2.h">
<Filter>Emu\SysCalls\Modules</Filter>
</ClInclude>
<ClInclude Include="Emu\SysCalls\Modules\sceNpSns.h">
<Filter>Emu\SysCalls\Modules</Filter>
</ClInclude>
<ClInclude Include="Emu\SysCalls\Modules\sceNpTrophy.h">
<Filter>Emu\SysCalls\Modules</Filter>
</ClInclude>
<ClInclude Include="Emu\SysCalls\Modules\sceNpTus.h">
<Filter>Emu\SysCalls\Modules</Filter>
</ClInclude>
<ClInclude Include="Emu\SysCalls\Modules\sys_net.h">
<Filter>Emu\SysCalls\Modules</Filter>
</ClInclude>

View file

@ -164,6 +164,7 @@
<ClCompile Include="..\Utilities\StrFmt.cpp" />
<ClCompile Include="..\Utilities\Thread.cpp" />
<ClCompile Include="Emu\DbgCommand.cpp" />
<ClCompile Include="Gui\AutoPauseManager.cpp" />
<ClCompile Include="Gui\CompilerELF.cpp" />
<ClCompile Include="Gui\ConLogFrame.cpp" />
<ClCompile Include="Gui\Debugger.cpp" />
@ -176,6 +177,7 @@
<ClCompile Include="Gui\MemoryViewer.cpp" />
<ClCompile Include="Gui\PADManager.cpp" />
<ClCompile Include="Gui\RSXDebugger.cpp" />
<ClCompile Include="Gui\SaveDataUtility.cpp" />
<ClCompile Include="Gui\TextInputDialog.cpp" />
<ClCompile Include="Gui\VFSManager.cpp" />
<ClCompile Include="Gui\VHDDManager.cpp" />
@ -206,6 +208,7 @@
<ClInclude Include="..\Utilities\Thread.h" />
<ClInclude Include="..\Utilities\Timer.h" />
<ClInclude Include="Gui\AboutDialog.h" />
<ClInclude Include="Gui\AutoPauseManager.h" />
<ClInclude Include="Gui\CompilerELF.h" />
<ClInclude Include="Gui\ConLogFrame.h" />
<ClInclude Include="Gui\Debugger.h" />
@ -219,6 +222,7 @@
<ClInclude Include="Gui\MemoryViewer.h" />
<ClInclude Include="Gui\RegisterEditor.h" />
<ClInclude Include="Gui\RSXDebugger.h" />
<ClInclude Include="Gui\SaveDataUtility.h" />
<ClInclude Include="Gui\TextInputDialog.h" />
<ClInclude Include="Gui\VFSManager.h" />
<ClInclude Include="Gui\VHDDManager.h" />
@ -229,4 +233,4 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
</Project>

View file

@ -96,6 +96,12 @@
<ClCompile Include="Gui\ConLogFrame.cpp">
<Filter>Gui</Filter>
</ClCompile>
<ClCompile Include="Gui\AutoPauseManager.cpp">
<Filter>Gui</Filter>
</ClCompile>
<ClCompile Include="Gui\SaveDataUtility.cpp">
<Filter>Gui</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="rpcs3.rc" />
@ -203,5 +209,11 @@
<ClInclude Include="..\Utilities\MTRingbuffer.h">
<Filter>Utilities</Filter>
</ClInclude>
<ClInclude Include="Gui\AutoPauseManager.h">
<Filter>Gui</Filter>
</ClInclude>
<ClInclude Include="Gui\SaveDataUtility.h">
<Filter>Gui</Filter>
</ClInclude>
</ItemGroup>
</Project>
</Project>