From 89296a7fc953e68649cdb1366d22376c034ace05 Mon Sep 17 00:00:00 2001 From: Mitchell Wills Date: Thu, 17 Dec 2015 11:25:54 -0800 Subject: [PATCH] Updates for gscan HAL updates in N This will compile, but all new functionality may not work Change-Id: Ica790a74bbf28996b1b5c5c7b959c639fa6f6301 --- bcmdhd/wifi_hal/gscan.cpp | 370 ++----------------------------------------- bcmdhd/wifi_hal/wifi_hal.cpp | 5 +- 2 files changed, 13 insertions(+), 362 deletions(-) diff --git a/bcmdhd/wifi_hal/gscan.cpp b/bcmdhd/wifi_hal/gscan.cpp index 418537b..92743b0 100644 --- a/bcmdhd/wifi_hal/gscan.cpp +++ b/bcmdhd/wifi_hal/gscan.cpp @@ -430,8 +430,9 @@ public: wifi_scan_result *result = (wifi_scan_result *)event.get_vendor_data(); + // TODO: fill in buckets scanned if(*mHandler.on_full_scan_result) - (*mHandler.on_full_scan_result)(id(), result); + (*mHandler.on_full_scan_result)(id(), result, 0); ALOGV("Full scan result: %-32s %02x:%02x:%02x:%02x:%02x:%02x %d %d %lld %lld %lld\n", result->ssid, result->bssid[0], result->bssid[1], result->bssid[2], result->bssid[3], @@ -725,8 +726,8 @@ public: int num = event.get_u32(NL80211_ATTR_VENDOR_DATA); ALOGV("Found %d scan results", num); - if(*mHandler.on_scan_results_available) - (*mHandler.on_scan_results_available)(id(), num); + if(*mHandler.on_scan_event) + (*mHandler.on_scan_event)(id(), WIFI_SCAN_RESULTS_AVAILABLE); } return NL_SKIP; } @@ -1158,14 +1159,14 @@ public: class ePNOCommand : public WifiCommand { private: - wifi_epno_network *ssid_list; + const wifi_epno_network *ssid_list; int num_ssid; wifi_epno_handler mHandler; static const int MAX_RESULTS = 32; wifi_scan_result mResults[MAX_RESULTS]; public: ePNOCommand(wifi_interface_handle handle, int id, - int num_networks, wifi_epno_network *networks, wifi_epno_handler handler) + int num_networks, const wifi_epno_network *networks, wifi_epno_handler handler) : WifiCommand("ePNOCommand", handle, id), mHandler(handler) { ssid_list = networks; @@ -1195,10 +1196,9 @@ public: if (attr2 == NULL) { return WIFI_ERROR_OUT_OF_MEMORY; } - result = request.put(GSCAN_ATTRIBUTE_EPNO_SSID, ssid_list[i].ssid, 32); - ALOGI("PNO network: SSID %s rssi_thresh %d flags %d auth %d", ssid_list[i].ssid, - (signed char)ssid_list[i].rssi_threshold, ssid_list[i].flags, - ssid_list[i].auth_bit_field); + result = request.put(GSCAN_ATTRIBUTE_EPNO_SSID, (void*)ssid_list[i].ssid, 32); + ALOGI("PNO network: SSID %s flags %d auth %d", ssid_list[i].ssid, + ssid_list[i].flags, ssid_list[i].auth_bit_field); if (result < 0) { return result; } @@ -1206,10 +1206,6 @@ public: if (result < 0) { return result; } - result = request.put_u8(GSCAN_ATTRIBUTE_EPNO_RSSI, ssid_list[i].rssi_threshold); - if (result < 0) { - return result; - } result = request.put_u8(GSCAN_ATTRIBUTE_EPNO_FLAGS, ssid_list[i].flags); if (result < 0) { return result; @@ -1561,9 +1557,11 @@ wifi_error wifi_reset_epno_list(wifi_request_id id, wifi_interface_handle iface) } wifi_error wifi_set_epno_list(wifi_request_id id, wifi_interface_handle iface, - int num_networks, wifi_epno_network *networks, wifi_epno_handler handler) + const wifi_epno_params *params, wifi_epno_handler handler) { wifi_handle handle = getWifiHandle(iface); + int num_networks = params->num_networks; + const wifi_epno_network *networks = params->networks; ePNOCommand *cmd = new ePNOCommand(iface, id, num_networks, networks, handler); wifi_register_cmd(handle, id, cmd); @@ -1577,254 +1575,6 @@ wifi_error wifi_set_epno_list(wifi_request_id id, wifi_interface_handle iface, return result; } -class SSIDWhitelistCommand : public WifiCommand -{ -private: - int mNumNetworks; - wifi_ssid *mSSIDs; -public: - SSIDWhitelistCommand(wifi_interface_handle handle, int id, - int num_networks, wifi_ssid *ssids) - : WifiCommand("SSIDWhitelistCommand", handle, id), mNumNetworks(num_networks), mSSIDs(ssids) - { } - - int createRequest(WifiRequest& request) { - int result = request.create(GOOGLE_OUI, WIFI_SUBCMD_SET_SSID_WHITE_LIST); - if (result < 0) { - return result; - } - - nlattr *data = request.attr_start(NL80211_ATTR_VENDOR_DATA); - result = request.put_u32(GSCAN_ATTRIBUTE_NUM_WL_SSID, mNumNetworks); - if (result < 0) { - return result; - } - if (!mNumNetworks) { - result = request.put_u32(GSCAN_ATTRIBUTE_WL_SSID_FLUSH, 1); - if (result < 0) { - return result; - } - } - for (int i = 0; i < mNumNetworks; i++) { - nlattr *attr = request.attr_start(GSCAN_ATTRIBUTE_WHITELIST_SSID_ELEM); - if (attr == NULL) { - return WIFI_ERROR_OUT_OF_MEMORY; - } - result = request.put_u32(GSCAN_ATTRIBUTE_WL_SSID_LEN, strlen(mSSIDs[i].ssid)); - if (result < 0) { - return result; - } - result = request.put(GSCAN_ATTRIBUTE_WHITELIST_SSID, mSSIDs[i].ssid, 32); - if (result < 0) { - return result; - } - request.attr_end(attr); - } - request.attr_end(data); - return result; - } - - int start() { - ALOGI("Executing whitelist ssid request, num = %d", mNumNetworks); - WifiRequest request(familyId(), ifaceId()); - int result = createRequest(request); - if (result < 0) { - return result; - } - - result = requestResponse(request); - if (result < 0) { - ALOGI("Failed to execute whitelist ssid request, result = %d", result); - return result; - } - - ALOGI("Successfully whitlisted %d ssids", mNumNetworks); - if (result < 0) { - return result; - } - return result; - } - - - virtual int handleResponse(WifiEvent& reply) { - /* Nothing to do on response! */ - return NL_SKIP; - } - -}; - -wifi_error wifi_set_ssid_white_list(wifi_request_id id, wifi_interface_handle iface, - int num_networks, wifi_ssid *ssids) -{ - wifi_handle handle = getWifiHandle(iface); - - SSIDWhitelistCommand *cmd = new SSIDWhitelistCommand(iface, id, num_networks, ssids); - wifi_register_cmd(handle, id, cmd); - wifi_error result = (wifi_error)cmd->start(); - if (result != WIFI_SUCCESS) { - wifi_unregister_cmd(handle, id); - } - return result; -} - - -class RoamParamsCommand : public WifiCommand -{ -private: - wifi_roam_params *mParams; -public: - RoamParamsCommand(wifi_interface_handle handle, int id, wifi_roam_params *params) - : WifiCommand("RoamParamsCommand", handle, id), mParams(params) - { } - - int createRequest(WifiRequest& request) { - int result = request.create(GOOGLE_OUI, WIFI_SUBCMD_SET_ROAM_PARAMS); - if (result < 0) { - return result; - } - - nlattr *data = request.attr_start(NL80211_ATTR_VENDOR_DATA); - - result = request.put_u32(GSCAN_ATTRIBUTE_A_BAND_BOOST_THRESHOLD, mParams->A_band_boost_threshold); - if (result < 0) { - return result; - } - result = request.put_u32(GSCAN_ATTRIBUTE_A_BAND_PENALTY_THRESHOLD, mParams->A_band_penalty_threshold); - if (result < 0) { - return result; - } - result = request.put_u32(GSCAN_ATTRIBUTE_A_BAND_BOOST_FACTOR, mParams->A_band_boost_factor); - if (result < 0) { - return result; - } - result = request.put_u32(GSCAN_ATTRIBUTE_A_BAND_PENALTY_FACTOR, mParams->A_band_penalty_factor); - if (result < 0) { - return result; - } - result = request.put_u32(GSCAN_ATTRIBUTE_A_BAND_MAX_BOOST, mParams->A_band_max_boost); - if (result < 0) { - return result; - } - result = request.put_u32(GSCAN_ATTRIBUTE_LAZY_ROAM_HYSTERESIS, mParams->lazy_roam_hysteresis); - if (result < 0) { - return result; - } - result = request.put_u32(GSCAN_ATTRIBUTE_ALERT_ROAM_RSSI_TRIGGER, mParams->alert_roam_rssi_trigger); - if (result < 0) { - return result; - } - request.attr_end(data); - return result; - } - - int start() { - ALOGV("Executing roam params set request"); - WifiRequest request(familyId(), ifaceId()); - int result = createRequest(request); - if (result < 0) { - return result; - } - - result = requestResponse(request); - if (result < 0) { - ALOGE("Failed to execute Roam params set request, result = %d", result); - return result; - } - - ALOGI("Successfully set roam params"); - if (result < 0) { - return result; - } - return result; - } - - - virtual int handleResponse(WifiEvent& reply) { - /* Nothing to do on response! */ - return NL_SKIP; - } - -}; - -wifi_error wifi_set_gscan_roam_params(wifi_request_id id, wifi_interface_handle iface, - wifi_roam_params * params) -{ - wifi_handle handle = getWifiHandle(iface); - - RoamParamsCommand *cmd = new RoamParamsCommand(iface, id, params); - wifi_register_cmd(handle, id, cmd); - wifi_error result = (wifi_error)cmd->start(); - if (result != WIFI_SUCCESS) { - wifi_unregister_cmd(handle, id); - } - return result; -} - -class LazyRoamCommand : public WifiCommand -{ -private: - int mEnable; -public: - LazyRoamCommand(wifi_interface_handle handle, int id, int enable) - : WifiCommand("LazyRoamCommand", handle, id), mEnable(enable) - { } - - int createRequest(WifiRequest& request) { - int result = request.create(GOOGLE_OUI, WIFI_SUBCMD_ENABLE_LAZY_ROAM); - if (result < 0) { - return result; - } - - nlattr *data = request.attr_start(NL80211_ATTR_VENDOR_DATA); - - result = request.put_u32(GSCAN_ATTRIBUTE_LAZY_ROAM_ENABLE, mEnable); - if (result < 0) { - return result; - } - request.attr_end(data); - return result; - } - - int start() { - WifiRequest request(familyId(), ifaceId()); - int result = createRequest(request); - if (result < 0) { - return result; - } - - result = requestResponse(request); - if (result < 0) { - ALOGI("Failed to enable lazy roam, result = %d", result); - return result; - } - - ALOGI("Successfully enabled lazy roam"); - if (result < 0) { - return result; - } - return result; - } - - - virtual int handleResponse(WifiEvent& reply) { - /* Nothing to do on response! */ - return NL_SKIP; - } - -}; -wifi_error wifi_enable_lazy_roam(wifi_request_id id, wifi_interface_handle iface, int enable) -{ - wifi_handle handle = getWifiHandle(iface); - - LazyRoamCommand *cmd = new LazyRoamCommand(iface, id, enable); - wifi_register_cmd(handle, id, cmd); - wifi_error result = (wifi_error)cmd->start(); - if (result != WIFI_SUCCESS) { - wifi_unregister_cmd(handle, id); - } - return result; -} - class BssidBlacklistCommand : public WifiCommand { private: @@ -1901,102 +1651,6 @@ wifi_error wifi_set_bssid_blacklist(wifi_request_id id, wifi_interface_handle if return result; } -class BssidPreferenceCommand : public WifiCommand -{ -private: - int mNumBssid; - wifi_bssid_preference *mPrefs; -public: - BssidPreferenceCommand(wifi_interface_handle handle, int id, - int num_bssid, wifi_bssid_preference *prefs) - : WifiCommand("BssidPreferenceCommand", handle, id), mNumBssid(num_bssid), mPrefs(prefs) - { } - - int createRequest(WifiRequest& request) { - int result = request.create(GOOGLE_OUI, WIFI_SUBCMD_SET_BSSID_PREF); - if (result < 0) { - return result; - } - - nlattr *data = request.attr_start(NL80211_ATTR_VENDOR_DATA); - - result = request.put_u32(GSCAN_ATTRIBUTE_NUM_BSSID, mNumBssid); - if (result < 0) { - return result; - } - if (!mNumBssid) { - result = request.put_u32(GSCAN_ATTRIBUTE_BSSID_PREF_FLUSH, 1); - if (result < 0) { - return result; - } - } - struct nlattr * attr = request.attr_start(GSCAN_ATTRIBUTE_BSSID_PREF_LIST); - if (attr == NULL) { - return WIFI_ERROR_OUT_OF_MEMORY; - } - for (int i = 0; i < mNumBssid; i++) { - - nlattr *attr1 = request.attr_start(i); - if (attr == NULL) { - return WIFI_ERROR_OUT_OF_MEMORY; - } - result = request.put_addr(GSCAN_ATTRIBUTE_BSSID_PREF, mPrefs[i].bssid); - if (result < 0) { - return result; - } - result = request.put_u32(GSCAN_ATTRIBUTE_RSSI_MODIFIER, mPrefs[i].rssi_modifier); - if (result < 0) { - return result; - } - request.attr_end(attr1); - } - request.attr_end(attr); - request.attr_end(data); - - return result; - } - - int start() { - ALOGV("Executing bssid prefernce change request, num = %d", mNumBssid); - WifiRequest request(familyId(), ifaceId()); - int result = createRequest(request); - if (result < 0) { - return result; - } - - result = requestResponse(request); - if (result < 0) { - ALOGE("Failed to execute bssid preference change request, result = %d", result); - return result; - } - - ALOGI("Successfully changed %d bssid preferences", mNumBssid); - if (result < 0) { - return result; - } - return result; - } - - - virtual int handleResponse(WifiEvent& reply) { - /* Nothing to do on response! */ - return NL_SKIP; - } - -}; - -wifi_error wifi_set_bssid_preference(wifi_request_id id, wifi_interface_handle iface, - int num_bssid, wifi_bssid_preference *prefs) -{ - wifi_handle handle = getWifiHandle(iface); - - BssidPreferenceCommand *cmd = new BssidPreferenceCommand(iface, id, num_bssid, prefs); - wifi_error result = (wifi_error)cmd->start(); - //release the reference of command as well - cmd->releaseRef(); - return result; -} - //////////////////////////////////////////////////////////////////////////////// class AnqpoConfigureCommand : public WifiCommand diff --git a/bcmdhd/wifi_hal/wifi_hal.cpp b/bcmdhd/wifi_hal/wifi_hal.cpp index 28f5565..cd42bd0 100644 --- a/bcmdhd/wifi_hal/wifi_hal.cpp +++ b/bcmdhd/wifi_hal/wifi_hal.cpp @@ -140,6 +140,7 @@ wifi_error init_wifi_vendor_hal_func_table(wifi_hal_fn *fn) fn->wifi_set_nodfs_flag = wifi_set_nodfs_flag; fn->wifi_start_logging = wifi_start_logging; fn->wifi_set_epno_list = wifi_set_epno_list; + fn->wifi_reset_epno_list = wifi_reset_epno_list; fn->wifi_set_country_code = wifi_set_country_code; fn->wifi_get_firmware_memory_dump = wifi_get_firmware_memory_dump; fn->wifi_set_log_handler = wifi_set_log_handler; @@ -151,11 +152,7 @@ wifi_error init_wifi_vendor_hal_func_table(wifi_hal_fn *fn) fn->wifi_get_logger_supported_feature_set = wifi_get_logger_supported_feature_set; fn->wifi_get_ring_data = wifi_get_ring_data; fn->wifi_get_driver_version = wifi_get_driver_version; - fn->wifi_set_ssid_white_list = wifi_set_ssid_white_list; - fn->wifi_set_gscan_roam_params = wifi_set_gscan_roam_params; - fn->wifi_set_bssid_preference = wifi_set_bssid_preference; fn->wifi_set_bssid_blacklist = wifi_set_bssid_blacklist; - fn->wifi_enable_lazy_roam = wifi_enable_lazy_roam; fn->wifi_start_rssi_monitoring = wifi_start_rssi_monitoring; fn->wifi_stop_rssi_monitoring = wifi_stop_rssi_monitoring; fn->wifi_start_sending_offloaded_packet = wifi_start_sending_offloaded_packet; -- 2.11.0