int config_remove_group(const char *group);
bool config_get_string_or_set_default(char *group, char *key, char *default_value, char **value);
-bool config_get_int_with_default(char *group, char *key, int default_value, int *value);
+bool config_get_int_or_set_default(char *group, char *key, int default_value, int *value);
+bool config_get_bool_or_set_default(char *group, char *key, bool default_value, bool *value);
+bool config_get_double_or_set_default(char *group, char *key, double default_value, double *value);
#endif /* end of include guard: CONFIG_H */
#define MODEL_DEVICE_TO_CONNECTION_H_
typedef enum _e_device {
- STERING_MODE_DIRETION,
- STERING_MODE_THROTTLE,
- STERING_MODE_CAM_AZIMUTH,
- STERING_MODE_CAM_ELEVATION,
- STERING_MODE_NONE,
+ STEERING_MODE_DIRETION,
+ STEERING_MODE_THROTTLE,
+ STEERING_MODE_CAM_AZIMUTH,
+ STEERING_MODE_CAM_ELEVATION,
+ STEERING_MODE_NONE,
} e_device;
void model_device_to_connection_axis_x(float value);
* limitations under the License.
*/
-#ifndef STERING_SETUP_H_
-#define STERING_SETUP_H_
+#ifndef STEERING_SETUP_H_
+#define STEERING_SETUP_H_
-void config_set_sensor_steering_bezel_velocity();
-void config_set_bezel_steering_sensor_velocity();
-void config_set_sensor_steering_sensor_velocity_bezel_elev();
-void config_set_sensor_steering_sensor_velocity_bezel_azimuth();
+void steering_setup_set_sensor_steering_bezel_velocity();
+void steering_setup_set_bezel_steering_sensor_velocity();
+void steering_setup_set_sensor_steering_sensor_velocity_bezel_elev();
+void steering_setup_set_sensor_steering_sensor_velocity_bezel_azimuth();
+void steering_setup();
-#endif /* STERING_SETUP_H */
+#endif /* STEERING_SETUP_H */
#define _GNU_SOURCE
#include "config.h"
#include "log.h"
-
#include <stdio.h>
#include <glib.h>
#include <stdlib.h>
return modified;
}
-bool config_get_int_with_default(char *group, char *key, int default_value, int *value)
+bool config_get_int_or_set_default(char *group, char *key, int default_value, int *value)
{
bool modified = false;
return modified;
}
+
+bool config_get_bool_or_set_default(char *group, char *key, bool default_value, bool *value)
+{
+ bool modified = false;
+
+ if (config_get_bool(group, key, value) != 0) {
+ config_set_bool(group, key, default_value);
+
+ *value = default_value;
+ modified = true;
+ }
+
+ return modified;
+}
+
+bool config_get_double_or_set_default(char *group, char *key, double default_value, double *value)
+{
+ bool modified = false;
+
+ if (config_get_double(group, key, value) != 0) {
+ config_set_double(group, key, default_value);
+
+ *value = default_value;
+ modified = true;
+ }
+
+ return modified;
+}
void _map_device_to_view(e_device device, float value)
{
switch (device) {
- case STERING_MODE_DIRETION:
+ case STEERING_MODE_DIRETION:
s_info.controller_data.direction = value;
break;
- case STERING_MODE_THROTTLE:
+ case STEERING_MODE_THROTTLE:
s_info.controller_data.throttle = value;
break;
- case STERING_MODE_CAM_AZIMUTH:
+ case STEERING_MODE_CAM_AZIMUTH:
s_info.controller_data.cam_azimuth = value;
break;
- case STERING_MODE_CAM_ELEVATION:
+ case STEERING_MODE_CAM_ELEVATION:
s_info.controller_data.cam_elevation = value;
break;
default:
* limitations under the License.
*/
-#include <stering_setup.h>
+#include "steering_setup.h"
#include "gear-racing-controller.h"
#include "config.h"
#include "view_manager/view_manager.h"
int ret = app_control_get_app_id(app_control, &appid);
ASSERT_FUNCTION(ret != APP_CONTROL_ERROR_NONE);
- if (!strncmp(appid, "org.tizen.gear-racing-controller-bs", strlen(appid))) {
- config_set_bezel_steering_sensor_velocity();
- } else if (!strncmp(appid, "org.tizen.gear-racing-controller-sb", strlen(appid))) {
- config_set_sensor_steering_bezel_velocity();
- } else if (!strncmp(appid, "org.tizen.gear-racing-controller-ssa", strlen(appid))) {
- config_set_sensor_steering_sensor_velocity_bezel_azimuth();
- } else if (!strncmp(appid, "org.tizen.gear-racing-controller-sse", strlen(appid))) {
- config_set_sensor_steering_sensor_velocity_bezel_elev();
- } else {
- config_set_bezel_steering_sensor_velocity();
- }
+ steering_setup();
}
static void
command.data.steering_and_camera.direction = servo;
command.data.steering_and_camera.camera_azimuth = cam_azimuth;
command.data.steering_and_camera.camera_elevation = cam_elevation;
- _D("Sending command [speed: %d, direction: %d, cam_azim: %d, cam_elev: %d]", speed, servo, cam_azimuth, cam_elevation);
+ _FRAME_D("Sending command [speed: %d, direction: %d, cam_azim: %d, cam_elev: %d]", speed, servo, cam_azimuth, cam_elevation);
car_connection_manager_send_command(command);
}
} s_model_device_to_connection;
static s_model_device_to_connection s_info = {
- .axis_x = STERING_MODE_CAM_AZIMUTH,
- .axis_y = STERING_MODE_THROTTLE,
- .bezel = STERING_MODE_DIRETION,
- .buttons = STERING_MODE_CAM_ELEVATION
+ .axis_x = STEERING_MODE_CAM_AZIMUTH,
+ .axis_y = STEERING_MODE_THROTTLE,
+ .bezel = STEERING_MODE_DIRETION,
+ .buttons = STEERING_MODE_CAM_ELEVATION
};
inline static void _send_data(e_device device, float value)
{
switch (device) {
- case STERING_MODE_DIRETION:
+ case STEERING_MODE_DIRETION:
model_car_connection_send_direction(value);
break;
- case STERING_MODE_THROTTLE:
+ case STEERING_MODE_THROTTLE:
model_car_connection_send_throttle(value);
break;
- case STERING_MODE_CAM_AZIMUTH:
+ case STEERING_MODE_CAM_AZIMUTH:
model_car_connection_send_cam_azimuth(value);
break;
- case STERING_MODE_CAM_ELEVATION:
+ case STEERING_MODE_CAM_ELEVATION:
model_car_connection_send_cam_elevation(value);
break;
default:
--- /dev/null
+/*
+* Copyright (c) 2018 Samsung Electronics Co., Ltd.
+*
+* Licensed under the Apache License, Version 2.0 (the License);
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.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 "config.h"
+#include "model/model_hw.h"
+#include "model/model_device_to_connection.h"
+#include "model/model_sensors.h"
+#include "view/view_racing.h"
+#include "gear-racing-controller.h"
+#include "log.h"
+
+#define GRAVITY_DEADZONE 0.2f
+#define MAX_GRAVITY 0.7f
+
+#define DIRECTION_DEADZONE 1.0f
+#define MAX_DIRECTION 8.0f
+
+#define CAM_ELEVATION_DEADZONE 3.0f
+#define MAX_CAM_ELEVATION 5.0f
+
+#define CAM_AZIMUTH_STEP 0.01
+#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
+#define BUTTON_MULTIPLIER 1.0f
+
+static void _set_roles()
+{
+ e_device axis_x;
+ bool modified = config_get_int_or_set_default("steering.roles", "axis_x", STEERING_MODE_DIRETION, (int *)&axis_x);
+
+ e_device axis_y;
+ modified |= config_get_int_or_set_default("steering.roles", "axis_y", STEERING_MODE_CAM_ELEVATION, (int *)&axis_y);
+
+ e_device bezel;
+ modified |= config_get_int_or_set_default("steering.roles", "bezel", STEERING_MODE_THROTTLE, (int *)&bezel);
+
+ e_device buttons;
+ modified |= config_get_int_or_set_default("steering.roles", "buttons", STEERING_MODE_CAM_AZIMUTH, (int *)&buttons);
+
+ model_device_to_connection_set_control_roles(axis_x, axis_y, bezel, buttons);
+
+ if (modified) {
+ config_save();
+ }
+}
+
+static void _set_bezel()
+{
+ double step;
+ bool modified = config_get_double_or_set_default("steering.bezel", "step", BEZEL_SLOW_STEP, &step);
+
+
+ double deadzone;
+ modified |= config_get_double_or_set_default("steering.bezel", "deadzone", BEZEL_DEADZONE, &deadzone);
+
+ int blocker_steps;
+ modified |= config_get_int_or_set_default("steering.bezel", "blocker", BEZEL_BLOCKER_STEPS, &blocker_steps);
+
+ bool set_zero_when_stop;
+ modified |= config_get_bool_or_set_default("steering.bezel", "set_zero", true, &set_zero_when_stop);
+
+ model_hw_set_bezel_params(step, deadzone, (blocker_steps != 0), blocker_steps, set_zero_when_stop);
+
+ double min;
+ modified |= config_get_double_or_set_default("steering.bezel", "min", -MAX_BEZEL_VALUE, &min);
+
+ double max;
+ modified |= config_get_double_or_set_default("steering.bezel", "max", MAX_BEZEL_VALUE, &max);
+
+ model_hw_set_bezel_max_min(min, max);
+
+ if (modified) {
+ config_save();
+ }
+
+ _D("steering.bezel: step:%f; deadzone:%f; blocker:%d, set_zero_when_stop=%d range:[%f; %f]", step, deadzone, blocker_steps, set_zero_when_stop, min, max);
+}
+
+static void _set_axis(bool is_x_axis, char *key, float default_input_range, float default_output_range,
+ float default_deadzone, float default_multiplier,
+ float default_incremental, float default_incremental_min, float default_incremental_max)
+{
+ double input_range;
+ bool modified = config_get_double_or_set_default(key, "input_range", default_input_range, &input_range);
+
+ double output_range;
+ modified |= config_get_double_or_set_default(key, "output_range", default_output_range, &output_range);
+
+ double deadzone;
+ modified |= config_get_double_or_set_default(key, "deadzone", default_deadzone, &deadzone);
+
+ double multiplier;
+ modified |= config_get_double_or_set_default(key, "multiplier", default_multiplier, &multiplier);
+
+ bool incremental;
+ modified |= config_get_bool_or_set_default(key, "incremental", default_incremental, &incremental);
+
+ double incremental_min;
+ modified |= config_get_double_or_set_default(key, "incremental.min", default_incremental_min, &incremental_min);
+
+ double incremental_max;
+ modified |= config_get_double_or_set_default(key, "incremental.max", default_incremental_max, &incremental_max);
+
+ if (is_x_axis) {
+ model_sensors_set_acceleration_sensor_params(input_range, output_range, deadzone, multiplier, incremental, incremental_min, incremental_max);
+ } else {
+ model_sensors_set_gravity_sensor_params(input_range, output_range, deadzone, multiplier, incremental, incremental_min, incremental_max);
+ }
+
+ if (modified) {
+ config_save();
+ }
+
+ _D("DEFAULT [%s] input_range:%f; output_range:%f; deadzone:%f, multiplier=%f incremental(%d)->[%f; %f]",
+ key, default_input_range, default_output_range,
+ default_deadzone, default_multiplier,
+ default_incremental, default_incremental_min, default_incremental_max);
+
+
+ _D("VALUES: [%s] input_range:%f; output_range:%f; deadzone:%f, multiplier=%f incremental(%d)->[%f; %f]",
+ key, input_range, output_range,
+ deadzone, multiplier,
+ incremental, incremental_min, incremental_max);
+}
+
+void _set_buttons()
+{
+ double min;
+ bool modified = config_get_double_or_set_default("steering.buttons", "min", -MAX_BUTTON_VALUE, &min);
+
+ double max;
+ modified |= config_get_double_or_set_default("steering.buttons", "max", MAX_BUTTON_VALUE, &max);
+
+ double step;
+ modified |= config_get_double_or_set_default("steering.buttons", "step", CAM_AZIMUTH_STEP, &step);
+
+ view_racing_set_button_params(min, max, step);
+
+ double multiplier;
+ modified |= config_get_double_or_set_default("steering.buttons", "multiplier", BUTTON_MULTIPLIER, &multiplier);
+
+ view_racing_set_direction_indicator_multiplier(multiplier);
+
+ _D("steering.buttons: min:%f; max:%f; step:%d, multiplier=%f", min, max, step, multiplier);
+
+ if (modified) {
+ config_save();
+ }
+}
+
+void steering_setup()
+{
+ config_set_string("steering", "mode", "axis_x->direction;axis_y->cam.elevation;bezel->throttle;buttons->cam.azimuth");
+
+ _set_roles();
+ _set_bezel();
+
+ _set_axis(true, "steering.acceleration_sensor",
+ MAX_DIRECTION, MAX_ABSOLOUTE_SENSORS_OUTPUT_VALUE,
+ DIRECTION_DEADZONE, -FINAL_SENSOR_MULTIPLIER,
+ false, 0, 0);
+
+ _set_axis(false,"steering.gravity_sensor",
+ MAX_GRAVITY, MAX_INCREMENTAL_OUTPUT_VALUE,
+ INCREMENTAL_MODE_GRAVITY_DEADZONE, FINAL_SENSOR_MULTIPLIER,
+ true, -MAX_INCREMENTAL_VALUE, MAX_INCREMENTAL_VALUE);
+
+ _set_buttons();
+}
+++ /dev/null
-/*
-* Copyright (c) 2018 Samsung Electronics Co., Ltd.
-*
-* Licensed under the Apache License, Version 2.0 (the License);
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.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 "model/model_sensors.h"
-#include "view/view_racing.h"
-#include "gear-racing-controller.h"
-
-#define GRAVITY_DEADZONE 0.2f
-#define MAX_GRAVITY 0.7f
-
-#define DIRECTION_DEADZONE 1.0f
-#define MAX_DIRECTION 8.0f
-
-#define CAM_ELEVATION_DEADZONE 3.0f
-#define MAX_CAM_ELEVATION 5.0f
-
-#define CAM_AZIMUTH_STEP 0.01
-#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
-#define BUTTON_MULTIPLIER 1.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(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, 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(-MAX_BUTTON_VALUE, MAX_BUTTON_VALUE, CAM_AZIMUTH_STEP);
- view_racing_set_direction_indicator_multiplier(BUTTON_MULTIPLIER);
-}
-
-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(-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, 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(-MAX_BUTTON_VALUE, MAX_ELEVATION_VALUE, -CAM_AZIMUTH_STEP);
- view_racing_set_direction_indicator_multiplier(-BUTTON_MULTIPLIER);
-}
-
-void config_set_sensor_steering_sensor_velocity_bezel_elev()
-{
- 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(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, 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(-MAX_BUTTON_VALUE, MAX_BUTTON_VALUE, CAM_AZIMUTH_STEP);
- view_racing_set_direction_indicator_multiplier(BUTTON_MULTIPLIER);
-}
-
-void config_set_sensor_steering_sensor_velocity_bezel_azimuth()
-{
- model_device_to_connection_set_control_roles(STERING_MODE_DIRETION, STERING_MODE_THROTTLE, STERING_MODE_CAM_AZIMUTH, STERING_MODE_CAM_ELEVATION);
- model_hw_set_bezel_params(BEZEL_SLOW_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, 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(-MAX_BUTTON_VALUE, MAX_ELEVATION_VALUE, -CAM_AZIMUTH_STEP);
- view_racing_set_direction_indicator_multiplier(BUTTON_MULTIPLIER);
-}
return -1;
}
g_object_unref(receiver_address);
- _D("Sent %d bytes", size);
+ _FRAME_D("Sent %d bytes", size);
return 0;
}