From 46e7207e939f1f620f10699b8012ca7827d0c288 Mon Sep 17 00:00:00 2001 From: Raul Tambre Date: Sun, 22 Feb 2015 16:50:11 +0200 Subject: [PATCH 1/4] Improvements in cellSearch, cellUsbd and cellRudp --- rpcs3/Emu/SysCalls/Modules/cellRudp.cpp | 69 ++-- rpcs3/Emu/SysCalls/Modules/cellRudp.h | 52 +++ rpcs3/Emu/SysCalls/Modules/cellScreenshot.cpp | 1 + rpcs3/Emu/SysCalls/Modules/cellSearch.cpp | 57 ++-- rpcs3/Emu/SysCalls/Modules/cellSearch.h | 302 ++++++++++++++++++ rpcs3/Emu/SysCalls/Modules/cellUsbd.cpp | 29 +- rpcs3/emucore.vcxproj | 2 + rpcs3/emucore.vcxproj.filters | 6 + 8 files changed, 445 insertions(+), 73 deletions(-) create mode 100644 rpcs3/Emu/SysCalls/Modules/cellRudp.h create mode 100644 rpcs3/Emu/SysCalls/Modules/cellSearch.h diff --git a/rpcs3/Emu/SysCalls/Modules/cellRudp.cpp b/rpcs3/Emu/SysCalls/Modules/cellRudp.cpp index 9b825d1391..2b59475a8c 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellRudp.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellRudp.cpp @@ -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 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; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellRudp.h b/rpcs3/Emu/SysCalls/Modules/cellRudp.h new file mode 100644 index 0000000000..0a33a58998 --- /dev/null +++ b/rpcs3/Emu/SysCalls/Modules/cellRudp.h @@ -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(CellRudpAllocatorFuncAlloc)(u32 size); +typedef u32(CellRudpAllocatorFuncFree)(vm::ptr ptr); + +struct CellRudpAllocator +{ + vm::ptr app_malloc; + vm::ptr app_free; +}; \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/Modules/cellScreenshot.cpp b/rpcs3/Emu/SysCalls/Modules/cellScreenshot.cpp index f62c866416..8087423951 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellScreenshot.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellScreenshot.cpp @@ -2,6 +2,7 @@ #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" +#include "cellScreenshot.h" extern Module cellScreenshot; diff --git a/rpcs3/Emu/SysCalls/Modules/cellSearch.cpp b/rpcs3/Emu/SysCalls/Modules/cellSearch.cpp index e9978c0979..050fcbc8f5 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSearch.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSearch.cpp @@ -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, CellSearchSystemCallback func, vm::ptr 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; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSearch.h b/rpcs3/Emu/SysCalls/Modules/cellSearch.h new file mode 100644 index 0000000000..eb3d314f94 --- /dev/null +++ b/rpcs3/Emu/SysCalls/Modules/cellSearch.h @@ -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 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 param, vm::ptr userData); + +struct CellSearchContentId +{ + char data[CELL_SEARCH_CONTENT_ID_SIZE]; +}; + +struct CellSearchResultParam +{ + CellSearchId searchId; + be_t resultNum; +}; + +struct CellSearchMusicListInfo +{ + CellSearchListType listType; + be_t numOfItems; + be_t 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 +{ + CellSearchListType listType; + be_t numOfItems; + char title[CELL_SEARCH_TITLE_LEN_MAX + 1]; + char reserved[3]; +}; + +struct CellSearchVideoListInfo +{ + CellSearchListType listType; + be_t numOfItems; + be_t duration; + char title[CELL_SEARCH_TITLE_LEN_MAX + 1]; + char reserved[3]; +}; + +struct CellSearchMusicInfo +{ + be_t duration; + be_t size; + be_t importedDate; + be_t lastPlayedDate; + be_t releasedYear; + be_t trackNumber; + be_t bitrate; + be_t samplingRate; + be_t quantizationBitrate; + be_t playCount; + be_t drmEncrypted; + CellSearchCodec codec; + 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 size; + be_t importedDate; + be_t takenDate; + be_t width; + be_t height; + CellSearchOrientation orientation; + CellSearchCodec codec; + 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 duration; + be_t size; + be_t importedDate; + be_t takenDate; + be_t videoBitrate; + be_t audioBitrate; + be_t playCount; + be_t drmEncrypted; + CellSearchCodec videoCodec; + CellSearchCodec audioCodec; + 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 +{ + CellSearchSceneType sceneType; + be_t startTime_ms; + be_t endTime_ms; + 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 takenDate; + be_t importedDate; + be_t modifiedDate; +}; \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/Modules/cellUsbd.cpp b/rpcs3/Emu/SysCalls/Modules/cellUsbd.cpp index 0e81263b83..52d79242df 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellUsbd.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellUsbd.cpp @@ -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; } diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index 31e2be03dc..3f871b6046 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -485,8 +485,10 @@ + + diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters index d1ce9a1874..acbd39fc52 100644 --- a/rpcs3/emucore.vcxproj.filters +++ b/rpcs3/emucore.vcxproj.filters @@ -1525,5 +1525,11 @@ Emu\SysCalls\Modules + + Emu\SysCalls\Modules + + + Emu\SysCalls\Modules + \ No newline at end of file From 31b91c10ec60bcfd3d75eb1372b581ee1dc5bce9 Mon Sep 17 00:00:00 2001 From: Raul Tambre Date: Sun, 22 Feb 2015 16:52:20 +0200 Subject: [PATCH 2/4] Fix m_inited --- rpcs3/Emu/Io/Keyboard.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rpcs3/Emu/Io/Keyboard.h b/rpcs3/Emu/Io/Keyboard.h index bbcd8561b6..140c06ed4a 100644 --- a/rpcs3/Emu/Io/Keyboard.h +++ b/rpcs3/Emu/Io/Keyboard.h @@ -3,7 +3,7 @@ class KeyboardManager { - bool m_inited; + bool m_inited = false; std::unique_ptr m_keyboard_handler; public: From ef3a0119192757c01cd2ea8caf79fc32e0063003 Mon Sep 17 00:00:00 2001 From: Raul Tambre Date: Sun, 22 Feb 2015 17:36:22 +0200 Subject: [PATCH 3/4] Fix compiling --- rpcs3/Emu/SysCalls/Modules/cellSearch.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSearch.cpp b/rpcs3/Emu/SysCalls/Modules/cellSearch.cpp index 050fcbc8f5..5bda0c9e38 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSearch.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSearch.cpp @@ -18,7 +18,7 @@ struct cellSearchInternal cellSearchInternal cellSearchInstance; -s32 cellSearchInitialize(CellSearchMode mode, u32 container, CellSearchSystemCallback func, vm::ptr userData) +s32 cellSearchInitialize(CellSearchMode mode, u32 container, vm::ptr func, vm::ptr userData) { cellSearch.Todo("cellSearchInitialize()"); From e6a47bfa89d3c71553696946862af092be3c8f1e Mon Sep 17 00:00:00 2001 From: Raul Tambre Date: Mon, 23 Feb 2015 17:09:52 +0200 Subject: [PATCH 4/4] Fix be_ts and fix loading in some modules --- rpcs3/Emu/SysCalls/Modules/cellCamera.cpp | 7 ++--- rpcs3/Emu/SysCalls/Modules/cellGem.cpp | 17 +++++------ rpcs3/Emu/SysCalls/Modules/cellMic.cpp | 17 +++++------ rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp | 7 ++--- rpcs3/Emu/SysCalls/Modules/cellRudp.cpp | 2 ++ rpcs3/Emu/SysCalls/Modules/cellSearch.cpp | 2 ++ rpcs3/Emu/SysCalls/Modules/cellSearch.h | 28 +++++++++---------- rpcs3/Emu/SysCalls/Modules/cellUsbd.cpp | 2 ++ rpcs3/Emu/SysCalls/Modules/sceNp.cpp | 5 +--- rpcs3/Emu/SysCalls/Modules/sceNpClans.cpp | 7 ++--- rpcs3/Emu/SysCalls/Modules/sceNpCommerce2.cpp | 7 ++--- rpcs3/Emu/SysCalls/Modules/sceNpSns.cpp | 5 ---- rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp | 7 ++--- rpcs3/Emu/SysCalls/Modules/sceNpTus.cpp | 7 ++--- 14 files changed, 47 insertions(+), 73 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellCamera.cpp b/rpcs3/Emu/SysCalls/Modules/cellCamera.cpp index f6c8e292e9..a6f8ee0372 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellCamera.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellCamera.cpp @@ -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); diff --git a/rpcs3/Emu/SysCalls/Modules/cellGem.cpp b/rpcs3/Emu/SysCalls/Modules/cellGem.cpp index 22ce3c49c5..01d7ef6ed0 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGem.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGem.cpp @@ -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); }); diff --git a/rpcs3/Emu/SysCalls/Modules/cellMic.cpp b/rpcs3/Emu/SysCalls/Modules/cellMic.cpp index 28833558aa..e9c0c252e1 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellMic.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellMic.cpp @@ -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); diff --git a/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp b/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp index 5ea8f9c321..db1f15452d 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp @@ -118,13 +118,10 @@ int cellNetCtlGetNatInfo(vm::ptr 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); diff --git a/rpcs3/Emu/SysCalls/Modules/cellRudp.cpp b/rpcs3/Emu/SysCalls/Modules/cellRudp.cpp index 2b59475a8c..85fd59f9ac 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellRudp.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellRudp.cpp @@ -200,6 +200,8 @@ s32 cellRudpProcessEvents() Module cellRudp("cellRudp", []() { + cellRudpInstance.m_bInitialized = false; + REG_FUNC(cellRudp, cellRudpInit); REG_FUNC(cellRudp, cellRudpEnd); REG_FUNC(cellRudp, cellRudpEnableInternalIOThread); diff --git a/rpcs3/Emu/SysCalls/Modules/cellSearch.cpp b/rpcs3/Emu/SysCalls/Modules/cellSearch.cpp index 5bda0c9e38..537b62c15d 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSearch.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSearch.cpp @@ -158,6 +158,8 @@ s32 cellSearchEnd() Module cellSearch("cellSearch", []() { + cellSearchInstance.m_bInitialized = false; + REG_FUNC(cellSearch, cellSearchInitialize); REG_FUNC(cellSearch, cellSearchFinalize); REG_FUNC(cellSearch, cellSearchStartListSearch); diff --git a/rpcs3/Emu/SysCalls/Modules/cellSearch.h b/rpcs3/Emu/SysCalls/Modules/cellSearch.h index eb3d314f94..835bea7e9d 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSearch.h +++ b/rpcs3/Emu/SysCalls/Modules/cellSearch.h @@ -173,13 +173,13 @@ struct CellSearchContentId struct CellSearchResultParam { - CellSearchId searchId; + be_t searchId; be_t resultNum; }; struct CellSearchMusicListInfo { - CellSearchListType listType; + be_t listType; be_t numOfItems; be_t duration; char title[CELL_SEARCH_TITLE_LEN_MAX + 1]; @@ -190,7 +190,7 @@ struct CellSearchMusicListInfo struct CellSearchPhotoListInfo { - CellSearchListType listType; + be_t listType; be_t numOfItems; char title[CELL_SEARCH_TITLE_LEN_MAX + 1]; char reserved[3]; @@ -198,7 +198,7 @@ struct CellSearchPhotoListInfo struct CellSearchVideoListInfo { - CellSearchListType listType; + be_t listType; be_t numOfItems; be_t duration; char title[CELL_SEARCH_TITLE_LEN_MAX + 1]; @@ -218,8 +218,8 @@ struct CellSearchMusicInfo be_t quantizationBitrate; be_t playCount; be_t drmEncrypted; - CellSearchCodec codec; - CellSearchContentStatus status; + be_t codec; + be_t status; char diskNumber[8]; char title[CELL_SEARCH_TITLE_LEN_MAX + 1]; char reserved[3]; @@ -238,9 +238,9 @@ struct CellSearchPhotoInfo be_t takenDate; be_t width; be_t height; - CellSearchOrientation orientation; - CellSearchCodec codec; - CellSearchContentStatus status; + be_t orientation; + be_t codec; + be_t status; char title[CELL_SEARCH_TITLE_LEN_MAX + 1]; char reserved[3]; char albumTitle[CELL_SEARCH_TITLE_LEN_MAX + 1]; @@ -257,9 +257,9 @@ struct CellSearchVideoInfo be_t audioBitrate; be_t playCount; be_t drmEncrypted; - CellSearchCodec videoCodec; - CellSearchCodec audioCodec; - CellSearchContentStatus status; + be_t videoCodec; + be_t audioCodec; + be_t status; char title[CELL_SEARCH_TITLE_LEN_MAX + 1]; char reserved[3]; char albumTitle[CELL_SEARCH_TITLE_LEN_MAX + 1]; @@ -268,10 +268,10 @@ struct CellSearchVideoInfo struct CellSearchVideoSceneInfo { - CellSearchSceneType sceneType; + be_t sceneType; be_t startTime_ms; be_t endTime_ms; - CellSearchContentId videoId; + be_t videoId; char title[CELL_SEARCH_TITLE_LEN_MAX + 1]; char reserved[3]; char tags[CELL_SEARCH_TAG_NUM_MAX][CELL_SEARCH_TAG_LEN_MAX]; diff --git a/rpcs3/Emu/SysCalls/Modules/cellUsbd.cpp b/rpcs3/Emu/SysCalls/Modules/cellUsbd.cpp index 52d79242df..df6c8693c9 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellUsbd.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellUsbd.cpp @@ -176,6 +176,8 @@ s32 cellUsbdFreeMemory() Module cellUsbd("cellUsbd", []() { + cellUsbdInstance.m_bInitialized = false; + REG_FUNC(cellUsbd, cellUsbdInit); REG_FUNC(cellUsbd, cellUsbdEnd); diff --git a/rpcs3/Emu/SysCalls/Modules/sceNp.cpp b/rpcs3/Emu/SysCalls/Modules/sceNp.cpp index fcd948c3b0..82b7f305fe 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNp.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNp.cpp @@ -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); diff --git a/rpcs3/Emu/SysCalls/Modules/sceNpClans.cpp b/rpcs3/Emu/SysCalls/Modules/sceNpClans.cpp index 440b8dc321..d47cfb7955 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNpClans.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNpClans.cpp @@ -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); diff --git a/rpcs3/Emu/SysCalls/Modules/sceNpCommerce2.cpp b/rpcs3/Emu/SysCalls/Modules/sceNpCommerce2.cpp index 9f66688d2c..c7379c7821 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNpCommerce2.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNpCommerce2.cpp @@ -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); diff --git a/rpcs3/Emu/SysCalls/Modules/sceNpSns.cpp b/rpcs3/Emu/SysCalls/Modules/sceNpSns.cpp index fff2e1fb18..48fa5385db 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNpSns.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNpSns.cpp @@ -4,11 +4,6 @@ extern Module sceNpSns; -void sceNpSns_unload() -{ - // TODO: Unload SNS module -} - Module sceNpSns("sceNpSns", []() { // TODO: Register SNS module functions here diff --git a/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp b/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp index 191977c7b5..fb657fe3c4 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNpTrophy.cpp @@ -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); diff --git a/rpcs3/Emu/SysCalls/Modules/sceNpTus.cpp b/rpcs3/Emu/SysCalls/Modules/sceNpTus.cpp index bbfb84c4c1..f9055f71d4 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNpTus.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNpTus.cpp @@ -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);