mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-11-05 13:20:11 +00:00
Merge pull request #9705 from MarcZX10/feat/keyboard-get-connection
feat(libSceKeyboard): implement connection query
This commit is contained in:
4 files changed
+24
-5
No files matched your search
@@ -27,6 +27,10 @@ int APS5_VABI sceKeyboardReadState(int32_t handle, KeyboardData* data) {
|
||||
return Keyboard::ReadState(handle, data);
|
||||
}
|
||||
|
||||
int APS5_VABI sceKeyboardGetConnection(std::int32_t handle, bool* connected) {
|
||||
return Keyboard::GetConnection(handle, connected);
|
||||
}
|
||||
|
||||
int APS5_VABI sceKeyboardGetKey2Char(std::int32_t handle, std::int32_t arrange, std::uint8_t led, std::uint8_t modifierKey, std::uint16_t keyCode, KeyboardCharData* charData) {
|
||||
return Keyboard::GetKey2Char(handle, arrange, led, modifierKey, keyCode, charData);
|
||||
}
|
||||
@@ -61,11 +65,6 @@ int APS5_VABI sceKeyboardDisconnectPort(std::int32_t first, std::int32_t second)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int APS5_VABI sceKeyboardGetConnection(std::int32_t handle, bool* connected) {
|
||||
NotImplemented_nid_no_patch(__func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int APS5_VABI sceKeyboardGetDeviceInfo(std::int32_t deviceId, KeyboardDeviceInfo* info) {
|
||||
NotImplemented_nid_no_patch(__func__);
|
||||
return 0;
|
||||
|
||||
@@ -18,6 +18,7 @@ int Open(int userId, std::int32_t type, std::int32_t index);
|
||||
int Close(std::int32_t handle);
|
||||
int Read(std::int32_t handle, KeyboardData* data, std::int32_t num);
|
||||
int ReadState(std::int32_t handle, KeyboardData* data);
|
||||
int GetConnection(std::int32_t handle, bool* connected);
|
||||
int GetKey2Char(std::int32_t handle, std::int32_t arrange, std::uint32_t led, std::uint32_t modifierKey, std::uint16_t keyCode, KeyboardCharData* charData);
|
||||
void Publish(const KeyboardInputEvent& event);
|
||||
}
|
||||
|
||||
@@ -154,6 +154,15 @@ int ReadState(std::int32_t handle, KeyboardData* data) {
|
||||
return KEYBOARD_OK;
|
||||
}
|
||||
|
||||
int GetConnection(std::int32_t handle, bool* isConnected) {
|
||||
std::lock_guard lock(keyboardMutex);
|
||||
if (!initialized) return KEYBOARD_ERROR_NOT_INITIALIZED;
|
||||
if (handle != KEYBOARD_HANDLE || !opened) return KEYBOARD_ERROR_INVALID_HANDLE;
|
||||
if (isConnected == nullptr) return KEYBOARD_ERROR_INVALID_ARG;
|
||||
*isConnected = connected;
|
||||
return KEYBOARD_OK;
|
||||
}
|
||||
|
||||
int GetKey2Char(std::int32_t handle, std::int32_t arrange, std::uint32_t ledState, std::uint32_t modifierKey, std::uint16_t keyCode, KeyboardCharData* charData) {
|
||||
{
|
||||
std::lock_guard lock(keyboardMutex);
|
||||
|
||||
@@ -13,6 +13,7 @@ int APS5_VABI sceKeyboardOpen(int, std::int32_t, std::int32_t, const void*);
|
||||
int APS5_VABI sceKeyboardClose(std::int32_t);
|
||||
int APS5_VABI sceKeyboardRead(std::int32_t, KeyboardData*, std::int32_t);
|
||||
int APS5_VABI sceKeyboardReadState(std::int32_t, KeyboardData*);
|
||||
int APS5_VABI sceKeyboardGetConnection(std::int32_t, bool*);
|
||||
int APS5_VABI sceKeyboardGetKey2Char(std::int32_t, std::int32_t, std::uint8_t, std::uint8_t, std::uint16_t, KeyboardCharData*);
|
||||
int APS5_VABI sceKeyboardConnectPort(void);
|
||||
int APS5_VABI sceKeyboardDisconnectAll(void);
|
||||
@@ -44,14 +45,20 @@ static std::uint16_t Jis(std::uint32_t modifierKey, std::uint16_t keyCode, std::
|
||||
int main() {
|
||||
KeyboardData data[16]{};
|
||||
KeyboardCharData charData{};
|
||||
bool connected = false;
|
||||
Require(sceKeyboardOpen(1, 0, 0, nullptr) == KEYBOARD_ERROR_NOT_INITIALIZED);
|
||||
Require(sceKeyboardGetConnection(KEYBOARD_HANDLE, &connected) == KEYBOARD_ERROR_NOT_INITIALIZED);
|
||||
Require(sceKeyboardInit() == KEYBOARD_OK);
|
||||
Require(sceKeyboardInit() == KEYBOARD_OK);
|
||||
Require(sceKeyboardOpen(1, 0, 1, nullptr) == KEYBOARD_ERROR_INVALID_ARG);
|
||||
Require(sceKeyboardOpen(1, 1, 0, nullptr) == KEYBOARD_ERROR_INVALID_ARG);
|
||||
Require(sceKeyboardGetKey2Char(KEYBOARD_HANDLE, KEYBOARD_ARRANGEMENT_101, 0, 0, 0x04, &charData) == KEYBOARD_ERROR_INVALID_HANDLE);
|
||||
Require(sceKeyboardGetConnection(KEYBOARD_HANDLE, &connected) == KEYBOARD_ERROR_INVALID_HANDLE);
|
||||
Require(sceKeyboardOpen(1, 0, 0, nullptr) == KEYBOARD_HANDLE);
|
||||
Require(sceKeyboardOpen(1, 0, 0, nullptr) == KEYBOARD_ERROR_ALREADY_OPENED);
|
||||
Require(sceKeyboardGetConnection(42, &connected) == KEYBOARD_ERROR_INVALID_HANDLE);
|
||||
Require(sceKeyboardGetConnection(KEYBOARD_HANDLE, nullptr) == KEYBOARD_ERROR_INVALID_ARG);
|
||||
Require(sceKeyboardGetConnection(KEYBOARD_HANDLE, &connected) == KEYBOARD_OK && connected);
|
||||
Require(sceKeyboardRead(42, data, 1) == KEYBOARD_ERROR_INVALID_HANDLE);
|
||||
Require(sceKeyboardRead(KEYBOARD_HANDLE, nullptr, 1) == KEYBOARD_ERROR_INVALID_ARG);
|
||||
Require(sceKeyboardRead(KEYBOARD_HANDLE, data, 17) == KEYBOARD_ERROR_INVALID_ARG);
|
||||
@@ -96,9 +103,11 @@ int main() {
|
||||
window.window.event = SDL_WINDOWEVENT_CLOSE;
|
||||
input.HandleEvent(window, 7);
|
||||
Require(sceKeyboardRead(KEYBOARD_HANDLE, data, 1) == 1 && !data[0].connected && data[0].length == 1 && data[0].key_code[0] == 0);
|
||||
Require(sceKeyboardGetConnection(KEYBOARD_HANDLE, &connected) == KEYBOARD_OK && !connected);
|
||||
window.window.event = SDL_WINDOWEVENT_FOCUS_GAINED;
|
||||
input.HandleEvent(window, 7);
|
||||
Require(sceKeyboardRead(KEYBOARD_HANDLE, data, 1) == 1 && data[0].connected);
|
||||
Require(sceKeyboardGetConnection(KEYBOARD_HANDLE, &connected) == KEYBOARD_OK && connected);
|
||||
|
||||
for (std::uint16_t key = 0x04; key < 0x04 + 20; ++key) {
|
||||
KeyboardInputEvent press{};
|
||||
@@ -143,6 +152,7 @@ int main() {
|
||||
Require(sceKeyboardGetKey2Char(KEYBOARD_HANDLE, 2, 0, 0, 0x04, &charData) == KEYBOARD_ERROR_INVALID_ARG);
|
||||
|
||||
Require(sceKeyboardClose(KEYBOARD_HANDLE) == KEYBOARD_OK);
|
||||
Require(sceKeyboardGetConnection(KEYBOARD_HANDLE, &connected) == KEYBOARD_ERROR_INVALID_HANDLE);
|
||||
Require(sceKeyboardRead(KEYBOARD_HANDLE, data, 1) == KEYBOARD_ERROR_INVALID_HANDLE);
|
||||
Require(sceKeyboardReadState(KEYBOARD_HANDLE, data) == KEYBOARD_ERROR_INVALID_HANDLE);
|
||||
Require(sceKeyboardClose(KEYBOARD_HANDLE) == KEYBOARD_ERROR_INVALID_HANDLE);
|
||||
|
||||
Reference in new issue
Block a user