mirror of
https://github.com/RPCSX/rpcsx.git
synced 2026-04-04 22:19:02 +00:00
Added rpcs3 api (dynamic library)
This commit is contained in:
parent
795170635f
commit
bc63eaea48
8 changed files with 443 additions and 2 deletions
219
rpcs3/rpcs3_api.cpp
Normal file
219
rpcs3/rpcs3_api.cpp
Normal file
|
|
@ -0,0 +1,219 @@
|
|||
#include "stdafx.h"
|
||||
#include "ps3emu_api_enums.h"
|
||||
#include "ps3emu_api_structs.h"
|
||||
#include "rpcs3_version.h"
|
||||
#include "Emu/System.h"
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#define UTILS_DLL_C_EXPORT extern "C" __declspec(dllexport)
|
||||
#else
|
||||
#define UTILS_DLL_C_EXPORT extern "C" __attribute__((visibility("default")))
|
||||
#endif
|
||||
|
||||
static bool g_is_initialized = false;
|
||||
|
||||
UTILS_DLL_C_EXPORT unsigned int ps3emu_api_get_api_version()
|
||||
{
|
||||
return ps3emu_api_version;
|
||||
}
|
||||
|
||||
UTILS_DLL_C_EXPORT ps3emu_api_error_code ps3emu_api_initialize(const ps3emu_api_initialize_callbacks *callbacks)
|
||||
{
|
||||
if (g_is_initialized)
|
||||
{
|
||||
return ps3emu_api_already_initialized;
|
||||
}
|
||||
|
||||
if (!callbacks)
|
||||
{
|
||||
return ps3emu_api_bad_argument;
|
||||
}
|
||||
|
||||
g_is_initialized = true;
|
||||
|
||||
//TODO
|
||||
return ps3emu_api_ok;
|
||||
}
|
||||
|
||||
UTILS_DLL_C_EXPORT ps3emu_api_error_code ps3emu_api_destroy()
|
||||
{
|
||||
if (!g_is_initialized)
|
||||
{
|
||||
return ps3emu_api_not_initialized;
|
||||
}
|
||||
|
||||
g_is_initialized = false;
|
||||
|
||||
//TODO
|
||||
return ps3emu_api_ok;
|
||||
}
|
||||
|
||||
UTILS_DLL_C_EXPORT ps3emu_api_error_code ps3emu_api_get_version_string(char *dest_buffer, int dest_buffer_size)
|
||||
{
|
||||
if (!g_is_initialized)
|
||||
{
|
||||
return ps3emu_api_not_initialized;
|
||||
}
|
||||
|
||||
if (!dest_buffer || dest_buffer_size <= 0)
|
||||
{
|
||||
return ps3emu_api_bad_argument;
|
||||
}
|
||||
|
||||
if (dest_buffer_size > ps3emu_api_max_version_length)
|
||||
{
|
||||
dest_buffer_size = ps3emu_api_max_version_length;
|
||||
}
|
||||
|
||||
const std::string version_string = rpcs3::version.to_string();
|
||||
|
||||
if (dest_buffer_size > version_string.length())
|
||||
{
|
||||
dest_buffer_size = version_string.length();
|
||||
}
|
||||
|
||||
std::memcpy(dest_buffer, version_string.c_str(), dest_buffer_size - 1);
|
||||
dest_buffer[dest_buffer_size - 1] = '\0';
|
||||
return ps3emu_api_ok;
|
||||
}
|
||||
|
||||
UTILS_DLL_C_EXPORT ps3emu_api_error_code ps3emu_api_get_version_number(int *version_number)
|
||||
{
|
||||
if (!g_is_initialized)
|
||||
{
|
||||
return ps3emu_api_not_initialized;
|
||||
}
|
||||
|
||||
if (!version_number)
|
||||
{
|
||||
return ps3emu_api_bad_argument;
|
||||
}
|
||||
|
||||
*version_number = rpcs3::version.to_hex();
|
||||
return ps3emu_api_ok;
|
||||
}
|
||||
|
||||
UTILS_DLL_C_EXPORT ps3emu_api_error_code ps3emu_api_get_name_string(char *dest_buffer, int dest_buffer_size)
|
||||
{
|
||||
if (!g_is_initialized)
|
||||
{
|
||||
return ps3emu_api_not_initialized;
|
||||
}
|
||||
|
||||
if (!dest_buffer || dest_buffer_size <= 0)
|
||||
{
|
||||
return ps3emu_api_bad_argument;
|
||||
}
|
||||
|
||||
if (dest_buffer_size > ps3emu_api_max_name_length)
|
||||
{
|
||||
dest_buffer_size = ps3emu_api_max_name_length;
|
||||
}
|
||||
|
||||
const std::string name_string = "RPCS3";
|
||||
|
||||
if (dest_buffer_size > name_string.length())
|
||||
{
|
||||
dest_buffer_size = name_string.length();
|
||||
}
|
||||
|
||||
std::memcpy(dest_buffer, name_string.c_str(), dest_buffer_size - 1);
|
||||
dest_buffer[dest_buffer_size - 1] = '\0';
|
||||
|
||||
return ps3emu_api_ok;
|
||||
}
|
||||
|
||||
UTILS_DLL_C_EXPORT ps3emu_api_error_code ps3emu_api_load_elf(const char *path)
|
||||
{
|
||||
if (!g_is_initialized)
|
||||
{
|
||||
return ps3emu_api_not_initialized;
|
||||
}
|
||||
|
||||
if (!path)
|
||||
{
|
||||
return ps3emu_api_bad_argument;
|
||||
}
|
||||
|
||||
if (!fs::is_file(path))
|
||||
{
|
||||
return ps3emu_api_not_found;
|
||||
}
|
||||
|
||||
Emu.SetPath(path);
|
||||
Emu.Load();
|
||||
|
||||
return ps3emu_api_ok;
|
||||
}
|
||||
|
||||
UTILS_DLL_C_EXPORT ps3emu_api_error_code ps3emu_api_set_state(ps3emu_api_state state)
|
||||
{
|
||||
if (!g_is_initialized)
|
||||
{
|
||||
return ps3emu_api_not_initialized;
|
||||
}
|
||||
|
||||
//TODO state machine
|
||||
switch (state)
|
||||
{
|
||||
case ps3emu_api_state_stoping:
|
||||
Emu.Stop();
|
||||
break;
|
||||
|
||||
case ps3emu_api_state_pausing:
|
||||
Emu.Pause();
|
||||
break;
|
||||
|
||||
case ps3emu_api_state_starting:
|
||||
if (Emu.IsPaused())
|
||||
{
|
||||
Emu.Resume();
|
||||
}
|
||||
else
|
||||
{
|
||||
Emu.Run();
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
return ps3emu_api_bad_argument;
|
||||
}
|
||||
|
||||
return ps3emu_api_ok;
|
||||
}
|
||||
|
||||
UTILS_DLL_C_EXPORT ps3emu_api_error_code ps3emu_api_get_state(ps3emu_api_state *state)
|
||||
{
|
||||
if (!g_is_initialized)
|
||||
{
|
||||
return ps3emu_api_not_initialized;
|
||||
}
|
||||
|
||||
if (!state)
|
||||
{
|
||||
return ps3emu_api_bad_argument;
|
||||
}
|
||||
|
||||
if (Emu.IsRunning())
|
||||
{
|
||||
*state = ps3emu_api_state_started;
|
||||
}
|
||||
else if (Emu.IsPaused())
|
||||
{
|
||||
*state = ps3emu_api_state_paused;
|
||||
}
|
||||
else if (Emu.IsStopped())
|
||||
{
|
||||
*state = ps3emu_api_state_stopped;
|
||||
}
|
||||
else if (Emu.IsReady())
|
||||
{
|
||||
*state = ps3emu_api_state_idle;
|
||||
}
|
||||
else
|
||||
{
|
||||
return ps3emu_api_internal_error;
|
||||
}
|
||||
|
||||
return ps3emu_api_ok;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue