From ecceaa0c1b2cb150b35622507aee76e77d58aa25 Mon Sep 17 00:00:00 2001 From: oshaboy Date: Fri, 12 Sep 2025 00:57:53 -0400 Subject: [PATCH] add settings for gyroscope/accelerometer sensitivity --- config.def.h | 3 +++ configuration.c | 2 ++ configuration.h | 2 ++ input/input_driver.c | 13 +++++++++++-- intl/msg_hash_lbl.h | 8 ++++++++ intl/msg_hash_us.h | 16 ++++++++++++++++ menu/cbs/menu_cbs_sublabel.c | 10 ++++++++++ menu/menu_displaylist.c | 2 ++ menu/menu_setting.c | 30 ++++++++++++++++++++++++++++++ msg_hash.h | 2 ++ 10 files changed, 86 insertions(+), 2 deletions(-) diff --git a/config.def.h b/config.def.h index 5cb562ce4fe4..423bf80546d3 100644 --- a/config.def.h +++ b/config.def.h @@ -1589,6 +1589,9 @@ #define DEFAULT_AXIS_THRESHOLD 0.5f #define DEFAULT_ANALOG_DEADZONE 0.0f #define DEFAULT_ANALOG_SENSITIVITY 1.0f +#define DEFAULT_SENSOR_ACCELEROMETER_SENSITIVITY 1.0f +#define DEFAULT_SENSOR_GYROSCOPE_SENSITIVITY 1.0f + /* Describes speed of which turbo-enabled buttons toggle. */ #define DEFAULT_TURBO_ENABLE true diff --git a/configuration.c b/configuration.c index b32156cd4536..a0142aeade19 100644 --- a/configuration.c +++ b/configuration.c @@ -2357,6 +2357,8 @@ static struct config_float_setting *populate_settings_float( SETTING_FLOAT("input_axis_threshold", &settings->floats.input_axis_threshold, true, DEFAULT_AXIS_THRESHOLD, false); SETTING_FLOAT("input_analog_deadzone", &settings->floats.input_analog_deadzone, true, DEFAULT_ANALOG_DEADZONE, false); SETTING_FLOAT("input_analog_sensitivity", &settings->floats.input_analog_sensitivity, true, DEFAULT_ANALOG_SENSITIVITY, false); + SETTING_FLOAT("input_sensor_accelerometer_sensitivity",&settings->floats.input_sensor_accelerometer_sensitivity, true, DEFAULT_SENSOR_ACCELEROMETER_SENSITIVITY, false); + SETTING_FLOAT("input_sensor_gyroscope_sensitivity", &settings->floats.input_sensor_gyroscope_sensitivity, true, DEFAULT_SENSOR_GYROSCOPE_SENSITIVITY, false); #ifdef HAVE_OVERLAY SETTING_FLOAT("input_overlay_opacity", &settings->floats.input_overlay_opacity, true, DEFAULT_INPUT_OVERLAY_OPACITY, false); SETTING_FLOAT("input_osk_overlay_opacity", &settings->floats.input_osk_overlay_opacity, true, DEFAULT_INPUT_OVERLAY_OPACITY, false); diff --git a/configuration.h b/configuration.h index 33d48edf72d2..8f1c49c23a40 100644 --- a/configuration.h +++ b/configuration.h @@ -463,6 +463,8 @@ typedef struct settings float input_analog_deadzone; float input_axis_threshold; float input_analog_sensitivity; + float input_sensor_accelerometer_sensitivity; + float input_sensor_gyroscope_sensitivity; #ifdef _3DS float bottom_font_scale; #endif diff --git a/input/input_driver.c b/input/input_driver.c index a838d9f3f4ab..cc40b1b25403 100644 --- a/input/input_driver.c +++ b/input/input_driver.c @@ -4520,8 +4520,17 @@ void joypad_driver_reinit(void *data, const char *joypad_driver_name) **/ float input_get_sensor_state(unsigned port, unsigned id) { - bool input_sensors_enable = config_get_ptr()->bools.input_sensors_enable; - return input_driver_get_sensor(port, input_sensors_enable, id); + settings_t *settings = config_get_ptr(); + bool input_sensors_enable = settings->bools.input_sensors_enable; + float sensitivity; + if (id >= RETRO_SENSOR_ACCELEROMETER_X && id <= RETRO_SENSOR_ACCELEROMETER_Z) { + sensitivity = settings->floats.input_sensor_accelerometer_sensitivity; + } else if (id >= RETRO_SENSOR_GYROSCOPE_X && id <= RETRO_SENSOR_GYROSCOPE_Z) { + sensitivity = settings->floats.input_sensor_gyroscope_sensitivity; + } else { + sensitivity = 1.0f; + } + return input_driver_get_sensor(port, input_sensors_enable, id) * sensitivity; } /** diff --git a/intl/msg_hash_lbl.h b/intl/msg_hash_lbl.h index cacb040f2e15..514bbe2c4a13 100644 --- a/intl/msg_hash_lbl.h +++ b/intl/msg_hash_lbl.h @@ -1890,6 +1890,14 @@ MSG_HASH( MENU_ENUM_LABEL_INPUT_ANALOG_SENSITIVITY, "input_analog_sensitivity" ) +MSG_HASH( + MENU_ENUM_LABEL_INPUT_SENSOR_ACCELEROMETER_SENSITIVITY, + "input_sensor_accelerometer_sensitivity" + ) +MSG_HASH( + MENU_ENUM_LABEL_INPUT_SENSOR_GYROSCOPE_SENSITIVITY, + "input_sensor_gyroscope_sensitivity" + ) #ifdef GEKKO MSG_HASH( MENU_ENUM_LABEL_INPUT_MOUSE_SCALE, diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index 944c41c3ee5d..1591ba20a5d4 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -3441,10 +3441,26 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_SENSITIVITY, "Analog Sensitivity" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_INPUT_SENSOR_ACCELEROMETER_SENSITIVITY, + "Accelerometer Sensitivity" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_INPUT_SENSOR_GYROSCOPE_SENSITIVITY, + "Gyroscope Sensitivity" + ) MSG_HASH( MENU_ENUM_SUBLABEL_INPUT_ANALOG_SENSITIVITY, "Adjust the sensitivity of analog sticks." ) +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_SENSOR_ACCELEROMETER_SENSITIVITY, + "Adjust the sensitivity of the Accelerometer." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_SENSOR_GYROSCOPE_SENSITIVITY, + "Adjust the sensitivity of the Gyroscope." + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_INPUT_BIND_TIMEOUT, "Bind Timeout" diff --git a/menu/cbs/menu_cbs_sublabel.c b/menu/cbs/menu_cbs_sublabel.c index 376bfb6b8ea6..201589e79f5d 100644 --- a/menu/cbs/menu_cbs_sublabel.c +++ b/menu/cbs/menu_cbs_sublabel.c @@ -574,6 +574,10 @@ DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_input_touch_vmouse_gesture, MENU_ DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_button_axis_threshold, MENU_ENUM_SUBLABEL_INPUT_BUTTON_AXIS_THRESHOLD) DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_analog_deadzone, MENU_ENUM_SUBLABEL_INPUT_ANALOG_DEADZONE) DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_analog_sensitivity, MENU_ENUM_SUBLABEL_INPUT_ANALOG_SENSITIVITY) + +DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_sensor_accelerometer_sensitivity, MENU_ENUM_SUBLABEL_INPUT_SENSOR_ACCELEROMETER_SENSITIVITY) +DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_sensor_gyroscope_sensitivity, MENU_ENUM_SUBLABEL_INPUT_SENSOR_GYROSCOPE_SENSITIVITY) + DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_input_turbo_enable, MENU_ENUM_SUBLABEL_INPUT_TURBO_ENABLE) DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_input_turbo_period, MENU_ENUM_SUBLABEL_INPUT_TURBO_PERIOD) DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_input_turbo_duty_cycle, MENU_ENUM_SUBLABEL_INPUT_TURBO_DUTY_CYCLE) @@ -4753,6 +4757,12 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs, case MENU_ENUM_LABEL_INPUT_ANALOG_SENSITIVITY: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_analog_sensitivity); break; + case MENU_ENUM_LABEL_INPUT_SENSOR_ACCELEROMETER_SENSITIVITY: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_sensor_accelerometer_sensitivity); + break; + case MENU_ENUM_LABEL_INPUT_SENSOR_GYROSCOPE_SENSITIVITY: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_sensor_gyroscope_sensitivity); + break; #if defined(GEKKO) case MENU_ENUM_LABEL_INPUT_MOUSE_SCALE: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_input_mouse_scale); diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index 00a757d8252a..00dea33cca8f 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -8290,6 +8290,8 @@ unsigned menu_displaylist_build_list( {MENU_ENUM_LABEL_INPUT_BUTTON_AXIS_THRESHOLD, PARSE_ONLY_FLOAT, true}, {MENU_ENUM_LABEL_INPUT_ANALOG_DEADZONE, PARSE_ONLY_FLOAT, true}, {MENU_ENUM_LABEL_INPUT_ANALOG_SENSITIVITY, PARSE_ONLY_FLOAT, true}, + {MENU_ENUM_LABEL_INPUT_SENSOR_ACCELEROMETER_SENSITIVITY,PARSE_ONLY_FLOAT, true }, + {MENU_ENUM_LABEL_INPUT_SENSOR_GYROSCOPE_SENSITIVITY, PARSE_ONLY_FLOAT, true }, #if defined(GEKKO) {MENU_ENUM_LABEL_INPUT_MOUSE_SCALE, PARSE_ONLY_UINT, true}, #endif diff --git a/menu/menu_setting.c b/menu/menu_setting.c index 594626c28b65..5f731aa093f2 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -15835,6 +15835,36 @@ static bool setting_append_list( (*list)[list_info->index - 1].action_ok = &setting_action_ok_uint; menu_settings_list_current_add_range(list, list_info, -5.0, 5.0, 0.1, true, true); + CONFIG_FLOAT( + list, list_info, + &settings->floats.input_sensor_accelerometer_sensitivity, + MENU_ENUM_LABEL_INPUT_SENSOR_ACCELEROMETER_SENSITIVITY, + MENU_ENUM_LABEL_VALUE_INPUT_SENSOR_ACCELEROMETER_SENSITIVITY, + DEFAULT_SENSOR_ACCELEROMETER_SENSITIVITY, + "%.1f", + &group_info, + &subgroup_info, + parent_group, + general_write_handler, + general_read_handler); + (*list)[list_info->index - 1].action_ok = &setting_action_ok_uint; + menu_settings_list_current_add_range(list, list_info, -5.0, 5.0, 0.1, true, true); + + CONFIG_FLOAT( + list, list_info, + &settings->floats.input_sensor_gyroscope_sensitivity, + MENU_ENUM_LABEL_INPUT_SENSOR_GYROSCOPE_SENSITIVITY, + MENU_ENUM_LABEL_VALUE_INPUT_SENSOR_GYROSCOPE_SENSITIVITY, + DEFAULT_SENSOR_GYROSCOPE_SENSITIVITY, + "%.1f", + &group_info, + &subgroup_info, + parent_group, + general_write_handler, + general_read_handler); + (*list)[list_info->index - 1].action_ok = &setting_action_ok_uint; + menu_settings_list_current_add_range(list, list_info, -5.0, 5.0, 0.1, true, true); + CONFIG_UINT( list, list_info, &settings->uints.input_bind_timeout, diff --git a/msg_hash.h b/msg_hash.h index 3095f572b4fd..e210305dd9e8 100644 --- a/msg_hash.h +++ b/msg_hash.h @@ -1325,6 +1325,8 @@ enum msg_hash_enums MENU_LABEL(INPUT_TOUCH_SCALE), MENU_LABEL(INPUT_ANALOG_DEADZONE), MENU_LABEL(INPUT_ANALOG_SENSITIVITY), + MENU_LABEL(INPUT_SENSOR_ACCELEROMETER_SENSITIVITY), + MENU_LABEL(INPUT_SENSOR_GYROSCOPE_SENSITIVITY), MENU_LABEL(INPUT_BIND_TIMEOUT), MENU_LABEL(INPUT_BIND_HOLD), MENU_LABEL(INPUT_REMAP_BINDS_ENABLE),