Update to emergency stop
[apps/native/gear-racing-controller.git] / src / controller / controller_racing.c
1 /*
2 * Copyright (c) 2018 Samsung Electronics Co., Ltd.
3 *
4 * Licensed under the Flora License, Version 1.1 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://floralicense.org/license/
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 #include "gear-racing-controller.h"
18 #include "model/model_car_connection.h"
19 #include "model/model_sensors.h"
20 #include "model/model_hw.h"
21 #include "controller/controller_racing.h"
22 #include "view_manager/view_manager.h"
23
24 typedef struct _s_racing_controller {
25         s_controller base_controller;
26         s_controller_data controller_data;
27 } s_racing_controller;
28
29 static s_racing_controller s_info = { { 0, } };
30
31 void controller_racing_destroy(void)
32 {
33         model_sensors_unsubscirbe_event();
34         model_car_connection_unsubscirbe_event();
35         model_hw_unsubscirbe_event();
36 }
37
38 static void _model_connected_cb(s_model_car_connection_cb_data *model_data)
39 {
40         view_manager_set_view(VIEW_RESET);
41 }
42
43 static void _sensors_cb(s_model_sensors_cb_data *model_data)
44 {
45         s_info.controller_data.direction = model_data->direction;
46         s_info.base_controller.view_update_cb(&s_info.controller_data);
47 }
48
49 static void _hw_cb(s_model_hw_cb_data *model_data)
50 {
51         s_info.controller_data.throttle = model_data->throttle;
52         s_info.base_controller.view_update_cb(&s_info.controller_data);
53 }
54
55 void controller_racing_set_stop(bool stop)
56 {
57         model_car_connection_set_stop(stop);
58         model_hw_deactivate_rotatry(stop);
59
60 }
61
62 void controller_racing_init(t_view_update_cb view_update_cb)
63 {
64         s_info.base_controller.view_update_cb = view_update_cb;
65
66         model_car_connection_subscribe_event(_model_connected_cb);
67         model_sensors_subscribe_event(_sensors_cb);
68         model_hw_subscribe_event(_hw_cb);
69
70         model_sensors_set_initial_values();
71         model_car_connection_ready_to_drive(true);
72 }
73
74 void controller_racing_back(void)
75 {
76         controller_racing_destroy();
77 }
78
79 void controller_racing_next()
80 {
81         model_car_connection_ready_to_drive(false);
82         model_car_connection_model_state_change();
83 }
84