Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 2 additions & 4 deletions core/libs/prx/libSceMouse/Export.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
#include "prx/libSceMouse/include/MouseState.hpp"
#include "prx/libc/include/General.hpp"

extern "C" {

Expand All @@ -23,8 +22,7 @@ void MousePublishInput_nid_postfix(const MouseInputEvent& event) {
Mouse::Publish(event);
}

int APS5_VABI sceMouseResetAbsolutePosition() {
NotImplemented_nid_no_patch(__func__);
return 0;
int APS5_VABI sceMouseResetAbsolutePosition(std::int32_t handle) {
return Mouse::ResetAbsolutePosition(handle);
}
}
1 change: 1 addition & 0 deletions core/libs/prx/libSceMouse/include/MouseState.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ int Initialize();
int Open(int userId, std::int32_t type, std::int32_t index, const MouseOpenParam* param);
int Close(std::int32_t handle);
int Read(std::int32_t handle, MouseData* data, std::int32_t num);
int ResetAbsolutePosition(std::int32_t handle);
void Publish(const MouseInputEvent& event);
}

Expand Down
7 changes: 7 additions & 0 deletions core/libs/prx/libSceMouse/src/mouse_impl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,13 @@ int Read(std::int32_t handle, MouseData* data, std::int32_t num) {
return available;
}

int ResetAbsolutePosition(std::int32_t handle) {
std::lock_guard lock(mouseMutex);
if (!initialized) return MOUSE_ERROR_NOT_INITIALIZED;
if (handle != MOUSE_HANDLE || !opened) return MOUSE_ERROR_INVALID_HANDLE;
return MOUSE_OK;
}

void Publish(const MouseInputEvent& event) {
std::lock_guard lock(mouseMutex);
if (event.connectionChange) {
Expand Down
8 changes: 8 additions & 0 deletions core/libs/prx/libSceMouse/tests/Mouse.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,21 +11,26 @@ int APS5_VABI sceMouseInit();
int APS5_VABI sceMouseOpen(int, std::int32_t, std::int32_t, const void*);
int APS5_VABI sceMouseClose(std::int32_t);
int APS5_VABI sceMouseRead(std::int32_t, MouseData*, std::int32_t);
int APS5_VABI sceMouseResetAbsolutePosition(std::int32_t);
}

static void Require(bool value) { if (!value) std::abort(); }

int main() {
MouseData data[64]{};
Require(sceMouseResetAbsolutePosition(MOUSE_HANDLE) == MOUSE_ERROR_NOT_INITIALIZED);
Require(sceMouseOpen(1, 0, 0, nullptr) == MOUSE_ERROR_NOT_INITIALIZED);
Require(sceMouseInit() == MOUSE_OK);
Require(sceMouseInit() == MOUSE_OK);
Require(sceMouseResetAbsolutePosition(MOUSE_HANDLE) == MOUSE_ERROR_INVALID_HANDLE);
Require(sceMouseOpen(1, 0, 1, nullptr) == MOUSE_ERROR_INVALID_ARG);
MouseOpenParam unsupported{};
unsupported.behaviorFlag = 2;
Require(sceMouseOpen(1, 0, 0, &unsupported) == MOUSE_ERROR_INVALID_ARG);
Require(sceMouseOpen(1, 0, 0, nullptr) == MOUSE_HANDLE);
Require(sceMouseOpen(1, 0, 0, nullptr) == MOUSE_ERROR_ALREADY_OPENED);
Require(sceMouseResetAbsolutePosition(42) == MOUSE_ERROR_INVALID_HANDLE);
Require(sceMouseResetAbsolutePosition(MOUSE_HANDLE) == MOUSE_OK);
Require(sceMouseRead(42, data, 1) == MOUSE_ERROR_INVALID_HANDLE);
Require(sceMouseRead(MOUSE_HANDLE, nullptr, 1) == MOUSE_ERROR_INVALID_ARG);
Require(sceMouseRead(MOUSE_HANDLE, data, 65) == MOUSE_ERROR_INVALID_ARG);
Expand Down Expand Up @@ -99,10 +104,13 @@ int main() {
Require(sceMouseRead(MOUSE_HANDLE, data, 1) == 0);
Require(sceMouseClose(MOUSE_HANDLE) == MOUSE_OK);
Require(sceMouseRead(MOUSE_HANDLE, data, 1) == MOUSE_ERROR_INVALID_HANDLE);
Require(sceMouseResetAbsolutePosition(MOUSE_HANDLE) == MOUSE_ERROR_INVALID_HANDLE);
Require(sceMouseClose(MOUSE_HANDLE) == MOUSE_ERROR_INVALID_HANDLE);
MouseOpenParam merged{};
merged.behaviorFlag = MOUSE_OPEN_PARAM_MERGED;
Require(sceMouseOpen(1, 0, 0, &merged) == MOUSE_HANDLE);
Require(sceMouseResetAbsolutePosition(MOUSE_HANDLE) == MOUSE_OK);
Require(sceMouseRead(MOUSE_HANDLE, data, 1) == 1 && data[0].buttons == 0);
Require(sceMouseClose(MOUSE_HANDLE) == MOUSE_OK);
Require(sceMouseResetAbsolutePosition(MOUSE_HANDLE) == MOUSE_ERROR_INVALID_HANDLE);
}
2 changes: 1 addition & 1 deletion docs/dev/debt/libSceJson2.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,5 @@

### Functional

- PPSA30601 imports declared without parameters, signatures unknown, added without an implementation because the title fails to load without them: [six sce::Json::Object::Pair, sce::Json::Object and sce::Json::Array::iterator members](../../../core/libs/prx/libSceJson2/Export.cpp) (libSceJson2) and [sceMouseResetAbsolutePosition](../../../core/libs/prx/libSceMouse/Export.cpp) (libSceMouse)
- PPSA30601 imports declared without parameters, signatures unknown, added without an implementation because the title fails to load without them: [six sce::Json::Object::Pair, sce::Json::Object and sce::Json::Array::iterator members](../../../core/libs/prx/libSceJson2/Export.cpp) (libSceJson2)
- [sce::Json::InitParameter2 base-object constructor](../../../core/libs/prx/libSceJson2/Export.cpp) (libSceJson2) - forwards to the complete-object constructor and uses its inferred layout and default field values; constructor equivalence and initialization bytes remain unverified on the console
5 changes: 5 additions & 0 deletions docs/dev/debt/libSceMouse.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# libSceMouse technical debt

### Functional

- [sceMouseResetAbsolutePosition](../../../core/libs/prx/libSceMouse/Export.cpp) (libSceMouse) - the signature and behaviour are not documented on hardware; accepts a device handle matching `sceMouseClose` and `sceMouseRead`, validates initialization and open state, and returns `MOUSE_OK` (0) as the console mouse reports relative motion only
Loading