Incremental mode added to sensors 17/189917/4
authorMichal Skorupinski <m.skorupinsk@samsung.com>
Fri, 21 Sep 2018 16:11:01 +0000 (18:11 +0200)
committerKrzysztof Wieclaw <k.wieclaw@samsung.com>
Thu, 4 Oct 2018 13:14:16 +0000 (15:14 +0200)
Change-Id: I864fb28caeca0a31624a38d6a76b8a0b0dcb1fd2
Signed-off-by: Michal Skorupinski <m.skorupinsk@samsung.com>
inc/model/model_sensors.h
src/config.c
src/model/model_sensors.c

index 41afa11..ce68568 100644 (file)
@@ -35,7 +35,11 @@ void model_sensors_set_initial_values(void);
 void model_sensors_sensor_accelerometer_set_initial_values(void);
 void model_sensors_sensor_gravity_set_initial_values(void);
 
-void model_sensors_set_acceleration_sensor_params(float input_range, float output_range, float deadzone, float multiplier);
-void model_sensors_set_gravity_sensor_params(float input_range, float output_range, float deadzone, float multiplier);
+void model_sensors_set_acceleration_sensor_params(float input_range, float output_range,
+               float deadzone, float multiplier,
+               bool incremental, float incremental_min, float incremental_max);
+void model_sensors_set_gravity_sensor_params(float input_range, float output_range,
+               float deadzone, float multiplier,
+               bool incremental, float incremental_min, float incremental_max);
 
 #endif /* MODEL_MODEL_SENSORS_H_ */
index a90536c..c982082 100644 (file)
 #define CAM_ELEVATION_DEADZONE 3.0f
 #define MAX_CAM_ELEVATION 5.0f
 
+#define MAX_ABSOLOUTE_SENSORS_OUTPUT_VALUE 1.0f
+#define FINAL_SENSOR_MULTIPLIER 1.0f
+
+#define BEZEL_SLOW_STEP 0.03f
+#define BEZEL_FAST_STEP 0.1f
+#define BEZEL_DEADZONE 0.001f
+#define BEZEL_BLOCKER_STEPS 15
+
+#define MAX_INCREMENTAL_OUTPUT_VALUE 0.01f
+#define INCREMENTAL_MODE_GRAVITY_DEADZONE 0.5f
+#define INCREMENTAL_MODE_ACC_DEADZONE 4.0f
+#define MAX_INCREMENTAL_VALUE 1.0f
+
+#define MAX_BEZEL_VALUE 1.0f
+#define MAX_BUTTON_VALUE 1.0f
+#define MAX_ELEVATION_VALUE 0.0f
+
 void config_set_sensor_steering_bezel_velocity()
 {
        model_device_to_connection_set_control_roles(STERING_MODE_DIRETION, STERING_MODE_CAM_ELEVATION, STERING_MODE_THROTTLE, STERING_MODE_CAM_AZIMUTH);
-       model_hw_set_bezel_params(0.03f, 0.001f, true, 15, true);
-       model_hw_set_bezel_max_min(-1.0f, 1.0f);
+       model_hw_set_bezel_params(BEZEL_SLOW_STEP, BEZEL_DEADZONE, true, BEZEL_BLOCKER_STEPS, true);
+       model_hw_set_bezel_max_min(-MAX_BEZEL_VALUE, MAX_BEZEL_VALUE);
 
-       model_sensors_set_acceleration_sensor_params(MAX_DIRECTION, 1.0f, DIRECTION_DEADZONE, 1.0f);
-       model_sensors_set_gravity_sensor_params(MAX_GRAVITY, 1.0f, 0.5f, 1.0f); //camera
+       model_sensors_set_acceleration_sensor_params(MAX_DIRECTION, MAX_ABSOLOUTE_SENSORS_OUTPUT_VALUE, DIRECTION_DEADZONE, FINAL_SENSOR_MULTIPLIER, false, 0, 0);
+       model_sensors_set_gravity_sensor_params(MAX_GRAVITY, MAX_INCREMENTAL_OUTPUT_VALUE, INCREMENTAL_MODE_GRAVITY_DEADZONE, FINAL_SENSOR_MULTIPLIER, true, -MAX_INCREMENTAL_VALUE, MAX_INCREMENTAL_VALUE); //camera
 
-       view_racing_set_button_params(-1.0f, 1.0f);
+       view_racing_set_button_params(-MAX_BUTTON_VALUE, MAX_BUTTON_VALUE);
 }
 
 void config_set_bezel_steering_sensor_velocity()
 {
        model_device_to_connection_set_control_roles(STERING_MODE_CAM_AZIMUTH, STERING_MODE_THROTTLE, STERING_MODE_DIRETION, STERING_MODE_CAM_ELEVATION);
-       model_hw_set_bezel_params(-0.1f, 0.001f, false, 0, false);
-       model_hw_set_bezel_max_min(-1.0f, 1.0f);
+       model_hw_set_bezel_params(-BEZEL_FAST_STEP, BEZEL_DEADZONE, false, 0, false);
+       model_hw_set_bezel_max_min(-MAX_BEZEL_VALUE, MAX_BEZEL_VALUE);
 
-       model_sensors_set_acceleration_sensor_params(MAX_DIRECTION, 1.0f, 4.0, -1.0f); //camera
-       model_sensors_set_gravity_sensor_params(MAX_GRAVITY, 1.0f, GRAVITY_DEADZONE, 1.0f);
+       model_sensors_set_acceleration_sensor_params(MAX_DIRECTION, MAX_INCREMENTAL_OUTPUT_VALUE, INCREMENTAL_MODE_ACC_DEADZONE, -FINAL_SENSOR_MULTIPLIER, true, -MAX_INCREMENTAL_VALUE, MAX_INCREMENTAL_VALUE); //camera
+       model_sensors_set_gravity_sensor_params(MAX_GRAVITY, MAX_ABSOLOUTE_SENSORS_OUTPUT_VALUE, GRAVITY_DEADZONE, FINAL_SENSOR_MULTIPLIER, false, 0.0f, 0.0f);
 
-       view_racing_set_button_params(-1.0f, 0.0f);
+       view_racing_set_button_params(-MAX_BUTTON_VALUE, MAX_ELEVATION_VALUE);
 }
 
 void config_set_sensor_stering_sensor_velocity()
 {
        model_device_to_connection_set_control_roles(STERING_MODE_DIRETION, STERING_MODE_THROTTLE, STERING_MODE_CAM_ELEVATION, STERING_MODE_CAM_AZIMUTH);
-       model_hw_set_bezel_params(0.03f, 0.001f, false, 0, false);
-       model_hw_set_bezel_max_min(-1.0f, 0.0f);
+       model_hw_set_bezel_params(BEZEL_SLOW_STEP, BEZEL_DEADZONE, false, 0, false);
+       model_hw_set_bezel_max_min(-MAX_BEZEL_VALUE, MAX_ELEVATION_VALUE);
 
-       model_sensors_set_acceleration_sensor_params(MAX_DIRECTION, 1.0f, DIRECTION_DEADZONE, 1.0f);
-       model_sensors_set_gravity_sensor_params(MAX_GRAVITY, 1.0f, GRAVITY_DEADZONE, 1.0f);
+       model_sensors_set_acceleration_sensor_params(MAX_DIRECTION, MAX_ABSOLOUTE_SENSORS_OUTPUT_VALUE, DIRECTION_DEADZONE, FINAL_SENSOR_MULTIPLIER, false, 0.0f, 0.0f);
+       model_sensors_set_gravity_sensor_params(MAX_GRAVITY, MAX_ABSOLOUTE_SENSORS_OUTPUT_VALUE, GRAVITY_DEADZONE, FINAL_SENSOR_MULTIPLIER, false, 0.0f, 0.0f);
 
-       view_racing_set_button_params(-1.0f, 1.0f);
+       view_racing_set_button_params(-MAX_BUTTON_VALUE, MAX_BUTTON_VALUE);
 }
index bae135c..55fa708 100644 (file)
@@ -38,6 +38,11 @@ typedef struct _s_axis_params {
        float input_range;
        float output_range;
        float multiplier;
+
+       bool is_incremental;
+       float incremental_min;
+       float incremental_max;
+       float incremental_value;
 } s_axis_params;
 
 typedef struct _s_model_sensors {
@@ -86,7 +91,7 @@ static inline float _get_average_parameter_from_history(float value, s_data_hist
        return parameter->sum / VALUE_LIST_SIZE;
 }
 
-float _get_position_in_deadzone(float value, float deadzone)
+static float _get_position_in_deadzone(float value, float deadzone)
 {
        if (fabsf(value) <= deadzone) {
                value = 0;
@@ -99,6 +104,19 @@ float _get_position_in_deadzone(float value, float deadzone)
        return value;
 }
 
+static inline float _set_incremental(s_axis_params *axis, float value)
+{
+       axis->incremental_value += value;
+
+       if (axis->incremental_value > axis->incremental_max) {
+               axis->incremental_value = axis->incremental_max;
+       } else if (axis->incremental_value < axis->incremental_min) {
+               axis->incremental_value = axis->incremental_min;
+       }
+
+       return axis->incremental_value;
+}
+
 static void _sensor_accelerometer_event_cb(sensor_h sensor_accelerometer, sensor_event_s *event, void *data)
 {
        float vector[3] = { 0,};
@@ -107,17 +125,20 @@ static void _sensor_accelerometer_event_cb(sensor_h sensor_accelerometer, sensor
 
        float acceleration = vector[0];
        acceleration = _get_average_parameter_from_history(acceleration, &s_info.acceleration_sensor);
-
        acceleration = _get_position_in_deadzone(acceleration, s_info.acceleration_sensor_params.deadzone);
 
        s_info.last_model_data.axis_x = math_helper_range_map(acceleration,
                        -(s_info.acceleration_sensor_params.input_range - s_info.acceleration_sensor_params.deadzone),
-                        (s_info.acceleration_sensor_params.input_range - s_info.acceleration_sensor_params.deadzone),
+                       (s_info.acceleration_sensor_params.input_range - s_info.acceleration_sensor_params.deadzone),
                        -s_info.acceleration_sensor_params.output_range, s_info.acceleration_sensor_params.output_range);
 
+       if (s_info.acceleration_sensor_params.is_incremental) {
+               s_info.last_model_data.axis_x = _set_incremental(&s_info.acceleration_sensor_params, s_info.last_model_data.axis_x);
+       }
+
+
        s_info.last_model_data.axis_x *= s_info.acceleration_sensor_params.multiplier;
        s_model_sensors_cb_data model_data = s_info.last_model_data;
-
        model_device_to_connection_axis_x(model_data.axis_x);
 
        _D("MODEL VALUES: acceleration:% .4f ranged:% .4f", acceleration, model_data.axis_x);
@@ -167,6 +188,10 @@ static void _sensor_gravity_event_cb(sensor_h sensor_gravity, sensor_event_s *ev
                         (s_info.gravity_sensor_params.input_range - s_info.gravity_sensor_params.deadzone),
                         -s_info.gravity_sensor_params.output_range, s_info.gravity_sensor_params.output_range);
 
+       if (s_info.gravity_sensor_params.is_incremental) {
+               s_info.last_model_data.axis_y = _set_incremental(&s_info.gravity_sensor_params, s_info.last_model_data.axis_y);
+       }
+
        s_info.last_model_data.axis_x *= s_info.gravity_sensor_params.multiplier;
        s_model_sensors_cb_data model_data = s_info.last_model_data;
 
@@ -263,22 +288,37 @@ void model_sensors_init(void)
 }
 
 
-static void _set_axis_params(s_axis_params *axis, float input_range, float output_range, float deadzone, float multiplier)
+static void _set_axis_params(s_axis_params *axis, float input_range, float output_range,
+               float deadzone, float multiplier,
+               bool incremental, float incremental_min, float incremental_max)
 {
        axis->input_range = input_range;
        axis->output_range = output_range;
        axis->deadzone = deadzone;
        axis->multiplier = multiplier;
+
+       axis->is_incremental = incremental;
+       axis->incremental_min = incremental_min;
+       axis->incremental_max = incremental_max;
+       axis->incremental_value = 0;
 }
 
-void model_sensors_set_acceleration_sensor_params(float input_range, float output_range, float deadzone, float multiplier)
+void model_sensors_set_acceleration_sensor_params(float input_range, float output_range,
+               float deadzone, float multiplier,
+               bool incremental, float incremental_min, float incremental_max)
 {
-       _set_axis_params(&s_info.acceleration_sensor_params, input_range, output_range, deadzone, multiplier);
+       _set_axis_params(&s_info.acceleration_sensor_params, input_range, output_range,
+                       deadzone, multiplier,
+                       incremental, incremental_min, incremental_max);
 }
 
-void model_sensors_set_gravity_sensor_params(float input_range, float output_range, float deadzone, float multiplier)
+void model_sensors_set_gravity_sensor_params(float input_range, float output_range,
+               float deadzone, float multiplier,
+               bool incremental, float incremental_min, float incremental_max)
 {
-       _set_axis_params(&s_info.gravity_sensor_params, input_range, output_range, deadzone, multiplier);
+       _set_axis_params(&s_info.gravity_sensor_params, input_range, output_range,
+                       deadzone, multiplier,
+                       incremental, incremental_min, incremental_max);
 }
 
 void model_sensors_subscribe_event(t_model_sensors_update_cb model_update_cb)