rpcsx/rpcs3/Emu/Cell/Modules/sceNpSns.cpp

255 lines
5.7 KiB
C++
Raw Normal View History

#include "stdafx.h"
2017-05-01 20:35:49 +02:00
#include "Emu/IdManager.h"
2016-03-21 20:42:14 +01:00
#include "Emu/Cell/PPUModule.h"
#include "sceNpSns.h"
#include "sceNp.h"
LOG_CHANNEL(sceNpSns);
2017-05-01 20:35:49 +02:00
template<>
void fmt_class_string<sceNpSnsError>::format(std::string& out, u64 arg)
{
format_enum(out, arg, [](auto error)
{
switch (error)
{
STR_CASE(SCE_NP_SNS_ERROR_UNKNOWN);
STR_CASE(SCE_NP_SNS_ERROR_NOT_SIGN_IN);
STR_CASE(SCE_NP_SNS_ERROR_INVALID_ARGUMENT);
STR_CASE(SCE_NP_SNS_ERROR_OUT_OF_MEMORY);
STR_CASE(SCE_NP_SNS_ERROR_SHUTDOWN);
STR_CASE(SCE_NP_SNS_ERROR_BUSY);
STR_CASE(SCE_NP_SNS_FB_ERROR_ALREADY_INITIALIZED);
STR_CASE(SCE_NP_SNS_FB_ERROR_NOT_INITIALIZED);
STR_CASE(SCE_NP_SNS_FB_ERROR_EXCEEDS_MAX);
STR_CASE(SCE_NP_SNS_FB_ERROR_UNKNOWN_HANDLE);
STR_CASE(SCE_NP_SNS_FB_ERROR_ABORTED);
STR_CASE(SCE_NP_SNS_FB_ERROR_ALREADY_ABORTED);
STR_CASE(SCE_NP_SNS_FB_ERROR_CONFIG_DISABLED);
STR_CASE(SCE_NP_SNS_FB_ERROR_FBSERVER_ERROR_RESPONSE);
STR_CASE(SCE_NP_SNS_FB_ERROR_THROTTLE_CLOSED);
STR_CASE(SCE_NP_SNS_FB_ERROR_OPERATION_INTERVAL_VIOLATION);
STR_CASE(SCE_NP_SNS_FB_ERROR_UNLOADED_THROTTLE);
STR_CASE(SCE_NP_SNS_FB_ERROR_ACCESS_NOT_ALLOWED);
}
return unknown;
});
}
error_code sceNpSnsFbInit(vm::cptr<SceNpSnsFbInitParams> params)
{
sceNpSns.todo("sceNpSnsFbInit(params=*0x%x)", params);
const auto manager = g_fxo->get<sce_np_sns_manager>();
if (manager->is_initialized)
{
return SCE_NP_SNS_FB_ERROR_ALREADY_INITIALIZED;
}
2017-05-01 20:35:49 +02:00
if (!params)
{
return SCE_NP_SNS_ERROR_INVALID_ARGUMENT;
}
// TODO: Use the initialization parameters somewhere
manager->is_initialized = true;
return CELL_OK;
}
2017-05-01 20:35:49 +02:00
error_code sceNpSnsFbTerm()
{
sceNpSns.warning("sceNpSnsFbTerm()");
const auto manager = g_fxo->get<sce_np_sns_manager>();
if (!manager->is_initialized)
{
return SCE_NP_SNS_FB_ERROR_NOT_INITIALIZED;
}
manager->is_initialized = false;
return CELL_OK;
}
2017-05-01 20:35:49 +02:00
error_code sceNpSnsFbCreateHandle(vm::ptr<u32> handle)
{
2017-05-01 20:35:49 +02:00
sceNpSns.warning("sceNpSnsFbCreateHandle(handle=*0x%x)", handle);
if (!g_fxo->get<sce_np_sns_manager>()->is_initialized)
2017-05-01 20:35:49 +02:00
{
return SCE_NP_SNS_FB_ERROR_NOT_INITIALIZED;
}
if (!handle)
{
return SCE_NP_SNS_ERROR_INVALID_ARGUMENT;
}
//if (count > SCE_NP_SNS_FB_HANDLE_SLOT_MAX)
//{
// return SCE_NP_SNS_FB_ERROR_EXCEEDS_MAX;
//}
2017-05-01 20:35:49 +02:00
*handle = idm::make<sns_fb_handle_t>();
return CELL_OK;
}
2017-05-01 20:35:49 +02:00
error_code sceNpSnsFbDestroyHandle(u32 handle)
{
2017-05-01 20:35:49 +02:00
sceNpSns.warning("sceNpSnsFbDestroyHandle(handle=%d)", handle);
if (!g_fxo->get<sce_np_sns_manager>()->is_initialized)
{
return SCE_NP_SNS_FB_ERROR_NOT_INITIALIZED;
}
2017-05-01 20:35:49 +02:00
if (handle == SCE_NP_SNS_FB_INVALID_HANDLE || handle > SCE_NP_SNS_FB_HANDLE_SLOT_MAX)
{
return SCE_NP_SNS_ERROR_INVALID_ARGUMENT;
}
const auto sfh = idm::get<sns_fb_handle_t>(handle);
if (!sfh)
{
return SCE_NP_SNS_FB_ERROR_UNKNOWN_HANDLE;
}
idm::remove<sns_fb_handle_t>(handle);
return CELL_OK;
}
2017-05-01 20:35:49 +02:00
error_code sceNpSnsFbAbortHandle(u32 handle)
{
2017-05-01 20:35:49 +02:00
sceNpSns.todo("sceNpSnsFbAbortHandle(handle=%d)", handle);
if (!g_fxo->get<sce_np_sns_manager>()->is_initialized)
{
return SCE_NP_SNS_FB_ERROR_NOT_INITIALIZED;
}
2017-05-01 20:35:49 +02:00
if (handle == SCE_NP_SNS_FB_INVALID_HANDLE || handle > SCE_NP_SNS_FB_HANDLE_SLOT_MAX)
{
return SCE_NP_SNS_ERROR_INVALID_ARGUMENT;
}
const auto sfh = idm::get<sns_fb_handle_t>(handle);
if (!sfh)
{
return SCE_NP_SNS_FB_ERROR_UNKNOWN_HANDLE;
}
// TODO
return CELL_OK;
}
2017-05-01 20:35:49 +02:00
error_code sceNpSnsFbGetAccessToken(u32 handle, vm::cptr<SceNpSnsFbAccessTokenParam> param, vm::ptr<SceNpSnsFbAccessTokenResult> result)
{
2017-05-01 20:35:49 +02:00
sceNpSns.todo("sceNpSnsFbGetAccessToken(handle=%d, param=*0x%x, result=*0x%x)", handle, param, result);
if (!g_fxo->get<sce_np_sns_manager>()->is_initialized)
{
return SCE_NP_SNS_FB_ERROR_NOT_INITIALIZED;
}
2017-05-01 20:35:49 +02:00
if (handle == SCE_NP_SNS_FB_INVALID_HANDLE || handle > SCE_NP_SNS_FB_HANDLE_SLOT_MAX || !param || !result || !param->fb_app_id)
{
return SCE_NP_SNS_ERROR_INVALID_ARGUMENT;
}
const auto sfh = idm::get<sns_fb_handle_t>(handle);
if (!sfh)
{
return SCE_NP_SNS_FB_ERROR_UNKNOWN_HANDLE;
}
if (g_psn_connection_status == SCE_NP_MANAGER_STATUS_OFFLINE)
{
return SCE_NP_SNS_ERROR_NOT_SIGN_IN;
}
2017-05-01 20:35:49 +02:00
// TODO
2015-07-31 23:47:29 +02:00
return CELL_OK;
}
2015-07-31 23:47:29 +02:00
s32 sceNpSnsFbStreamPublish()
{
UNIMPLEMENTED_FUNC(sceNpSns);
return CELL_OK;
2015-07-31 23:47:29 +02:00
}
2015-07-31 23:47:29 +02:00
s32 sceNpSnsFbCheckThrottle()
{
UNIMPLEMENTED_FUNC(sceNpSns);
return CELL_OK;
}
2015-07-31 23:47:29 +02:00
s32 sceNpSnsFbCheckConfig()
{
UNIMPLEMENTED_FUNC(sceNpSns);
2017-11-11 19:18:32 +01:00
return CELL_OK;
2015-07-31 23:47:29 +02:00
}
2015-07-31 23:47:29 +02:00
s32 sceNpSnsFbLoadThrottle()
{
UNIMPLEMENTED_FUNC(sceNpSns);
return CELL_OK;
2015-07-31 23:47:29 +02:00
}
error_code sceNpSnsFbGetLongAccessToken(u32 handle, vm::cptr<SceNpSnsFbAccessTokenParam> param, vm::ptr<SceNpSnsFbLongAccessTokenResult> result)
{
sceNpSns.todo("sceNpSnsFbGetLongAccessToken(handle=%d, param=*0x%x, result=*0x%x)", handle, param, result);
if (!g_fxo->get<sce_np_sns_manager>()->is_initialized)
{
return SCE_NP_SNS_FB_ERROR_NOT_INITIALIZED;
}
if (handle == SCE_NP_SNS_FB_INVALID_HANDLE || handle > SCE_NP_SNS_FB_HANDLE_SLOT_MAX || !param || !result || !param->fb_app_id)
{
return SCE_NP_SNS_ERROR_INVALID_ARGUMENT;
}
const auto sfh = idm::get<sns_fb_handle_t>(handle);
if (!sfh)
{
return SCE_NP_SNS_FB_ERROR_UNKNOWN_HANDLE;
}
if (g_psn_connection_status == SCE_NP_MANAGER_STATUS_OFFLINE)
{
return SCE_NP_SNS_ERROR_NOT_SIGN_IN;
}
return CELL_OK;
}
2015-07-31 23:47:29 +02:00
2016-03-21 20:42:14 +01:00
DECLARE(ppu_module_manager::sceNpSns)("sceNpSns", []()
2015-07-31 23:47:29 +02:00
{
REG_FUNC(sceNpSns, sceNpSnsFbInit);
REG_FUNC(sceNpSns, sceNpSnsFbTerm);
REG_FUNC(sceNpSns, sceNpSnsFbCreateHandle);
REG_FUNC(sceNpSns, sceNpSnsFbDestroyHandle);
REG_FUNC(sceNpSns, sceNpSnsFbAbortHandle);
REG_FUNC(sceNpSns, sceNpSnsFbGetAccessToken);
REG_FUNC(sceNpSns, sceNpSnsFbGetLongAccessToken);
2015-07-31 23:47:29 +02:00
REG_FUNC(sceNpSns, sceNpSnsFbStreamPublish);
REG_FUNC(sceNpSns, sceNpSnsFbCheckThrottle);
REG_FUNC(sceNpSns, sceNpSnsFbCheckConfig);
REG_FUNC(sceNpSns, sceNpSnsFbLoadThrottle);
});