fix(libSceSystemGesture): report no touch events for the primitive and recognizer calls
WIP: the TechnicalDebt entry for the silently successful calls is still missing. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
2a38c0bd91
commit
4bf608565f
|
|
@ -173,6 +173,16 @@ if(BUILD_TESTING)
|
|||
"PATH=path_list_prepend:$<TARGET_FILE_DIR:libSceHttp>")
|
||||
endif()
|
||||
|
||||
add_test_executable(guest_system_gesture_tests tests/GuestSystemGesture.cpp)
|
||||
target_include_directories(guest_system_gesture_tests PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
target_link_libraries(guest_system_gesture_tests PRIVATE libSceSystemGesture libc)
|
||||
configure_windows_unwind(guest_system_gesture_tests)
|
||||
add_test(NAME guest_system_gesture COMMAND guest_system_gesture_tests)
|
||||
if(WIN32)
|
||||
set_tests_properties(guest_system_gesture PROPERTIES ENVIRONMENT_MODIFICATION
|
||||
"PATH=path_list_prepend:$<TARGET_FILE_DIR:libSceSystemGesture>")
|
||||
endif()
|
||||
|
||||
if(UNIX AND (CMAKE_SYSTEM_PROCESSOR MATCHES "^(x86_64|AMD64)$" OR CMAKE_OSX_ARCHITECTURES STREQUAL "x86_64"))
|
||||
add_subdirectory(tests/register_context)
|
||||
endif()
|
||||
|
|
|
|||
|
|
@ -12,10 +12,9 @@ static constexpr int SCE_SYSTEM_GESTURE_ERROR_INDEX_OUT_OF_ARRAY = static_cast<i
|
|||
extern "C" {
|
||||
|
||||
int APS5_VABI sceSystemGestureAppendTouchRecognizer(int32_t gesture_handle, SystemGestureTouchRecognizer* recognizer) {
|
||||
(void)gesture_handle;
|
||||
(void)recognizer;
|
||||
NotImplemented_nid_no_patch(__func__);
|
||||
return 0;
|
||||
if (gesture_handle != GESTURE_HANDLE) return SCE_SYSTEM_GESTURE_ERROR_INVALID_HANDLE;
|
||||
if (!recognizer) return SCE_SYSTEM_GESTURE_ERROR_INVALID_ARGUMENT;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int APS5_VABI sceSystemGestureClose(int32_t gesture_handle) {
|
||||
|
|
@ -36,11 +35,10 @@ int APS5_VABI sceSystemGestureFinalizePrimitiveTouchRecognizer(void) {
|
|||
}
|
||||
|
||||
int APS5_VABI sceSystemGestureGetPrimitiveTouchEventByIndex(int32_t gesture_handle, uint32_t index, SystemGesturePrimitiveTouchEvent* event) {
|
||||
(void)gesture_handle;
|
||||
(void)index;
|
||||
(void)event;
|
||||
NotImplemented_nid_no_patch(__func__);
|
||||
return 0;
|
||||
(void)index;
|
||||
(void)event;
|
||||
if (gesture_handle != GESTURE_HANDLE) return SCE_SYSTEM_GESTURE_ERROR_INVALID_HANDLE;
|
||||
return SCE_SYSTEM_GESTURE_ERROR_INDEX_OUT_OF_ARRAY;
|
||||
}
|
||||
|
||||
int APS5_VABI sceSystemGestureGetPrimitiveTouchEventByPrimitiveID(int32_t gesture_handle, uint16_t primitiveId, SystemGesturePrimitiveTouchEvent* event) {
|
||||
|
|
@ -52,18 +50,16 @@ int APS5_VABI sceSystemGestureGetPrimitiveTouchEventByPrimitiveID(int32_t gestur
|
|||
}
|
||||
|
||||
int APS5_VABI sceSystemGestureGetPrimitiveTouchEvents(int32_t gesture_handle, SystemGesturePrimitiveTouchEvent* event_buffer, uint32_t capacity_of_buffer, uint32_t* number_of_event) {
|
||||
(void)gesture_handle;
|
||||
(void)event_buffer;
|
||||
(void)capacity_of_buffer;
|
||||
(void)number_of_event;
|
||||
NotImplemented_nid_no_patch(__func__);
|
||||
return 0;
|
||||
(void)event_buffer;
|
||||
(void)capacity_of_buffer;
|
||||
if (gesture_handle != GESTURE_HANDLE) return SCE_SYSTEM_GESTURE_ERROR_INVALID_HANDLE;
|
||||
if (!number_of_event) return SCE_SYSTEM_GESTURE_ERROR_INVALID_ARGUMENT;
|
||||
*number_of_event = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int APS5_VABI sceSystemGestureGetPrimitiveTouchEventsCount(int32_t gesture_handle) {
|
||||
(void)gesture_handle;
|
||||
NotImplemented_nid_no_patch(__func__);
|
||||
return 0;
|
||||
return gesture_handle == GESTURE_HANDLE ? 0 : SCE_SYSTEM_GESTURE_ERROR_INVALID_HANDLE;
|
||||
}
|
||||
|
||||
int APS5_VABI sceSystemGestureGetTouchEventByEventID(int32_t gesture_handle, const SystemGestureTouchRecognizer* recognizer, uint32_t eventId, SystemGestureTouchEvent* event) {
|
||||
|
|
@ -84,13 +80,13 @@ int APS5_VABI sceSystemGestureGetTouchEventByIndex(int32_t gesture_handle, const
|
|||
}
|
||||
|
||||
int APS5_VABI sceSystemGestureGetTouchEvents(int32_t gesture_handle, const SystemGestureTouchRecognizer* recognizer, SystemGestureTouchEvent* event_buffer, uint32_t capacity_of_buffer, uint32_t* number_of_event) {
|
||||
(void)gesture_handle;
|
||||
(void)recognizer;
|
||||
(void)event_buffer;
|
||||
(void)capacity_of_buffer;
|
||||
(void)number_of_event;
|
||||
NotImplemented_nid_no_patch(__func__);
|
||||
return 0;
|
||||
(void)recognizer;
|
||||
(void)event_buffer;
|
||||
(void)capacity_of_buffer;
|
||||
if (gesture_handle != GESTURE_HANDLE) return SCE_SYSTEM_GESTURE_ERROR_INVALID_HANDLE;
|
||||
if (!number_of_event) return SCE_SYSTEM_GESTURE_ERROR_INVALID_ARGUMENT;
|
||||
*number_of_event = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int APS5_VABI sceSystemGestureGetTouchEventsCount(int32_t gesture_handle, const SystemGestureTouchRecognizer* recognizer) {
|
||||
|
|
@ -118,47 +114,44 @@ int32_t APS5_VABI sceSystemGestureOpen(int32_t input_type, const void* param) {
|
|||
}
|
||||
|
||||
int APS5_VABI sceSystemGestureRemoveTouchRecognizer(int32_t gesture_handle, SystemGestureTouchRecognizer* recognizer) {
|
||||
(void)gesture_handle;
|
||||
(void)recognizer;
|
||||
NotImplemented_nid_no_patch(__func__);
|
||||
return 0;
|
||||
if (gesture_handle != GESTURE_HANDLE) return SCE_SYSTEM_GESTURE_ERROR_INVALID_HANDLE;
|
||||
if (!recognizer) return SCE_SYSTEM_GESTURE_ERROR_INVALID_ARGUMENT;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int APS5_VABI sceSystemGestureResetPrimitiveTouchRecognizer(int32_t gesture_handle) {
|
||||
(void)gesture_handle;
|
||||
NotImplemented_nid_no_patch(__func__);
|
||||
return 0;
|
||||
if (gesture_handle != GESTURE_HANDLE) return SCE_SYSTEM_GESTURE_ERROR_INVALID_HANDLE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int APS5_VABI sceSystemGestureResetTouchRecognizer(int32_t gesture_handle, SystemGestureTouchRecognizer* recognizer) {
|
||||
(void)gesture_handle;
|
||||
(void)recognizer;
|
||||
NotImplemented_nid_no_patch(__func__);
|
||||
return 0;
|
||||
if (gesture_handle != GESTURE_HANDLE) return SCE_SYSTEM_GESTURE_ERROR_INVALID_HANDLE;
|
||||
if (!recognizer) return SCE_SYSTEM_GESTURE_ERROR_INVALID_ARGUMENT;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int APS5_VABI sceSystemGestureUpdateAllTouchRecognizer(int32_t gesture_handle) {
|
||||
(void)gesture_handle;
|
||||
NotImplemented_nid_no_patch(__func__);
|
||||
return 0;
|
||||
if (gesture_handle != GESTURE_HANDLE) return SCE_SYSTEM_GESTURE_ERROR_INVALID_HANDLE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int APS5_VABI sceSystemGestureUpdatePrimitiveTouchRecognizer(int32_t gesture_handle, const void* param) {
|
||||
(void)param;
|
||||
return gesture_handle == GESTURE_HANDLE ? 0 : SCE_SYSTEM_GESTURE_ERROR_INVALID_HANDLE;
|
||||
if (gesture_handle != GESTURE_HANDLE) return SCE_SYSTEM_GESTURE_ERROR_INVALID_HANDLE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int APS5_VABI sceSystemGestureUpdateTouchRecognizer(int32_t gesture_handle, SystemGestureTouchRecognizer* recognizer) {
|
||||
(void)recognizer;
|
||||
return gesture_handle == GESTURE_HANDLE ? 0 : SCE_SYSTEM_GESTURE_ERROR_INVALID_HANDLE;
|
||||
if (gesture_handle != GESTURE_HANDLE) return SCE_SYSTEM_GESTURE_ERROR_INVALID_HANDLE;
|
||||
if (!recognizer) return SCE_SYSTEM_GESTURE_ERROR_INVALID_ARGUMENT;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int APS5_VABI sceSystemGestureUpdateTouchRecognizerRectangle(int32_t gesture_handle, SystemGestureTouchRecognizer* recognizer, const SystemGestureRectangle* rectangle) {
|
||||
(void)gesture_handle;
|
||||
(void)recognizer;
|
||||
(void)rectangle;
|
||||
NotImplemented_nid_no_patch(__func__);
|
||||
return 0;
|
||||
if (gesture_handle != GESTURE_HANDLE) return SCE_SYSTEM_GESTURE_ERROR_INVALID_HANDLE;
|
||||
if (!recognizer) return SCE_SYSTEM_GESTURE_ERROR_INVALID_ARGUMENT;
|
||||
if (!rectangle) return SCE_SYSTEM_GESTURE_ERROR_INVALID_ARGUMENT;
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,72 @@
|
|||
#include "prx/libc/include/general/VabiMacros.hpp"
|
||||
|
||||
#include <array>
|
||||
#include <cstdint>
|
||||
#include <cstdlib>
|
||||
|
||||
extern "C" {
|
||||
std::int32_t APS5_VABI sceSystemGestureOpen(std::int32_t, const void*);
|
||||
int APS5_VABI sceSystemGestureGetPrimitiveTouchEvents(std::int32_t, void*, std::uint32_t, std::uint32_t*);
|
||||
int APS5_VABI sceSystemGestureGetPrimitiveTouchEventsCount(std::int32_t);
|
||||
int APS5_VABI sceSystemGestureGetTouchEvents(std::int32_t, const void*, void*, std::uint32_t, std::uint32_t*);
|
||||
int APS5_VABI sceSystemGestureGetPrimitiveTouchEventByIndex(std::int32_t, std::uint32_t, void*);
|
||||
int APS5_VABI sceSystemGestureAppendTouchRecognizer(std::int32_t, void*);
|
||||
int APS5_VABI sceSystemGestureRemoveTouchRecognizer(std::int32_t, void*);
|
||||
int APS5_VABI sceSystemGestureResetTouchRecognizer(std::int32_t, void*);
|
||||
int APS5_VABI sceSystemGestureUpdateTouchRecognizer(std::int32_t, void*);
|
||||
int APS5_VABI sceSystemGestureUpdateTouchRecognizerRectangle(std::int32_t, void*, const void*);
|
||||
int APS5_VABI sceSystemGestureResetPrimitiveTouchRecognizer(std::int32_t);
|
||||
int APS5_VABI sceSystemGestureUpdateAllTouchRecognizer(std::int32_t);
|
||||
int APS5_VABI sceSystemGestureUpdatePrimitiveTouchRecognizer(std::int32_t, const void*);
|
||||
}
|
||||
|
||||
static void Require(bool value) { if (!value) std::abort(); }
|
||||
|
||||
int main() {
|
||||
constexpr int invalidArgument = static_cast<int>(0x80D10002);
|
||||
constexpr int invalidHandle = static_cast<int>(0x80D10003);
|
||||
const std::int32_t handle = sceSystemGestureOpen(0, nullptr);
|
||||
|
||||
std::array<unsigned char, 64> buffer;
|
||||
buffer.fill(0x5a);
|
||||
const auto original = buffer;
|
||||
std::uint32_t count = 7;
|
||||
Require(sceSystemGestureGetPrimitiveTouchEvents(handle, buffer.data(), 4, &count) == 0);
|
||||
Require(count == 0);
|
||||
Require(buffer == original);
|
||||
|
||||
count = 7;
|
||||
Require(sceSystemGestureGetPrimitiveTouchEvents(handle, buffer.data(), 4, nullptr) == invalidArgument);
|
||||
Require(sceSystemGestureGetPrimitiveTouchEvents(handle + 1, buffer.data(), 4, &count) == invalidHandle);
|
||||
Require(count == 7);
|
||||
|
||||
Require(sceSystemGestureGetPrimitiveTouchEventsCount(handle) == 0);
|
||||
Require(sceSystemGestureGetPrimitiveTouchEventsCount(handle + 1) == invalidHandle);
|
||||
|
||||
constexpr int indexOutOfArray = static_cast<int>(0x80D10005);
|
||||
int recognizer = 0;
|
||||
int rectangle = 0;
|
||||
count = 7;
|
||||
Require(sceSystemGestureGetTouchEvents(handle, &recognizer, buffer.data(), 4, &count) == 0 && count == 0);
|
||||
Require(sceSystemGestureGetTouchEvents(handle, &recognizer, buffer.data(), 4, nullptr) == invalidArgument);
|
||||
Require(sceSystemGestureGetTouchEvents(handle + 1, &recognizer, buffer.data(), 4, &count) == invalidHandle);
|
||||
Require(sceSystemGestureGetPrimitiveTouchEventByIndex(handle, 0, buffer.data()) == indexOutOfArray);
|
||||
Require(sceSystemGestureGetPrimitiveTouchEventByIndex(handle + 1, 0, buffer.data()) == invalidHandle);
|
||||
Require(buffer == original);
|
||||
|
||||
Require(sceSystemGestureAppendTouchRecognizer(handle, &recognizer) == 0);
|
||||
Require(sceSystemGestureRemoveTouchRecognizer(handle, &recognizer) == 0);
|
||||
Require(sceSystemGestureResetTouchRecognizer(handle, &recognizer) == 0);
|
||||
Require(sceSystemGestureUpdateTouchRecognizer(handle, &recognizer) == 0);
|
||||
Require(sceSystemGestureUpdateTouchRecognizerRectangle(handle, &recognizer, &rectangle) == 0);
|
||||
Require(sceSystemGestureResetPrimitiveTouchRecognizer(handle) == 0);
|
||||
Require(sceSystemGestureUpdateAllTouchRecognizer(handle) == 0);
|
||||
Require(sceSystemGestureUpdatePrimitiveTouchRecognizer(handle, nullptr) == 0);
|
||||
Require(sceSystemGestureAppendTouchRecognizer(handle, nullptr) == invalidArgument);
|
||||
Require(sceSystemGestureUpdateTouchRecognizerRectangle(handle, &recognizer, nullptr) == invalidArgument);
|
||||
Require(sceSystemGestureAppendTouchRecognizer(handle + 1, &recognizer) == invalidHandle);
|
||||
Require(sceSystemGestureResetPrimitiveTouchRecognizer(handle + 1) == invalidHandle);
|
||||
Require(sceSystemGestureUpdateAllTouchRecognizer(handle + 1) == invalidHandle);
|
||||
Require(sceSystemGestureUpdatePrimitiveTouchRecognizer(handle + 1, nullptr) == invalidHandle);
|
||||
return 0;
|
||||
}
|
||||
Loading…
Reference in New Issue