NET_ERR_FAIL_TDLS_DISCOVER = -697,
NET_ERR_FAIL_TDLS_DISCONNECT = -696,
NET_ERR_FAIL_TDLS_CONNECT = -695,
+ NET_ERR_FAIL_DEVICE_BUSY = -694,
} net_err_e;
#ifdef __cplusplus
int net_init_profile_info(net_profile_info_s *ProfInfo);
int net_specific_scan_wifi(const char *ssid);
int net_get_wps_pin(char **wps_pin);
-int net_bssid_scan_wifi(void);
+int net_bssid_scan_wifi(int activated);
int net_wifi_get_passpoint(int *enable);
int net_wifi_set_passpoint(int enable);
int net_wifi_get_scan_state(int *scan_state);
if (NULL != strstr(error, "NoReply"))
return NET_ERR_TIME_OUT;
+ else if (NULL != strstr(error, "Device or resource busy"))
+ return NET_ERR_FAIL_DEVICE_BUSY;
else if (NULL != strstr(error, "Failed"))
return NET_ERR_UNKNOWN;
else if (NULL != strstr(error, "UnknownMethod"))
__NETWORK_FUNC_EXIT__;
}
+static void __net_bssid_scan_reply(GObject *source_object, GAsyncResult *res, gpointer user_data)
+{
+ __NETWORK_FUNC_ENTER__;
+
+ WIFI_LOG(WIFI_INFO, "__net_bssid_scan_reply() called");
+
+ net_event_info_s event_data = { 0, };
+ network_request_table_s *bssid_scan_info =
+ &request_table[NETWORK_REQUEST_TYPE_BSSID_SCAN];
+
+ GDBusConnection *conn = NULL;
+ GError *error = NULL;
+ net_err_e Error = NET_ERR_NONE;
+
+ conn = G_DBUS_CONNECTION(source_object);
+ g_dbus_connection_call_finish(conn, res, &error);
+ if (error != NULL) {
+ Error = __net_error_string_to_enum(error->message);
+ g_error_free(error);
+ }
+
+ if (Error == NET_ERR_NONE)
+ goto done;
+
+ WIFI_LOG(WIFI_ERROR, "Bssid scan failed[%d]", Error);
+
+ /* Show scan list even if device is in association state */
+ if (bssid_scan_info->flag == TRUE && Error == NET_ERR_FAIL_DEVICE_BUSY) {
+ memset(&request_table[NETWORK_REQUEST_TYPE_BSSID_SCAN],
+ 0, sizeof(network_request_table_s));
+
+
+ event_data.Event = NET_EVENT_WIFI_BSSID_SCAN_IND;
+ WIFI_LOG(WIFI_INFO, "Sending NET_EVENT_WIFI_BSSID_SCAN_IND[%s]",
+ _net_print_error(event_data.Error));
+ event_data.Error = NET_ERR_NONE;
+ event_data.Datalength = 0;
+ event_data.Data = NULL;
+
+ _net_client_callback(&event_data);
+ } else {
+ _net_dbus_pending_call_unref();
+
+ __NETWORK_FUNC_EXIT__;
+ return;
+ }
+
+done:
+ _net_dbus_pending_call_unref();
+
+
+ __NETWORK_FUNC_EXIT__;
+}
+
static void __net_close_connection_reply(GObject *source_object, GAsyncResult *res, gpointer user_data)
{
__NETWORK_FUNC_ENTER__;
Error = _net_invoke_dbus_method_nonblock(CONNMAN_SERVICE,
CONNMAN_WIFI_TECHNOLOGY_PREFIX,
CONNMAN_TECHNOLOGY_INTERFACE, "Scan", NULL,
- DBUS_REPLY_TIMEOUT, NULL);
+ DBUS_REPLY_TIMEOUT, __net_bssid_scan_reply);
if (Error == NET_ERR_IN_PROGRESS)
Error = NET_ERR_NONE; //LCOV_EXCL_LINE
}
//LCOV_EXCL_START
-int net_bssid_scan_wifi(void)
+int net_bssid_scan_wifi(int activated)
{
__NETWORK_FUNC_ENTER__;
}
if (_net_dbus_is_pending_call_used() == TRUE) {
+ if (request_table[NETWORK_REQUEST_TYPE_BSSID_SCAN].flag == TRUE)
+ return NET_ERR_IN_PROGRESS;
+
WIFI_LOG(WIFI_ERROR, "pending call in progress");
__NETWORK_FUNC_EXIT__;
return NET_ERR_INVALID_OPERATION;
request_table[NETWORK_REQUEST_TYPE_BSSID_SCAN].flag = TRUE;
- Error = _net_dbus_bssid_scan_request();
+ if (activated == 0)
+ Error = _net_dbus_bssid_scan_request();
+ else
+ Error = _net_dbus_scan_request();
+
if (Error != NET_ERR_NONE) {
WIFI_LOG(WIFI_ERROR,
"_net_dbus_bssid_scan_request() failed. Error [%s]",
static __thread int net_dpm_wifi_state = -1;
static __thread int net_dpm_wifi_profile_state = -1;
+static int __net_dbus_get_bssid_list();
+
//LCOV_EXCL_START
static int string2state(const char *state)
{
_net_dbus_pending_call_unref();
event_data.Event = NET_EVENT_WIFI_MULTI_SCAN_IND;
+ } else if (request_table[NETWORK_REQUEST_TYPE_BSSID_SCAN].flag == TRUE) {
+
+ _net_dbus_pending_call_unref();
+ WIFI_LOG(WIFI_INFO, "BSSID Scan Completed");
+ __net_dbus_get_bssid_list();
+ return NET_ERR_NONE;
+
} else if (request_table[NETWORK_REQUEST_TYPE_SCAN].flag == TRUE) {
memset(&request_table[NETWORK_REQUEST_TYPE_SCAN], 0,
sizeof(network_request_table_s));
return Error;
}
+static int __net_dbus_get_bssid_list()
+{
+ __NETWORK_FUNC_ENTER__;
+
+ net_err_e Error = NET_ERR_NONE;
+ GVariant *message = NULL;
+
+ message = _net_invoke_dbus_method(NETCONFIG_SERVICE,
+ NETCONFIG_WIFI_PATH, NETCONFIG_WIFI_INTERFACE,
+ "GetBssidList", NULL, &Error);
+ if (message == NULL) {
+ WIFI_LOG(WIFI_ERROR, "Failed to get bssid list");
+ goto done;
+ }
+
+ g_variant_unref(message);
+
+done:
+ __NETWORK_FUNC_EXIT__;
+ return Error;
+}
+
static int __net_dbus_get_technology_states(net_state_type_e *state_table)
{
__NETWORK_FUNC_ENTER__;
wifi_manager_bssid_scan_finished_cb callback, void *user_data)
{
int rv;
- rv = net_bssid_scan_wifi();
+ wifi_manager_device_state_e device_state;
+ int activated = -1;
+
+ rv = _wifi_get_wifi_device_state(&device_state);
+ if (rv == WIFI_MANAGER_ERROR_NONE) {
+ if (WIFI_MANAGER_DEVICE_STATE_DEACTIVATED == device_state)
+ activated = 0;
+ else
+ activated = 1;
+ }
+
+ WIFI_LOG(WIFI_INFO, "Activated: %d", activated);
+ rv = net_bssid_scan_wifi(activated);
if (rv == NET_ERR_ACCESS_DENIED) {
WIFI_LOG(WIFI_ERROR, "Access denied");
int rv;
GSList *list;
- if ((int)g_slist_length(bss_profile_iterator) == 0) {
- WIFI_LOG(WIFI_WARN, "No AP found with bss info !");
- return WIFI_MANAGER_ERROR_OPERATION_FAILED;
- }
-
for (list = bss_profile_iterator; list; list = list->next) {
net_profile_info_s *prof_info = (net_profile_info_s *)list->data;
rv = callback((wifi_manager_ap_h)prof_info, user_data);