int _net_dbus_netlink_scan_request(GSList *nl_scan_list, const char *vsie);
int _net_dbus_get_passpoint(int *enabled);
int _net_dbus_set_passpoint(int enable);
-int _net_dbus_multi_scan_request(GSList *multi_scan_list, int type);
+int _net_dbus_multi_scan_request(GSList *multi_scan_list);
int _net_dbus_cancel_wps(void);
int _net_dbus_open_connection_without_ssid();
int net_wifi_get_passpoint(int *enable);
int net_wifi_set_passpoint(int enable);
int net_wifi_get_scan_state(int *scan_state);
-int net_multi_scan_wifi(GSList *specific_scan_list, int type);
+int net_multi_scan_wifi(GSList *specific_scan_list, gboolean multi_scan_type[]);
int net_wifi_add_vsie(unsigned int frame_id, const char *vsie_str);
int net_wifi_get_vsie(unsigned int frame_id, char **vsie_str);
/** Length of BSSID */
#define NET_WLAN_BSSID_LEN 17
+/** Length of Frequency */
+#define NET_WLAN_FREQ_LEN 5
+
/**
* Length of WPS PIN code
* WPS PIN code should be 4 or 8 digits
typedef enum {
WIFI_MULTI_SCAN_SSID = 0x01,
WIFI_MULTI_SCAN_FREQ,
+ WIFI_MULTI_SCAN_SSID_FREQ,
+ WIFI_MULTI_SCAN_MAX,
} wifi_manager_multi_scan_e;
+typedef struct {
+ /** store both AP name and frequency */
+ char str[NET_WLAN_ESSID_LEN + 1];
+ gboolean flag;
+} wifi_manager_multi_scan_ap_s;
+
typedef struct {
int count;
net_profile_info_s *profiles;
void _wifi_remove_from_multi_scan_list(wifi_manager_specific_scan_h specific_scan);
int _wifi_specific_scan_create(wifi_manager_specific_scan_h *specific_scan);
-void _wifi_specific_scan_set_ssid(wifi_manager_specific_scan_h specific_scan,
+int _wifi_specific_scan_set_ssid(wifi_manager_specific_scan_h specific_scan,
const char *ssid);
-void _wifi_specific_scan_set_freq(wifi_manager_specific_scan_h specific_scan,
+int _wifi_specific_scan_set_freq(wifi_manager_specific_scan_h specific_scan,
int freq);
int _wifi_start_multi_scan(wifi_manager_h wifi,
wifi_manager_specific_scan_h specific_scan,
__NETWORK_FUNC_EXIT__;
}
-int _net_dbus_multi_scan_request(GSList *multi_scan_list, int type)
+int _net_dbus_multi_scan_request(GSList *multi_scan_list)
{
__NETWORK_FUNC_ENTER__;
GVariant *params = NULL;
GVariantBuilder *builder;
char ssid[NET_WLAN_ESSID_LEN] = {0, };
- int freq = 0;
+ char freq[NET_WLAN_FREQ_LEN] = {0, };
- WIFI_LOG(WIFI_INFO, "Number of elements in a list: %d", g_slist_length(multi_scan_list));
+ WIFI_LOG(WIFI_INFO, "multi_scan_type:%d, Number of elements in a list:%d",
+ request_table[NETWORK_REQUEST_TYPE_MULTI_SCAN].multi_scan_type,
+ g_slist_length(multi_scan_list));
builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
- if (type == WIFI_MULTI_SCAN_SSID) {
+ if (request_table[NETWORK_REQUEST_TYPE_MULTI_SCAN].multi_scan_type == WIFI_MULTI_SCAN_SSID) {
for (list = multi_scan_list; list; list = list->next) {
- WIFI_LOG(WIFI_INFO, "AP name: %s", (char *)list->data);
- g_strlcpy(ssid, (char *)list->data, NET_WLAN_ESSID_LEN);
-
+ WIFI_LOG(WIFI_INFO, "AP name: %s", ((wifi_manager_multi_scan_ap_s *)list->data)->str);
+ g_strlcpy(ssid, ((wifi_manager_multi_scan_ap_s *)list->data)->str, NET_WLAN_ESSID_LEN);
g_variant_builder_add(builder, "{sv}", "SSID", g_variant_new_string(ssid));
}
+ } else if (request_table[NETWORK_REQUEST_TYPE_MULTI_SCAN].multi_scan_type == WIFI_MULTI_SCAN_FREQ) {
+ for (list = multi_scan_list; list; list = list->next) {
+ WIFI_LOG(WIFI_INFO, "Freq: %s", ((wifi_manager_multi_scan_ap_s *)list->data)->str);
+ g_strlcpy(freq, ((wifi_manager_multi_scan_ap_s *)list->data)->str, NET_WLAN_FREQ_LEN);
+ g_variant_builder_add(builder, "{sv}", "Frequency", g_variant_new_string(freq));
+ }
} else {
for (list = multi_scan_list; list; list = list->next) {
- WIFI_LOG(WIFI_INFO, "freq: %d", GPOINTER_TO_INT(list->data));
- freq = GPOINTER_TO_INT(list->data);
-
- g_variant_builder_add(builder, "{sv}", "Frequency", g_variant_new_uint16(freq));
+ if (((wifi_manager_multi_scan_ap_s *)list->data)->flag == true) {
+ WIFI_LOG(WIFI_INFO, "[Mixed]AP name: %s", ((wifi_manager_multi_scan_ap_s *)list->data)->str);
+ g_strlcpy(ssid, ((wifi_manager_multi_scan_ap_s *)list->data)->str, NET_WLAN_ESSID_LEN);
+ g_variant_builder_add(builder, "{sv}", "SSID_Mixed", g_variant_new_string(ssid));
+ } else {
+ WIFI_LOG(WIFI_INFO, "[Mixed]Freq: %s", ((wifi_manager_multi_scan_ap_s *)list->data)->str);
+ g_strlcpy(freq, ((wifi_manager_multi_scan_ap_s *)list->data)->str, NET_WLAN_FREQ_LEN);
+ g_variant_builder_add(builder, "{sv}", "Frequency_Mixed", g_variant_new_string(freq));
+ }
}
}
return Error;
}
-int net_multi_scan_wifi(GSList *multi_scan_list, int type)
+int net_multi_scan_wifi(GSList *multi_scan_list, gboolean multi_scan_type[])
{
__NETWORK_FUNC_ENTER__;
}
request_table[NETWORK_REQUEST_TYPE_MULTI_SCAN].flag = TRUE;
- request_table[NETWORK_REQUEST_TYPE_MULTI_SCAN].multi_scan_type = type;
- if (type == WIFI_MULTI_SCAN_SSID)
- request_table[NETWORK_REQUEST_TYPE_MULTI_SCAN].multi_scan_list = g_slist_copy_deep(multi_scan_list, (GCopyFunc)g_strdup, NULL);
- else
- request_table[NETWORK_REQUEST_TYPE_MULTI_SCAN].multi_scan_list = g_slist_copy(multi_scan_list);
+ if (multi_scan_type[WIFI_MULTI_SCAN_SSID] == true &&
+ multi_scan_type[WIFI_MULTI_SCAN_FREQ] == true)
+ request_table[NETWORK_REQUEST_TYPE_MULTI_SCAN].multi_scan_type = WIFI_MULTI_SCAN_SSID_FREQ;
+ else if (multi_scan_type[WIFI_MULTI_SCAN_SSID] == true)
+ request_table[NETWORK_REQUEST_TYPE_MULTI_SCAN].multi_scan_type = WIFI_MULTI_SCAN_SSID;
+ else if (multi_scan_type[WIFI_MULTI_SCAN_FREQ] == true)
+ request_table[NETWORK_REQUEST_TYPE_MULTI_SCAN].multi_scan_type = WIFI_MULTI_SCAN_FREQ;
+
+ request_table[NETWORK_REQUEST_TYPE_MULTI_SCAN].multi_scan_list = g_slist_copy_deep(multi_scan_list, (GCopyFunc)g_try_malloc0, NULL);
- Error = _net_dbus_multi_scan_request(multi_scan_list, type);
+ Error = _net_dbus_multi_scan_request(multi_scan_list);
if (Error != NET_ERR_NONE) {
WIFI_LOG(WIFI_ERROR, //LCOV_EXCL_LINE
"_net_dbus_multi_scan_request() failed. Error [%s]",
Error = _net_dbus_specific_scan_request(request_table[NETWORK_REQUEST_TYPE_SPECIFIC_SCAN].ssid);
return Error;
} else if (current_scan_type == NETWORK_SCAN_TYPE_MULTI_SCAN) {
- int type = request_table[NETWORK_REQUEST_TYPE_MULTI_SCAN].multi_scan_type;
GSList *list = request_table[NETWORK_REQUEST_TYPE_MULTI_SCAN].multi_scan_list;
- Error = _net_dbus_multi_scan_request(list, type);
+ Error = _net_dbus_multi_scan_request(list);
return Error;
}
}
bool is_disconnect_wps_pbc = false;
bool is_disconnect_wps_pin = false;
-static int multi_scan_type = -1;
+static gboolean multi_scan_type[WIFI_MULTI_SCAN_MAX] = {0, };
#define WIFI_SECURITY_NONE "none"
#define WIFI_SECURITY_WEP "wep"
GSList *list = (GSList *)specific_scan;
GSList *multi_scan_list = list->next;
- if (multi_scan_type == WIFI_MULTI_SCAN_SSID)
- g_slist_free_full(multi_scan_list, g_free);
+ g_slist_free_full(multi_scan_list, g_free);
multi_scan_handle_list = g_slist_remove(multi_scan_handle_list, specific_scan);
g_free(specific_scan);
specific_scan = NULL;
- multi_scan_type = -1;
+ multi_scan_type[WIFI_MULTI_SCAN_SSID] = false;
+ multi_scan_type[WIFI_MULTI_SCAN_FREQ] = false;
}
int _wifi_specific_scan_create(wifi_manager_specific_scan_h *specific_scan)
return WIFI_MANAGER_ERROR_NONE;
}
-void _wifi_specific_scan_set_ssid(wifi_manager_specific_scan_h specific_scan,
+int _wifi_specific_scan_set_ssid(wifi_manager_specific_scan_h specific_scan,
const char *essid)
{
GSList *list = (GSList *)specific_scan;
+ wifi_manager_multi_scan_ap_s *ap = (wifi_manager_multi_scan_ap_s*)g_try_malloc0(sizeof(wifi_manager_multi_scan_ap_s));
- list = g_slist_append(list, g_strdup(essid));
- multi_scan_type = WIFI_MULTI_SCAN_SSID;
+ if (!ap) {
+ WIFI_LOG(WIFI_ERROR, "Failed to allocate memory");
+ return WIFI_MANAGER_ERROR_OUT_OF_MEMORY;
+ }
+ g_strlcpy(ap->str, essid, NET_WLAN_ESSID_LEN);
+ ap->flag = true;
+
+ list = g_slist_append(list, ap);
+ multi_scan_type[WIFI_MULTI_SCAN_SSID] = true;
specific_scan = (wifi_manager_specific_scan_h)list;
+ return WIFI_MANAGER_ERROR_NONE;
}
-void _wifi_specific_scan_set_freq(wifi_manager_specific_scan_h specific_scan,
+int _wifi_specific_scan_set_freq(wifi_manager_specific_scan_h specific_scan,
int freq)
{
GSList *list = (GSList *)specific_scan;
+ char str[5];
+ snprintf(str, 5, "%d", freq);
+
+ wifi_manager_multi_scan_ap_s *ap = (wifi_manager_multi_scan_ap_s*)g_try_malloc0(sizeof(wifi_manager_multi_scan_ap_s));
+
+ if (!ap) {
+ WIFI_LOG(WIFI_ERROR, "Failed to allocate memory");
+ return WIFI_MANAGER_ERROR_OUT_OF_MEMORY;
+ }
+ g_strlcpy(ap->str, str, NET_WLAN_FREQ_LEN);
+ ap->flag = false;
- list = g_slist_append(list, GINT_TO_POINTER(freq));
- multi_scan_type = WIFI_MULTI_SCAN_FREQ;
+ list = g_slist_append(list, ap);
+ multi_scan_type[WIFI_MULTI_SCAN_FREQ] = true;
specific_scan = (wifi_manager_specific_scan_h)list;
+ return WIFI_MANAGER_ERROR_NONE;
}
int _wifi_start_multi_scan(wifi_manager_h wifi,
GSList *multi_scan_list = (GSList *)specific_scan;
- if (multi_scan_type == -1) {
- WIFI_LOG(WIFI_ERROR, "SSID/Freq not set for multi scan");
- return WIFI_MANAGER_ERROR_INVALID_OPERATION;
- }
-
rv = net_multi_scan_wifi(multi_scan_list->next, multi_scan_type);
if (rv == NET_ERR_ACCESS_DENIED) {
WIFI_LOG(WIFI_ERROR, "Access denied"); //LCOV_EXCL_LINE
return WIFI_MANAGER_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
}
- _wifi_specific_scan_set_ssid(specific_scan, essid);
-
__NETWORK_CAPI_FUNC_EXIT__;
- return WIFI_MANAGER_ERROR_NONE;
+ return _wifi_specific_scan_set_ssid(specific_scan, essid);
}
EXPORT_API int wifi_manager_specific_scan_set_freq(wifi_manager_specific_scan_h specific_scan,
return WIFI_MANAGER_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
}
- _wifi_specific_scan_set_freq(specific_scan, freq);
-
__NETWORK_CAPI_FUNC_EXIT__;
- return WIFI_MANAGER_ERROR_NONE;
+ return _wifi_specific_scan_set_freq(specific_scan, freq);
}
EXPORT_API int wifi_manager_specific_ap_start_multi_scan(wifi_manager_h wifi,
printf("Specific Scan handle created [%p]\n", specific_scan);
rv = test_get_user_int("Input multi scan type"
- "(0:SSID, 1:Freq):", &scan_type);
+ "(0:SSID, 1:Freq, 2: SSID & Freq):", &scan_type);
- if (rv == false || (scan_type != 0 && scan_type != 1)) {
+ if (rv == false || (scan_type != 0 && scan_type != 1 && scan_type != 2)) {
printf("Invalid input!!\n");
return false;
}
- rv = test_get_user_int("No. of specific ssid/freq for multi scan",
- &num);
- if (rv == false || (num <= 0) || (num > 10)) {
- printf("Invalid input!!\n");
- return false;
- }
+ if (scan_type == 0 || scan_type == 1) {
+ rv = test_get_user_int("No. of specific ssid/freq for multi scan",
+ &num);
+ if (rv == false || (num <= 0) || (num > 4)) {
+ printf("Invalid input!!\n");
+ return false;
+ }
+
+ if (scan_type == 0) { /** multi ssid scan */
+ for (i = 0; i < num; i++) {
+ printf("Input ssid[%d]:\n", i);
+ rv = scanf("%32s", ssid);
+
+ rv = wifi_manager_specific_scan_set_ssid(specific_scan, ssid);
+ if (rv != WIFI_MANAGER_ERROR_NONE) {
+ printf("Failed to set ssid [%s]", __test_convert_error_to_string(rv));
+ return -1;
+ }
+ }
+ } else { /** multi frequency scan */
+ for (i = 0; i < num; i++) {
+ printf("Input freq[%d]:\n", i);
+ rv = scanf("%d", &freq);
+ rv = wifi_manager_specific_scan_set_freq(specific_scan, freq);
+ if (rv != WIFI_MANAGER_ERROR_NONE) {
+ printf("Failed to set freq [%s]", __test_convert_error_to_string(rv));
+ return -1;
+ }
+ }
+ }
+ } else { /** SSID & frequency mixed scan */
+ rv = test_get_user_int("No. of ssid&freq for dual parameter multi scan",
+ &num);
+ if (rv == false || (num <= 0) || (num > 4)) {
+ printf("Invalid input!!\n");
+ return false;
+ }
- if (scan_type == 0) {
for (i = 0; i < num; i++) {
- printf("Input ssid[%d]:\n", i);
+ printf("Input ssid:\n");
rv = scanf("%32s", ssid);
rv = wifi_manager_specific_scan_set_ssid(specific_scan, ssid);
printf("Failed to set ssid [%s]", __test_convert_error_to_string(rv));
return -1;
}
- }
- } else {
- for (i = 0; i < num; i++) {
- printf("Input freq[%d]:\n", i);
+ printf("Input freq:\n");
rv = scanf("%d", &freq);
+
rv = wifi_manager_specific_scan_set_freq(specific_scan, freq);
if (rv != WIFI_MANAGER_ERROR_NONE) {
printf("Failed to set freq [%s]", __test_convert_error_to_string(rv));