1 //******************************************************************
3 // Copyright 2016 Samsung Electronics All Rights Reserved.
5 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7 // Licensed under the Apache License, Version 2.0 (the "License");
8 // you may not use this file except in compliance with the License.
9 // You may obtain a copy of the License at
11 // http://www.apache.org/licenses/LICENSE-2.0
13 // Unless required by applicable law or agreed to in writing, software
14 // distributed under the License is distributed on an "AS IS" BASIS,
15 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 // See the License for the specific language governing permissions and
17 // limitations under the License.
19 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
22 #include "easysetup_wifi_conn.h"
28 #include <tizen_error.h>
33 * @var ES_WIFICONN_TAG
34 * @brief Logging tag for module name.
36 #define ES_WIFICONN_TAG "ESWIFICONN"
39 char wifiName[OIC_STRING_MAX_VALUE];
40 char wifiPasswd[OIC_STRING_MAX_VALUE];
43 static bool gWiFiConnFlag;
45 char* PrintWifiErr(wifi_error_e errType)
50 case WIFI_ERROR_INVALID_PARAMETER:
51 return "INVALID_PARAMETER";
52 case WIFI_ERROR_OUT_OF_MEMORY:
53 return "OUT_OF_MEMORY";
54 case WIFI_ERROR_INVALID_OPERATION:
55 return "INVALID_OPERATION";
56 case WIFI_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED:
57 return "ADDRESS_FAMILY_NOT_SUPPORTED";
58 case WIFI_ERROR_OPERATION_FAILED:
59 return "OPERATION_FAILED";
60 case WIFI_ERROR_NO_CONNECTION:
61 return "NO_CONNECTION";
62 case WIFI_ERROR_NOW_IN_PROGRESS:
63 return "NOW_IN_PROGRESS";
64 case WIFI_ERROR_ALREADY_EXISTS:
65 return "ALREADY_EXISTS";
66 case WIFI_ERROR_OPERATION_ABORTED:
67 return "OPERATION_ABORTED";
68 case WIFI_ERROR_DHCP_FAILED:
70 case WIFI_ERROR_INVALID_KEY:
72 case WIFI_ERROR_NO_REPLY:
74 case WIFI_ERROR_SECURITY_RESTRICTED:
75 return "SECURITY_RESTRICTED";
76 case WIFI_ERROR_PERMISSION_DENIED:
77 return "PERMISSION_DENIED";
78 case WIFI_ERROR_NOT_SUPPORTED:
79 return "NOT_SUPPORTED";
85 static void WiFiScanCallback(wifi_error_e err, void* data)
88 OIC_LOG_V(INFO, ES_WIFICONN_TAG, "UserData : %s", (char *) data);
91 OIC_LOG_V(INFO, ES_WIFICONN_TAG, "Scan Callback Res : %s", PrintWifiErr(err));
94 static void WiFiActivateCallback(wifi_error_e result, void* user_data)
96 OIC_LOG(DEBUG, ES_WIFICONN_TAG, "__test_activated_callback IN");
98 int ret = wifi_scan(WiFiScanCallback, NULL);
99 if (ret != WIFI_ERROR_NONE) {
100 OIC_LOG(ERROR, ES_WIFICONN_TAG, "WiFi Scan Error");
101 OIC_LOG_V(INFO, ES_WIFICONN_TAG, "Scan Fail Status : %s", PrintWifiErr((wifi_error_e) ret));
104 OIC_LOG(DEBUG, ES_WIFICONN_TAG, "__test_activated_callback OUT");
108 static void ConnectedCallback(wifi_error_e err, void* data)
110 if(err == WIFI_ERROR_NONE) {
111 OIC_LOG(DEBUG, ES_WIFICONN_TAG, "Success to Connect AP");
114 OIC_LOG(ERROR, ES_WIFICONN_TAG, "Fail to Connect AP");
118 static bool WiFiFoundCallback(wifi_ap_h ap, void *data)
120 TargetWifiInfo* targetInfo = (TargetWifiInfo *) data;
122 char *foundAP = NULL;
124 int ret = wifi_ap_get_essid(ap, &foundAP);
126 if(ret != WIFI_ERROR_NONE) {
127 OIC_LOG(ERROR, ES_WIFICONN_TAG, "Fail to get AP");
128 OIC_LOG_V(INFO, ES_WIFICONN_TAG, "Fail Status : %s", PrintWifiErr((wifi_error_e) ret));
132 OIC_LOG_V(DEBUG, ES_WIFICONN_TAG, "Found AP name : %s", foundAP);
134 if(strstr(foundAP, targetInfo->wifiName) != NULL) {
136 bool needPasswd = false;
138 if (wifi_ap_is_passphrase_required(ap, &needPasswd) == WIFI_ERROR_NONE) {
140 OIC_LOG(DEBUG, ES_WIFICONN_TAG, "Passsword required");
142 ret = wifi_ap_set_passphrase(ap, targetInfo->wifiPasswd);
143 if (ret != WIFI_ERROR_NONE) {
144 OIC_LOG(ERROR, ES_WIFICONN_TAG, "Fail to Set Password");
145 OIC_LOG_V(INFO, ES_WIFICONN_TAG, "Fail Status : %s", PrintWifiErr((wifi_error_e) ret));
150 ret = wifi_connect(ap, ConnectedCallback, targetInfo);
151 if (ret != WIFI_ERROR_NONE) {
152 OIC_LOG(ERROR, ES_WIFICONN_TAG, "Fail to connect wifi");
153 OIC_LOG_V(INFO, ES_WIFICONN_TAG, "Connect Fail Status : %s", PrintWifiErr((wifi_error_e) ret));
158 OIC_LOG_V(INFO, ES_WIFICONN_TAG, "Success to connect wifi : %s", PrintWifiErr((wifi_error_e) ret));
159 gWiFiConnFlag = true;
167 OIC_LOG(ERROR, ES_WIFICONN_TAG, "Fail to get Passphrase Required");
168 OIC_LOG_V(INFO, ES_WIFICONN_TAG, "Fail Status : %s", PrintWifiErr((wifi_error_e) ret));
174 OIC_LOG(DEBUG, ES_WIFICONN_TAG, "This AP is not the one wanted to be connected");
175 OIC_LOG_V(INFO, ES_WIFICONN_TAG, "Searching : %s / Searched : %s", targetInfo->wifiName, foundAP);
183 WiFiConnErrCode TizenWiFiDeinit()
185 OIC_LOG(DEBUG, ES_WIFICONN_TAG, "TizenWiFiDeinit IN");
187 int ret = wifi_deinitialize();
188 if(ret != WIFI_ERROR_NONE) {
189 OIC_LOG(ERROR, ES_WIFICONN_TAG, "wifi deinit error");
190 OIC_LOG_V(INFO, ES_WIFICONN_TAG, "Fail Status : %s", PrintWifiErr((wifi_error_e) ret));
191 return WIFI_DEINIT_ERROR;
194 OIC_LOG(DEBUG, ES_WIFICONN_TAG, "TizenWiFiDeinit OUT");
195 return WIFI_NO_ERROR;
198 WiFiConnErrCode TizenWiFiInit()
200 OIC_LOG(DEBUG, ES_WIFICONN_TAG, "TizenWiFiInit IN");
202 gWiFiConnFlag = false;
203 int ret = wifi_initialize();
204 if (ret != WIFI_ERROR_NONE) {
205 OIC_LOG(ERROR, ES_WIFICONN_TAG, "WiFi Init Error");
206 OIC_LOG_V(INFO, ES_WIFICONN_TAG, "Init Fail Status : %s", PrintWifiErr((wifi_error_e) ret));
207 return WIFI_INIT_ERROR;
210 OIC_LOG(DEBUG, ES_WIFICONN_TAG, "TizenWiFiInit OUT");
212 return WIFI_NO_ERROR;
215 WiFiConnErrCode TizenWiFiScanStart()
217 OIC_LOG(DEBUG, ES_WIFICONN_TAG, "TizenWiFiScanStart IN");
220 bool wifiState = false;
221 wifi_is_activated(&wifiState);
223 // if wifi is not activated, actviate & scan
224 if (wifiState == false) {
225 OIC_LOG(ERROR, ES_WIFICONN_TAG, "WiFi Not Activated...Activate it!");
226 ret = wifi_activate(WiFiActivateCallback, NULL);
228 if(ret != WIFI_ERROR_NONE) {
229 OIC_LOG(ERROR, ES_WIFICONN_TAG, "wifi activate error");
230 return WIFI_ACTIVATE_ERROR;
234 ret = wifi_scan(WiFiScanCallback, NULL);
235 if (ret != WIFI_ERROR_NONE) {
236 OIC_LOG(ERROR, ES_WIFICONN_TAG, "WiFi Scan Error");
237 OIC_LOG_V(INFO, ES_WIFICONN_TAG, "Scan Fail Status : %s", PrintWifiErr((wifi_error_e) ret));
238 return WIFI_SCAN_ERROR;
242 OIC_LOG(DEBUG, ES_WIFICONN_TAG, "TizenWiFiScanStart OUT");
244 return WIFI_NO_ERROR;
248 WiFiConnErrCode TizenWiFiConn(char *ssid, char* passwd)
250 TargetWifiInfo targetInfo;
252 memset(targetInfo.wifiName, 0, OIC_STRING_MAX_VALUE);
253 memset(targetInfo.wifiPasswd, 0, OIC_STRING_MAX_VALUE);
256 strncpy(targetInfo.wifiName, ssid, strlen(ssid));
261 strncpy(targetInfo.wifiPasswd, passwd, strlen(passwd));
264 int ret = wifi_foreach_found_aps(WiFiFoundCallback, &targetInfo);
265 if(ret != WIFI_ERROR_NONE) {
266 OIC_LOG(ERROR, ES_WIFICONN_TAG, "wifi_foreach_found_aps Error");
267 OIC_LOG_V(INFO, ES_WIFICONN_TAG, "Fail Status : %s", PrintWifiErr((wifi_error_e) ret));
268 memset(targetInfo.wifiName, 0, OIC_STRING_MAX_VALUE);
269 memset(targetInfo.wifiPasswd, 0, OIC_STRING_MAX_VALUE);
271 return WIFI_CONN_ERROR;
274 // try to find target AP during 10[sec]
276 while(!gWiFiConnFlag) {
280 OIC_LOG(ERROR, ES_WIFICONN_TAG, "Connection Error... try 10[sec]");
281 memset(targetInfo.wifiName, 0, OIC_STRING_MAX_VALUE);
282 memset(targetInfo.wifiPasswd, 0, OIC_STRING_MAX_VALUE);
284 return WIFI_CONN_ERROR;
290 gWiFiConnFlag = false;
292 return WIFI_NO_ERROR;