mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-10-27 00:28:14 +00:00
80 lines
3.6 KiB
C++
80 lines
3.6 KiB
C++
#include "prx/libSceShare/include/Api.hpp"
|
|
#include "prx/libc/include/general/VabiMacros.hpp"
|
|
#include <cstdint>
|
|
#include <cstdlib>
|
|
#include <cstring>
|
|
#include <initializer_list>
|
|
#include <string>
|
|
|
|
namespace {
|
|
|
|
void Require(bool value) { if (!value) std::abort(); }
|
|
|
|
}
|
|
|
|
int main() {
|
|
constexpr std::int32_t notSupported = static_cast<std::int32_t>(0x81960007);
|
|
std::uint8_t param[64]{};
|
|
|
|
using Capture = int (APS5_VABI*)(const void*, std::int32_t*);
|
|
std::int32_t reqId = 7;
|
|
constexpr std::int32_t invalidParam = static_cast<std::int32_t>(0x81960002);
|
|
const auto checkExtended = [&]<typename TParam>(int (APS5_VABI* capture)(const TParam*, std::int32_t*), std::uint64_t size) {
|
|
std::uint64_t fields[5]{};
|
|
reqId = 7;
|
|
Require(capture(reinterpret_cast<const TParam*>(fields), &reqId) == invalidParam && reqId == 7);
|
|
Require(capture(nullptr, &reqId) == invalidParam && reqId == 7);
|
|
fields[0] = size;
|
|
Require(capture(reinterpret_cast<const TParam*>(fields), &reqId) == notSupported && reqId == -1);
|
|
Require(capture(reinterpret_cast<const TParam*>(fields), nullptr) == notSupported);
|
|
if (size == 40) {
|
|
fields[2] = 1;
|
|
reqId = 7;
|
|
Require(capture(reinterpret_cast<const TParam*>(fields), &reqId) == invalidParam && reqId == -1);
|
|
fields[3] = 1;
|
|
Require(capture(reinterpret_cast<const TParam*>(fields), nullptr) == notSupported);
|
|
fields[3] |= std::uint64_t{1} << 32;
|
|
Require(capture(reinterpret_cast<const TParam*>(fields), nullptr) == invalidParam);
|
|
}
|
|
};
|
|
checkExtended(sceShareCaptureScreenshotExtended, 24);
|
|
checkExtended(sceShareCaptureVideoClipExtended, 40);
|
|
|
|
for (Capture capture : {sceShareCaptureScreenshot, sceShareCaptureVideoClip}) {
|
|
reqId = 7;
|
|
Require(capture(param, &reqId) == notSupported);
|
|
Require(reqId == -1);
|
|
reqId = 7;
|
|
Require(capture(nullptr, &reqId) == notSupported);
|
|
Require(reqId == -1);
|
|
Require(capture(param, nullptr) == notSupported);
|
|
}
|
|
|
|
Require(sceShareOpenMenuForContent(param) == notSupported);
|
|
Require(sceShareOpenMenuForContent(nullptr) == notSupported);
|
|
|
|
std::uint8_t status[18];
|
|
std::memset(status, 0x5a, sizeof(status));
|
|
Require(sceShareGetCurrentStatus(1, reinterpret_cast<ShareCurrentStatus*>(status)) == 0);
|
|
for (std::size_t index = 0; index < sizeof(status); ++index) Require(status[index] == (index < 16 ? 0 : 0x5a));
|
|
std::memset(status, 0x5a, sizeof(status));
|
|
Require(sceShareGetCurrentStatus(0xffffffffu, reinterpret_cast<ShareCurrentStatus*>(status)) == 0);
|
|
Require(status[0] == 0 && status[15] == 0 && status[16] == 0x5a);
|
|
std::memset(status, 0x5a, sizeof(status));
|
|
Require(sceShareGetCurrentStatus(0, reinterpret_cast<ShareCurrentStatus*>(status)) == invalidParam);
|
|
Require(status[0] == 0x5a);
|
|
Require(sceShareGetCurrentStatus(1, nullptr) == invalidParam);
|
|
std::uint32_t running[2]{0xffffffffu, 0x5a5a5a5au};
|
|
Require(sceShareGetRunningStatus(running) == 0);
|
|
Require(running[0] == 0 && running[1] == 0x5a5a5a5au);
|
|
Require(sceShareGetRunningStatus(nullptr) == invalidParam);
|
|
Require(sceShareSetContentParamForApplicationTitle("title") == 0);
|
|
Require(sceShareSetContentParamForApplicationTitle(nullptr) == invalidParam);
|
|
Require(sceShareSetContentParamForApplicationTitle("") == invalidParam);
|
|
std::string title(5119, 'a');
|
|
Require(sceShareSetContentParamForApplicationTitle(title.c_str()) == 0);
|
|
title.push_back('a');
|
|
Require(sceShareSetContentParamForApplicationTitle(title.c_str()) == invalidParam);
|
|
return 0;
|
|
}
|