#include "controller/controller_base.h"
+typedef struct _s_controller_data {
+ float velocity;
+ float direction;
+} s_controller_data;
+
void controller_racing_init(t_view_update_cb view_update_cb);
void controller_racing_back_btn(void);
void controller_racing_next_page();
#ifndef MODEL_MODEL_BASE_H_
#define MODEL_MODEL_BASE_H_
-typedef void (*t_model_update_cb)(void *data);
+typedef enum _e_model_type {
+ MODEL_TYPE_UPDATE,
+ MODEL_TYPE_END,
+} e_model_type;
+
+typedef struct _s_model_data {
+ e_model_type type;
+ float velocity;
+ float direction;
+} s_model_data;
+
+typedef void (*t_model_update_cb)(s_model_data *data);
typedef struct _s_model {
- t_model_update_cb view_update_cb;
+ t_model_update_cb model_update_cb;
} s_model;
#endif /* MODEL_MODEL_BASE_H_ */
#include "model/model_base.h"
-typedef void (*t_model_update_cb)(void *data);
+typedef void (*t_model_cb)(void *data);
void model_connection_init(void);
void model_connection_subscribe_event(t_model_update_cb model_update_cb);
--- /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.
+*/
+
+
+#ifndef MODEL_MODEL_SENSORS_H_
+#define MODEL_MODEL_SENSORS_H_
+
+#include "model/model_base.h"
+
+typedef void (*t_model_cb)(void *data);
+
+void model_sensors_init(void);
+void model_sensors_unsubscirbe_event();
+void model_sensors_subscribe_event(t_model_update_cb model_update_cb);
+//void model_sensors_connect(void);
+
+#endif /* MODEL_MODEL_SENSORS_H_ */
free(controller);
}
-static void _connected_cb(void *is_connected)
+static void _connected_cb(s_model_data *model_data)
{
view_manager_set_view(VIEW_CONNECTION_SUCCESSED);
controller_car_selection_destroy();
free(controller);
}
-static void _connected_cb(void *is_connected)
+static void _connected_cb(s_model_data *model_data)
{
view_manager_set_view(VIEW_CAR_SELECTION);
controller_connect_to_car_destroy();
free(controller);
}
-static void _connected_cb(void *is_connected)
+static void _connected_cb(s_model_data *model_data)
{
view_manager_set_view(VIEW_NAME_INPUT);
_connection_successed_destroy();
free(controller);
}
-static void _connected_cb(void *is_connected)
+static void _connected_cb(s_model_data *model_data)
{
view_manager_set_view(VIEW_RESET);
controller_emergency_stop_destroy();
free(controller);
}
-static void _connected_cb(void *is_connected)
+static void _connected_cb(s_model_data *model_data)
{
view_manager_set_view(VIEW_RACING);
controller_help_destroy();
free(controller);
}
-static void _connected_cb(void *is_connected)
+static void _connected_cb(s_model_data *model_data)
{
view_manager_set_view(VIEW_HELP);
controller_name_input_destroy();
free(controller);
}
-static void _connected_cb(void *is_connected)
+static void _connected_cb(s_model_data *model_data)
{
view_manager_set_view(VIEW_CONNECT_TO_CAR);
controller_network_failure_destroy();
* limitations under the License.
*/
-
-
#include "gear-racing-controller.h"
#include "model/model_connection.h"
+#include "model/model_sensors.h"
#include "controller/controller_racing.h"
#include "view_manager/view_manager.h"
-static s_controller *controller = NULL;
+typedef struct _s_racing_controller {
+ s_controller base_controller;
+ s_controller_data controller_data;
+} s_racing_controller;
+
+static s_racing_controller *controller = NULL;
static void controller_racing_destroy(void)
{
+ model_sensors_unsubscirbe_event();
free(controller);
}
-static void _connected_cb(void *is_connected)
+static void _model_connected_cb(s_model_data *model_data)
{
view_manager_set_view(VIEW_EMERGENCY_STOP);
controller_racing_destroy();
}
+static void _sensors_cb(s_model_data *model_data)
+{
+ controller->controller_data.direction = model_data->direction;
+ controller->controller_data.velocity = model_data->velocity;
+
+ controller->base_controller.view_update_cb(&controller->controller_data);
+}
+
void controller_racing_init(t_view_update_cb view_update_cb)
{
- controller = calloc(1, sizeof(s_controller));
- controller->view_update_cb = view_update_cb;
+ controller = calloc(1, sizeof(s_racing_controller));
+ controller->base_controller.view_update_cb = view_update_cb;
- model_connection_subscribe_event(_connected_cb);
+ model_connection_subscribe_event(_model_connected_cb);
+ model_sensors_subscribe_event(_sensors_cb);
}
void controller_racing_back_btn(void)
free(controller);
}
-static void _connected_cb(void *is_connected)
+static void _connected_cb(s_model_data *model_data)
{
view_manager_set_view(VIEW_NAME_INPUT);
controller_reset_destroy();
* limitations under the License.
*/
-#include <view_manager/view_manager.h>
#include "gear-racing-controller.h"
+#include "view_manager/view_manager.h"
+#include "model/model_sensors.h"
static bool app_create(void *data)
{
+ model_sensors_init();
view_manager_initialize_ui();
return true;
}
#include "gear-racing-controller.h"
#include "model/model_connection.h"
-typedef struct _s_model_connection {
- t_model_update_cb model_update_cb;
-} s_model_connection;
-
-s_model_connection model_connection = { 0, };
+s_model model_connection = { 0, };
void model_connection_init(void)
{
void model_connection_connect(void)
{
- model_connection.model_update_cb((void *)true);
+ static s_model_data model_data = {
+ .type = MODEL_TYPE_END,
+ 0,
+ };
+
+ model_connection.model_update_cb(&model_data);
}
--- /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 "gear-racing-controller.h"
+#include "model/model_sensors.h"
+
+typedef struct _s_sensor_data {
+ float value;
+ float step;
+} s_sensor_data;
+
+typedef struct _s_model_sensors {
+ s_model model_base;
+
+ s_sensor_data direction;
+ s_sensor_data velocity;
+
+} s_model_sensors;
+
+static s_model_sensors model_sensors = {
+ { 0, },
+ .direction = {
+ .value = 0,
+ .step = 0.025f,
+ },
+ .velocity = {
+ .value = 0,
+ .step = 0.050f,
+ },
+};
+
+static Eina_Bool _sensor_animator_cb(void *data)
+{
+ static s_model_data model_data = {
+ .type = MODEL_TYPE_UPDATE,
+ };
+
+ s_sensor_data *sensor_data = (s_sensor_data *)data;
+ sensor_data->value += sensor_data->step;
+
+ model_data.direction = model_sensors.direction.value;
+ model_data.velocity = model_sensors.velocity.value;
+
+ if (model_sensors.model_base.model_update_cb) {
+ model_sensors.model_base.model_update_cb(&model_data);
+ }
+
+ return ECORE_CALLBACK_RENEW;
+}
+
+void model_sensors_init(void)
+{
+ ecore_animator_add(_sensor_animator_cb, &model_sensors.direction);
+ ecore_animator_add(_sensor_animator_cb, &model_sensors.velocity);
+}
+
+void model_sensors_subscribe_event(t_model_update_cb model_update_cb)
+{
+ model_sensors.model_base.model_update_cb = model_update_cb;
+}
+
+void model_sensors_unsubscirbe_event()
+{
+ model_sensors.model_base.model_update_cb = NULL;
+}
+
Evas_Object *direction;
float velocity_angle;
float direction_angle;
+
+ float dir_min_angle;
+ float dir_max_angle;
+ float vel_min_angle;
+ float vel_max_angle;
} s_view_racing;
-static s_view_racing s_info = { 0,};
+static s_view_racing s_info = {
+ 0,
+ .dir_min_angle = -90,
+ .dir_max_angle = 90,
+ .vel_min_angle = -38,
+ .vel_max_angle = 180 + 38,
+};
+
+static float _calculate_angle(float value, float min, float max)
+{
+ float x = sinf(value);
+
+ float y = (x-(-1)) * ((max - min) / (1 - (-1))) + min;
+
+ return y;
+}
-static Evas_Object *_create_image(Evas_Object* parent, int pos_X, int pos_Y, int width, int height, float angle, char *file_name,e_horizontal_align horizontal_align, e_vertical_align vertical_align)
+static Evas_Object *_create_image(Evas_Object* parent,
+ int pos_X, int pos_Y, int width, int height,
+ float angle,
+ char *file_name,
+ e_horizontal_align horizontal_align, e_vertical_align vertical_align)
{
char img_path[PATH_MAX];
view_base_get_resource(file_name, img_path);
controller_racing_back_btn();
}
+static void _controller_cb(void *data)
+{
+ s_controller_data *controller_data = (s_controller_data *)data;
+
+ float angle = _calculate_angle(controller_data->direction, s_info.dir_min_angle, s_info.dir_max_angle);
+ view_base_set_angle(s_info.direction, angle, 180.0, 180.0);
+
+ angle = _calculate_angle(controller_data->velocity, s_info.vel_min_angle, s_info.vel_max_angle);
+ view_base_set_angle(s_info.velocity, angle, 180.0, 180.0);
+}
+
void _racing_screen_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
{
controller_racing_next_page();
void view_racing_init(Evas_Object *parent)
{
- controller_racing_init(NULL);
+ controller_racing_init(_controller_cb);
_view_racing_create_gui(parent);
}