Merge pull request #1021 from tambry/Things

Improvements in cellSearch, cellUsbd and cellRudp
This commit is contained in:
Hykem 2015-02-24 17:00:07 +00:00
commit dc90ab3cee
19 changed files with 479 additions and 133 deletions

View file

@ -3,7 +3,7 @@
class KeyboardManager
{
bool m_inited;
bool m_inited = false;
std::unique_ptr<KeyboardHandlerBase> m_keyboard_handler;
public:

View file

@ -562,13 +562,10 @@ int cellCameraRemoveNotifyEventQueue2()
return CELL_OK;
}
void cellCamera_unload()
{
cellCameraInstance.m_bInitialized = false;
}
Module cellCamera("cellCamera", []()
{
cellCameraInstance.m_bInitialized = false;
REG_FUNC(cellCamera, cellCameraInit);
REG_FUNC(cellCamera, cellCameraEnd);
REG_FUNC(cellCamera, cellCameraOpen);

View file

@ -382,14 +382,11 @@ int cellGemWriteExternalPort()
return CELL_OK;
}
void cellGem_unload()
{
cellGemInstance.m_bInitialized = false;
}
Module cellGem("cellGem", []()
{
//cellGem.AddFunc(, cellGemAttributeInit);
cellGemInstance.m_bInitialized = false;
//REG_FUNC(cellGem, cellGemAttributeInit);
REG_FUNC(cellGem, cellGemCalibrate);
REG_FUNC(cellGem, cellGemClearStatusFlags);
REG_FUNC(cellGem, cellGemConvertVideoFinish);
@ -413,21 +410,21 @@ Module cellGem("cellGem", []()
REG_FUNC(cellGem, cellGemGetState);
REG_FUNC(cellGem, cellGemGetStatusFlags);
REG_FUNC(cellGem, cellGemGetTrackerHue);
//cellGem.AddFunc(, cellGemGetVideoConvertSize);
//REG_FUNC(cellGem, cellGemGetVideoConvertSize);
REG_FUNC(cellGem, cellGemHSVtoRGB);
REG_FUNC(cellGem, cellGemInit);
REG_FUNC(cellGem, cellGemInvalidateCalibration);
REG_FUNC(cellGem, cellGemIsTrackableHue);
REG_FUNC(cellGem, cellGemPrepareCamera);
REG_FUNC(cellGem, cellGemPrepareVideoConvert);
//cellGem.AddFunc(, cellGemReadExternalPortDeviceInfo);
//REG_FUNC(cellGem, cellGemReadExternalPortDeviceInfo);
REG_FUNC(cellGem, cellGemReset);
REG_FUNC(cellGem, cellGemSetRumble);
REG_FUNC(cellGem, cellGemSetYaw);
REG_FUNC(cellGem, cellGemTrackHues);
REG_FUNC(cellGem, cellGemUpdateFinish);
REG_FUNC(cellGem, cellGemUpdateStart);
//cellGem.AddFunc(, cellGemVideoConvertAttributeInit);
//cellGem.AddFunc(, cellGemVideoConvertAttributeInitRgba);
//REG_FUNC(cellGem, cellGemVideoConvertAttributeInit);
//REG_FUNC(cellGem, cellGemVideoConvertAttributeInitRgba);
REG_FUNC(cellGem, cellGemWriteExternalPort);
});

View file

@ -17,16 +17,16 @@ struct cellMicInternal
}
};
cellMicInternal CellMicInstance;
cellMicInternal cellMicInstance;
int cellMicInit()
{
cellMic.Warning("cellMicInit()");
if (CellMicInstance.m_bCellMicInitialized)
if (cellMicInstance.m_bCellMicInitialized)
return CELL_MICIN_ERROR_ALREADY_INIT;
CellMicInstance.m_bCellMicInitialized = true;
cellMicInstance.m_bCellMicInitialized = true;
return CELL_OK;
}
@ -35,10 +35,10 @@ int cellMicEnd()
{
cellMic.Warning("cellMicEnd()");
if (!CellMicInstance.m_bCellMicInitialized)
if (!cellMicInstance.m_bCellMicInitialized)
return CELL_MICIN_ERROR_NOT_INIT;
CellMicInstance.m_bCellMicInitialized = false;
cellMicInstance.m_bCellMicInitialized = false;
return CELL_OK;
}
@ -283,13 +283,10 @@ int cellMicGetDeviceIdentifier()
return CELL_OK;
}
void cellMic_unload()
{
CellMicInstance.m_bCellMicInitialized = false;
}
Module cellMic("cellMic", []()
{
cellMicInstance.m_bCellMicInitialized = false;
REG_FUNC(cellMic, cellMicInit);
REG_FUNC(cellMic, cellMicEnd);
REG_FUNC(cellMic, cellMicOpen);

View file

@ -118,13 +118,10 @@ int cellNetCtlGetNatInfo(vm::ptr<CellNetCtlNatInfo> natInfo)
return CELL_OK;
}
void cellNetCtl_unload()
{
cellNetCtlInstance.m_bInitialized = false;
}
Module cellNetCtl("cellNetCtl", []()
{
cellNetCtlInstance.m_bInitialized = false;
REG_FUNC(cellNetCtl, cellNetCtlInit);
REG_FUNC(cellNetCtl, cellNetCtlTerm);

View file

@ -2,62 +2,43 @@
#include "Emu/Memory/Memory.h"
#include "Emu/System.h"
#include "Emu/SysCalls/Modules.h"
#include "cellRudp.h"
extern Module cellRudp;
// Return Codes
enum
struct cellRudpInternal
{
CELL_RUDP_SUCCESS = 0,
CELL_RUDP_ERROR_NOT_INITIALIZED = 0x80770001,
CELL_RUDP_ERROR_ALREADY_INITIALIZED = 0x80770002,
CELL_RUDP_ERROR_INVALID_CONTEXT_ID = 0x80770003,
CELL_RUDP_ERROR_INVALID_ARGUMENT = 0x80770004,
CELL_RUDP_ERROR_INVALID_OPTION = 0x80770005,
CELL_RUDP_ERROR_INVALID_MUXMODE = 0x80770006,
CELL_RUDP_ERROR_MEMORY = 0x80770007,
CELL_RUDP_ERROR_INTERNAL = 0x80770008,
CELL_RUDP_ERROR_CONN_RESET = 0x80770009,
CELL_RUDP_ERROR_CONN_REFUSED = 0x8077000a,
CELL_RUDP_ERROR_CONN_TIMEOUT = 0x8077000b,
CELL_RUDP_ERROR_CONN_VERSION_MISMATCH = 0x8077000c,
CELL_RUDP_ERROR_CONN_TRANSPORT_TYPE_MISMATCH = 0x8077000d,
CELL_RUDP_ERROR_QUALITY_LEVEL_MISMATCH = 0x8077000e,
CELL_RUDP_ERROR_THREAD = 0x8077000f,
CELL_RUDP_ERROR_THREAD_IN_USE = 0x80770010,
CELL_RUDP_ERROR_NOT_ACCEPTABLE = 0x80770011,
CELL_RUDP_ERROR_MSG_TOO_LARGE = 0x80770012,
CELL_RUDP_ERROR_NOT_BOUND = 0x80770013,
CELL_RUDP_ERROR_CANCELLED = 0x80770014,
CELL_RUDP_ERROR_INVALID_VPORT = 0x80770015,
CELL_RUDP_ERROR_WOULDBLOCK = 0x80770016,
CELL_RUDP_ERROR_VPORT_IN_USE = 0x80770017,
CELL_RUDP_ERROR_VPORT_EXHAUSTED = 0x80770018,
CELL_RUDP_ERROR_INVALID_SOCKET = 0x80770019,
CELL_RUDP_ERROR_BUFFER_TOO_SMALL = 0x8077001a,
CELL_RUDP_ERROR_MSG_MALFORMED = 0x8077001b,
CELL_RUDP_ERROR_ADDR_IN_USE = 0x8077001c,
CELL_RUDP_ERROR_ALREADY_BOUND = 0x8077001d,
CELL_RUDP_ERROR_ALREADY_EXISTS = 0x8077001e,
CELL_RUDP_ERROR_INVALID_POLL_ID = 0x8077001f,
CELL_RUDP_ERROR_TOO_MANY_CONTEXTS = 0x80770020,
CELL_RUDP_ERROR_IN_PROGRESS = 0x80770021,
CELL_RUDP_ERROR_NO_EVENT_HANDLER = 0x80770022,
CELL_RUDP_ERROR_PAYLOAD_TOO_LARGE = 0x80770023,
CELL_RUDP_ERROR_END_OF_DATA = 0x80770024,
CELL_RUDP_ERROR_ALREADY_ESTABLISHED = 0x80770025,
CELL_RUDP_ERROR_KEEP_ALIVE_FAILURE = 0x80770026,
bool m_bInitialized;
cellRudpInternal()
: m_bInitialized(false)
{
}
};
s32 cellRudpInit()
cellRudpInternal cellRudpInstance;
s32 cellRudpInit(vm::ptr<CellRudpAllocator> allocator)
{
UNIMPLEMENTED_FUNC(cellRudp);
cellRudp.Warning("cellRudpInit()");
if (cellRudpInstance.m_bInitialized)
return CELL_RUDP_ERROR_ALREADY_INITIALIZED;
cellRudpInstance.m_bInitialized = true;
return CELL_OK;
}
s32 cellRudpEnd()
{
UNIMPLEMENTED_FUNC(cellRudp);
cellRudp.Log("cellRudpInit()");
if (!cellRudpInstance.m_bInitialized)
return CELL_RUDP_ERROR_NOT_INITIALIZED;
cellRudpInstance.m_bInitialized = false;
return CELL_OK;
}
@ -219,6 +200,8 @@ s32 cellRudpProcessEvents()
Module cellRudp("cellRudp", []()
{
cellRudpInstance.m_bInitialized = false;
REG_FUNC(cellRudp, cellRudpInit);
REG_FUNC(cellRudp, cellRudpEnd);
REG_FUNC(cellRudp, cellRudpEnableInternalIOThread);

View file

@ -0,0 +1,52 @@
// Return Codes
enum
{
CELL_RUDP_SUCCESS = 0,
CELL_RUDP_ERROR_NOT_INITIALIZED = 0x80770001,
CELL_RUDP_ERROR_ALREADY_INITIALIZED = 0x80770002,
CELL_RUDP_ERROR_INVALID_CONTEXT_ID = 0x80770003,
CELL_RUDP_ERROR_INVALID_ARGUMENT = 0x80770004,
CELL_RUDP_ERROR_INVALID_OPTION = 0x80770005,
CELL_RUDP_ERROR_INVALID_MUXMODE = 0x80770006,
CELL_RUDP_ERROR_MEMORY = 0x80770007,
CELL_RUDP_ERROR_INTERNAL = 0x80770008,
CELL_RUDP_ERROR_CONN_RESET = 0x80770009,
CELL_RUDP_ERROR_CONN_REFUSED = 0x8077000a,
CELL_RUDP_ERROR_CONN_TIMEOUT = 0x8077000b,
CELL_RUDP_ERROR_CONN_VERSION_MISMATCH = 0x8077000c,
CELL_RUDP_ERROR_CONN_TRANSPORT_TYPE_MISMATCH = 0x8077000d,
CELL_RUDP_ERROR_QUALITY_LEVEL_MISMATCH = 0x8077000e,
CELL_RUDP_ERROR_THREAD = 0x8077000f,
CELL_RUDP_ERROR_THREAD_IN_USE = 0x80770010,
CELL_RUDP_ERROR_NOT_ACCEPTABLE = 0x80770011,
CELL_RUDP_ERROR_MSG_TOO_LARGE = 0x80770012,
CELL_RUDP_ERROR_NOT_BOUND = 0x80770013,
CELL_RUDP_ERROR_CANCELLED = 0x80770014,
CELL_RUDP_ERROR_INVALID_VPORT = 0x80770015,
CELL_RUDP_ERROR_WOULDBLOCK = 0x80770016,
CELL_RUDP_ERROR_VPORT_IN_USE = 0x80770017,
CELL_RUDP_ERROR_VPORT_EXHAUSTED = 0x80770018,
CELL_RUDP_ERROR_INVALID_SOCKET = 0x80770019,
CELL_RUDP_ERROR_BUFFER_TOO_SMALL = 0x8077001a,
CELL_RUDP_ERROR_MSG_MALFORMED = 0x8077001b,
CELL_RUDP_ERROR_ADDR_IN_USE = 0x8077001c,
CELL_RUDP_ERROR_ALREADY_BOUND = 0x8077001d,
CELL_RUDP_ERROR_ALREADY_EXISTS = 0x8077001e,
CELL_RUDP_ERROR_INVALID_POLL_ID = 0x8077001f,
CELL_RUDP_ERROR_TOO_MANY_CONTEXTS = 0x80770020,
CELL_RUDP_ERROR_IN_PROGRESS = 0x80770021,
CELL_RUDP_ERROR_NO_EVENT_HANDLER = 0x80770022,
CELL_RUDP_ERROR_PAYLOAD_TOO_LARGE = 0x80770023,
CELL_RUDP_ERROR_END_OF_DATA = 0x80770024,
CELL_RUDP_ERROR_ALREADY_ESTABLISHED = 0x80770025,
CELL_RUDP_ERROR_KEEP_ALIVE_FAILURE = 0x80770026,
};
typedef vm::ptr<u32>(CellRudpAllocatorFuncAlloc)(u32 size);
typedef u32(CellRudpAllocatorFuncFree)(vm::ptr<u32> ptr);
struct CellRudpAllocator
{
vm::ptr<CellRudpAllocatorFuncAlloc> app_malloc;
vm::ptr<CellRudpAllocatorFuncFree> app_free;
};

View file

@ -2,6 +2,7 @@
#include "Emu/Memory/Memory.h"
#include "Emu/System.h"
#include "Emu/SysCalls/Modules.h"
#include "cellScreenshot.h"
extern Module cellScreenshot;

View file

@ -2,44 +2,49 @@
#include "Emu/Memory/Memory.h"
#include "Emu/System.h"
#include "Emu/SysCalls/Modules.h"
#include "cellSearch.h"
extern Module cellSearch;
// Error Codes
enum
struct cellSearchInternal
{
CELL_SEARCH_OK = 0,
CELL_SEARCH_CANCELED = 1,
CELL_SEARCH_ERROR_PARAM = 0x8002C801,
CELL_SEARCH_ERROR_BUSY = 0x8002C802,
CELL_SEARCH_ERROR_NO_MEMORY = 0x8002C803,
CELL_SEARCH_ERROR_UNKNOWN_MODE = 0x8002C804,
CELL_SEARCH_ERROR_ALREADY_INITIALIZED = 0x8002C805,
CELL_SEARCH_ERROR_NOT_INITIALIZED = 0x8002C806,
CELL_SEARCH_ERROR_FINALIZING = 0x8002C807,
CELL_SEARCH_ERROR_NOT_SUPPORTED_SEARCH = 0x8002C808,
CELL_SEARCH_ERROR_CONTENT_OBSOLETE = 0x8002C809,
CELL_SEARCH_ERROR_CONTENT_NOT_FOUND = 0x8002C80A,
CELL_SEARCH_ERROR_NOT_LIST = 0x8002C80B,
CELL_SEARCH_ERROR_OUT_OF_RANGE = 0x8002C80C,
CELL_SEARCH_ERROR_INVALID_SEARCHID = 0x8002C80D,
CELL_SEARCH_ERROR_ALREADY_GOT_RESULT = 0x8002C80E,
CELL_SEARCH_ERROR_NOT_SUPPORTED_CONTEXT = 0x8002C80F,
CELL_SEARCH_ERROR_INVALID_CONTENTTYPE = 0x8002C810,
CELL_SEARCH_ERROR_DRM = 0x8002C811,
CELL_SEARCH_ERROR_TAG = 0x8002C812,
CELL_SEARCH_ERROR_GENERIC = 0x8002C8FF,
bool m_bInitialized;
cellSearchInternal()
: m_bInitialized(false)
{
}
};
s32 cellSearchInitialize()
cellSearchInternal cellSearchInstance;
s32 cellSearchInitialize(CellSearchMode mode, u32 container, vm::ptr<CellSearchSystemCallback> func, vm::ptr<u32> userData)
{
UNIMPLEMENTED_FUNC(cellSearch);
cellSearch.Todo("cellSearchInitialize()");
if (cellSearchInstance.m_bInitialized)
return CELL_SEARCH_ERROR_ALREADY_INITIALIZED;
if (mode != 0)
return CELL_SEARCH_ERROR_UNKNOWN_MODE;
if (!func)
return CELL_SEARCH_ERROR_PARAM;
cellSearchInstance.m_bInitialized = true;
// TODO: Store the arguments somewhere so we can use them later.
return CELL_OK;
}
s32 cellSearchFinalize()
{
UNIMPLEMENTED_FUNC(cellSearch);
cellSearch.Log("cellSearchFinalize()");
if (!cellSearchInstance.m_bInitialized)
return CELL_SEARCH_ERROR_NOT_INITIALIZED;
cellSearchInstance.m_bInitialized = false;
return CELL_OK;
}
@ -153,6 +158,8 @@ s32 cellSearchEnd()
Module cellSearch("cellSearch", []()
{
cellSearchInstance.m_bInitialized = false;
REG_FUNC(cellSearch, cellSearchInitialize);
REG_FUNC(cellSearch, cellSearchFinalize);
REG_FUNC(cellSearch, cellSearchStartListSearch);

View file

@ -0,0 +1,302 @@
// Error Codes
enum
{
CELL_SEARCH_OK = 0,
CELL_SEARCH_CANCELED = 1,
CELL_SEARCH_ERROR_PARAM = 0x8002C801,
CELL_SEARCH_ERROR_BUSY = 0x8002C802,
CELL_SEARCH_ERROR_NO_MEMORY = 0x8002C803,
CELL_SEARCH_ERROR_UNKNOWN_MODE = 0x8002C804,
CELL_SEARCH_ERROR_ALREADY_INITIALIZED = 0x8002C805,
CELL_SEARCH_ERROR_NOT_INITIALIZED = 0x8002C806,
CELL_SEARCH_ERROR_FINALIZING = 0x8002C807,
CELL_SEARCH_ERROR_NOT_SUPPORTED_SEARCH = 0x8002C808,
CELL_SEARCH_ERROR_CONTENT_OBSOLETE = 0x8002C809,
CELL_SEARCH_ERROR_CONTENT_NOT_FOUND = 0x8002C80A,
CELL_SEARCH_ERROR_NOT_LIST = 0x8002C80B,
CELL_SEARCH_ERROR_OUT_OF_RANGE = 0x8002C80C,
CELL_SEARCH_ERROR_INVALID_SEARCHID = 0x8002C80D,
CELL_SEARCH_ERROR_ALREADY_GOT_RESULT = 0x8002C80E,
CELL_SEARCH_ERROR_NOT_SUPPORTED_CONTEXT = 0x8002C80F,
CELL_SEARCH_ERROR_INVALID_CONTENTTYPE = 0x8002C810,
CELL_SEARCH_ERROR_DRM = 0x8002C811,
CELL_SEARCH_ERROR_TAG = 0x8002C812,
CELL_SEARCH_ERROR_GENERIC = 0x8002C8FF,
};
typedef be_t<s32> CellSearchId;
// Constants
enum
{
CELL_SEARCH_CONTENT_ID_SIZE = 16,
CELL_SEARCH_TITLE_LEN_MAX = 384,
CELL_SEARCH_TAG_NUM_MAX = 6,
CELL_SEARCH_TAG_LEN_MAX = 63,
CELL_MUSIC_SELECTION_CONTEXT_SIZE = 2048,
CELL_SEARCH_PATH_LEN_MAX = 63,
CELL_SEARCH_MTOPTION_LEN_MAX = 63,
};
// Sort keys
enum
{
CELL_SEARCH_SORTKEY_NONE = 0,
CELL_SEARCH_SORTKEY_DEFAULT = 1,
CELL_SEARCH_SORTKEY_TITLE = 2,
CELL_SEARCH_SORTKEY_ALBUMTITLE = 3,
CELL_SEARCH_SORTKEY_GENRENAME = 4,
CELL_SEARCH_SORTKEY_ARTISTNAME = 5,
CELL_SEARCH_SORTKEY_IMPORTEDDATE = 6,
CELL_SEARCH_SORTKEY_TRACKNUMBER = 7,
CELL_SEARCH_SORTKEY_TAKENDATE = 8,
CELL_SEARCH_SORTKEY_USERDEFINED = 9,
CELL_SEARCH_SORTKEY_MODIFIEDDATE = 10,
};
// Sort order
enum
{
CELL_SEARCH_SORTORDER_NONE = 0,
CELL_SEARCH_SORTORDER_ASCENDING = 1,
CELL_SEARCH_SOFTORDER_DESCENDING = 2,
};
// Content types
enum
{
CELL_SEARCH_CONTENTTYPE_NONE = 0,
CELL_SEARCH_CONTENTTYPE_MUSIC = 1,
CELL_SEARCH_CONTENTTYPE_MUSICLIST = 2,
CELL_SEARCH_CONTENTTYPE_PHOTO = 3,
CELL_SEARCH_CONTENTTYPE_PHOTOLIST = 4,
CELL_SEARCH_CONTENTTYPE_VIDEO = 5,
CELL_SEARCH_CONTENTTYPE_VIDEOLIST = 6,
CELL_SEARCH_CONTENTTYPE_SCENE = 7,
};
// Codecs
enum CellSearchCodec
{
CELL_SEARCH_CODEC_UNKNOWN = 0,
CELL_SEARCH_CODEC_MPEG2 = 1,
CELL_SEARCH_CODEC_MPEG4 = 2,
CELL_SEARCH_CODEC_AVC = 3,
CELL_SEARCH_CODEC_MPEG1 = 4,
CELL_SEARCH_CODEC_AT3 = 5,
CELL_SEARCH_CODEC_AT3P = 6,
CELL_SEARCH_CODEC_ATALL = 7,
CELL_SEARCH_CODEC_MP3 = 8,
CELL_SEARCH_CODEC_AAC = 9,
CELL_SEARCH_CODEC_LPCM = 10,
CELL_SEARCH_CODEC_WAV = 11,
CELL_SEARCH_CODEC_WMA = 12,
CELL_SEARCH_CODEC_JPEG = 13,
CELL_SEARCH_CODEC_PNG = 14,
CELL_SEARCH_CODEC_TIFF = 15,
CELL_SEARCH_CODEC_BMP = 16,
CELL_SEARCH_CODEC_GIF = 17,
CELL_SEARCH_CODEC_MPEG2_TS = 18,
CELL_SEARCH_CODEC_DSD = 19,
CELL_SEARCH_CODEC_AC3 = 20,
CELL_SEARCH_CODEC_MPEG1_LAYER1 = 21,
CELL_SEARCH_CODEC_MPEG1_LAYER2 = 22,
CELL_SEARCH_CODEC_MPEG1_LAYER3 = 23,
CELL_SEARCH_CODEC_MPEG2_LAYER1 = 24,
CELL_SEARCH_CODEC_MPEG2_LAYER2 = 25,
CELL_SEARCH_CODEC_MPEG2_LAYER3 = 26,
CELL_SEARCH_CODEC_MOTIONJPEG = 27,
CELL_SEARCH_CODEC_MPO = 28,
};
// Scene types
enum CellSearchSceneType
{
CELL_SEARCH_SCENETYPE_NONE = 0,
CELL_SEARCH_SCENETYPE_CHAPTER = 1,
CELL_SEARCH_SCENETYPE_CLIP_HIGHLIGHT = 2,
CELL_SEARCH_SCENETYPE_CLIP_USER = 3,
};
// List types
enum CellSearchListType
{
CELL_SEARCH_LISTTYPE_MUSIC_ALBUM = 1,
CELL_SEARCH_LISTTYPE_MUSIC_GENRE = 2,
CELL_SEARCH_LISTTYPE_MUSIC_ARTIST = 3,
CELL_SEARCH_LISTTYPE_MUSIC_PLAYLIST = 9,
};
// Content status
enum CellSearchContentStatus
{
CELL_SEARCH_CONTENTSTATUS_AVAILABLE,
CELL_SEARCH_CONTENTSTATUS_NOT_SUPPORTED,
CELL_SEARCH_CONTENTSTATUS_BROKEN,
};
// Search orientation
enum CellSearchOrientation
{
CELL_SEARCH_ORIENTATION_UNKNOWN,
CELL_SEARCH_ORIENTATION_TOP_LEFT,
CELL_SEARCH_ORIENTATION_TOP_RIGHT,
CELL_SEARCH_ORIENTATION_BOTTOM_RIGHT,
CELL_SEARCH_ORIENTATION_BOTTOM_LEFT,
};
// Search modes
enum CellSearchMode
{
CELL_SEARCH_MODE_NORMAL = 0,
};
// Search events
enum CellSearchEvent
{
CELL_SEARCH_EVENT_NOTIFICATION = 0,
CELL_SEARCH_EVENT_INITIALIZE_RESULT,
CELL_SEARCH_EVENT_FINALIZE_RESULT,
CELL_SEARCH_EVENT_LISTSEARCH_RESULT,
CELL_SEARCH_EVENT_CONTENTSEARCH_INLIST_RESULT,
CELL_SEARCH_EVENT_CONTENTSEARCH_RESULT,
CELL_SEARCH_EVENT_SCENESEARCH_INVIDEO_RESULT,
CELL_SEARCH_EVENT_SCENESEARCH_RESULT,
};
typedef void(CellSearchSystemCallback)(CellSearchEvent event, s32 result, vm::ptr<const u32> param, vm::ptr<u32> userData);
struct CellSearchContentId
{
char data[CELL_SEARCH_CONTENT_ID_SIZE];
};
struct CellSearchResultParam
{
be_t<CellSearchId> searchId;
be_t<u32> resultNum;
};
struct CellSearchMusicListInfo
{
be_t<CellSearchListType> listType;
be_t<u32> numOfItems;
be_t<s64> duration;
char title[CELL_SEARCH_TITLE_LEN_MAX + 1];
char reserved[3];
char artistName[CELL_SEARCH_TITLE_LEN_MAX + 1];
char reserved2[3];
};
struct CellSearchPhotoListInfo
{
be_t<CellSearchListType> listType;
be_t<u32> numOfItems;
char title[CELL_SEARCH_TITLE_LEN_MAX + 1];
char reserved[3];
};
struct CellSearchVideoListInfo
{
be_t<CellSearchListType> listType;
be_t<u32> numOfItems;
be_t<s64> duration;
char title[CELL_SEARCH_TITLE_LEN_MAX + 1];
char reserved[3];
};
struct CellSearchMusicInfo
{
be_t<s64> duration;
be_t<s64> size;
be_t<s64> importedDate;
be_t<s64> lastPlayedDate;
be_t<s32> releasedYear;
be_t<s32> trackNumber;
be_t<s32> bitrate;
be_t<s32> samplingRate;
be_t<s32> quantizationBitrate;
be_t<s32> playCount;
be_t<s32> drmEncrypted;
be_t<CellSearchCodec> codec;
be_t<CellSearchContentStatus> status;
char diskNumber[8];
char title[CELL_SEARCH_TITLE_LEN_MAX + 1];
char reserved[3];
char albumTitle[CELL_SEARCH_TITLE_LEN_MAX + 1];
char reserved2[3];
char artistName[CELL_SEARCH_TITLE_LEN_MAX + 1];
char reserved3[3];
char genreName[CELL_SEARCH_TITLE_LEN_MAX + 1];
char reserved4[3];
};
struct CellSearchPhotoInfo
{
be_t<s64> size;
be_t<s64> importedDate;
be_t<s64> takenDate;
be_t<s32> width;
be_t<s32> height;
be_t<CellSearchOrientation> orientation;
be_t<CellSearchCodec> codec;
be_t<CellSearchContentStatus> status;
char title[CELL_SEARCH_TITLE_LEN_MAX + 1];
char reserved[3];
char albumTitle[CELL_SEARCH_TITLE_LEN_MAX + 1];
char reserved2[3];
};
struct CellSearchVideoInfo
{
be_t<s64> duration;
be_t<s64> size;
be_t<s64> importedDate;
be_t<s64> takenDate;
be_t<s32> videoBitrate;
be_t<s32> audioBitrate;
be_t<s32> playCount;
be_t<s32> drmEncrypted;
be_t<CellSearchCodec> videoCodec;
be_t<CellSearchCodec> audioCodec;
be_t<CellSearchContentStatus> status;
char title[CELL_SEARCH_TITLE_LEN_MAX + 1];
char reserved[3];
char albumTitle[CELL_SEARCH_TITLE_LEN_MAX + 1];
char reserved2[3];
};
struct CellSearchVideoSceneInfo
{
be_t<CellSearchSceneType> sceneType;
be_t<s64> startTime_ms;
be_t<s64> endTime_ms;
be_t<CellSearchContentId> videoId;
char title[CELL_SEARCH_TITLE_LEN_MAX + 1];
char reserved[3];
char tags[CELL_SEARCH_TAG_NUM_MAX][CELL_SEARCH_TAG_LEN_MAX];
};
struct CellMusicSelectionContext
{
char data[CELL_MUSIC_SELECTION_CONTEXT_SIZE];
};
struct CellSearchContentInfoPath
{
char contentPath[CELL_SEARCH_PATH_LEN_MAX + 1];
char thumbnailPath[CELL_SEARCH_PATH_LEN_MAX + 1];
};
struct CellSearchContentInfoPathMovieThumb
{
char movieThumbnailPath[CELL_SEARCH_PATH_LEN_MAX + 1];
char movieThumbnailOption[CELL_SEARCH_MTOPTION_LEN_MAX + 1];
};
struct CellSearchTimeInfo
{
be_t<s64> takenDate;
be_t<s64> importedDate;
be_t<s64> modifiedDate;
};

View file

@ -2,20 +2,43 @@
#include "Emu/Memory/Memory.h"
#include "Emu/System.h"
#include "Emu/SysCalls/Modules.h"
#include "cellUsbd.h"
extern Module cellUsbd;
struct cellUsbdInternal
{
bool m_bInitialized;
cellUsbdInternal()
: m_bInitialized(false)
{
}
};
cellUsbdInternal cellUsbdInstance;
s32 cellUsbdInit()
{
UNIMPLEMENTED_FUNC(cellUsbd);
cellUsbd.Log("cellUsbdInit()");
if (cellUsbdInstance.m_bInitialized)
return CELL_USBD_ERROR_ALREADY_INITIALIZED;
cellUsbdInstance.m_bInitialized = true;
return CELL_OK;
}
s32 cellUsbdEnd()
{
UNIMPLEMENTED_FUNC(cellUsbd);
cellUsbd.Log("cellUsbdEnd()");
if (!cellUsbdInstance.m_bInitialized)
return CELL_USBD_ERROR_NOT_INITIALIZED;
cellUsbdInstance.m_bInitialized = false;
return CELL_OK;
}
@ -153,6 +176,8 @@ s32 cellUsbdFreeMemory()
Module cellUsbd("cellUsbd", []()
{
cellUsbdInstance.m_bInitialized = false;
REG_FUNC(cellUsbd, cellUsbdInit);
REG_FUNC(cellUsbd, cellUsbdEnd);

View file

@ -1634,17 +1634,14 @@ int _sceNpSysutilClientFree()
return CELL_OK;
}
void sceNp_unload()
Module sceNp("sceNp", []()
{
sceNpInstance.m_bSceNpInitialized = false;
sceNpInstance.m_bSceNp2Initialized = false;
sceNpInstance.m_bScoreInitialized = false;
sceNpInstance.m_bLookupInitialized = false;
sceNpInstance.m_bSceNpUtilBandwidthTestInitialized = false;
}
Module sceNp("sceNp", []()
{
REG_FUNC(sceNp, sceNpInit);
REG_FUNC(sceNp, sceNp2Init);
REG_FUNC(sceNp, sceNpUtilBandwidthTestInitStart);

View file

@ -427,13 +427,10 @@ int sceNpClansRemoveChallenge()
return CELL_OK;
}
void sceNpClans_unload()
{
sceNpClansInstance.m_bSceNpClansInitialized = false;
}
Module sceNpClans("sceNpClans", []()
{
sceNpClansInstance.m_bSceNpClansInitialized = false;
REG_FUNC(sceNpClans, sceNpClansInit);
REG_FUNC(sceNpClans, sceNpClansTerm);
REG_FUNC(sceNpClans, sceNpClansCreateRequest);

View file

@ -312,13 +312,10 @@ int sceNpCommerce2DestroyReq()
return CELL_OK;
}
void sceNpCommerce2_unload()
{
sceNpCommerce2Instance.m_bSceNpCommerce2Initialized = false;
}
Module sceNpCommerce2("sceNpCommerce2", []()
{
sceNpCommerce2Instance.m_bSceNpCommerce2Initialized = false;
REG_FUNC(sceNpCommerce2, sceNpCommerce2ExecuteStoreBrowse);
REG_FUNC(sceNpCommerce2, sceNpCommerce2GetStoreBrowseUserdata);
REG_FUNC(sceNpCommerce2, sceNpCommerce2Init);

View file

@ -4,11 +4,6 @@
extern Module sceNpSns;
void sceNpSns_unload()
{
// TODO: Unload SNS module
}
Module sceNpSns("sceNpSns", []()
{
// TODO: Register SNS module functions here

View file

@ -448,13 +448,10 @@ int sceNpTrophyGetGameIcon()
return CELL_OK;
}
void sceNpTrophy_unload()
{
sceNpTrophyInstance.m_bInitialized = false;
}
Module sceNpTrophy("sceNpTrophy", []()
{
sceNpTrophyInstance.m_bInitialized = false;
REG_FUNC(sceNpTrophy, sceNpTrophyGetGameProgress);
REG_FUNC(sceNpTrophy, sceNpTrophyRegisterContext);
REG_FUNC(sceNpTrophy, sceNpTrophyCreateHandle);

View file

@ -563,13 +563,10 @@ int sceNpTusDeleteMultiSlotDataVUserAsync()
return CELL_OK;
}
void sceNpTus_unload()
{
sceNpTusInstance.m_bSceNpTusInitialized = false;
}
Module sceNpTus("sceNpTus", []()
{
sceNpTusInstance.m_bSceNpTusInitialized = false;
REG_FUNC(sceNpTus, sceNpTusInit);
REG_FUNC(sceNpTus, sceNpTusTerm);
REG_FUNC(sceNpTus, sceNpTusCreateTitleCtx);

View file

@ -488,8 +488,10 @@
<ClInclude Include="Emu\SysCalls\Modules\cellPngDec.h" />
<ClInclude Include="Emu\SysCalls\Modules\cellResc.h" />
<ClInclude Include="Emu\SysCalls\Modules\cellRtc.h" />
<ClInclude Include="Emu\SysCalls\Modules\cellRudp.h" />
<ClInclude Include="Emu\SysCalls\Modules\cellSail.h" />
<ClInclude Include="Emu\SysCalls\Modules\cellScreenshot.h" />
<ClInclude Include="Emu\SysCalls\Modules\cellSearch.h" />
<ClInclude Include="Emu\SysCalls\Modules\cellSpurs.h" />
<ClInclude Include="Emu\SysCalls\Modules\cellSpursJq.h" />
<ClInclude Include="Emu\SysCalls\Modules\cellSubdisplay.h" />

View file

@ -1534,5 +1534,11 @@
<ClInclude Include="Emu\SysCalls\Modules\cellScreenshot.h">
<Filter>Emu\SysCalls\Modules</Filter>
</ClInclude>
<ClInclude Include="Emu\SysCalls\Modules\cellRudp.h">
<Filter>Emu\SysCalls\Modules</Filter>
</ClInclude>
<ClInclude Include="Emu\SysCalls\Modules\cellSearch.h">
<Filter>Emu\SysCalls\Modules</Filter>
</ClInclude>
</ItemGroup>
</Project>