Added cloud reconnecting
[apps/native/gear-racing-car.git] / src / cloud / cloud_communication.c
index 5a183ff..b35fc38 100644 (file)
@@ -38,6 +38,7 @@
 typedef struct communication_data_ {
     gboolean is_initialized;
     gboolean is_running;
+    gboolean is_connected;
     car_info_t *car_info;
     guint source_id;
 } communication_data_t;
@@ -59,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;
 }
@@ -93,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;
@@ -107,9 +99,9 @@ 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));
@@ -143,6 +135,7 @@ static void post_response_cb(request_result_e result, void *user_data)
 static gboolean post_timer_cb(gpointer data)
 {
     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);
     return TRUE;
@@ -219,4 +212,6 @@ static void wifi_changed_cb(const char *ap_mac, const char *ap_ssid, char *ip_ad
     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;
 }
+