mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-02-06 00:40:11 +00:00
Changes in cellRtc & sceNpTrophy
* Two header files added: cellRtc.h and sceNpTrophy.h * Changes in sceNpTrophyCreateContext. * Implemented sceNpTrophyGetTrophyInfo.
This commit is contained in:
parent
8204deaae6
commit
39d3814be7
@ -2,44 +2,11 @@
|
||||
#include "Emu/SysCalls/SysCalls.h"
|
||||
#include "Emu/SysCalls/SC_FUNC.h"
|
||||
|
||||
#include "cellRtc.h"
|
||||
|
||||
void cellRtc_init();
|
||||
Module cellRtc(0x0009, cellRtc_init);
|
||||
|
||||
// Return Codes
|
||||
enum
|
||||
{
|
||||
CELL_RTC_ERROR_NOT_INITIALIZED = 0x80010601,
|
||||
CELL_RTC_ERROR_INVALID_POINTER = 0x80010602,
|
||||
CELL_RTC_ERROR_INVALID_VALUE = 0x80010603,
|
||||
CELL_RTC_ERROR_INVALID_ARG = 0x80010604,
|
||||
CELL_RTC_ERROR_NOT_SUPPORTED = 0x80010605,
|
||||
CELL_RTC_ERROR_NO_CLOCK = 0x80010606,
|
||||
CELL_RTC_ERROR_BAD_PARSE = 0x80010607,
|
||||
CELL_RTC_ERROR_INVALID_YEAR = 0x80010621,
|
||||
CELL_RTC_ERROR_INVALID_MONTH = 0x80010622,
|
||||
CELL_RTC_ERROR_INVALID_DAY = 0x80010623,
|
||||
CELL_RTC_ERROR_INVALID_HOUR = 0x80010624,
|
||||
CELL_RTC_ERROR_INVALID_MINUTE = 0x80010625,
|
||||
CELL_RTC_ERROR_INVALID_SECOND = 0x80010626,
|
||||
CELL_RTC_ERROR_INVALID_MICROSECOND = 0x80010627,
|
||||
};
|
||||
|
||||
struct CellRtcTick
|
||||
{
|
||||
u64 tick;
|
||||
};
|
||||
|
||||
struct CellRtcDateTime
|
||||
{
|
||||
u16 year;
|
||||
u16 month;
|
||||
u16 day;
|
||||
u16 hour;
|
||||
u16 minute;
|
||||
u16 second;
|
||||
u32 microsecond;
|
||||
};
|
||||
|
||||
long convertToUNIXTime(u16 seconds, u16 minutes, u16 hours, u16 days, int years)
|
||||
{
|
||||
return (seconds + minutes*60 + hours*3600 + days*86400 + (years-70)*31536000 + ((years-69)/4)*86400 - ((years-1)/100)*86400 + ((years+299)/400)*86400);
|
||||
|
36
rpcs3/Emu/SysCalls/Modules/cellRtc.h
Normal file
36
rpcs3/Emu/SysCalls/Modules/cellRtc.h
Normal file
@ -0,0 +1,36 @@
|
||||
#pragma once
|
||||
|
||||
// Return Codes
|
||||
enum
|
||||
{
|
||||
CELL_RTC_ERROR_NOT_INITIALIZED = 0x80010601,
|
||||
CELL_RTC_ERROR_INVALID_POINTER = 0x80010602,
|
||||
CELL_RTC_ERROR_INVALID_VALUE = 0x80010603,
|
||||
CELL_RTC_ERROR_INVALID_ARG = 0x80010604,
|
||||
CELL_RTC_ERROR_NOT_SUPPORTED = 0x80010605,
|
||||
CELL_RTC_ERROR_NO_CLOCK = 0x80010606,
|
||||
CELL_RTC_ERROR_BAD_PARSE = 0x80010607,
|
||||
CELL_RTC_ERROR_INVALID_YEAR = 0x80010621,
|
||||
CELL_RTC_ERROR_INVALID_MONTH = 0x80010622,
|
||||
CELL_RTC_ERROR_INVALID_DAY = 0x80010623,
|
||||
CELL_RTC_ERROR_INVALID_HOUR = 0x80010624,
|
||||
CELL_RTC_ERROR_INVALID_MINUTE = 0x80010625,
|
||||
CELL_RTC_ERROR_INVALID_SECOND = 0x80010626,
|
||||
CELL_RTC_ERROR_INVALID_MICROSECOND = 0x80010627,
|
||||
};
|
||||
|
||||
struct CellRtcTick
|
||||
{
|
||||
u64 tick;
|
||||
};
|
||||
|
||||
struct CellRtcDateTime
|
||||
{
|
||||
u16 year;
|
||||
u16 month;
|
||||
u16 day;
|
||||
u16 hour;
|
||||
u16 minute;
|
||||
u16 second;
|
||||
u32 microsecond;
|
||||
};
|
@ -3,61 +3,14 @@
|
||||
#include "Emu/SysCalls/SC_FUNC.h"
|
||||
|
||||
#include "sceNp.h"
|
||||
#include "sceNpTrophy.h"
|
||||
#include "Loader/TRP.h"
|
||||
|
||||
void sceNpTrophy_unload();
|
||||
void sceNpTrophy_init();
|
||||
Module sceNpTrophy(0xf035, sceNpTrophy_init, nullptr, sceNpTrophy_unload);
|
||||
|
||||
enum
|
||||
{
|
||||
SCE_NP_TROPHY_ERROR_ALREADY_INITIALIZED = 0x80022901,
|
||||
SCE_NP_TROPHY_ERROR_NOT_INITIALIZED = 0x80022902,
|
||||
SCE_NP_TROPHY_ERROR_NOT_SUPPORTED = 0x80022903,
|
||||
SCE_NP_TROPHY_ERROR_CONTEXT_NOT_REGISTERED = 0x80022904,
|
||||
SCE_NP_TROPHY_ERROR_OUT_OF_MEMORY = 0x80022905,
|
||||
SCE_NP_TROPHY_ERROR_INVALID_ARGUMENT = 0x80022906,
|
||||
SCE_NP_TROPHY_ERROR_EXCEEDS_MAX = 0x80022907,
|
||||
SCE_NP_TROPHY_ERROR_INSUFFICIENT = 0x80022909,
|
||||
SCE_NP_TROPHY_ERROR_UNKNOWN_CONTEXT = 0x8002290a,
|
||||
SCE_NP_TROPHY_ERROR_INVALID_FORMAT = 0x8002290b,
|
||||
SCE_NP_TROPHY_ERROR_BAD_RESPONSE = 0x8002290c,
|
||||
SCE_NP_TROPHY_ERROR_INVALID_GRADE = 0x8002290d,
|
||||
SCE_NP_TROPHY_ERROR_INVALID_CONTEXT = 0x8002290e,
|
||||
SCE_NP_TROPHY_ERROR_PROCESSING_ABORTED = 0x8002290f,
|
||||
SCE_NP_TROPHY_ERROR_ABORT = 0x80022910,
|
||||
SCE_NP_TROPHY_ERROR_UNKNOWN_HANDLE = 0x80022911,
|
||||
SCE_NP_TROPHY_ERROR_LOCKED = 0x80022912,
|
||||
SCE_NP_TROPHY_ERROR_HIDDEN = 0x80022913,
|
||||
SCE_NP_TROPHY_ERROR_CANNOT_UNLOCK_PLATINUM = 0x80022914,
|
||||
SCE_NP_TROPHY_ERROR_ALREADY_UNLOCKED = 0x80022915,
|
||||
SCE_NP_TROPHY_ERROR_INVALID_TYPE = 0x80022916,
|
||||
SCE_NP_TROPHY_ERROR_INVALID_HANDLE = 0x80022917,
|
||||
SCE_NP_TROPHY_ERROR_INVALID_NP_COMM_ID = 0x80022918,
|
||||
SCE_NP_TROPHY_ERROR_UNKNOWN_NP_COMM_ID = 0x80022919,
|
||||
SCE_NP_TROPHY_ERROR_DISC_IO = 0x8002291a,
|
||||
SCE_NP_TROPHY_ERROR_CONF_DOES_NOT_EXIST = 0x8002291b,
|
||||
SCE_NP_TROPHY_ERROR_UNSUPPORTED_FORMAT = 0x8002291c,
|
||||
SCE_NP_TROPHY_ERROR_ALREADY_INSTALLED = 0x8002291d,
|
||||
SCE_NP_TROPHY_ERROR_BROKEN_DATA = 0x8002291e,
|
||||
SCE_NP_TROPHY_ERROR_VERIFICATION_FAILURE = 0x8002291f,
|
||||
SCE_NP_TROPHY_ERROR_INVALID_TROPHY_ID = 0x80022920,
|
||||
SCE_NP_TROPHY_ERROR_UNKNOWN_TROPHY_ID = 0x80022921,
|
||||
SCE_NP_TROPHY_ERROR_UNKNOWN_TITLE = 0x80022922,
|
||||
SCE_NP_TROPHY_ERROR_UNKNOWN_FILE = 0x80022923,
|
||||
SCE_NP_TROPHY_ERROR_DISC_NOT_MOUNTED = 0x80022924,
|
||||
SCE_NP_TROPHY_ERROR_SHUTDOWN = 0x80022925,
|
||||
SCE_NP_TROPHY_ERROR_TITLE_ICON_NOT_FOUND = 0x80022926,
|
||||
SCE_NP_TROPHY_ERROR_TROPHY_ICON_NOT_FOUND = 0x80022927,
|
||||
SCE_NP_TROPHY_ERROR_INSUFFICIENT_DISK_SPACE = 0x80022928,
|
||||
SCE_NP_TROPHY_ERROR_ILLEGAL_UPDATE = 0x8002292a,
|
||||
SCE_NP_TROPHY_ERROR_SAVEDATA_USER_DOES_NOT_MATCH = 0x8002292b,
|
||||
SCE_NP_TROPHY_ERROR_TROPHY_ID_DOES_NOT_EXIST = 0x8002292c,
|
||||
SCE_NP_TROPHY_ERROR_SERVICE_UNAVAILABLE = 0x8002292d,
|
||||
SCE_NP_TROPHY_ERROR_UNKNOWN = 0x800229ff,
|
||||
};
|
||||
|
||||
|
||||
// Internal Structs
|
||||
struct sceNpTrophyInternalContext
|
||||
{
|
||||
// TODO
|
||||
@ -115,15 +68,15 @@ int sceNpTrophyCreateContext(mem32_t context, mem_ptr_t<SceNpCommunicationId> co
|
||||
{
|
||||
if (entry->flags & DirEntry_TypeDir)
|
||||
{
|
||||
std::shared_ptr<vfsFileBase> f(Emu.GetVFS().OpenFile("/app_home/TROPDIR/" + entry->name + "/TROPHY.TRP", vfsRead));
|
||||
vfsStream* stream = Emu.GetVFS().OpenFile("/app_home/TROPDIR/" + entry->name + "/TROPHY.TRP", vfsRead);
|
||||
|
||||
if (f && f->IsOpened())
|
||||
if (stream && stream->IsOpened())
|
||||
{
|
||||
sceNpTrophyInternalContext ctxt;
|
||||
ctxt.trp_stream = f.get();
|
||||
ctxt.trp_stream = stream;
|
||||
ctxt.trp_name = entry->name;
|
||||
s_npTrophyInstance.contexts.push_back(ctxt);
|
||||
f = nullptr;
|
||||
stream = nullptr;
|
||||
return CELL_OK;
|
||||
}
|
||||
}
|
||||
@ -253,9 +206,23 @@ int sceNpTrophyGetTrophyIcon()
|
||||
return CELL_OK;
|
||||
}
|
||||
|
||||
int sceNpTrophyGetTrophyInfo()
|
||||
int sceNpTrophyGetTrophyInfo(u32 context, u32 handle, s32 trophyId, mem_ptr_t<SceNpTrophyDetails> details, mem_ptr_t<SceNpTrophyData> data)
|
||||
{
|
||||
UNIMPLEMENTED_FUNC(sceNpTrophy);
|
||||
sceNpTrophy.Warning("sceNpTrophyGetTrophyInfo(context=%u, handle=%u, trophyId=%d, details_addr=0x%x, data_addr=0x%x)",
|
||||
context, handle, trophyId, details.GetAddr(), data.GetAddr());
|
||||
|
||||
if (!s_npTrophyInstance.m_bInitialized)
|
||||
return SCE_NP_TROPHY_ERROR_NOT_INITIALIZED;
|
||||
if (!details.IsGood() || !data.IsGood())
|
||||
return SCE_NP_TROPHY_ERROR_INVALID_ARGUMENT;
|
||||
// TODO: There are other possible errors
|
||||
|
||||
// sceNpTrophyInternalContext& ctxt = s_npTrophyInstance.contexts[context];
|
||||
memcpy(details->name, "Some Trophy", SCE_NP_TROPHY_NAME_MAX_SIZE);
|
||||
memcpy(details->description, "Hey! Implement a XML reader, and load the description from TROP.SFM", SCE_NP_TROPHY_DESCR_MAX_SIZE);
|
||||
details->hidden = false;
|
||||
details->trophyId = trophyId;
|
||||
details->trophyGrade = SCE_NP_TROPHY_GRADE_GOLD;
|
||||
return CELL_OK;
|
||||
}
|
||||
|
||||
|
84
rpcs3/Emu/SysCalls/Modules/sceNpTrophy.h
Normal file
84
rpcs3/Emu/SysCalls/Modules/sceNpTrophy.h
Normal file
@ -0,0 +1,84 @@
|
||||
#pragma once
|
||||
#include "cellRtc.h"
|
||||
|
||||
enum
|
||||
{
|
||||
SCE_NP_TROPHY_ERROR_ALREADY_INITIALIZED = 0x80022901,
|
||||
SCE_NP_TROPHY_ERROR_NOT_INITIALIZED = 0x80022902,
|
||||
SCE_NP_TROPHY_ERROR_NOT_SUPPORTED = 0x80022903,
|
||||
SCE_NP_TROPHY_ERROR_CONTEXT_NOT_REGISTERED = 0x80022904,
|
||||
SCE_NP_TROPHY_ERROR_OUT_OF_MEMORY = 0x80022905,
|
||||
SCE_NP_TROPHY_ERROR_INVALID_ARGUMENT = 0x80022906,
|
||||
SCE_NP_TROPHY_ERROR_EXCEEDS_MAX = 0x80022907,
|
||||
SCE_NP_TROPHY_ERROR_INSUFFICIENT = 0x80022909,
|
||||
SCE_NP_TROPHY_ERROR_UNKNOWN_CONTEXT = 0x8002290a,
|
||||
SCE_NP_TROPHY_ERROR_INVALID_FORMAT = 0x8002290b,
|
||||
SCE_NP_TROPHY_ERROR_BAD_RESPONSE = 0x8002290c,
|
||||
SCE_NP_TROPHY_ERROR_INVALID_GRADE = 0x8002290d,
|
||||
SCE_NP_TROPHY_ERROR_INVALID_CONTEXT = 0x8002290e,
|
||||
SCE_NP_TROPHY_ERROR_PROCESSING_ABORTED = 0x8002290f,
|
||||
SCE_NP_TROPHY_ERROR_ABORT = 0x80022910,
|
||||
SCE_NP_TROPHY_ERROR_UNKNOWN_HANDLE = 0x80022911,
|
||||
SCE_NP_TROPHY_ERROR_LOCKED = 0x80022912,
|
||||
SCE_NP_TROPHY_ERROR_HIDDEN = 0x80022913,
|
||||
SCE_NP_TROPHY_ERROR_CANNOT_UNLOCK_PLATINUM = 0x80022914,
|
||||
SCE_NP_TROPHY_ERROR_ALREADY_UNLOCKED = 0x80022915,
|
||||
SCE_NP_TROPHY_ERROR_INVALID_TYPE = 0x80022916,
|
||||
SCE_NP_TROPHY_ERROR_INVALID_HANDLE = 0x80022917,
|
||||
SCE_NP_TROPHY_ERROR_INVALID_NP_COMM_ID = 0x80022918,
|
||||
SCE_NP_TROPHY_ERROR_UNKNOWN_NP_COMM_ID = 0x80022919,
|
||||
SCE_NP_TROPHY_ERROR_DISC_IO = 0x8002291a,
|
||||
SCE_NP_TROPHY_ERROR_CONF_DOES_NOT_EXIST = 0x8002291b,
|
||||
SCE_NP_TROPHY_ERROR_UNSUPPORTED_FORMAT = 0x8002291c,
|
||||
SCE_NP_TROPHY_ERROR_ALREADY_INSTALLED = 0x8002291d,
|
||||
SCE_NP_TROPHY_ERROR_BROKEN_DATA = 0x8002291e,
|
||||
SCE_NP_TROPHY_ERROR_VERIFICATION_FAILURE = 0x8002291f,
|
||||
SCE_NP_TROPHY_ERROR_INVALID_TROPHY_ID = 0x80022920,
|
||||
SCE_NP_TROPHY_ERROR_UNKNOWN_TROPHY_ID = 0x80022921,
|
||||
SCE_NP_TROPHY_ERROR_UNKNOWN_TITLE = 0x80022922,
|
||||
SCE_NP_TROPHY_ERROR_UNKNOWN_FILE = 0x80022923,
|
||||
SCE_NP_TROPHY_ERROR_DISC_NOT_MOUNTED = 0x80022924,
|
||||
SCE_NP_TROPHY_ERROR_SHUTDOWN = 0x80022925,
|
||||
SCE_NP_TROPHY_ERROR_TITLE_ICON_NOT_FOUND = 0x80022926,
|
||||
SCE_NP_TROPHY_ERROR_TROPHY_ICON_NOT_FOUND = 0x80022927,
|
||||
SCE_NP_TROPHY_ERROR_INSUFFICIENT_DISK_SPACE = 0x80022928,
|
||||
SCE_NP_TROPHY_ERROR_ILLEGAL_UPDATE = 0x8002292a,
|
||||
SCE_NP_TROPHY_ERROR_SAVEDATA_USER_DOES_NOT_MATCH = 0x8002292b,
|
||||
SCE_NP_TROPHY_ERROR_TROPHY_ID_DOES_NOT_EXIST = 0x8002292c,
|
||||
SCE_NP_TROPHY_ERROR_SERVICE_UNAVAILABLE = 0x8002292d,
|
||||
SCE_NP_TROPHY_ERROR_UNKNOWN = 0x800229ff,
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
SCE_NP_TROPHY_TITLE_MAX_SIZE = 128,
|
||||
SCE_NP_TROPHY_GAME_DESCR_MAX_SIZE = 1024,
|
||||
SCE_NP_TROPHY_NAME_MAX_SIZE = 128,
|
||||
SCE_NP_TROPHY_DESCR_MAX_SIZE = 1024,
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
SCE_NP_TROPHY_GRADE_UNKNOWN = 0,
|
||||
SCE_NP_TROPHY_GRADE_PLATINUM = 1,
|
||||
SCE_NP_TROPHY_GRADE_GOLD = 2,
|
||||
SCE_NP_TROPHY_GRADE_SILVER = 3,
|
||||
SCE_NP_TROPHY_GRADE_BRONZE = 4,
|
||||
};
|
||||
|
||||
struct SceNpTrophyDetails
|
||||
{
|
||||
s32 trophyId; // SceNpTrophyId
|
||||
u32 trophyGrade; // SceNpTrophyGrade
|
||||
u8 name[SCE_NP_TROPHY_NAME_MAX_SIZE];
|
||||
u8 description[SCE_NP_TROPHY_DESCR_MAX_SIZE];
|
||||
bool hidden;
|
||||
u8 reserved[3];
|
||||
};
|
||||
|
||||
struct SceNpTrophyData {
|
||||
CellRtcTick timestamp;
|
||||
s32 trophyId; // SceNpTrophyId
|
||||
bool unlocked;
|
||||
u8 reserved[3];
|
||||
};
|
Loading…
x
Reference in New Issue
Block a user