--- /dev/null
+/*
+* Copyright (c) 2018 Samsung Electronics Co., Ltd.
+*
+* Licensed under the Flora License, Version 1.1 (the License);
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://floralicense.org/license/
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an AS IS BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+
+#include "model/model_hw.h"
+#include "model/model_device_to_connection.h"
+#include "gear-racing-controller.h"
+
+//void config_set_control_roles(e_device axis_x, e_device axis_y, e_device bezel, e_device buttons)
+//{
+// model_device_to_connection_set_control_roles(axis_x, axis_y, bezel, buttons);
+//}
+//
+//void config_set_bezel_step(float step, float dead_zone, bool use_blocker, int blocker_count, bool set_to_zero_when_stop)
+//{
+// model_hw_set_bezel_params(step, dead_zone, use_blocker, blocker_count, set_to_zero_when_stop);
+//}
+
+
+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);
+}
+
+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);
+}
#include "log.h"
-#define THROTTLE_STEP 0.03
-#define THROTTLE_DEADZONE 0.001f
-
-#define USE_DIRECTION_BLOCKER
-
-#ifdef USE_DIRECTION_BLOCKER
-typedef enum _e_movement_direction {
- DIR_FORWARD = 15,
- DIR_STOP = 0,
- DIR_BACKWARD = -15,
-} e_movement_direction;
-#endif
-
typedef struct _s_model_hw {
t_model_hw_update_cb hw_update_cb;
float bezel_position;
bool rotary_deactivated;
+
+ float bezel_step;
+ float bezel_dead_zone;
+ bool use_direction_blocker;
+ int blocker_count;
+ bool set_to_zero_when_stop;
} s_model_hw;
static s_model_hw s_info = { 0, };
-#ifdef USE_DIRECTION_BLOCKER
-static inline void _update_direction_blocker(e_movement_direction *last_movement_dir, int step, int direction, e_movement_direction new_dir)
+static inline void _update_direction_blocker(int *last_movement_dir, int step, int direction, int new_dir)
{
- if (*last_movement_dir * direction > DIR_STOP) {
+ if (*last_movement_dir * direction > 0) {
*last_movement_dir += step;
s_info.bezel_position = 0;
} else {
*last_movement_dir = new_dir;
}
}
-#endif
static Eina_Bool _rotary_cb(void *data, Eext_Rotary_Event_Info *info)
{
static s_model_hw_cb_data cb_data = { 0, };
-#ifndef USE_DIRECTION_BLOCKER
- float prev = s_info.bezel_position;
-#endif
-
if (s_info.rotary_deactivated) {
return true;
}
+ float prev = s_info.bezel_position;
+
if (info->direction == EEXT_ROTARY_DIRECTION_CLOCKWISE) {
- s_info.bezel_position += THROTTLE_STEP;
+ s_info.bezel_position += s_info.bezel_step;
} else {
- s_info.bezel_position -= THROTTLE_STEP;
+ s_info.bezel_position -= s_info.bezel_step;
}
if (s_info.bezel_position > 1) {
}
-#ifdef USE_DIRECTION_BLOCKER
- static e_movement_direction last_movement_dir = DIR_STOP;
+ if (s_info.use_direction_blocker) {
+ static int last_movement_dir = 0;
- if (fabsf(s_info.bezel_position) < THROTTLE_DEADZONE) {
- s_info.bezel_position = 0;
- } if (s_info.bezel_position < 0.0f) {
- _update_direction_blocker(&last_movement_dir, -1, 1, DIR_BACKWARD);
- } else if(s_info.bezel_position > 0.0f) {
- _update_direction_blocker(&last_movement_dir, 1, -1, DIR_FORWARD);
- }
-#else
+ if (fabsf(s_info.bezel_position) < s_info.bezel_dead_zone) {
+ s_info.bezel_position = 0;
+ } else if (s_info.bezel_position < 0.0f) {
+ _update_direction_blocker(&last_movement_dir, -1, 1, -s_info.blocker_count);
+ } else if(s_info.bezel_position > 0.0f) {
+ _update_direction_blocker(&last_movement_dir, 1, -1, s_info.blocker_count);
+ }
+ } else {
- if (fabsf(s_info.bezel_position) < THROTTLE_DEADZONE) {
- s_info.bezel_position = 0;
- } else if (s_info.bezel_position * prev < 0.0f) {
- s_info.bezel_position = 0;
+ if (fabsf(s_info.bezel_position) < s_info.bezel_dead_zone) {
+ s_info.bezel_position = 0;
+ } else if (s_info.bezel_position * prev < 0.0f) {
+ s_info.bezel_position = 0;
+ }
}
-#endif
-
cb_data.bezel_position = s_info.bezel_position;
s_info.hw_update_cb(&cb_data);
- _D("THROTTLE: %f", cb_data.bezel_position);
+ _D("BEZEL: %f", cb_data.bezel_position);
model_device_to_connection_bezel(s_info.bezel_position);
return true;
void model_hw_deactivate_rotatry(bool deactivate)
{
static s_model_hw_cb_data cb_data = { 0, };
+
+ if (!s_info.set_to_zero_when_stop) {
+ return;
+ }
+
s_info.rotary_deactivated = deactivate;
s_info.bezel_position = 0;
{
s_info.hw_update_cb = NULL;
}
+
+void model_hw_set_bezel_params(float step, float dead_zone, bool use_blocker, int blocker_count, bool set_to_zero_when_stop)
+{
+ s_info.bezel_step = step;
+ s_info.bezel_dead_zone = dead_zone;
+ s_info.use_direction_blocker = use_blocker;
+ s_info.blocker_count = blocker_count;
+ s_info.set_to_zero_when_stop = set_to_zero_when_stop;
+}