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"
27 typedef struct communication_data_ {
28 gboolean is_initialized;
32 } communication_data_t;
34 static communication_data_t _communication;
36 static void post_response_cb(request_result_e result, void *user_data);
37 static gboolean post_timer_cb(gpointer data);
38 static void wifi_changed_cb(const char *ap_mac, const char *ap_ssid, char *ip_addr, void *user_data);
40 static int set_car_id();
41 static int set_car_ip();
42 static int set_car_name();
43 static int set_ap_mac();
44 static int set_ap_ssid();
46 int cloud_communication_init()
48 retvm_if(_communication.is_initialized, -1, "Cloud communication is already initialized");
49 _communication.car_info = car_info_create();
51 if (set_car_id() != 0) {
54 if (set_car_ip() != 0) {
57 if (set_car_name() != 0) {
60 if (set_ap_mac() != 0) {
63 if (set_ap_ssid() != 0) {
67 net_util_set_wifi_connection_changed_cb(wifi_changed_cb, NULL);
69 _communication.is_initialized = true;
73 void cloud_communication_start(int interval)
75 retm_if(!_communication.is_initialized, "Cloud communication is not initialized");
76 retm_if(_communication.is_running, "Cloud communication is already running");
78 _communication.source_id = g_timeout_add_seconds(interval, post_timer_cb, _communication.car_info);
79 _communication.is_running = TRUE;
82 void cloud_communication_stop()
84 retm_if(!_communication.is_initialized, "Cloud communication is not initialized");
85 retm_if(_communication.is_running, "Cloud communication is already stopped");
87 g_source_remove(_communication.source_id);
88 _communication.is_running = FALSE;
91 void cloud_communication_fini()
93 retm_if(!_communication.is_initialized, "Cloud communication is already finalized");
95 cloud_communication_stop();
96 car_info_destroy(_communication.car_info);
99 static void post_response_cb(request_result_e result, void *user_data)
101 if (result == SUCCESS) {
109 static gboolean post_timer_cb(gpointer data)
111 retv_if(!data, FALSE);
112 car_info_t *car = (car_info_t *)data;
113 cloud_request_api_racing_post(car, post_response_cb, NULL);
117 static int set_car_id()
121 ret = config_get_string("Car", "Id", &id);
123 _E("Getting car ID from config failed!");
127 car_info_set_car_id(_communication.car_info, id);
132 static int set_car_ip()
135 int ret = net_util_get_ip_addr(&ip);
139 car_info_set_car_ip(_communication.car_info, ip);
144 static int set_car_name()
149 ret = config_get_string("Car", "Name", &name);
151 _E("Getting car name from config failed!");
154 car_info_set_car_name(_communication.car_info, name);
159 static int set_ap_mac()
162 int ret = net_util_get_ap_mac(&mac);
166 car_info_set_car_ap_mac(_communication.car_info, mac);
171 static int set_ap_ssid()
174 int ret = net_util_get_ap_ssid(&ssid);
178 car_info_set_ap_ssid(_communication.car_info, ssid);
183 static void wifi_changed_cb(const char *ap_mac, const char *ap_ssid, char *ip_addr, void *user_data)
185 car_info_set_car_ap_mac(_communication.car_info, ap_mac);
186 car_info_set_ap_ssid(_communication.car_info, ap_ssid);
187 car_info_set_car_ip(_communication.car_info, ip_addr);