*/
#include "gear-racing-controller.h"
-#include "model/model_cloud_connection.h"
+#include "model/model_car_connection.h"
#include "model/model_sensors.h"
+#include "model/model_hw.h"
#include "controller/controller_racing.h"
#include "view_manager/view_manager.h"
s_controller_data controller_data;
} s_racing_controller;
-static s_racing_controller *controller = NULL;
+static s_racing_controller s_info = { { 0, } };
-static void controller_racing_destroy(void)
+void controller_racing_destroy(void)
{
model_sensors_unsubscirbe_event();
- free(controller);
+ model_car_connection_unsubscirbe_event();
+ model_hw_unsubscirbe_event();
}
-static void _model_connected_cb(s_model_cloud_connection_cb_data *model_data)
+static void _model_connected_cb(s_model_car_connection_cb_data *model_data)
{
- view_manager_set_view(VIEW_EMERGENCY_STOP);
- controller_racing_destroy();
+ view_manager_set_view(VIEW_RESET);
}
static void _sensors_cb(s_model_sensors_cb_data *model_data)
{
- controller->controller_data.direction = model_data->direction;
- controller->controller_data.velocity = model_data->velocity;
+ s_info.controller_data.direction = model_data->direction;
+ s_info.base_controller.view_update_cb(&s_info.controller_data);
+}
+
+static void _hw_cb(s_model_hw_cb_data *model_data)
+{
+ s_info.controller_data.throttle = model_data->throttle;
+ s_info.base_controller.view_update_cb(&s_info.controller_data);
+}
+
+void controller_racing_set_stop(bool stop)
+{
+ model_car_connection_set_stop(stop);
+ model_hw_deactivate_rotatry(stop);
- 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_racing_controller));
- controller->base_controller.view_update_cb = view_update_cb;
+ s_info.base_controller.view_update_cb = view_update_cb;
- model_cloud_connection_subscribe_event(_model_connected_cb);
+ model_car_connection_subscribe_event(_model_connected_cb);
model_sensors_subscribe_event(_sensors_cb);
+ model_hw_subscribe_event(_hw_cb);
+
+ model_sensors_set_initial_values();
+ model_car_connection_ready_to_drive(true);
}
void controller_racing_back(void)
void controller_racing_next()
{
- model_cloud_connection_connect();
+ model_car_connection_ready_to_drive(false);
+ model_car_connection_model_state_change();
}