From 46e7207e939f1f620f10699b8012ca7827d0c288 Mon Sep 17 00:00:00 2001 From: Raul Tambre Date: Sun, 22 Feb 2015 16:50:11 +0200 Subject: [PATCH] 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