#include <stdlib.h>
#include "cloud/car_info.h"
#include "cloud/cloud_request.h"
+#include "cloud/cloud_lap_request.h"
+#include "cloud/lap_info.h"
#include "log.h"
#include "config.h"
-#include "connection_manager.h"
#include "net-util.h"
+#include "resource/resource_led.h"
+
+#define CONFIG_LED_STATE_KEY_READY "ready"
+#define CONFIG_DEFAULT_LED_3BIT_READY 1, 0, 1
+#define CONFIG_DEFAULT_LED_24BIT_READY 215, 15, 96
+
+#define CONFIG_LED_STATE_KEY_FAIL "fail"
+#define CONFIG_DEFAULT_LED_3BIT_FAIL 1, 0, 0
+#define CONFIG_DEFAULT_LED_24BIT_FAIL 255, 0, 0
typedef struct communication_data_ {
gboolean is_initialized;
gboolean is_running;
+ gboolean is_connected;
car_info_t *car_info;
guint source_id;
} communication_data_t;
retvm_if(_communication.is_initialized, -1, "Cloud communication is already initialized");
_communication.car_info = car_info_create();
- if (set_car_id() != 0) {
- return -1;
- }
- if (set_car_ip() != 0) {
- return -1;
- }
- if (set_car_name() != 0) {
- return -1;
- }
- if (set_ap_mac() != 0) {
- return -1;
- }
- if (set_ap_ssid() != 0) {
- return -1;
- }
+ set_car_id();
+ set_car_ip();
+ set_car_name();
+ set_ap_mac();
+ set_ap_ssid();
net_util_set_wifi_connection_changed_cb(wifi_changed_cb, NULL);
+ _communication.is_connected = car_info_get_ap_mac(_communication.car_info) && car_info_get_ap_ssid(_communication.car_info);
_communication.is_initialized = true;
return 0;
}
void cloud_communication_stop()
{
retm_if(!_communication.is_initialized, "Cloud communication is not initialized");
- retm_if(_communication.is_running, "Cloud communication is already stopped");
+ retm_if(!_communication.is_running, "Cloud communication is already stopped");
g_source_remove(_communication.source_id);
_communication.is_running = FALSE;
car_info_destroy(_communication.car_info);
}
+void cloud_communication_post_lap(const long laptime, const char *driver_name)
+{
+ retm_if(!_communication.is_connected, "Car is not connected to network");
+ lap_info_t *lap = lap_info_create();
+
+ lap_info_set_car_id(lap, car_info_get_car_id(_communication.car_info));
+ lap_info_set_user_name(lap, driver_name);
+ lap_info_set_lap_time(lap, laptime);
+
+ _D("POST lap");
+ cloud_lap_request_api_racing_post(lap, (cloud_request_lap_post_finish_cb)post_response_cb, NULL);
+
+ lap_info_destroy(lap);
+}
+
static void post_response_cb(request_result_e result, void *user_data)
{
if (result == SUCCESS) {
_I("POST SUCCESS");
+ resource_led_set_rgb_colors(CONFIG_LED_STATE_KEY_READY,
+ CONFIG_DEFAULT_LED_3BIT_READY,
+ CONFIG_DEFAULT_LED_24BIT_READY,
+ LED_COLOR_GREEN);
}
else {
_I("POST FAILURE");
+ resource_led_set_rgb_colors(CONFIG_LED_STATE_KEY_FAIL,
+ CONFIG_DEFAULT_LED_3BIT_FAIL,
+ CONFIG_DEFAULT_LED_24BIT_FAIL,
+ LED_COLOR_RED);
}
}
static gboolean post_timer_cb(gpointer data)
{
+ FUNCTION_START;
retv_if(!data, FALSE);
+ retvm_if(!_communication.is_connected, TRUE, "Car is not connected to network");
car_info_t *car = (car_info_t *)data;
cloud_request_api_racing_post(car, post_response_cb, NULL);
+ FUNCTION_END;
return TRUE;
}
static void wifi_changed_cb(const char *ap_mac, const char *ap_ssid, char *ip_addr, void *user_data)
{
- car_info_set_car_ap_mac(_communication.car_info, ap_mac);
- car_info_set_ap_ssid(_communication.car_info, ap_ssid);
- car_info_set_car_ip(_communication.car_info, ip_addr);
-}
\ No newline at end of file
+ car_info_set_car_ap_mac(_communication.car_info, ap_mac);
+ car_info_set_ap_ssid(_communication.car_info, ap_ssid);
+ car_info_set_car_ip(_communication.car_info, ip_addr);
+ _communication.is_connected = ap_mac && ap_ssid;
+
+ if (_communication.is_connected) {
+ resource_led_set_rgb_colors(CONFIG_LED_STATE_KEY_READY,
+ CONFIG_DEFAULT_LED_3BIT_READY,
+ CONFIG_DEFAULT_LED_24BIT_READY,
+ LED_COLOR_GREEN);
+ } else {
+ resource_led_set_rgb_colors(CONFIG_LED_STATE_KEY_FAIL,
+ CONFIG_DEFAULT_LED_3BIT_FAIL,
+ CONFIG_DEFAULT_LED_24BIT_FAIL,
+ LED_COLOR_RED);
+ }
+}
+