wifi_hal: fixed scan

This commit is contained in:
Yuri Konotopov 2017-12-14 20:45:08 +00:00 committed by Moyster
parent 8161216738
commit e0ad22960f
3 changed files with 142 additions and 139 deletions

View File

@ -68,6 +68,144 @@ typedef enum {
} ANDROID_VENDOR_SUB_COMMAND;
typedef enum {
GSCAN_SUBCMD_GET_CAPABILITIES = ANDROID_NL80211_SUBCMD_GSCAN_RANGE_START,
GSCAN_SUBCMD_SET_CONFIG, /* 0x1001 */
GSCAN_SUBCMD_SET_SCAN_CONFIG, /* 0x1002 */
GSCAN_SUBCMD_ENABLE_GSCAN, /* 0x1003 */
GSCAN_SUBCMD_GET_SCAN_RESULTS, /* 0x1004 */
GSCAN_SUBCMD_SCAN_RESULTS, /* 0x1005 */
GSCAN_SUBCMD_SET_HOTLIST, /* 0x1006 */
GSCAN_SUBCMD_SET_SIGNIFICANT_CHANGE_CONFIG, /* 0x1007 */
GSCAN_SUBCMD_ENABLE_FULL_SCAN_RESULTS, /* 0x1008 */
GSCAN_SUBCMD_GET_CHANNEL_LIST, /* 0x1009 */
GSCAN_SUBCMD_SET_EPNO_SSID = 0x100F, /* 0x100F */
GSCAN_SUBCMD_SET_SSID_WHITE_LIST, /* 0x1010 */
GSCAN_SUBCMD_SET_ROAM_PARAMS, /* 0x1011 */
GSCAN_SUBCMD_ENABLE_LAZY_ROAM, /* 0x1012 */
GSCAN_SUBCMD_SET_BSSID_PREF, /* 0x1013 */
GSCAN_SUBCMD_SET_BSSID_BLACKLIST, /* 0x1014 */
GSCAN_SUBCMD_ANQPO_CONFIG, /* 0x1015 */
/* Add more sub commands here */
} GSCAN_SUB_COMMAND;
typedef enum {
GSCAN_ATTRIBUTE_CAPABILITIES = 1,
GSCAN_ATTRIBUTE_NUM_BUCKETS = 10,
GSCAN_ATTRIBUTE_BASE_PERIOD,
GSCAN_ATTRIBUTE_BUCKETS_BAND,
GSCAN_ATTRIBUTE_BUCKET_ID,
GSCAN_ATTRIBUTE_BUCKET_PERIOD,
GSCAN_ATTRIBUTE_BUCKET_NUM_CHANNELS,
GSCAN_ATTRIBUTE_BUCKET_CHANNELS,
GSCAN_ATTRIBUTE_NUM_AP_PER_SCAN,
GSCAN_ATTRIBUTE_REPORT_THRESHOLD,
GSCAN_ATTRIBUTE_NUM_SCANS_TO_CACHE,
GSCAN_ATTRIBUTE_ENABLE_FEATURE = 20,
GSCAN_ATTRIBUTE_SCAN_RESULTS_COMPLETE, /* indicates no more results */
GSCAN_ATTRIBUTE_FLUSH_FEATURE, /* Flush all the configs */
GSCAN_ENABLE_FULL_SCAN_RESULTS,
GSCAN_ATTRIBUTE_REPORT_EVENTS,
/* Adaptive scan attributes */
GSCAN_ATTRIBUTE_BUCKET_STEP_COUNT,
GSCAN_ATTRIBUTE_BUCKET_MAX_PERIOD,
GSCAN_ATTRIBUTE_NUM_OF_RESULTS = 30,
GSCAN_ATTRIBUTE_FLUSH_RESULTS,
GSCAN_ATTRIBUTE_SCAN_RESULTS, /* flat array of wifi_scan_result */
GSCAN_ATTRIBUTE_SCAN_ID, /* indicates scan number */
GSCAN_ATTRIBUTE_SCAN_FLAGS, /* indicates if scan was aborted */
GSCAN_ATTRIBUTE_AP_FLAGS, /* flags on significant change event */
GSCAN_ATTRIBUTE_NUM_CHANNELS,
GSCAN_ATTRIBUTE_CHANNEL_LIST,
GSCAN_ATTRIBUTE_CH_BUCKET_BITMASK,
GSCAN_ATTRIBUTE_SSID = 40,
GSCAN_ATTRIBUTE_BSSID,
GSCAN_ATTRIBUTE_CHANNEL,
GSCAN_ATTRIBUTE_RSSI,
GSCAN_ATTRIBUTE_TIMESTAMP,
GSCAN_ATTRIBUTE_RTT,
GSCAN_ATTRIBUTE_RTTSD,
GSCAN_ATTRIBUTE_HOTLIST_BSSIDS = 50,
GSCAN_ATTRIBUTE_RSSI_LOW,
GSCAN_ATTRIBUTE_RSSI_HIGH,
GSCAN_ATTRIBUTE_HOTLIST_ELEM,
GSCAN_ATTRIBUTE_HOTLIST_FLUSH,
GSCAN_ATTRIBUTE_RSSI_SAMPLE_SIZE = 60,
GSCAN_ATTRIBUTE_LOST_AP_SAMPLE_SIZE,
GSCAN_ATTRIBUTE_MIN_BREACHING,
GSCAN_ATTRIBUTE_NUM_AP, /* TBD */
GSCAN_ATTRIBUTE_SIGNIFICANT_CHANGE_BSSIDS,
GSCAN_ATTRIBUTE_SIGNIFICANT_CHANGE_FLUSH,
/* EPNO */
GSCAN_ATTRIBUTE_EPNO_SSID_LIST = 70,
GSCAN_ATTRIBUTE_EPNO_SSID,
GSCAN_ATTRIBUTE_EPNO_SSID_LEN,
GSCAN_ATTRIBUTE_EPNO_RSSI,
GSCAN_ATTRIBUTE_EPNO_FLAGS,
GSCAN_ATTRIBUTE_EPNO_AUTH,
GSCAN_ATTRIBUTE_EPNO_SSID_NUM,
GSCAN_ATTRIBUTE_EPNO_FLUSH,
GSCAN_ATTRIBUTE_WHITELIST_SSID = 80,
GSCAN_ATTRIBUTE_NUM_WL_SSID,
GSCAN_ATTRIBUTE_WL_SSID_LEN,
GSCAN_ATTRIBUTE_WL_SSID_FLUSH,
GSCAN_ATTRIBUTE_WHITELIST_SSID_ELEM,
GSCAN_ATTRIBUTE_NUM_BSSID,
GSCAN_ATTRIBUTE_BSSID_PREF_LIST,
GSCAN_ATTRIBUTE_BSSID_PREF_FLUSH,
GSCAN_ATTRIBUTE_BSSID_PREF,
GSCAN_ATTRIBUTE_RSSI_MODIFIER,
GSCAN_ATTRIBUTE_A_BAND_BOOST_THRESHOLD = 90,
GSCAN_ATTRIBUTE_A_BAND_PENALTY_THRESHOLD,
GSCAN_ATTRIBUTE_A_BAND_BOOST_FACTOR,
GSCAN_ATTRIBUTE_A_BAND_PENALTY_FACTOR,
GSCAN_ATTRIBUTE_A_BAND_MAX_BOOST,
GSCAN_ATTRIBUTE_LAZY_ROAM_HYSTERESIS,
GSCAN_ATTRIBUTE_ALERT_ROAM_RSSI_TRIGGER,
GSCAN_ATTRIBUTE_LAZY_ROAM_ENABLE,
/* BSSID blacklist */
GSCAN_ATTRIBUTE_BSSID_BLACKLIST_FLUSH = 100,
GSCAN_ATTRIBUTE_BLACKLIST_BSSID,
/* ANQPO */
GSCAN_ATTRIBUTE_ANQPO_HS_LIST = 110,
GSCAN_ATTRIBUTE_ANQPO_HS_LIST_SIZE,
GSCAN_ATTRIBUTE_ANQPO_HS_NETWORK_ID,
GSCAN_ATTRIBUTE_ANQPO_HS_NAI_REALM,
GSCAN_ATTRIBUTE_ANQPO_HS_ROAM_CONSORTIUM_ID,
GSCAN_ATTRIBUTE_ANQPO_HS_PLMN,
/* ePNO cfg */
GSCAN_ATTRIBUTE_EPNO_5G_RSSI_THR = 130,
GSCAN_ATTRIBUTE_EPNO_2G_RSSI_THR,
GSCAN_ATTRIBUTE_EPNO_INIT_SCORE_MAX,
GSCAN_ATTRIBUTE_EPNO_CUR_CONN_BONUS,
GSCAN_ATTRIBUTE_EPNO_SAME_NETWORK_BONUS,
GSCAN_ATTRIBUTE_EPNO_SECURE_BONUS,
GSCAN_ATTRIBUTE_EPNO_5G_BONUS,
GSCAN_ATTRIBUTE_MAX
} GSCAN_ATTRIBUTE;
typedef enum {
GSCAN_EVENT_SIGNIFICANT_CHANGE_RESULTS,
GSCAN_EVENT_HOTLIST_RESULTS_FOUND,

View File

@ -27,141 +27,6 @@
#include "common.h"
#include "cpp_bindings.h"
typedef enum {
GSCAN_SUBCMD_GET_CAPABILITIES = ANDROID_NL80211_SUBCMD_GSCAN_RANGE_START,
GSCAN_SUBCMD_SET_CONFIG, /* 0x1001 */
GSCAN_SUBCMD_SET_SCAN_CONFIG, /* 0x1002 */
GSCAN_SUBCMD_ENABLE_GSCAN, /* 0x1003 */
GSCAN_SUBCMD_GET_SCAN_RESULTS, /* 0x1004 */
GSCAN_SUBCMD_SCAN_RESULTS, /* 0x1005 */
GSCAN_SUBCMD_SET_HOTLIST, /* 0x1006 */
GSCAN_SUBCMD_SET_SIGNIFICANT_CHANGE_CONFIG, /* 0x1007 */
GSCAN_SUBCMD_ENABLE_FULL_SCAN_RESULTS, /* 0x1008 */
GSCAN_SUBCMD_SET_EPNO_SSID = 0x100F, /* 0x100F */
GSCAN_SUBCMD_SET_SSID_WHITE_LIST, /* 0x1010 */
GSCAN_SUBCMD_SET_ROAM_PARAMS, /* 0x1011 */
GSCAN_SUBCMD_ENABLE_LAZY_ROAM, /* 0x1012 */
GSCAN_SUBCMD_SET_BSSID_PREF, /* 0x1013 */
GSCAN_SUBCMD_SET_BSSID_BLACKLIST, /* 0x1014 */
GSCAN_SUBCMD_ANQPO_CONFIG, /* 0x1015 */
/* Add more sub commands here */
} GSCAN_SUB_COMMAND;
typedef enum {
GSCAN_ATTRIBUTE_CAPABILITIES = 1,
GSCAN_ATTRIBUTE_NUM_BUCKETS = 10,
GSCAN_ATTRIBUTE_BASE_PERIOD,
GSCAN_ATTRIBUTE_BUCKETS_BAND,
GSCAN_ATTRIBUTE_BUCKET_ID,
GSCAN_ATTRIBUTE_BUCKET_PERIOD,
GSCAN_ATTRIBUTE_BUCKET_NUM_CHANNELS,
GSCAN_ATTRIBUTE_BUCKET_CHANNELS,
GSCAN_ATTRIBUTE_NUM_AP_PER_SCAN,
GSCAN_ATTRIBUTE_REPORT_THRESHOLD,
GSCAN_ATTRIBUTE_NUM_SCANS_TO_CACHE,
GSCAN_ATTRIBUTE_ENABLE_FEATURE = 20,
GSCAN_ATTRIBUTE_SCAN_RESULTS_COMPLETE, /* indicates no more results */
GSCAN_ATTRIBUTE_FLUSH_FEATURE, /* Flush all the configs */
GSCAN_ENABLE_FULL_SCAN_RESULTS,
GSCAN_ATTRIBUTE_REPORT_EVENTS,
/* Adaptive scan attributes */
GSCAN_ATTRIBUTE_BUCKET_STEP_COUNT,
GSCAN_ATTRIBUTE_BUCKET_MAX_PERIOD,
GSCAN_ATTRIBUTE_NUM_OF_RESULTS = 30,
GSCAN_ATTRIBUTE_FLUSH_RESULTS,
GSCAN_ATTRIBUTE_SCAN_RESULTS, /* flat array of wifi_scan_result */
GSCAN_ATTRIBUTE_SCAN_ID, /* indicates scan number */
GSCAN_ATTRIBUTE_SCAN_FLAGS, /* indicates if scan was aborted */
GSCAN_ATTRIBUTE_AP_FLAGS, /* flags on significant change event */
GSCAN_ATTRIBUTE_CH_BUCKET_BITMASK,
GSCAN_ATTRIBUTE_SSID = 40,
GSCAN_ATTRIBUTE_BSSID,
GSCAN_ATTRIBUTE_CHANNEL,
GSCAN_ATTRIBUTE_RSSI,
GSCAN_ATTRIBUTE_TIMESTAMP,
GSCAN_ATTRIBUTE_RTT,
GSCAN_ATTRIBUTE_RTTSD,
GSCAN_ATTRIBUTE_HOTLIST_BSSIDS = 50,
GSCAN_ATTRIBUTE_RSSI_LOW,
GSCAN_ATTRIBUTE_RSSI_HIGH,
GSCAN_ATTRIBUTE_HOTLIST_ELEM,
GSCAN_ATTRIBUTE_HOTLIST_FLUSH,
GSCAN_ATTRIBUTE_RSSI_SAMPLE_SIZE = 60,
GSCAN_ATTRIBUTE_LOST_AP_SAMPLE_SIZE,
GSCAN_ATTRIBUTE_MIN_BREACHING,
GSCAN_ATTRIBUTE_NUM_AP, /* TBD */
GSCAN_ATTRIBUTE_SIGNIFICANT_CHANGE_BSSIDS,
GSCAN_ATTRIBUTE_SIGNIFICANT_CHANGE_FLUSH,
/* EPNO */
GSCAN_ATTRIBUTE_EPNO_SSID_LIST = 70,
GSCAN_ATTRIBUTE_EPNO_SSID,
GSCAN_ATTRIBUTE_EPNO_SSID_LEN,
GSCAN_ATTRIBUTE_EPNO_RSSI,
GSCAN_ATTRIBUTE_EPNO_FLAGS,
GSCAN_ATTRIBUTE_EPNO_AUTH,
GSCAN_ATTRIBUTE_EPNO_SSID_NUM,
GSCAN_ATTRIBUTE_EPNO_FLUSH,
GSCAN_ATTRIBUTE_WHITELIST_SSID = 80,
GSCAN_ATTRIBUTE_NUM_WL_SSID,
GSCAN_ATTRIBUTE_WL_SSID_LEN,
GSCAN_ATTRIBUTE_WL_SSID_FLUSH,
GSCAN_ATTRIBUTE_WHITELIST_SSID_ELEM,
GSCAN_ATTRIBUTE_NUM_BSSID,
GSCAN_ATTRIBUTE_BSSID_PREF_LIST,
GSCAN_ATTRIBUTE_BSSID_PREF_FLUSH,
GSCAN_ATTRIBUTE_BSSID_PREF,
GSCAN_ATTRIBUTE_RSSI_MODIFIER,
GSCAN_ATTRIBUTE_A_BAND_BOOST_THRESHOLD = 90,
GSCAN_ATTRIBUTE_A_BAND_PENALTY_THRESHOLD,
GSCAN_ATTRIBUTE_A_BAND_BOOST_FACTOR,
GSCAN_ATTRIBUTE_A_BAND_PENALTY_FACTOR,
GSCAN_ATTRIBUTE_A_BAND_MAX_BOOST,
GSCAN_ATTRIBUTE_LAZY_ROAM_HYSTERESIS,
GSCAN_ATTRIBUTE_ALERT_ROAM_RSSI_TRIGGER,
GSCAN_ATTRIBUTE_LAZY_ROAM_ENABLE,
/* BSSID blacklist */
GSCAN_ATTRIBUTE_BSSID_BLACKLIST_FLUSH = 100,
GSCAN_ATTRIBUTE_BLACKLIST_BSSID,
/* ANQPO */
GSCAN_ATTRIBUTE_ANQPO_HS_LIST = 110,
GSCAN_ATTRIBUTE_ANQPO_HS_LIST_SIZE,
GSCAN_ATTRIBUTE_ANQPO_HS_NETWORK_ID,
GSCAN_ATTRIBUTE_ANQPO_HS_NAI_REALM,
GSCAN_ATTRIBUTE_ANQPO_HS_ROAM_CONSORTIUM_ID,
GSCAN_ATTRIBUTE_ANQPO_HS_PLMN,
/* ePNO cfg */
GSCAN_ATTRIBUTE_EPNO_5G_RSSI_THR = 130,
GSCAN_ATTRIBUTE_EPNO_2G_RSSI_THR,
GSCAN_ATTRIBUTE_EPNO_INIT_SCORE_MAX,
GSCAN_ATTRIBUTE_EPNO_CUR_CONN_BONUS,
GSCAN_ATTRIBUTE_EPNO_SAME_NETWORK_BONUS,
GSCAN_ATTRIBUTE_EPNO_SECURE_BONUS,
GSCAN_ATTRIBUTE_EPNO_5G_BONUS,
GSCAN_ATTRIBUTE_MAX
} GSCAN_ATTRIBUTE;
// helper methods
wifi_error wifi_enable_full_scan_results(wifi_request_id id, wifi_interface_handle iface,
wifi_scan_result_handler handler);

View File

@ -224,7 +224,7 @@ wifi_error wifi_initialize(wifi_handle *handle)
}
struct nl_cb *cb = nl_socket_get_cb(info->event_sock);
// ALOGI("cb->refcnt = %d", cb->cb_refcnt);
// ALOGI("cb->refcnt = %d", cb->cb_refcnt);
nl_cb_set(cb, NL_CB_SEQ_CHECK, NL_CB_CUSTOM, internal_no_seq_check, info);
nl_cb_set(cb, NL_CB_VALID, NL_CB_CUSTOM, internal_valid_message_handler, info);
nl_cb_put(cb);
@ -673,7 +673,7 @@ public:
virtual int create() {
int ret;
ret = mMsg.create(GOOGLE_OUI, WIFI_SUBCMD_GET_CHANNEL_LIST);
ret = mMsg.create(GOOGLE_OUI, GSCAN_SUBCMD_GET_CHANNEL_LIST);
if (ret < 0) {
return ret;
}
@ -713,13 +713,13 @@ protected:
int num_channels = 0;
for (nl_iterator it(vendor); it.has_next(); it.next()) {
if (it.get_type() == WIFI_ATTRIBUTE_NUM_CHANNELS) {
if (it.get_type() == GSCAN_ATTRIBUTE_NUM_CHANNELS) {
num_channels = it.get_u32();
ALOGI("Get channel list with %d channels", num_channels);
if (num_channels > mMaxChannels)
num_channels = mMaxChannels;
*mNumOfChannel = num_channels;
} else if (it.get_type() == WIFI_ATTRIBUTE_CHANNEL_LIST && num_channels) {
} else if (it.get_type() == GSCAN_ATTRIBUTE_CHANNEL_LIST && num_channels) {
memcpy(mChannels, it.get_data(), sizeof(wifi_channel) * num_channels);
} else {
ALOGW("Ignore invalid attribute type = %d, size = %d",