Using stub model to simulate sensor data 67/183467/4
authorMichal Skorupinski <m.skorupinsk@samsung.com>
Thu, 5 Jul 2018 16:27:18 +0000 (18:27 +0200)
committerMichal Skorupinski <m.skorupinsk@samsung.com>
Fri, 13 Jul 2018 15:06:01 +0000 (17:06 +0200)
Change-Id: Ifbb82a7a26853d8dcd26d355668cc00c52208470
Signed-off-by: Michal Skorupinski <m.skorupinsk@samsung.com>
17 files changed:
inc/controller/controller_racing.h
inc/model/model_base.h
inc/model/model_connection.h
inc/model/model_sensors.h [new file with mode: 0644]
src/controller/controller_car_selection.c
src/controller/controller_connect_to_car.c
src/controller/controller_connection_successed.c
src/controller/controller_emergency_stop.c
src/controller/controller_help.c
src/controller/controller_name_input.c
src/controller/controller_network_failure.c
src/controller/controller_racing.c
src/controller/controller_reset.c
src/gear-racing-controller.c
src/model/model_connection.c
src/model/model_sensors.c [new file with mode: 0644]
src/view/view_racing.c

index f9b6eca..77058ee 100644 (file)
 
 #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();
index a7f27c5..c6bcdaa 100644 (file)
 #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_ */
index 347ded8..7d8b44b 100644 (file)
@@ -20,7 +20,7 @@
 
 #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);
diff --git a/inc/model/model_sensors.h b/inc/model/model_sensors.h
new file mode 100644 (file)
index 0000000..24073d6
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+* 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_ */
index 0987f7f..73ba835 100644 (file)
@@ -25,7 +25,7 @@ static void controller_car_selection_destroy(void)
        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();
index 11b3f0c..b1d8fb7 100644 (file)
@@ -28,7 +28,7 @@ static void controller_connect_to_car_destroy(void)
        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();
index fc6f874..9e956c0 100644 (file)
@@ -26,7 +26,7 @@ static void _connection_successed_destroy(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);
        _connection_successed_destroy();
index d8f9f54..4b5ed10 100644 (file)
@@ -28,7 +28,7 @@ static void controller_emergency_stop_destroy(void)
        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();
index 8af51f2..ec41949 100644 (file)
@@ -28,7 +28,7 @@ static void controller_help_destroy(void)
        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();
index 414bd9f..41ce03e 100644 (file)
@@ -28,7 +28,7 @@ static void controller_name_input_destroy(void)
        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();
index bc6b57f..a8f066d 100644 (file)
@@ -28,7 +28,7 @@ static void controller_network_failure_destroy(void)
        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();
index 209da30..ed18ad4 100644 (file)
 * 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)
index f0ef37a..a3b0329 100644 (file)
@@ -28,7 +28,7 @@ static void controller_reset_destroy(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();
index bee8c15..1ff6d4e 100644 (file)
 * 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;
 }
index 0856400..5733a6a 100644 (file)
 #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)
 {
@@ -35,6 +31,11 @@ void model_connection_subscribe_event(t_model_update_cb model_update_cb)
 
 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);
 }
 
diff --git a/src/model/model_sensors.c b/src/model/model_sensors.c
new file mode 100644 (file)
index 0000000..e814e4f
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+* 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;
+}
+
index 0595cf1..5b67bad 100644 (file)
@@ -27,11 +27,35 @@ typedef struct _s_view_racing {
        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);
@@ -70,6 +94,17 @@ static void _layout_back_cb(void *data, Evas_Object *obj, void *event_info)
        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();
@@ -96,6 +131,6 @@ static void _view_racing_create_gui(Evas_Object *parent)
 
 void view_racing_init(Evas_Object *parent)
 {
-       controller_racing_init(NULL);
+       controller_racing_init(_controller_cb);
        _view_racing_create_gui(parent);
 }