From 3236c634d9dfb9d382d1f27c2e380c341cb56ab7 Mon Sep 17 00:00:00 2001 From: Tom Pratt Date: Thu, 23 Jul 2026 19:47:07 +0200 Subject: Add functionality to get and set controller mappings in Android --- Source/Android/jni/NetPlay/Netplay.cpp | 73 ++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) (limited to 'Source/Android/jni/NetPlay/Netplay.cpp') diff --git a/Source/Android/jni/NetPlay/Netplay.cpp b/Source/Android/jni/NetPlay/Netplay.cpp index d6e24d250b..287f2cdd27 100644 --- a/Source/Android/jni/NetPlay/Netplay.cpp +++ b/Source/Android/jni/NetPlay/Netplay.cpp @@ -1,6 +1,7 @@ // Copyright 2026 Dolphin Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later +#include #include #include #include @@ -38,6 +39,30 @@ static NetPlay::NetPlayServer* GetServerPointer(JNIEnv* env, jobject obj) env->GetLongField(obj, IDCache::GetNetPlayServerPointer())); } +static jintArray PadMappingArrayToJIntArray(JNIEnv* env, const NetPlay::PadMappingArray& mapping) +{ + const jsize size = static_cast(mapping.size()); + jintArray jmapping = env->NewIntArray(size); + std::array values; + for (size_t i = 0; i < mapping.size(); i++) + values[i] = static_cast(mapping[i]); + env->SetIntArrayRegion(jmapping, 0, size, values.data()); + return jmapping; +} + +static bool JIntArrayToPadMappingArray(JNIEnv* env, jintArray jmapping, + NetPlay::PadMappingArray* mapping) +{ + if (env->GetArrayLength(jmapping) != static_cast(mapping->size())) + return false; + + std::array values; + env->GetIntArrayRegion(jmapping, 0, static_cast(values.size()), values.data()); + for (size_t i = 0; i < mapping->size(); i++) + (*mapping)[i] = static_cast(values[i]); + return true; +} + extern "C" { JNIEXPORT void JNICALL @@ -224,6 +249,54 @@ Java_org_dolphinemu_dolphinemu_features_netplay_NetplaySession_nativeReconnectTr Common::g_TraversalClient->ReconnectToServer(); } +JNIEXPORT jintArray JNICALL +Java_org_dolphinemu_dolphinemu_features_netplay_NetplaySession_nativeGetPadMapping(JNIEnv* env, + jobject obj) +{ + auto* server = GetServerPointer(env, obj); + if (!server) + return env->NewIntArray(0); + + return PadMappingArrayToJIntArray(env, server->GetPadMapping()); +} + +JNIEXPORT jintArray JNICALL +Java_org_dolphinemu_dolphinemu_features_netplay_NetplaySession_nativeGetWiimoteMapping(JNIEnv* env, + jobject obj) +{ + auto* server = GetServerPointer(env, obj); + if (!server) + return env->NewIntArray(0); + + return PadMappingArrayToJIntArray(env, server->GetWiimoteMapping()); +} + +JNIEXPORT void JNICALL +Java_org_dolphinemu_dolphinemu_features_netplay_NetplaySession_nativeSetPadMapping( + JNIEnv* env, jobject obj, jintArray jmapping) +{ + auto* server = GetServerPointer(env, obj); + if (!server) + return; + + NetPlay::PadMappingArray mapping = server->GetPadMapping(); + if (JIntArrayToPadMappingArray(env, jmapping, &mapping)) + server->SetPadMapping(mapping); +} + +JNIEXPORT void JNICALL +Java_org_dolphinemu_dolphinemu_features_netplay_NetplaySession_nativeSetWiimoteMapping( + JNIEnv* env, jobject obj, jintArray jmapping) +{ + auto* server = GetServerPointer(env, obj); + if (!server) + return; + + NetPlay::PadMappingArray mapping = server->GetWiimoteMapping(); + if (JIntArrayToPadMappingArray(env, jmapping, &mapping)) + server->SetWiimoteMapping(mapping); +} + JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_features_netplay_NetplaySession_nativeReleaseUICallbacks( JNIEnv*, jobject, jlong pointer) -- cgit v1.2.3 From e6f5516ad7a6b019db57b981625c5e8fbb670d4a Mon Sep 17 00:00:00 2001 From: Tom Pratt Date: Thu, 23 Jul 2026 16:35:54 +0200 Subject: Android controller mapping UI UI for assigning netplay players to gamecube ports and wii remotes. --- Source/Android/jni/NetPlay/Netplay.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'Source/Android/jni/NetPlay/Netplay.cpp') diff --git a/Source/Android/jni/NetPlay/Netplay.cpp b/Source/Android/jni/NetPlay/Netplay.cpp index 287f2cdd27..16804b808b 100644 --- a/Source/Android/jni/NetPlay/Netplay.cpp +++ b/Source/Android/jni/NetPlay/Netplay.cpp @@ -4,6 +4,8 @@ #include #include #include +#include +#include #include #include @@ -43,7 +45,7 @@ static jintArray PadMappingArrayToJIntArray(JNIEnv* env, const NetPlay::PadMappi { const jsize size = static_cast(mapping.size()); jintArray jmapping = env->NewIntArray(size); - std::array values; + std::array>> values; for (size_t i = 0; i < mapping.size(); i++) values[i] = static_cast(mapping[i]); env->SetIntArrayRegion(jmapping, 0, size, values.data()); @@ -56,7 +58,7 @@ static bool JIntArrayToPadMappingArray(JNIEnv* env, jintArray jmapping, if (env->GetArrayLength(jmapping) != static_cast(mapping->size())) return false; - std::array values; + std::array>> values; env->GetIntArrayRegion(jmapping, 0, static_cast(values.size()), values.data()); for (size_t i = 0; i < mapping->size(); i++) (*mapping)[i] = static_cast(values[i]); -- cgit v1.2.3