2 * Copyright (c) 2018 Samsung Electronics Co., Ltd.
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
8 * http://floralicense.org/license/
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.
17 #include "cloud/cloud_communication.h"
19 #include <wifi-manager.h>
21 #include "cloud/car_info.h"
22 #include "cloud/cloud_request.h"
23 #include "cloud/cloud_lap_request.h"
24 #include "cloud/lap_info.h"
29 typedef struct communication_data_ {
30 gboolean is_initialized;
34 } communication_data_t;
36 static communication_data_t _communication;
38 static void post_response_cb(request_result_e result, void *user_data);
39 static gboolean post_timer_cb(gpointer data);
40 static void wifi_changed_cb(const char *ap_mac, const char *ap_ssid, char *ip_addr, void *user_data);
42 static int set_car_id();
43 static int set_car_ip();
44 static int set_car_name();
45 static int set_ap_mac();
46 static int set_ap_ssid();
48 int cloud_communication_init()
50 retvm_if(_communication.is_initialized, -1, "Cloud communication is already initialized");
51 _communication.car_info = car_info_create();
53 if (set_car_id() != 0) {
56 if (set_car_ip() != 0) {
59 if (set_car_name() != 0) {
62 if (set_ap_mac() != 0) {
65 if (set_ap_ssid() != 0) {
69 net_util_set_wifi_connection_changed_cb(wifi_changed_cb, NULL);
71 _communication.is_initialized = true;
75 void cloud_communication_start(int interval)
77 retm_if(!_communication.is_initialized, "Cloud communication is not initialized");
78 retm_if(_communication.is_running, "Cloud communication is already running");
80 _communication.source_id = g_timeout_add_seconds(interval, post_timer_cb, _communication.car_info);
81 _communication.is_running = TRUE;
84 void cloud_communication_stop()
86 retm_if(!_communication.is_initialized, "Cloud communication is not initialized");
87 retm_if(_communication.is_running, "Cloud communication is already stopped");
89 g_source_remove(_communication.source_id);
90 _communication.is_running = FALSE;
93 void cloud_communication_fini()
95 retm_if(!_communication.is_initialized, "Cloud communication is already finalized");
97 cloud_communication_stop();
98 car_info_destroy(_communication.car_info);
102 void cloud_communication_post_lap(const long laptime, const char *driver_name)
104 lap_info_t *lap = lap_info_create();
106 lap_info_set_car_id(lap, car_info_get_car_id(_communication.car_info));
107 lap_info_set_user_name(lap, driver_name);
108 lap_info_set_lap_time(lap, laptime);
111 cloud_lap_request_api_racing_post(lap, (cloud_request_lap_post_finish_cb)post_response_cb, NULL);
113 lap_info_destroy(lap);
116 static void post_response_cb(request_result_e result, void *user_data)
118 if (result == SUCCESS) {
126 static gboolean post_timer_cb(gpointer data)
128 retv_if(!data, FALSE);
129 car_info_t *car = (car_info_t *)data;
130 cloud_request_api_racing_post(car, post_response_cb, NULL);
134 static int set_car_id()
138 ret = config_get_string("Car", "Id", &id);
140 _E("Getting car ID from config failed!");
144 car_info_set_car_id(_communication.car_info, id);
149 static int set_car_ip()
152 int ret = net_util_get_ip_addr(&ip);
156 car_info_set_car_ip(_communication.car_info, ip);
161 static int set_car_name()
166 ret = config_get_string("Car", "Name", &name);
168 _E("Getting car name from config failed!");
171 car_info_set_car_name(_communication.car_info, name);
176 static int set_ap_mac()
179 int ret = net_util_get_ap_mac(&mac);
183 car_info_set_car_ap_mac(_communication.car_info, mac);
188 static int set_ap_ssid()
191 int ret = net_util_get_ap_ssid(&ssid);
195 car_info_set_ap_ssid(_communication.car_info, ssid);
200 static void wifi_changed_cb(const char *ap_mac, const char *ap_ssid, char *ip_addr, void *user_data)
202 car_info_set_car_ap_mac(_communication.car_info, ap_mac);
203 car_info_set_ap_ssid(_communication.car_info, ap_ssid);
204 car_info_set_car_ip(_communication.car_info, ip_addr);