mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-04-20 19:45:20 +00:00
HLE: stub cellCrossController some more
This commit is contained in:
parent
41505117a7
commit
2152a77005
4 changed files with 119 additions and 23 deletions
|
@ -1,39 +1,79 @@
|
|||
#include "stdafx.h"
|
||||
#include "stdafx.h"
|
||||
#include "Emu/System.h"
|
||||
#include "Emu/Cell/PPUModule.h"
|
||||
#include "cellSysutil.h"
|
||||
|
||||
#include "cellCrossController.h"
|
||||
|
||||
|
||||
LOG_CHANNEL(cellCrossController);
|
||||
|
||||
enum
|
||||
template <>
|
||||
void fmt_class_string<CellCrossControllerError>::format(std::string& out, u64 arg)
|
||||
{
|
||||
CELL_CROSS_CONTROLLER_STATUS_INITIALIZED = 1,
|
||||
CELL_CROSS_CONTROLLER_STATUS_FINALIZED = 2
|
||||
};
|
||||
format_enum(out, arg, [](CellCrossControllerError value)
|
||||
{
|
||||
switch (value)
|
||||
{
|
||||
STR_CASE(CELL_CROSS_CONTROLLER_ERROR_CANCEL);
|
||||
STR_CASE(CELL_CROSS_CONTROLLER_ERROR_NETWORK);
|
||||
STR_CASE(CELL_CROSS_CONTROLLER_ERROR_OUT_OF_MEMORY);
|
||||
STR_CASE(CELL_CROSS_CONTROLLER_ERROR_FATAL);
|
||||
STR_CASE(CELL_CROSS_CONTROLLER_ERROR_INVALID_PKG_FILENAME);
|
||||
STR_CASE(CELL_CROSS_CONTROLLER_ERROR_INVALID_SIG_FILENAME);
|
||||
STR_CASE(CELL_CROSS_CONTROLLER_ERROR_INVALID_ICON_FILENAME);
|
||||
STR_CASE(CELL_CROSS_CONTROLLER_ERROR_INVALID_VALUE);
|
||||
STR_CASE(CELL_CROSS_CONTROLLER_ERROR_PKG_FILE_OPEN);
|
||||
STR_CASE(CELL_CROSS_CONTROLLER_ERROR_SIG_FILE_OPEN);
|
||||
STR_CASE(CELL_CROSS_CONTROLLER_ERROR_ICON_FILE_OPEN);
|
||||
STR_CASE(CELL_CROSS_CONTROLLER_ERROR_INVALID_STATE);
|
||||
STR_CASE(CELL_CROSS_CONTROLLER_ERROR_INVALID_PKG_FILE);
|
||||
STR_CASE(CELL_CROSS_CONTROLLER_ERROR_INTERNAL);
|
||||
}
|
||||
|
||||
struct CellCrossControllerParam
|
||||
{
|
||||
vm::bcptr<char> pPackageFileName;
|
||||
vm::bcptr<char> pSignatureFileName;
|
||||
vm::bcptr<char> pIconFileName;
|
||||
vm::bptr<void> option;
|
||||
};
|
||||
return unknown;
|
||||
});
|
||||
}
|
||||
|
||||
struct CellCrossControllerPackageInfo
|
||||
{
|
||||
vm::bcptr<char> pTitle;
|
||||
vm::bcptr<char> pTitleId;
|
||||
vm::bcptr<char> pAppVer;
|
||||
};
|
||||
|
||||
using CellCrossControllerCallback = void(s32 status, s32 errorCode, vm::ptr<void> option, vm::ptr<void> userdata);
|
||||
|
||||
s32 cellCrossControllerInitialize(vm::cptr<CellCrossControllerParam> pParam, vm::cptr<CellCrossControllerPackageInfo> pPkgInfo, vm::ptr<CellCrossControllerCallback> cb, vm::ptr<void> userdata) // LittleBigPlanet 2 and 3
|
||||
error_code cellCrossControllerInitialize(vm::cptr<CellCrossControllerParam> pParam, vm::cptr<CellCrossControllerPackageInfo> pPkgInfo, vm::ptr<CellCrossControllerCallback> cb, vm::ptr<void> userdata) // LittleBigPlanet 2 and 3
|
||||
{
|
||||
cellCrossController.todo("cellCrossControllerInitialize(pParam=*0x%x, pPkgInfo=*0x%x, cb=*0x%x, userdata=*0x%x)", pParam, pPkgInfo, cb, userdata);
|
||||
|
||||
// TODO
|
||||
//if (something)
|
||||
//{
|
||||
// return CELL_CROSS_CONTROLLER_ERROR_INVALID_STATE;
|
||||
//}
|
||||
|
||||
if (!pParam || !pPkgInfo)
|
||||
{
|
||||
return CELL_CROSS_CONTROLLER_ERROR_INVALID_VALUE;
|
||||
}
|
||||
|
||||
// Check if the strings exceed the allowed size (not counting null terminators)
|
||||
|
||||
if (!pParam->pPackageFileName || !memchr(pParam->pPackageFileName.get_ptr(), '\0', CELL_CROSS_CONTROLLER_PARAM_FILE_NAME_LEN + 1))
|
||||
{
|
||||
return CELL_CROSS_CONTROLLER_ERROR_INVALID_PKG_FILENAME;
|
||||
}
|
||||
|
||||
if (!pParam->pSignatureFileName || !memchr(pParam->pSignatureFileName.get_ptr(), '\0', CELL_CROSS_CONTROLLER_PARAM_FILE_NAME_LEN + 1))
|
||||
{
|
||||
return CELL_CROSS_CONTROLLER_ERROR_INVALID_SIG_FILENAME;
|
||||
}
|
||||
|
||||
if (!pParam->pIconFileName || !memchr(pParam->pIconFileName.get_ptr(), '\0', CELL_CROSS_CONTROLLER_PARAM_FILE_NAME_LEN + 1))
|
||||
{
|
||||
return CELL_CROSS_CONTROLLER_ERROR_INVALID_ICON_FILENAME;
|
||||
}
|
||||
|
||||
if (!pPkgInfo->pAppVer || !memchr(pPkgInfo->pAppVer.get_ptr(), '\0', CELL_CROSS_CONTROLLER_PKG_APP_VER_LEN + 1) ||
|
||||
!pPkgInfo->pTitleId || !memchr(pPkgInfo->pTitleId.get_ptr(), '\0', CELL_CROSS_CONTROLLER_PKG_TITLE_ID_LEN + 1) ||
|
||||
!pPkgInfo->pTitle || !memchr(pPkgInfo->pTitle.get_ptr(), '\0', CELL_CROSS_CONTROLLER_PKG_TITLE_LEN + 1) ||
|
||||
!cb)
|
||||
{
|
||||
return CELL_CROSS_CONTROLLER_ERROR_INVALID_VALUE;
|
||||
}
|
||||
|
||||
sysutil_register_cb([=](ppu_thread& ppu) -> s32
|
||||
{
|
||||
cb(ppu, CELL_CROSS_CONTROLLER_STATUS_INITIALIZED, CELL_OK, vm::null, userdata);
|
||||
|
|
52
rpcs3/Emu/Cell/Modules/cellCrossController.h
Normal file
52
rpcs3/Emu/Cell/Modules/cellCrossController.h
Normal file
|
@ -0,0 +1,52 @@
|
|||
#pragma once
|
||||
|
||||
enum CellCrossControllerError : u32
|
||||
{
|
||||
CELL_CROSS_CONTROLLER_ERROR_CANCEL = 0x8002cd80,
|
||||
CELL_CROSS_CONTROLLER_ERROR_NETWORK = 0x8002cd81,
|
||||
CELL_CROSS_CONTROLLER_ERROR_OUT_OF_MEMORY = 0x8002cd90,
|
||||
CELL_CROSS_CONTROLLER_ERROR_FATAL = 0x8002cd91,
|
||||
CELL_CROSS_CONTROLLER_ERROR_INVALID_PKG_FILENAME = 0x8002cd92,
|
||||
CELL_CROSS_CONTROLLER_ERROR_INVALID_SIG_FILENAME = 0x8002cd93,
|
||||
CELL_CROSS_CONTROLLER_ERROR_INVALID_ICON_FILENAME = 0x8002cd94,
|
||||
CELL_CROSS_CONTROLLER_ERROR_INVALID_VALUE = 0x8002cd95,
|
||||
CELL_CROSS_CONTROLLER_ERROR_PKG_FILE_OPEN = 0x8002cd96,
|
||||
CELL_CROSS_CONTROLLER_ERROR_SIG_FILE_OPEN = 0x8002cd97,
|
||||
CELL_CROSS_CONTROLLER_ERROR_ICON_FILE_OPEN = 0x8002cd98,
|
||||
CELL_CROSS_CONTROLLER_ERROR_INVALID_STATE = 0x8002cd99,
|
||||
CELL_CROSS_CONTROLLER_ERROR_INVALID_PKG_FILE = 0x8002cd9a,
|
||||
CELL_CROSS_CONTROLLER_ERROR_INTERNAL = 0x8002cda0,
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
CELL_CROSS_CONTROLLER_STATUS_INITIALIZED = 1,
|
||||
CELL_CROSS_CONTROLLER_STATUS_FINALIZED = 2
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
CELL_CROSS_CONTROLLER_PKG_APP_VER_LEN = 6, // e.g. 01.00
|
||||
CELL_CROSS_CONTROLLER_PKG_TITLE_ID_LEN = 10, // e.g. NEKO12345
|
||||
CELL_CROSS_CONTROLLER_PKG_TITLE_LEN = 52, // e.g. Cat Simulator 5
|
||||
|
||||
// Undefined helper value
|
||||
CELL_CROSS_CONTROLLER_PARAM_FILE_NAME_LEN = 255,
|
||||
};
|
||||
|
||||
struct CellCrossControllerParam
|
||||
{
|
||||
vm::bcptr<char> pPackageFileName;
|
||||
vm::bcptr<char> pSignatureFileName;
|
||||
vm::bcptr<char> pIconFileName;
|
||||
vm::bptr<void> option;
|
||||
};
|
||||
|
||||
struct CellCrossControllerPackageInfo
|
||||
{
|
||||
vm::bcptr<char> pTitle;
|
||||
vm::bcptr<char> pTitleId;
|
||||
vm::bcptr<char> pAppVer;
|
||||
};
|
||||
|
||||
using CellCrossControllerCallback = void(s32 status, s32 errorCode, vm::ptr<void> option, vm::ptr<void> userdata);
|
|
@ -389,6 +389,7 @@
|
|||
<ItemGroup>
|
||||
<ClInclude Include="..\3rdparty\stblib\stb_image.h" />
|
||||
<ClInclude Include="..\Utilities\address_range.h" />
|
||||
<ClInclude Include="Emu\Cell\Modules\cellCrossController.h" />
|
||||
<ClInclude Include="Emu\Cell\Modules\cellSsl.h" />
|
||||
<ClInclude Include="Emu\Io\Keyboard.h" />
|
||||
<ClInclude Include="Emu\RSX\Common\texture_cache_helpers.h" />
|
||||
|
|
|
@ -1579,5 +1579,8 @@
|
|||
<ClInclude Include="Emu\RSX\Overlays\overlay_perf_metrics.h">
|
||||
<Filter>Emu\GPU\RSX\Overlays</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Emu\Cell\Modules\cellCrossController.h">
|
||||
<Filter>Emu\Cell\Modules</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
|
Loading…
Add table
Reference in a new issue