@@ -4750,15 +4750,41 @@ void joypad_driver_reinit(void *data, const char *joypad_driver_name)
47504750 **/
47514751float input_get_sensor_state (unsigned port , unsigned id )
47524752{
4753- settings_t * settings = config_get_ptr ();
4754- bool input_sensors_enable = settings -> bools .input_sensors_enable ;
4755- unsigned joy_idx = settings -> uints .input_joypad_index [port ];
4756- float sensitivity = 1.0f ;
4757- if (id >= RETRO_SENSOR_ACCELEROMETER_X && id <= RETRO_SENSOR_ACCELEROMETER_Z )
4758- sensitivity = settings -> floats .input_sensor_accelerometer_sensitivity ;
4759- else if (id >= RETRO_SENSOR_GYROSCOPE_X && id <= RETRO_SENSOR_GYROSCOPE_Z )
4760- sensitivity = settings -> floats .input_sensor_gyroscope_sensitivity ;
4761- return input_driver_get_sensor (joy_idx , input_sensors_enable , id ) * sensitivity ;
4753+ settings_t * settings = config_get_ptr ();
4754+ bool input_sensors_enable = settings -> bools .input_sensors_enable ;
4755+ float sensitivity ;
4756+ int remapped_port ;
4757+ int invert ;
4758+ unsigned remapped_input_sensor_id ;
4759+ if (id >= RETRO_SENSOR_END ) {
4760+ RARCH_DBG ("[input_driver] Invalid Sensor ID %u\n" , id );
4761+ return 0.f ;
4762+ }
4763+ if (port >= MAX_USERS ) {
4764+ RARCH_DBG ("[input_driver] Port number given (%u) is greater than the maximum number of users\n" , port );
4765+ return 0.f ;
4766+ }
4767+ remapped_port = settings -> uints .input_sensor_index [port ];
4768+ remapped_input_sensor_id =
4769+ id == RETRO_SENSOR_ILLUMINANCE ?
4770+ RETRO_SENSOR_ILLUMINANCE :
4771+ settings -> uints .input_sensor_ids [port ][id ]/2 ;
4772+ if (id >= RETRO_SENSOR_ACCELEROMETER_X && id <= RETRO_SENSOR_ACCELEROMETER_Z ) {
4773+ invert = (settings -> uints .input_sensor_ids [port ][id ]%2 )?-1 :1 ;
4774+ sensitivity = settings -> floats .input_sensor_accelerometer_sensitivity ;
4775+ } else if (id >= RETRO_SENSOR_GYROSCOPE_X && id <= RETRO_SENSOR_GYROSCOPE_Z ) {
4776+ invert = (settings -> uints .input_sensor_ids [port ][id ]%2 )?-1 :1 ;
4777+ sensitivity = settings -> floats .input_sensor_gyroscope_sensitivity ;
4778+ } else {
4779+ invert = 1 ;
4780+ sensitivity = 0.f ;
4781+ }
4782+ return input_driver_get_sensor (
4783+ remapped_port ,
4784+ input_sensors_enable ,
4785+ remapped_input_sensor_id )
4786+ * invert * ((float )pow (2 ,sensitivity ));
4787+
47624788}
47634789
47644790/**
@@ -5245,16 +5271,19 @@ static void input_config_set_auxiliary_device_display_name(unsigned port, const
52455271 if (!string_is_empty (name ))
52465272 {
52475273 string_copy_only_ascii (name_ascii , name );
5248- if (aux_device_type == SENSOR_AUX_DEVICE )
5249- aux_device_info = & input_st -> input_sensor_info [port ];
5250- else /*(aux_device_type == MOUSE_AUX_DEVICE)*/
5251- aux_device_info = & input_st -> input_mouse_info [port ];
52525274 string_trim_whitespace (name_ascii );
5275+
52535276 }
52545277
5255- if (!string_is_empty (name_ascii ))
5278+ if (!string_is_empty (name_ascii )){
5279+ if (aux_device_type == SENSOR_AUX_DEVICE )
5280+ aux_device_info = & input_st -> input_sensor_info [port ];
5281+ else { /*(aux_device_type == MOUSE_AUX_DEVICE)*/
5282+ aux_device_info = & input_st -> input_mouse_info [port ];
5283+ }
52565284 strlcpy (aux_device_info -> display_name , name_ascii ,
52575285 sizeof (aux_device_info -> display_name ));
5286+ }
52585287}
52595288void input_config_set_sensor_display_name (unsigned port , const char * name )
52605289{
0 commit comments