summaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
authorJosJuice <josjuice@gmail.com>2019-11-20 19:40:47 +0100
committerJosJuice <josjuice@gmail.com>2019-11-20 20:13:36 +0100
commitc8b8a60033bb35917c10eeb5c4043ee428ae61a6 (patch)
tree5fd72d47a96fa11554b02a5c86d7602d20be4d1a /Source
parent4d838212e2622f623a7f864163396a6a9634e47f (diff)
Android: Let WiimoteEmu know whether we have accelerometer/gyroscope
Diffstat (limited to 'Source')
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java3
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/MotionListener.java4
-rw-r--r--Source/Android/jni/MainAndroid.cpp10
-rw-r--r--Source/Core/InputCommon/ControllerInterface/Android/Android.cpp47
-rw-r--r--Source/Core/InputCommon/ControllerInterface/Android/Android.h2
5 files changed, 54 insertions, 12 deletions
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java
index 5bb6a92b23..60b07902c3 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java
@@ -265,6 +265,9 @@ public final class NativeLibrary
Rumble.checkRumble(padID, state);
}
+ public static native void SetMotionSensorsEnabled(boolean accelerometerEnabled,
+ boolean gyroscopeEnabled);
+
public static native void NewGameIniFile();
public static native void LoadGameIniFile(String gameId);
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/MotionListener.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/MotionListener.java
index e0d8d68b98..4230b0b7bc 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/MotionListener.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/MotionListener.java
@@ -101,10 +101,14 @@ public class MotionListener implements SensorEventListener
mSensorManager.registerListener(this, mAccelSensor, SAMPLING_PERIOD_US);
if (mGyroSensor != null)
mSensorManager.registerListener(this, mGyroSensor, SAMPLING_PERIOD_US);
+
+ NativeLibrary.SetMotionSensorsEnabled(mAccelSensor != null, mGyroSensor != null);
}
public void disable()
{
mSensorManager.unregisterListener(this);
+
+ NativeLibrary.SetMotionSensorsEnabled(false, false);
}
}
diff --git a/Source/Android/jni/MainAndroid.cpp b/Source/Android/jni/MainAndroid.cpp
index aa197f7e5e..d998097fee 100644
--- a/Source/Android/jni/MainAndroid.cpp
+++ b/Source/Android/jni/MainAndroid.cpp
@@ -47,6 +47,8 @@
#include "DiscIO/Enums.h"
#include "DiscIO/Volume.h"
+#include "InputCommon/ControllerInterface/Android/Android.h"
+
#include "UICommon/UICommon.h"
#include "VideoCommon/OnScreenDisplay.h"
@@ -200,6 +202,8 @@ JNIEXPORT jboolean JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_onGamePa
JNIEnv* env, jobject obj, jstring jDevice, jint Button, jint Action);
JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_onGamePadMoveEvent(
JNIEnv* env, jobject obj, jstring jDevice, jint Axis, jfloat Value);
+JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_SetMotionSensorsEnabled(
+ JNIEnv* env, jobject obj, jboolean accelerometer_enabled, jboolean gyroscope_enabled);
JNIEXPORT jstring JNICALL
Java_org_dolphinemu_dolphinemu_NativeLibrary_GetVersionString(JNIEnv* env, jobject obj);
JNIEXPORT jstring JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_GetGitRevision(JNIEnv* env,
@@ -308,6 +312,12 @@ JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_onGamePadMov
ButtonManager::GamepadAxisEvent(GetJString(env, jDevice), Axis, Value);
}
+JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_SetMotionSensorsEnabled(
+ JNIEnv* env, jobject obj, jboolean accelerometer_enabled, jboolean gyroscope_enabled)
+{
+ ciface::Android::SetMotionSensorsEnabled(accelerometer_enabled, gyroscope_enabled);
+}
+
JNIEXPORT jstring JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_GetVersionString(JNIEnv* env,
jobject obj)
{
diff --git a/Source/Core/InputCommon/ControllerInterface/Android/Android.cpp b/Source/Core/InputCommon/ControllerInterface/Android/Android.cpp
index 78fc029374..21537cba15 100644
--- a/Source/Core/InputCommon/ControllerInterface/Android/Android.cpp
+++ b/Source/Core/InputCommon/ControllerInterface/Android/Android.cpp
@@ -10,6 +10,21 @@
namespace ciface::Android
{
+static bool s_accelerometer_enabled = false;
+static bool s_gyroscope_enabled = false;
+
+void SetMotionSensorsEnabled(bool accelerometer_enabled, bool gyroscope_enabled)
+{
+ const bool any_changes =
+ s_accelerometer_enabled != accelerometer_enabled || s_gyroscope_enabled != gyroscope_enabled;
+
+ s_accelerometer_enabled = accelerometer_enabled;
+ s_gyroscope_enabled = gyroscope_enabled;
+
+ if (any_changes)
+ g_controller_interface.RefreshDevices();
+}
+
void PopulateDevices()
{
for (int i = 0; i < 8; ++i)
@@ -186,18 +201,26 @@ Touchscreen::Touchscreen(int padID) : _padID(padID)
AddInput(new Axis(_padID, ButtonManager::TURNTABLE_EFFECT_DIAL));
// Wiimote IMU
- AddInput(new Axis(_padID, ButtonManager::WIIMOTE_ACCEL_LEFT));
- AddInput(new Axis(_padID, ButtonManager::WIIMOTE_ACCEL_RIGHT));
- AddInput(new Axis(_padID, ButtonManager::WIIMOTE_ACCEL_FORWARD));
- AddInput(new Axis(_padID, ButtonManager::WIIMOTE_ACCEL_BACKWARD));
- AddInput(new Axis(_padID, ButtonManager::WIIMOTE_ACCEL_UP));
- AddInput(new Axis(_padID, ButtonManager::WIIMOTE_ACCEL_DOWN));
- AddInput(new Axis(_padID, ButtonManager::WIIMOTE_GYRO_PITCH_UP));
- AddInput(new Axis(_padID, ButtonManager::WIIMOTE_GYRO_PITCH_DOWN));
- AddInput(new Axis(_padID, ButtonManager::WIIMOTE_GYRO_ROLL_LEFT));
- AddInput(new Axis(_padID, ButtonManager::WIIMOTE_GYRO_ROLL_RIGHT));
- AddInput(new Axis(_padID, ButtonManager::WIIMOTE_GYRO_YAW_LEFT));
- AddInput(new Axis(_padID, ButtonManager::WIIMOTE_GYRO_YAW_RIGHT));
+ // Only add inputs if we actually can receive data from the relevant sensor.
+ // Whether inputs exist affects what WiimoteEmu gets when calling ControlReference::BoundCount.
+ if (s_accelerometer_enabled)
+ {
+ AddInput(new Axis(_padID, ButtonManager::WIIMOTE_ACCEL_LEFT));
+ AddInput(new Axis(_padID, ButtonManager::WIIMOTE_ACCEL_RIGHT));
+ AddInput(new Axis(_padID, ButtonManager::WIIMOTE_ACCEL_FORWARD));
+ AddInput(new Axis(_padID, ButtonManager::WIIMOTE_ACCEL_BACKWARD));
+ AddInput(new Axis(_padID, ButtonManager::WIIMOTE_ACCEL_UP));
+ AddInput(new Axis(_padID, ButtonManager::WIIMOTE_ACCEL_DOWN));
+ }
+ if (s_gyroscope_enabled)
+ {
+ AddInput(new Axis(_padID, ButtonManager::WIIMOTE_GYRO_PITCH_UP));
+ AddInput(new Axis(_padID, ButtonManager::WIIMOTE_GYRO_PITCH_DOWN));
+ AddInput(new Axis(_padID, ButtonManager::WIIMOTE_GYRO_ROLL_LEFT));
+ AddInput(new Axis(_padID, ButtonManager::WIIMOTE_GYRO_ROLL_RIGHT));
+ AddInput(new Axis(_padID, ButtonManager::WIIMOTE_GYRO_YAW_LEFT));
+ AddInput(new Axis(_padID, ButtonManager::WIIMOTE_GYRO_YAW_RIGHT));
+ }
// Rumble
AddOutput(new Motor(_padID, ButtonManager::RUMBLE));
diff --git a/Source/Core/InputCommon/ControllerInterface/Android/Android.h b/Source/Core/InputCommon/ControllerInterface/Android/Android.h
index 82a1a47954..c9e7ddc0a9 100644
--- a/Source/Core/InputCommon/ControllerInterface/Android/Android.h
+++ b/Source/Core/InputCommon/ControllerInterface/Android/Android.h
@@ -9,6 +9,8 @@
namespace ciface::Android
{
+void SetMotionSensorsEnabled(bool accelerometer_enabled, bool gyroscope_enabled);
+
void PopulateDevices();
class Touchscreen : public Core::Device