*/
int utc_wifi_manager_connect_hidden_ap_p(void)
{
- int ret = WIFI_MANAGER_ERROR_NONE;
- char ap_name[CONFIG_VALUE_LEN_MAX] = {0,};
- char ap_passphrase[CONFIG_VALUE_LEN_MAX] = {0,};
+ int ret = WIFI_MANAGER_ERROR_NONE;
+ char ap_name[CONFIG_VALUE_LEN_MAX] = {0,};
+ char ap_passphrase[CONFIG_VALUE_LEN_MAX] = {0,};
+ wifi_manager_security_type_e type;
- if (!wifi_manager_get_value_from_configfile("WIFI_WPSACCESSPOINTNAME", ap_name)) {
- FPRINTF("[%s:%d] wifi_manager_get_value_from_configfile(WIFI_WPSACCESSPOINTNAME) failed \\n", __FILE__, __LINE__);
- return -1;
- }
+ if (!wifi_manager_get_value_from_configfile("WIFI_WPSACCESSPOINTNAME", ap_name)) {
+ FPRINTF("[%s:%d] wifi_manager_get_value_from_configfile(WIFI_WPSACCESSPOINTNAME) failed \\n", __FILE__, __LINE__);
+ return -1;
+ }
- if (!wifi_manager_get_value_from_configfile("WIFI_ACCESSPOINTPIN", ap_passphrase)) {
- FPRINTF("[%s:%d] wifi_manager_get_value_from_configfile(WIFI_ACCESSPOINTPIN) failed \\n", __FILE__, __LINE__);
- return -1;
- }
+ if (!wifi_manager_get_value_from_configfile("WIFI_ACCESSPOINTPIN", ap_passphrase)) {
+ FPRINTF("[%s:%d] wifi_manager_get_value_from_configfile(WIFI_ACCESSPOINTPIN) failed \\n", __FILE__, __LINE__);
+ return -1;
+ }
- if (!g_bFeatureWifi) {
+ if (!g_bFeatureWifi) {
ret = wifi_manager_connect_hidden_ap(g_hWifi, ap_name, 2, ap_passphrase, wifi_manager_connected_callback, NULL);
- CHECK_RETURN("wifi_manager_connect_hidden_ap", ret, WIFI_MANAGER_ERROR_NOT_SUPPORTED);
- return 0;
- }
+ CHECK_RETURN("wifi_manager_connect_hidden_ap", ret, WIFI_MANAGER_ERROR_NOT_SUPPORTED);
+ return 0;
+ }
ret = wifi_manager_scan(g_hWifi, wifi_manager_scanned_callback, NULL);
PRINT_RETURN("wifi_manager_scan", ret);
RUN_GMAIN_LOOP;
CHECK_RETURN(CALLBACK_RETURN, ret, WIFI_MANAGER_ERROR_NONE);
- ret = wifi_manager_connect_hidden_ap(g_hWifi, ap_name, 2, ap_passphrase, wifi_manager_connected_callback, NULL);
- RUN_GMAIN_LOOP;
+ ret = wifi_manager_foreach_found_ap(g_hWifi, wifi_manager_found_ap_callback, ap_name);
+ CHECK_RETURN("wifi_manager_foreach_found_ap", ret, WIFI_MANAGER_ERROR_NONE);
+
+ if (g_nCallbackRet != WIFI_MANAGER_ERROR_NONE) {
+ /* AP is not found due to wrong environment or wrong user input */
+ FPRINTF("[%s:%d] No AP found!\\n", __FILE__, __LINE__);
+ return 0;
+ }
+
+ ret = wifi_manager_ap_get_security_type(g_hWifiAP, &type);
+ CHECK_RETURN("wifi_manager_ap_get_security_type", ret, WIFI_MANAGER_ERROR_NONE);
+
+ ret = wifi_manager_connect_hidden_ap(g_hWifi, ap_name, type, ap_passphrase, wifi_manager_connected_callback, NULL);
+ if (ret != WIFI_MANAGER_ERROR_NONE &&
+ (type == WIFI_MANAGER_SECURITY_TYPE_WPA2_PSK || type == WIFI_MANAGER_SECURITY_TYPE_WPA_FT_PSK)) {
+ PRINT_RETURN("wifi_manager_connect_hidden_ap", ret);
+ /**
+ * wifi_manager_connect_hidden_ap treats WPA2_PSK or FT_WPA as WPA.
+ * This will be improved later.
+ */
+ ret = wifi_manager_connect_hidden_ap(g_hWifi, ap_name,
+ WIFI_MANAGER_SECURITY_TYPE_WPA_PSK, ap_passphrase, wifi_manager_connected_callback, NULL);
+ }
+
+ /* wifi_manager_connect_hidden_ap invokes the callback only if there is no error */
CHECK_RETURN("wifi_manager_connect_hidden_ap", ret, WIFI_MANAGER_ERROR_NONE);
+ RUN_GMAIN_LOOP;
return 0;
}