From 8e6f511d6c3debce74a9551f0e98543e650fef9c Mon Sep 17 00:00:00 2001 From: Ivan Epifanov Date: Wed, 20 Oct 2021 16:18:31 +0300 Subject: [PATCH] Add vita tcp network support --- CMake/vita_defs.cmake | 2 +- CMakeLists.txt | 4 ++++ Source/main.cpp | 8 ++++++++ Source/platform/vita/network.cpp | 32 ++++++++++++++++++++++++++++++ Source/platform/vita/network.h | 3 +++ Source/platform/vita/random.cpp | 34 ++++++++++++++++++++++++++++++++ Source/platform/vita/random.hpp | 2 ++ 7 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 Source/platform/vita/network.cpp create mode 100644 Source/platform/vita/network.h create mode 100644 Source/platform/vita/random.cpp create mode 100644 Source/platform/vita/random.hpp diff --git a/CMake/vita_defs.cmake b/CMake/vita_defs.cmake index b7f276c22..30ce014a8 100644 --- a/CMake/vita_defs.cmake +++ b/CMake/vita_defs.cmake @@ -1,5 +1,5 @@ set(ASAN OFF) set(UBSAN OFF) -set(NONET ON) +set(DISABLE_ZERO_TIER ON) set(PREFILL_PLAYER_NAME ON) add_definitions("-DMO_LANG_DIR=\"app0:/\"") diff --git a/CMakeLists.txt b/CMakeLists.txt index 68e3dbf11..a35c9cd7b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -533,6 +533,8 @@ endif() if(VITA) list(APPEND libdevilutionx_SRCS + Source/platform/vita/random.cpp + Source/platform/vita/network.cpp Source/platform/vita/keyboard.cpp Source/platform/vita/touch.cpp) endif() @@ -937,6 +939,8 @@ if (VITA) target_link_libraries(libdevilutionx PUBLIC ScePower_stub SceAppUtil_stub + SceNet_stub + SceNetCtl_stub ) target_compile_definitions(libdevilutionx PUBLIC VITA) endif() diff --git a/Source/main.cpp b/Source/main.cpp index cdf4cf6a2..4298d4618 100644 --- a/Source/main.cpp +++ b/Source/main.cpp @@ -6,6 +6,10 @@ #ifdef __3DS__ #include "platform/ctr/system.h" #endif +#ifdef __vita__ +#include "platform/vita/network.h" +#include "platform/vita/random.hpp" +#endif #ifdef GPERF_HEAP_MAIN #include #endif @@ -32,6 +36,10 @@ int main(int argc, char **argv) #ifdef __3DS__ ctr_sys_init(); #endif +#ifdef __vita__ + vita_enable_network(); + randombytes_vitarandom_init(); +#endif #ifdef GPERF_HEAP_MAIN HeapProfilerStart("main"); #endif diff --git a/Source/platform/vita/network.cpp b/Source/platform/vita/network.cpp new file mode 100644 index 000000000..c55788c1d --- /dev/null +++ b/Source/platform/vita/network.cpp @@ -0,0 +1,32 @@ +#include +#include +#include +#include "platform/vita/network.h" +#include +#include +#include + +void vita_enable_network() +{ + SceNetInitParam param; + static char memory[64 * 1024]; + int ret; + + ret = sceSysmoduleLoadModule(SCE_SYSMODULE_NET); + if (ret < 0) { + return; + } + + param.memory = memory; + param.size = sizeof(memory); + param.flags = 0; + ret = sceNetInit(¶m); + if (ret < 0) { + return; + } + + ret = sceNetCtlInit(); + if (ret < 0) { + return; + } +} diff --git a/Source/platform/vita/network.h b/Source/platform/vita/network.h new file mode 100644 index 000000000..57f69b1e6 --- /dev/null +++ b/Source/platform/vita/network.h @@ -0,0 +1,3 @@ +#pragma once + +void vita_enable_network(); diff --git a/Source/platform/vita/random.cpp b/Source/platform/vita/random.cpp new file mode 100644 index 000000000..297959ed2 --- /dev/null +++ b/Source/platform/vita/random.cpp @@ -0,0 +1,34 @@ +#include +#include +#include + +static const char *randombytes_vitarandom_implementation_name() +{ + return "vitarandom"; +} + +static uint32_t randombytes_vitarandom() +{ + uint32_t num; + sceKernelGetRandomNumber(&num, sizeof(uint32_t)); + return num; +} + +static void randombytes_vitarandom_buf(void *const buf, const size_t size) +{ + sceKernelGetRandomNumber(buf, size); +} + +struct randombytes_implementation randombytes_vitarandom_implementation = { + randombytes_vitarandom_implementation_name, + randombytes_vitarandom, + nullptr, + nullptr, + randombytes_vitarandom_buf, + nullptr +}; + +void randombytes_vitarandom_init() +{ + randombytes_set_implementation(&randombytes_vitarandom_implementation); +} diff --git a/Source/platform/vita/random.hpp b/Source/platform/vita/random.hpp new file mode 100644 index 000000000..7ec0adf35 --- /dev/null +++ b/Source/platform/vita/random.hpp @@ -0,0 +1,2 @@ +#pragma once +void randombytes_vitarandom_init();