Function naming refactor
[apps/native/gear-racing-car.git] / src / cloud / cloud_communication.c
index 59703f3..30e75f5 100644 (file)
 #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;
@@ -49,24 +60,15 @@ int cloud_communication_init()
     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;
 }
@@ -83,7 +85,7 @@ void cloud_communication_start(int interval)
 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;
@@ -97,21 +99,47 @@ void cloud_communication_fini()
     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;
 }
 
@@ -183,7 +211,21 @@ static int set_ap_ssid()
 
 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);
+       }
+}
+