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_ */
#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);
}
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 {
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;
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,};
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);
(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;
}
-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)