diff options
Diffstat (limited to 'wifi/1.5/default')
60 files changed, 0 insertions, 16135 deletions
diff --git a/wifi/1.5/default/Android.mk b/wifi/1.5/default/Android.mk deleted file mode 100644 index edb59bb085..0000000000 --- a/wifi/1.5/default/Android.mk +++ /dev/null @@ -1,209 +0,0 @@ -# Copyright (C) 2016 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -LOCAL_PATH := $(call my-dir) - -### -### android.hardware.wifi static library -### -include $(CLEAR_VARS) -LOCAL_MODULE := android.hardware.wifi@1.0-service-lib -LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0 -LOCAL_LICENSE_CONDITIONS := notice -LOCAL_NOTICE_FILE := $(LOCAL_PATH)/../../../NOTICE -LOCAL_MODULE_RELATIVE_PATH := hw -LOCAL_PROPRIETARY_MODULE := true -LOCAL_CPPFLAGS := -Wall -Werror -Wextra -ifdef WIFI_HAL_INTERFACE_COMBINATIONS -LOCAL_CPPFLAGS += -DWIFI_HAL_INTERFACE_COMBINATIONS="$(WIFI_HAL_INTERFACE_COMBINATIONS)" -endif -ifdef WIFI_HIDL_FEATURE_AWARE -LOCAL_CPPFLAGS += -DWIFI_HIDL_FEATURE_AWARE -endif -ifdef WIFI_HIDL_FEATURE_DUAL_INTERFACE -LOCAL_CPPFLAGS += -DWIFI_HIDL_FEATURE_DUAL_INTERFACE -endif -ifdef WIFI_HIDL_FEATURE_DISABLE_AP -LOCAL_CPPFLAGS += -DWIFI_HIDL_FEATURE_DISABLE_AP -endif -ifdef WIFI_HIDL_FEATURE_DISABLE_AP_MAC_RANDOMIZATION -LOCAL_CPPFLAGS += -DWIFI_HIDL_FEATURE_DISABLE_AP_MAC_RANDOMIZATION -endif -ifdef WIFI_AVOID_IFACE_RESET_MAC_CHANGE -LOCAL_CPPFLAGS += -DWIFI_AVOID_IFACE_RESET_MAC_CHANGE -endif -ifdef QC_WIFI_HIDL_FEATURE_DUAL_AP -LOCAL_CPPFLAGS += -DQC_WIFI_HIDL_FEATURE_DUAL_AP -endif -ifdef QC_WIFI_HIDL_FEATURE_DUAL_STA -LOCAL_CPPFLAGS += -DQC_WIFI_HIDL_FEATURE_DUAL_STA -endif -# Allow implicit fallthroughs in wifi_legacy_hal.cpp until they are fixed. -LOCAL_CFLAGS += -Wno-error=implicit-fallthrough -LOCAL_SRC_FILES := \ - hidl_struct_util.cpp \ - hidl_sync_util.cpp \ - ringbuffer.cpp \ - wifi.cpp \ - wifi_ap_iface.cpp \ - wifi_chip.cpp \ - wifi_feature_flags.cpp \ - wifi_iface_util.cpp \ - wifi_legacy_hal.cpp \ - wifi_legacy_hal_factory.cpp \ - wifi_legacy_hal_stubs.cpp \ - wifi_mode_controller.cpp \ - wifi_nan_iface.cpp \ - wifi_p2p_iface.cpp \ - wifi_rtt_controller.cpp \ - wifi_sta_iface.cpp \ - wifi_status_util.cpp -LOCAL_SHARED_LIBRARIES := \ - libbase \ - libcutils \ - libhidlbase \ - liblog \ - libnl \ - libutils \ - libwifi-hal \ - libwifi-system-iface \ - libxml2 \ - android.hardware.wifi@1.0 \ - android.hardware.wifi@1.1 \ - android.hardware.wifi@1.2 \ - android.hardware.wifi@1.3 \ - android.hardware.wifi@1.4 \ - android.hardware.wifi@1.5 -LOCAL_C_INCLUDES += $(TOP)/external/libxml2/include -LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH) -include $(BUILD_STATIC_LIBRARY) - -### -### android.hardware.wifi daemon -### -include $(CLEAR_VARS) -LOCAL_MODULE := android.hardware.wifi@1.0-service -LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0 -LOCAL_LICENSE_CONDITIONS := notice -LOCAL_NOTICE_FILE := $(LOCAL_PATH)/../../../NOTICE -LOCAL_VINTF_FRAGMENTS := android.hardware.wifi@1.0-service.xml -LOCAL_MODULE_RELATIVE_PATH := hw -LOCAL_PROPRIETARY_MODULE := true -LOCAL_CPPFLAGS := -Wall -Werror -Wextra -ifeq ($(TARGET_ARCH),arm) - LOCAL_CPPFLAGS += -DARCH_ARM_32 -endif - -LOCAL_SRC_FILES := \ - service.cpp -LOCAL_SHARED_LIBRARIES := \ - libbase \ - libcutils \ - libhidlbase \ - liblog \ - libnl \ - libutils \ - libhwbinder \ - libwifi-hal \ - libwifi-system-iface \ - libxml2 \ - android.hardware.wifi@1.0 \ - android.hardware.wifi@1.1 \ - android.hardware.wifi@1.2 \ - android.hardware.wifi@1.3 \ - android.hardware.wifi@1.4 \ - android.hardware.wifi@1.5 -LOCAL_STATIC_LIBRARIES := \ - android.hardware.wifi@1.0-service-lib -LOCAL_INIT_RC := android.hardware.wifi@1.0-service.rc -include $(BUILD_EXECUTABLE) - -### -### android.hardware.wifi daemon -### -include $(CLEAR_VARS) -LOCAL_MODULE := android.hardware.wifi@1.0-service-lazy -LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0 -LOCAL_LICENSE_CONDITIONS := notice -LOCAL_NOTICE_FILE := $(LOCAL_PATH)/../../../NOTICE -LOCAL_VINTF_FRAGMENTS := android.hardware.wifi@1.0-service.xml -LOCAL_OVERRIDES_MODULES := android.hardware.wifi@1.0-service -LOCAL_CFLAGS := -DLAZY_SERVICE -LOCAL_MODULE_RELATIVE_PATH := hw -LOCAL_PROPRIETARY_MODULE := true -LOCAL_CPPFLAGS := -Wall -Werror -Wextra -LOCAL_SRC_FILES := \ - service.cpp -LOCAL_SHARED_LIBRARIES := \ - libbase \ - libcutils \ - libhidlbase \ - liblog \ - libnl \ - libutils \ - libwifi-hal \ - libwifi-system-iface \ - libxml2 \ - android.hardware.wifi@1.0 \ - android.hardware.wifi@1.1 \ - android.hardware.wifi@1.2 \ - android.hardware.wifi@1.3 \ - android.hardware.wifi@1.4 \ - android.hardware.wifi@1.5 -LOCAL_STATIC_LIBRARIES := \ - android.hardware.wifi@1.0-service-lib -LOCAL_INIT_RC := android.hardware.wifi@1.0-service-lazy.rc -include $(BUILD_EXECUTABLE) - -### -### android.hardware.wifi unit tests. -### -include $(CLEAR_VARS) -LOCAL_MODULE := android.hardware.wifi@1.0-service-tests -LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0 -LOCAL_LICENSE_CONDITIONS := notice -LOCAL_NOTICE_FILE := $(LOCAL_PATH)/../../../NOTICE -LOCAL_PROPRIETARY_MODULE := true -LOCAL_CPPFLAGS := -Wall -Werror -Wextra -LOCAL_SRC_FILES := \ - tests/hidl_struct_util_unit_tests.cpp \ - tests/main.cpp \ - tests/mock_interface_tool.cpp \ - tests/mock_wifi_feature_flags.cpp \ - tests/mock_wifi_iface_util.cpp \ - tests/mock_wifi_legacy_hal.cpp \ - tests/mock_wifi_mode_controller.cpp \ - tests/ringbuffer_unit_tests.cpp \ - tests/wifi_nan_iface_unit_tests.cpp \ - tests/wifi_chip_unit_tests.cpp \ - tests/wifi_iface_util_unit_tests.cpp -LOCAL_STATIC_LIBRARIES := \ - libgmock \ - libgtest \ - android.hardware.wifi@1.0 \ - android.hardware.wifi@1.1 \ - android.hardware.wifi@1.2 \ - android.hardware.wifi@1.3 \ - android.hardware.wifi@1.4 \ - android.hardware.wifi@1.5 \ - android.hardware.wifi@1.0-service-lib -LOCAL_SHARED_LIBRARIES := \ - libbase \ - libcutils \ - libhidlbase \ - liblog \ - libnl \ - libutils \ - libwifi-hal \ - libwifi-system-iface -include $(BUILD_NATIVE_TEST) diff --git a/wifi/1.5/default/OWNERS b/wifi/1.5/default/OWNERS deleted file mode 100644 index cf81c79892..0000000000 --- a/wifi/1.5/default/OWNERS +++ /dev/null @@ -1,2 +0,0 @@ -arabawy@google.com -etancohen@google.com diff --git a/wifi/1.5/default/THREADING.README b/wifi/1.5/default/THREADING.README deleted file mode 100644 index 8366ca0201..0000000000 --- a/wifi/1.5/default/THREADING.README +++ /dev/null @@ -1,35 +0,0 @@ -Vendor HAL Threading Model -========================== -The vendor HAL service has two threads: -1. HIDL thread: This is the main thread which processes all the incoming HIDL -RPC's. -2. Legacy HAL event loop thread: This is the thread forked off for processing -the legacy HAL event loop (wifi_event_loop()). This thread is used to process -any asynchronous netlink events posted by the driver. Any asynchronous -callbacks passed to the legacy HAL API's are invoked on this thread. - -Synchronization Concerns -======================== -wifi_legacy_hal.cpp has a bunch of global "C" style functions to handle the -legacy callbacks. Each of these "C" style function invokes a corresponding -"std::function" version of the callback which does the actual processing. -The variables holding these "std::function" callbacks are reset from the HIDL -thread when they are no longer used. For example: stopGscan() will reset the -corresponding "on_gscan_*" callback variables which were set when startGscan() -was invoked. This is not thread safe since these callback variables are -accesed from the legacy hal event loop thread as well. - -Synchronization Solution -======================== -Adding a global lock seems to be the most trivial solution to the problem. -a) All of the asynchronous "C" style callbacks will acquire the global lock -before invoking the corresponding "std::function" callback variables. -b) All of the HIDL methods will also acquire the global lock before processing -(in hidl_return_util::validateAndCall()). - -Note: It's important that we only acquire the global lock for asynchronous -callbacks, because there is no guarantee (or documentation to clarify) that the -synchronous callbacks are invoked on the same invocation thread. If that is not -the case in some implementation, we will end up deadlocking the system since the -HIDL thread would have acquired the global lock which is needed by the -synchronous callback executed on the legacy hal event loop thread. diff --git a/wifi/1.5/default/android.hardware.wifi@1.0-service-lazy.rc b/wifi/1.5/default/android.hardware.wifi@1.0-service-lazy.rc deleted file mode 100644 index bc6bb6a7e6..0000000000 --- a/wifi/1.5/default/android.hardware.wifi@1.0-service-lazy.rc +++ /dev/null @@ -1,13 +0,0 @@ -service vendor.wifi_hal_legacy /vendor/bin/hw/android.hardware.wifi@1.0-service-lazy - interface android.hardware.wifi@1.0::IWifi default - interface android.hardware.wifi@1.1::IWifi default - interface android.hardware.wifi@1.2::IWifi default - interface android.hardware.wifi@1.3::IWifi default - interface android.hardware.wifi@1.4::IWifi default - interface android.hardware.wifi@1.5::IWifi default - oneshot - disabled - class hal - capabilities NET_ADMIN NET_RAW SYS_MODULE - user wifi - group wifi gps diff --git a/wifi/1.5/default/android.hardware.wifi@1.0-service.rc b/wifi/1.5/default/android.hardware.wifi@1.0-service.rc deleted file mode 100644 index 05706ef4f4..0000000000 --- a/wifi/1.5/default/android.hardware.wifi@1.0-service.rc +++ /dev/null @@ -1,11 +0,0 @@ -service vendor.wifi_hal_legacy /vendor/bin/hw/android.hardware.wifi@1.0-service - interface android.hardware.wifi@1.0::IWifi default - interface android.hardware.wifi@1.1::IWifi default - interface android.hardware.wifi@1.2::IWifi default - interface android.hardware.wifi@1.3::IWifi default - interface android.hardware.wifi@1.4::IWifi default - interface android.hardware.wifi@1.5::IWifi default - class hal - capabilities NET_ADMIN NET_RAW SYS_MODULE - user wifi - group wifi gps diff --git a/wifi/1.5/default/android.hardware.wifi@1.0-service.xml b/wifi/1.5/default/android.hardware.wifi@1.0-service.xml deleted file mode 100644 index 88dd1e3285..0000000000 --- a/wifi/1.5/default/android.hardware.wifi@1.0-service.xml +++ /dev/null @@ -1,11 +0,0 @@ -<manifest version="1.0" type="device"> - <hal format="hidl"> - <name>android.hardware.wifi</name> - <transport>hwbinder</transport> - <version>1.5</version> - <interface> - <name>IWifi</name> - <instance>default</instance> - </interface> - </hal> -</manifest> diff --git a/wifi/1.5/default/hidl_callback_util.h b/wifi/1.5/default/hidl_callback_util.h deleted file mode 100644 index d144658750..0000000000 --- a/wifi/1.5/default/hidl_callback_util.h +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Copyright (C) 2017 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef HIDL_CALLBACK_UTIL_H_ -#define HIDL_CALLBACK_UTIL_H_ - -#include <set> - -#include <hidl/HidlSupport.h> - -namespace { -// Type of callback invoked by the death handler. -using on_death_cb_function = std::function<void(uint64_t)>; - -// Private class used to keep track of death of individual -// callbacks stored in HidlCallbackHandler. -template <typename CallbackType> -class HidlDeathHandler : public android::hardware::hidl_death_recipient { - public: - HidlDeathHandler(const on_death_cb_function& user_cb_function) - : cb_function_(user_cb_function) {} - ~HidlDeathHandler() = default; - - // Death notification for callbacks. - void serviceDied( - uint64_t cookie, - const android::wp<android::hidl::base::V1_0::IBase>& /* who */) - override { - cb_function_(cookie); - } - - private: - on_death_cb_function cb_function_; - - DISALLOW_COPY_AND_ASSIGN(HidlDeathHandler); -}; -} // namespace - -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { -namespace hidl_callback_util { -template <typename CallbackType> -// Provides a class to manage callbacks for the various HIDL interfaces and -// handle the death of the process hosting each callback. -class HidlCallbackHandler { - public: - HidlCallbackHandler() - : death_handler_(new HidlDeathHandler<CallbackType>( - std::bind(&HidlCallbackHandler::onObjectDeath, this, - std::placeholders::_1))) {} - ~HidlCallbackHandler() = default; - - bool addCallback(const sp<CallbackType>& cb) { - // TODO(b/33818800): Can't compare proxies yet. So, use the cookie - // (callback proxy's raw pointer) to track the death of individual - // clients. - uint64_t cookie = reinterpret_cast<uint64_t>(cb.get()); - if (cb_set_.find(cb) != cb_set_.end()) { - LOG(WARNING) << "Duplicate death notification registration"; - return true; - } - if (!cb->linkToDeath(death_handler_, cookie)) { - LOG(ERROR) << "Failed to register death notification"; - return false; - } - cb_set_.insert(cb); - return true; - } - - const std::set<android::sp<CallbackType>>& getCallbacks() { - return cb_set_; - } - - // Death notification for callbacks. - void onObjectDeath(uint64_t cookie) { - CallbackType* cb = reinterpret_cast<CallbackType*>(cookie); - const auto& iter = cb_set_.find(cb); - if (iter == cb_set_.end()) { - LOG(ERROR) << "Unknown callback death notification received"; - return; - } - cb_set_.erase(iter); - LOG(DEBUG) << "Dead callback removed from list"; - } - - void invalidate() { - for (const sp<CallbackType>& cb : cb_set_) { - if (!cb->unlinkToDeath(death_handler_)) { - LOG(ERROR) << "Failed to deregister death notification"; - } - } - cb_set_.clear(); - } - - private: - std::set<sp<CallbackType>> cb_set_; - sp<HidlDeathHandler<CallbackType>> death_handler_; - - DISALLOW_COPY_AND_ASSIGN(HidlCallbackHandler); -}; - -} // namespace hidl_callback_util -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android -#endif // HIDL_CALLBACK_UTIL_H_ diff --git a/wifi/1.5/default/hidl_return_util.h b/wifi/1.5/default/hidl_return_util.h deleted file mode 100644 index 4455185283..0000000000 --- a/wifi/1.5/default/hidl_return_util.h +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Copyright (C) 2016 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef HIDL_RETURN_UTIL_H_ -#define HIDL_RETURN_UTIL_H_ - -#include "hidl_sync_util.h" -#include "wifi_status_util.h" - -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { -namespace hidl_return_util { -using namespace android::hardware::wifi::V1_0; - -/** - * These utility functions are used to invoke a method on the provided - * HIDL interface object. - * These functions checks if the provided HIDL interface object is valid. - * a) if valid, Invokes the corresponding internal implementation function of - * the HIDL method. It then invokes the HIDL continuation callback with - * the status and any returned values. - * b) if invalid, invokes the HIDL continuation callback with the - * provided error status and default values. - */ -// Use for HIDL methods which return only an instance of WifiStatus. -template <typename ObjT, typename WorkFuncT, typename... Args> -Return<void> validateAndCall( - ObjT* obj, WifiStatusCode status_code_if_invalid, WorkFuncT&& work, - const std::function<void(const WifiStatus&)>& hidl_cb, Args&&... args) { - const auto lock = hidl_sync_util::acquireGlobalLock(); - if (obj->isValid()) { - hidl_cb((obj->*work)(std::forward<Args>(args)...)); - } else { - hidl_cb(createWifiStatus(status_code_if_invalid)); - } - return Void(); -} - -// Use for HIDL methods which return only an instance of WifiStatus. -// This version passes the global lock acquired to the body of the method. -// Note: Only used by IWifi::stop() currently. -template <typename ObjT, typename WorkFuncT, typename... Args> -Return<void> validateAndCallWithLock( - ObjT* obj, WifiStatusCode status_code_if_invalid, WorkFuncT&& work, - const std::function<void(const WifiStatus&)>& hidl_cb, Args&&... args) { - auto lock = hidl_sync_util::acquireGlobalLock(); - if (obj->isValid()) { - hidl_cb((obj->*work)(&lock, std::forward<Args>(args)...)); - } else { - hidl_cb(createWifiStatus(status_code_if_invalid)); - } - return Void(); -} - -// Use for HIDL methods which return instance of WifiStatus and a single return -// value. -template <typename ObjT, typename WorkFuncT, typename ReturnT, typename... Args> -Return<void> validateAndCall( - ObjT* obj, WifiStatusCode status_code_if_invalid, WorkFuncT&& work, - const std::function<void(const WifiStatus&, ReturnT)>& hidl_cb, - Args&&... args) { - const auto lock = hidl_sync_util::acquireGlobalLock(); - if (obj->isValid()) { - const auto& ret_pair = (obj->*work)(std::forward<Args>(args)...); - const WifiStatus& status = std::get<0>(ret_pair); - const auto& ret_value = std::get<1>(ret_pair); - hidl_cb(status, ret_value); - } else { - hidl_cb(createWifiStatus(status_code_if_invalid), - typename std::remove_reference<ReturnT>::type()); - } - return Void(); -} - -// Use for HIDL methods which return instance of WifiStatus and 2 return -// values. -template <typename ObjT, typename WorkFuncT, typename ReturnT1, - typename ReturnT2, typename... Args> -Return<void> validateAndCall( - ObjT* obj, WifiStatusCode status_code_if_invalid, WorkFuncT&& work, - const std::function<void(const WifiStatus&, ReturnT1, ReturnT2)>& hidl_cb, - Args&&... args) { - const auto lock = hidl_sync_util::acquireGlobalLock(); - if (obj->isValid()) { - const auto& ret_tuple = (obj->*work)(std::forward<Args>(args)...); - const WifiStatus& status = std::get<0>(ret_tuple); - const auto& ret_value1 = std::get<1>(ret_tuple); - const auto& ret_value2 = std::get<2>(ret_tuple); - hidl_cb(status, ret_value1, ret_value2); - } else { - hidl_cb(createWifiStatus(status_code_if_invalid), - typename std::remove_reference<ReturnT1>::type(), - typename std::remove_reference<ReturnT2>::type()); - } - return Void(); -} - -} // namespace hidl_return_util -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android -#endif // HIDL_RETURN_UTIL_H_ diff --git a/wifi/1.5/default/hidl_struct_util.cpp b/wifi/1.5/default/hidl_struct_util.cpp deleted file mode 100644 index 91974a33d3..0000000000 --- a/wifi/1.5/default/hidl_struct_util.cpp +++ /dev/null @@ -1,3057 +0,0 @@ -/* - * Copyright (C) 2016 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include <android-base/logging.h> -#include <utils/SystemClock.h> - -#include "hidl_struct_util.h" - -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { -namespace hidl_struct_util { - -WifiChannelWidthInMhz convertLegacyWifiChannelWidthToHidl( - legacy_hal::wifi_channel_width type); - -hidl_string safeConvertChar(const char* str, size_t max_len) { - const char* c = str; - size_t size = 0; - while (*c && (unsigned char)*c < 128 && size < max_len) { - ++size; - ++c; - } - return hidl_string(str, size); -} - -IWifiChip::ChipCapabilityMask convertLegacyLoggerFeatureToHidlChipCapability( - uint32_t feature) { - using HidlChipCaps = IWifiChip::ChipCapabilityMask; - switch (feature) { - case legacy_hal::WIFI_LOGGER_MEMORY_DUMP_SUPPORTED: - return HidlChipCaps::DEBUG_MEMORY_FIRMWARE_DUMP; - case legacy_hal::WIFI_LOGGER_DRIVER_DUMP_SUPPORTED: - return HidlChipCaps::DEBUG_MEMORY_DRIVER_DUMP; - case legacy_hal::WIFI_LOGGER_CONNECT_EVENT_SUPPORTED: - return HidlChipCaps::DEBUG_RING_BUFFER_CONNECT_EVENT; - case legacy_hal::WIFI_LOGGER_POWER_EVENT_SUPPORTED: - return HidlChipCaps::DEBUG_RING_BUFFER_POWER_EVENT; - case legacy_hal::WIFI_LOGGER_WAKE_LOCK_SUPPORTED: - return HidlChipCaps::DEBUG_HOST_WAKE_REASON_STATS; - }; - CHECK(false) << "Unknown legacy feature: " << feature; - return {}; -} - -IWifiStaIface::StaIfaceCapabilityMask -convertLegacyLoggerFeatureToHidlStaIfaceCapability(uint32_t feature) { - using HidlStaIfaceCaps = IWifiStaIface::StaIfaceCapabilityMask; - switch (feature) { - case legacy_hal::WIFI_LOGGER_PACKET_FATE_SUPPORTED: - return HidlStaIfaceCaps::DEBUG_PACKET_FATE; - }; - CHECK(false) << "Unknown legacy feature: " << feature; - return {}; -} - -V1_5::IWifiChip::ChipCapabilityMask convertLegacyFeatureToHidlChipCapability( - uint64_t feature) { - using HidlChipCaps = V1_5::IWifiChip::ChipCapabilityMask; - switch (feature) { - case WIFI_FEATURE_SET_TX_POWER_LIMIT: - return HidlChipCaps::SET_TX_POWER_LIMIT; - case WIFI_FEATURE_USE_BODY_HEAD_SAR: - return HidlChipCaps::USE_BODY_HEAD_SAR; - case WIFI_FEATURE_D2D_RTT: - return HidlChipCaps::D2D_RTT; - case WIFI_FEATURE_D2AP_RTT: - return HidlChipCaps::D2AP_RTT; - case WIFI_FEATURE_INFRA_60G: - return HidlChipCaps::WIGIG; - case WIFI_FEATURE_SET_LATENCY_MODE: - return HidlChipCaps::SET_LATENCY_MODE; - case WIFI_FEATURE_P2P_RAND_MAC: - return HidlChipCaps::P2P_RAND_MAC; - }; - CHECK(false) << "Unknown legacy feature: " << feature; - return {}; -} - -IWifiStaIface::StaIfaceCapabilityMask -convertLegacyFeatureToHidlStaIfaceCapability(uint64_t feature) { - using HidlStaIfaceCaps = IWifiStaIface::StaIfaceCapabilityMask; - switch (feature) { - case WIFI_FEATURE_GSCAN: - return HidlStaIfaceCaps::BACKGROUND_SCAN; - case WIFI_FEATURE_LINK_LAYER_STATS: - return HidlStaIfaceCaps::LINK_LAYER_STATS; - case WIFI_FEATURE_RSSI_MONITOR: - return HidlStaIfaceCaps::RSSI_MONITOR; - case WIFI_FEATURE_CONTROL_ROAMING: - return HidlStaIfaceCaps::CONTROL_ROAMING; - case WIFI_FEATURE_IE_WHITELIST: - return HidlStaIfaceCaps::PROBE_IE_WHITELIST; - case WIFI_FEATURE_SCAN_RAND: - return HidlStaIfaceCaps::SCAN_RAND; - case WIFI_FEATURE_INFRA_5G: - return HidlStaIfaceCaps::STA_5G; - case WIFI_FEATURE_HOTSPOT: - return HidlStaIfaceCaps::HOTSPOT; - case WIFI_FEATURE_PNO: - return HidlStaIfaceCaps::PNO; - case WIFI_FEATURE_TDLS: - return HidlStaIfaceCaps::TDLS; - case WIFI_FEATURE_TDLS_OFFCHANNEL: - return HidlStaIfaceCaps::TDLS_OFFCHANNEL; - case WIFI_FEATURE_CONFIG_NDO: - return HidlStaIfaceCaps::ND_OFFLOAD; - case WIFI_FEATURE_MKEEP_ALIVE: - return HidlStaIfaceCaps::KEEP_ALIVE; - }; - CHECK(false) << "Unknown legacy feature: " << feature; - return {}; -} - -bool convertLegacyFeaturesToHidlChipCapabilities( - uint64_t legacy_feature_set, uint32_t legacy_logger_feature_set, - uint32_t* hidl_caps) { - if (!hidl_caps) { - return false; - } - *hidl_caps = {}; - using HidlChipCaps = IWifiChip::ChipCapabilityMask; - for (const auto feature : {legacy_hal::WIFI_LOGGER_MEMORY_DUMP_SUPPORTED, - legacy_hal::WIFI_LOGGER_DRIVER_DUMP_SUPPORTED, - legacy_hal::WIFI_LOGGER_CONNECT_EVENT_SUPPORTED, - legacy_hal::WIFI_LOGGER_POWER_EVENT_SUPPORTED, - legacy_hal::WIFI_LOGGER_WAKE_LOCK_SUPPORTED}) { - if (feature & legacy_logger_feature_set) { - *hidl_caps |= - convertLegacyLoggerFeatureToHidlChipCapability(feature); - } - } - std::vector<uint64_t> features = {WIFI_FEATURE_SET_TX_POWER_LIMIT, - WIFI_FEATURE_USE_BODY_HEAD_SAR, - WIFI_FEATURE_D2D_RTT, - WIFI_FEATURE_D2AP_RTT, - WIFI_FEATURE_INFRA_60G, - WIFI_FEATURE_SET_LATENCY_MODE, - WIFI_FEATURE_P2P_RAND_MAC}; - for (const auto feature : features) { - if (feature & legacy_feature_set) { - *hidl_caps |= convertLegacyFeatureToHidlChipCapability(feature); - } - } - - // There are no flags for these in the legacy feature set. Adding this to - // the set because all the current devices support it. - *hidl_caps |= HidlChipCaps::DEBUG_ERROR_ALERTS; - return true; -} - -WifiDebugRingBufferFlags convertLegacyDebugRingBufferFlagsToHidl( - uint32_t flag) { - switch (flag) { - case WIFI_RING_BUFFER_FLAG_HAS_BINARY_ENTRIES: - return WifiDebugRingBufferFlags::HAS_BINARY_ENTRIES; - case WIFI_RING_BUFFER_FLAG_HAS_ASCII_ENTRIES: - return WifiDebugRingBufferFlags::HAS_ASCII_ENTRIES; - }; - CHECK(false) << "Unknown legacy flag: " << flag; - return {}; -} - -bool convertLegacyDebugRingBufferStatusToHidl( - const legacy_hal::wifi_ring_buffer_status& legacy_status, - WifiDebugRingBufferStatus* hidl_status) { - if (!hidl_status) { - return false; - } - *hidl_status = {}; - hidl_status->ringName = - safeConvertChar(reinterpret_cast<const char*>(legacy_status.name), - sizeof(legacy_status.name)); - hidl_status->flags = 0; - for (const auto flag : {WIFI_RING_BUFFER_FLAG_HAS_BINARY_ENTRIES, - WIFI_RING_BUFFER_FLAG_HAS_ASCII_ENTRIES}) { - if (flag & legacy_status.flags) { - hidl_status->flags |= static_cast< - std::underlying_type<WifiDebugRingBufferFlags>::type>( - convertLegacyDebugRingBufferFlagsToHidl(flag)); - } - } - hidl_status->ringId = legacy_status.ring_id; - hidl_status->sizeInBytes = legacy_status.ring_buffer_byte_size; - // Calculate free size of the ring the buffer. We don't need to send the - // exact read/write pointers that were there in the legacy HAL interface. - if (legacy_status.written_bytes >= legacy_status.read_bytes) { - hidl_status->freeSizeInBytes = - legacy_status.ring_buffer_byte_size - - (legacy_status.written_bytes - legacy_status.read_bytes); - } else { - hidl_status->freeSizeInBytes = - legacy_status.read_bytes - legacy_status.written_bytes; - } - hidl_status->verboseLevel = legacy_status.verbose_level; - return true; -} - -bool convertLegacyVectorOfDebugRingBufferStatusToHidl( - const std::vector<legacy_hal::wifi_ring_buffer_status>& legacy_status_vec, - std::vector<WifiDebugRingBufferStatus>* hidl_status_vec) { - if (!hidl_status_vec) { - return false; - } - *hidl_status_vec = {}; - for (const auto& legacy_status : legacy_status_vec) { - WifiDebugRingBufferStatus hidl_status; - if (!convertLegacyDebugRingBufferStatusToHidl(legacy_status, - &hidl_status)) { - return false; - } - hidl_status_vec->push_back(hidl_status); - } - return true; -} - -bool convertLegacyWakeReasonStatsToHidl( - const legacy_hal::WakeReasonStats& legacy_stats, - WifiDebugHostWakeReasonStats* hidl_stats) { - if (!hidl_stats) { - return false; - } - *hidl_stats = {}; - hidl_stats->totalCmdEventWakeCnt = - legacy_stats.wake_reason_cnt.total_cmd_event_wake; - hidl_stats->cmdEventWakeCntPerType = legacy_stats.cmd_event_wake_cnt; - hidl_stats->totalDriverFwLocalWakeCnt = - legacy_stats.wake_reason_cnt.total_driver_fw_local_wake; - hidl_stats->driverFwLocalWakeCntPerType = - legacy_stats.driver_fw_local_wake_cnt; - hidl_stats->totalRxPacketWakeCnt = - legacy_stats.wake_reason_cnt.total_rx_data_wake; - hidl_stats->rxPktWakeDetails.rxUnicastCnt = - legacy_stats.wake_reason_cnt.rx_wake_details.rx_unicast_cnt; - hidl_stats->rxPktWakeDetails.rxMulticastCnt = - legacy_stats.wake_reason_cnt.rx_wake_details.rx_multicast_cnt; - hidl_stats->rxPktWakeDetails.rxBroadcastCnt = - legacy_stats.wake_reason_cnt.rx_wake_details.rx_broadcast_cnt; - hidl_stats->rxMulticastPkWakeDetails.ipv4RxMulticastAddrCnt = - legacy_stats.wake_reason_cnt.rx_multicast_wake_pkt_info - .ipv4_rx_multicast_addr_cnt; - hidl_stats->rxMulticastPkWakeDetails.ipv6RxMulticastAddrCnt = - legacy_stats.wake_reason_cnt.rx_multicast_wake_pkt_info - .ipv6_rx_multicast_addr_cnt; - hidl_stats->rxMulticastPkWakeDetails.otherRxMulticastAddrCnt = - legacy_stats.wake_reason_cnt.rx_multicast_wake_pkt_info - .other_rx_multicast_addr_cnt; - hidl_stats->rxIcmpPkWakeDetails.icmpPkt = - legacy_stats.wake_reason_cnt.rx_wake_pkt_classification_info.icmp_pkt; - hidl_stats->rxIcmpPkWakeDetails.icmp6Pkt = - legacy_stats.wake_reason_cnt.rx_wake_pkt_classification_info.icmp6_pkt; - hidl_stats->rxIcmpPkWakeDetails.icmp6Ra = - legacy_stats.wake_reason_cnt.rx_wake_pkt_classification_info.icmp6_ra; - hidl_stats->rxIcmpPkWakeDetails.icmp6Na = - legacy_stats.wake_reason_cnt.rx_wake_pkt_classification_info.icmp6_na; - hidl_stats->rxIcmpPkWakeDetails.icmp6Ns = - legacy_stats.wake_reason_cnt.rx_wake_pkt_classification_info.icmp6_ns; - return true; -} - -legacy_hal::wifi_power_scenario convertHidlTxPowerScenarioToLegacy( - V1_1::IWifiChip::TxPowerScenario hidl_scenario) { - switch (hidl_scenario) { - // This is the only supported scenario for V1_1 - case V1_1::IWifiChip::TxPowerScenario::VOICE_CALL: - return legacy_hal::WIFI_POWER_SCENARIO_VOICE_CALL; - }; - CHECK(false); -} - -legacy_hal::wifi_power_scenario convertHidlTxPowerScenarioToLegacy_1_2( - V1_2::IWifiChip::TxPowerScenario hidl_scenario) { - switch (hidl_scenario) { - // This is the only supported scenario for V1_1 - case V1_2::IWifiChip::TxPowerScenario::VOICE_CALL: - return legacy_hal::WIFI_POWER_SCENARIO_VOICE_CALL; - // Those are the supported scenarios for V1_2 - case V1_2::IWifiChip::TxPowerScenario::ON_HEAD_CELL_OFF: - return legacy_hal::WIFI_POWER_SCENARIO_ON_HEAD_CELL_OFF; - case V1_2::IWifiChip::TxPowerScenario::ON_HEAD_CELL_ON: - return legacy_hal::WIFI_POWER_SCENARIO_ON_HEAD_CELL_ON; - case V1_2::IWifiChip::TxPowerScenario::ON_BODY_CELL_OFF: - return legacy_hal::WIFI_POWER_SCENARIO_ON_BODY_CELL_OFF; - case V1_2::IWifiChip::TxPowerScenario::ON_BODY_CELL_ON: - return legacy_hal::WIFI_POWER_SCENARIO_ON_BODY_CELL_ON; - }; - CHECK(false); -} - -legacy_hal::wifi_latency_mode convertHidlLatencyModeToLegacy( - V1_3::IWifiChip::LatencyMode hidl_latency_mode) { - switch (hidl_latency_mode) { - case V1_3::IWifiChip::LatencyMode::NORMAL: - return legacy_hal::WIFI_LATENCY_MODE_NORMAL; - case V1_3::IWifiChip::LatencyMode::LOW: - return legacy_hal::WIFI_LATENCY_MODE_LOW; - } - CHECK(false); -} - -bool convertLegacyWifiMacInfoToHidl( - const legacy_hal::WifiMacInfo& legacy_mac_info, - V1_4::IWifiChipEventCallback::RadioModeInfo* hidl_radio_mode_info) { - if (!hidl_radio_mode_info) { - return false; - } - *hidl_radio_mode_info = {}; - - hidl_radio_mode_info->radioId = legacy_mac_info.wlan_mac_id; - // Convert from bitmask of bands in the legacy HAL to enum value in - // the HIDL interface. - if (legacy_mac_info.mac_band & legacy_hal::WLAN_MAC_6_0_BAND && - legacy_mac_info.mac_band & legacy_hal::WLAN_MAC_5_0_BAND && - legacy_mac_info.mac_band & legacy_hal::WLAN_MAC_2_4_BAND) { - hidl_radio_mode_info->bandInfo = V1_4::WifiBand::BAND_24GHZ_5GHZ_6GHZ; - } else if (legacy_mac_info.mac_band & legacy_hal::WLAN_MAC_6_0_BAND && - legacy_mac_info.mac_band & legacy_hal::WLAN_MAC_5_0_BAND) { - hidl_radio_mode_info->bandInfo = V1_4::WifiBand::BAND_5GHZ_6GHZ; - } else if (legacy_mac_info.mac_band & legacy_hal::WLAN_MAC_6_0_BAND) { - hidl_radio_mode_info->bandInfo = V1_4::WifiBand::BAND_6GHZ; - } else if (legacy_mac_info.mac_band & legacy_hal::WLAN_MAC_2_4_BAND && - legacy_mac_info.mac_band & legacy_hal::WLAN_MAC_5_0_BAND) { - hidl_radio_mode_info->bandInfo = V1_4::WifiBand::BAND_24GHZ_5GHZ; - } else if (legacy_mac_info.mac_band & legacy_hal::WLAN_MAC_2_4_BAND) { - hidl_radio_mode_info->bandInfo = V1_4::WifiBand::BAND_24GHZ; - } else if (legacy_mac_info.mac_band & legacy_hal::WLAN_MAC_5_0_BAND) { - hidl_radio_mode_info->bandInfo = V1_4::WifiBand::BAND_5GHZ; - } else { - hidl_radio_mode_info->bandInfo = V1_4::WifiBand::BAND_UNSPECIFIED; - } - std::vector<V1_2::IWifiChipEventCallback::IfaceInfo> iface_info_vec; - for (const auto& legacy_iface_info : legacy_mac_info.iface_infos) { - V1_2::IWifiChipEventCallback::IfaceInfo iface_info; - iface_info.name = legacy_iface_info.name; - iface_info.channel = legacy_iface_info.channel; - iface_info_vec.push_back(iface_info); - } - hidl_radio_mode_info->ifaceInfos = iface_info_vec; - return true; -} - -uint32_t convertHidlWifiBandToLegacyMacBand(V1_5::WifiBand hidl_band) { - switch (hidl_band) { - case V1_5::WifiBand::BAND_24GHZ: - return legacy_hal::WLAN_MAC_2_4_BAND; - case V1_5::WifiBand::BAND_5GHZ: - case V1_5::WifiBand::BAND_5GHZ_DFS: - case V1_5::WifiBand::BAND_5GHZ_WITH_DFS: - return legacy_hal::WLAN_MAC_5_0_BAND; - case V1_5::WifiBand::BAND_24GHZ_5GHZ: - case V1_5::WifiBand::BAND_24GHZ_5GHZ_WITH_DFS: - return (legacy_hal::WLAN_MAC_2_4_BAND | - legacy_hal::WLAN_MAC_5_0_BAND); - case V1_5::WifiBand::BAND_6GHZ: - return legacy_hal::WLAN_MAC_6_0_BAND; - case V1_5::WifiBand::BAND_5GHZ_6GHZ: - return (legacy_hal::WLAN_MAC_5_0_BAND | - legacy_hal::WLAN_MAC_6_0_BAND); - case V1_5::WifiBand::BAND_24GHZ_5GHZ_6GHZ: - case V1_5::WifiBand::BAND_24GHZ_5GHZ_WITH_DFS_6GHZ: - return (legacy_hal::WLAN_MAC_2_4_BAND | - legacy_hal::WLAN_MAC_5_0_BAND | - legacy_hal::WLAN_MAC_6_0_BAND); - case V1_5::WifiBand::BAND_60GHZ: - return legacy_hal::WLAN_MAC_60_0_BAND; - default: - return ( - legacy_hal::WLAN_MAC_2_4_BAND | legacy_hal::WLAN_MAC_5_0_BAND | - legacy_hal::WLAN_MAC_6_0_BAND | legacy_hal::WLAN_MAC_60_0_BAND); - } -} - -uint32_t convertHidlWifiIfaceModeToLegacy(uint32_t hidl_iface_mask) { - uint32_t legacy_iface_mask = 0; - if (hidl_iface_mask & V1_5::WifiIfaceMode::IFACE_MODE_STA) { - legacy_iface_mask |= (1 << legacy_hal::WIFI_INTERFACE_STA); - } - if (hidl_iface_mask & V1_5::WifiIfaceMode::IFACE_MODE_SOFTAP) { - legacy_iface_mask |= (1 << legacy_hal::WIFI_INTERFACE_SOFTAP); - } - if (hidl_iface_mask & V1_5::WifiIfaceMode::IFACE_MODE_P2P_CLIENT) { - legacy_iface_mask |= (1 << legacy_hal::WIFI_INTERFACE_P2P_CLIENT); - } - if (hidl_iface_mask & V1_5::WifiIfaceMode::IFACE_MODE_P2P_GO) { - legacy_iface_mask |= (1 << legacy_hal::WIFI_INTERFACE_P2P_GO); - } - if (hidl_iface_mask & V1_5::WifiIfaceMode::IFACE_MODE_NAN) { - legacy_iface_mask |= (1 << legacy_hal::WIFI_INTERFACE_NAN); - } - if (hidl_iface_mask & V1_5::WifiIfaceMode::IFACE_MODE_TDLS) { - legacy_iface_mask |= (1 << legacy_hal::WIFI_INTERFACE_TDLS); - } - if (hidl_iface_mask & V1_5::WifiIfaceMode::IFACE_MODE_MESH) { - legacy_iface_mask |= (1 << legacy_hal::WIFI_INTERFACE_MESH); - } - if (hidl_iface_mask & V1_5::WifiIfaceMode::IFACE_MODE_IBSS) { - legacy_iface_mask |= (1 << legacy_hal::WIFI_INTERFACE_IBSS); - } - return legacy_iface_mask; -} - -uint32_t convertLegacyWifiInterfaceModeToHidl(uint32_t legacy_iface_mask) { - uint32_t hidl_iface_mask = 0; - if (legacy_iface_mask & (1 << legacy_hal::WIFI_INTERFACE_STA)) { - hidl_iface_mask |= V1_5::WifiIfaceMode::IFACE_MODE_STA; - } - if (legacy_iface_mask & (1 << legacy_hal::WIFI_INTERFACE_SOFTAP)) { - hidl_iface_mask |= V1_5::WifiIfaceMode::IFACE_MODE_SOFTAP; - } - if (legacy_iface_mask & (1 << legacy_hal::WIFI_INTERFACE_P2P_CLIENT)) { - hidl_iface_mask |= V1_5::WifiIfaceMode::IFACE_MODE_P2P_CLIENT; - } - if (legacy_iface_mask & (1 << legacy_hal::WIFI_INTERFACE_P2P_GO)) { - hidl_iface_mask |= V1_5::WifiIfaceMode::IFACE_MODE_P2P_GO; - } - if (legacy_iface_mask & (1 << legacy_hal::WIFI_INTERFACE_NAN)) { - hidl_iface_mask |= V1_5::WifiIfaceMode::IFACE_MODE_NAN; - } - if (legacy_iface_mask & (1 << legacy_hal::WIFI_INTERFACE_TDLS)) { - hidl_iface_mask |= V1_5::WifiIfaceMode::IFACE_MODE_TDLS; - } - if (legacy_iface_mask & (1 << legacy_hal::WIFI_INTERFACE_MESH)) { - hidl_iface_mask |= V1_5::WifiIfaceMode::IFACE_MODE_MESH; - } - if (legacy_iface_mask & (1 << legacy_hal::WIFI_INTERFACE_IBSS)) { - hidl_iface_mask |= V1_5::WifiIfaceMode::IFACE_MODE_IBSS; - } - return hidl_iface_mask; -} - -uint32_t convertHidlUsableChannelFilterToLegacy(uint32_t hidl_filter_mask) { - uint32_t legacy_filter_mask = 0; - if (hidl_filter_mask & - IWifiChip::UsableChannelFilter::CELLULAR_COEXISTENCE) { - legacy_filter_mask |= - legacy_hal::WIFI_USABLE_CHANNEL_FILTER_CELLULAR_COEXISTENCE; - } - if (hidl_filter_mask & IWifiChip::UsableChannelFilter::CONCURRENCY) { - legacy_filter_mask |= - legacy_hal::WIFI_USABLE_CHANNEL_FILTER_CONCURRENCY; - } - return legacy_filter_mask; -} - -bool convertLegacyWifiUsableChannelToHidl( - const legacy_hal::wifi_usable_channel& legacy_usable_channel, - V1_5::WifiUsableChannel* hidl_usable_channel) { - if (!hidl_usable_channel) { - return false; - } - *hidl_usable_channel = {}; - hidl_usable_channel->channel = legacy_usable_channel.freq; - hidl_usable_channel->channelBandwidth = - convertLegacyWifiChannelWidthToHidl(legacy_usable_channel.width); - hidl_usable_channel->ifaceModeMask = convertLegacyWifiInterfaceModeToHidl( - legacy_usable_channel.iface_mode_mask); - - return true; -} - -bool convertLegacyWifiUsableChannelsToHidl( - const std::vector<legacy_hal::wifi_usable_channel>& legacy_usable_channels, - std::vector<V1_5::WifiUsableChannel>* hidl_usable_channels) { - if (!hidl_usable_channels) { - return false; - } - *hidl_usable_channels = {}; - for (const auto& legacy_usable_channel : legacy_usable_channels) { - V1_5::WifiUsableChannel hidl_usable_channel; - if (!convertLegacyWifiUsableChannelToHidl(legacy_usable_channel, - &hidl_usable_channel)) { - return false; - } - hidl_usable_channels->push_back(hidl_usable_channel); - } - return true; -} - -bool convertLegacyWifiMacInfosToHidl( - const std::vector<legacy_hal::WifiMacInfo>& legacy_mac_infos, - std::vector<V1_4::IWifiChipEventCallback::RadioModeInfo>* - hidl_radio_mode_infos) { - if (!hidl_radio_mode_infos) { - return false; - } - *hidl_radio_mode_infos = {}; - - for (const auto& legacy_mac_info : legacy_mac_infos) { - V1_4::IWifiChipEventCallback::RadioModeInfo hidl_radio_mode_info; - if (!convertLegacyWifiMacInfoToHidl(legacy_mac_info, - &hidl_radio_mode_info)) { - return false; - } - hidl_radio_mode_infos->push_back(hidl_radio_mode_info); - } - return true; -} - -bool convertLegacyFeaturesToHidlStaCapabilities( - uint64_t legacy_feature_set, uint32_t legacy_logger_feature_set, - uint32_t* hidl_caps) { - if (!hidl_caps) { - return false; - } - *hidl_caps = {}; - using HidlStaIfaceCaps = IWifiStaIface::StaIfaceCapabilityMask; - for (const auto feature : {legacy_hal::WIFI_LOGGER_PACKET_FATE_SUPPORTED}) { - if (feature & legacy_logger_feature_set) { - *hidl_caps |= - convertLegacyLoggerFeatureToHidlStaIfaceCapability(feature); - } - } - for (const auto feature : - {WIFI_FEATURE_GSCAN, WIFI_FEATURE_LINK_LAYER_STATS, - WIFI_FEATURE_RSSI_MONITOR, WIFI_FEATURE_CONTROL_ROAMING, - WIFI_FEATURE_IE_WHITELIST, WIFI_FEATURE_SCAN_RAND, - WIFI_FEATURE_INFRA_5G, WIFI_FEATURE_HOTSPOT, WIFI_FEATURE_PNO, - WIFI_FEATURE_TDLS, WIFI_FEATURE_TDLS_OFFCHANNEL, - WIFI_FEATURE_CONFIG_NDO, WIFI_FEATURE_MKEEP_ALIVE}) { - if (feature & legacy_feature_set) { - *hidl_caps |= convertLegacyFeatureToHidlStaIfaceCapability(feature); - } - } - // There is no flag for this one in the legacy feature set. Adding it to the - // set because all the current devices support it. - *hidl_caps |= HidlStaIfaceCaps::APF; - return true; -} - -bool convertLegacyApfCapabilitiesToHidl( - const legacy_hal::PacketFilterCapabilities& legacy_caps, - StaApfPacketFilterCapabilities* hidl_caps) { - if (!hidl_caps) { - return false; - } - *hidl_caps = {}; - hidl_caps->version = legacy_caps.version; - hidl_caps->maxLength = legacy_caps.max_len; - return true; -} - -uint8_t convertHidlGscanReportEventFlagToLegacy( - StaBackgroundScanBucketEventReportSchemeMask hidl_flag) { - using HidlFlag = StaBackgroundScanBucketEventReportSchemeMask; - switch (hidl_flag) { - case HidlFlag::EACH_SCAN: - return REPORT_EVENTS_EACH_SCAN; - case HidlFlag::FULL_RESULTS: - return REPORT_EVENTS_FULL_RESULTS; - case HidlFlag::NO_BATCH: - return REPORT_EVENTS_NO_BATCH; - }; - CHECK(false); -} - -StaScanDataFlagMask convertLegacyGscanDataFlagToHidl(uint8_t legacy_flag) { - switch (legacy_flag) { - case legacy_hal::WIFI_SCAN_FLAG_INTERRUPTED: - return StaScanDataFlagMask::INTERRUPTED; - }; - CHECK(false) << "Unknown legacy flag: " << legacy_flag; - // To silence the compiler warning about reaching the end of non-void - // function. - return {}; -} - -bool convertLegacyGscanCapabilitiesToHidl( - const legacy_hal::wifi_gscan_capabilities& legacy_caps, - StaBackgroundScanCapabilities* hidl_caps) { - if (!hidl_caps) { - return false; - } - *hidl_caps = {}; - hidl_caps->maxCacheSize = legacy_caps.max_scan_cache_size; - hidl_caps->maxBuckets = legacy_caps.max_scan_buckets; - hidl_caps->maxApCachePerScan = legacy_caps.max_ap_cache_per_scan; - hidl_caps->maxReportingThreshold = legacy_caps.max_scan_reporting_threshold; - return true; -} - -legacy_hal::wifi_band convertHidlWifiBandToLegacy(V1_0::WifiBand band) { - switch (band) { - case V1_0::WifiBand::BAND_UNSPECIFIED: - return legacy_hal::WIFI_BAND_UNSPECIFIED; - case V1_0::WifiBand::BAND_24GHZ: - return legacy_hal::WIFI_BAND_BG; - case V1_0::WifiBand::BAND_5GHZ: - return legacy_hal::WIFI_BAND_A; - case V1_0::WifiBand::BAND_5GHZ_DFS: - return legacy_hal::WIFI_BAND_A_DFS; - case V1_0::WifiBand::BAND_5GHZ_WITH_DFS: - return legacy_hal::WIFI_BAND_A_WITH_DFS; - case V1_0::WifiBand::BAND_24GHZ_5GHZ: - return legacy_hal::WIFI_BAND_ABG; - case V1_0::WifiBand::BAND_24GHZ_5GHZ_WITH_DFS: - return legacy_hal::WIFI_BAND_ABG_WITH_DFS; - }; - CHECK(false); -} - -bool convertHidlGscanParamsToLegacy( - const StaBackgroundScanParameters& hidl_scan_params, - legacy_hal::wifi_scan_cmd_params* legacy_scan_params) { - if (!legacy_scan_params) { - return false; - } - *legacy_scan_params = {}; - legacy_scan_params->base_period = hidl_scan_params.basePeriodInMs; - legacy_scan_params->max_ap_per_scan = hidl_scan_params.maxApPerScan; - legacy_scan_params->report_threshold_percent = - hidl_scan_params.reportThresholdPercent; - legacy_scan_params->report_threshold_num_scans = - hidl_scan_params.reportThresholdNumScans; - if (hidl_scan_params.buckets.size() > MAX_BUCKETS) { - return false; - } - legacy_scan_params->num_buckets = hidl_scan_params.buckets.size(); - for (uint32_t bucket_idx = 0; bucket_idx < hidl_scan_params.buckets.size(); - bucket_idx++) { - const StaBackgroundScanBucketParameters& hidl_bucket_spec = - hidl_scan_params.buckets[bucket_idx]; - legacy_hal::wifi_scan_bucket_spec& legacy_bucket_spec = - legacy_scan_params->buckets[bucket_idx]; - if (hidl_bucket_spec.bucketIdx >= MAX_BUCKETS) { - return false; - } - legacy_bucket_spec.bucket = hidl_bucket_spec.bucketIdx; - legacy_bucket_spec.band = - convertHidlWifiBandToLegacy(hidl_bucket_spec.band); - legacy_bucket_spec.period = hidl_bucket_spec.periodInMs; - legacy_bucket_spec.max_period = - hidl_bucket_spec.exponentialMaxPeriodInMs; - legacy_bucket_spec.base = hidl_bucket_spec.exponentialBase; - legacy_bucket_spec.step_count = hidl_bucket_spec.exponentialStepCount; - legacy_bucket_spec.report_events = 0; - using HidlFlag = StaBackgroundScanBucketEventReportSchemeMask; - for (const auto flag : {HidlFlag::EACH_SCAN, HidlFlag::FULL_RESULTS, - HidlFlag::NO_BATCH}) { - if (hidl_bucket_spec.eventReportScheme & - static_cast<std::underlying_type<HidlFlag>::type>(flag)) { - legacy_bucket_spec.report_events |= - convertHidlGscanReportEventFlagToLegacy(flag); - } - } - if (hidl_bucket_spec.frequencies.size() > MAX_CHANNELS) { - return false; - } - legacy_bucket_spec.num_channels = hidl_bucket_spec.frequencies.size(); - for (uint32_t freq_idx = 0; - freq_idx < hidl_bucket_spec.frequencies.size(); freq_idx++) { - legacy_bucket_spec.channels[freq_idx].channel = - hidl_bucket_spec.frequencies[freq_idx]; - } - } - return true; -} - -bool convertLegacyIeToHidl( - const legacy_hal::wifi_information_element& legacy_ie, - WifiInformationElement* hidl_ie) { - if (!hidl_ie) { - return false; - } - *hidl_ie = {}; - hidl_ie->id = legacy_ie.id; - hidl_ie->data = - std::vector<uint8_t>(legacy_ie.data, legacy_ie.data + legacy_ie.len); - return true; -} - -bool convertLegacyIeBlobToHidl(const uint8_t* ie_blob, uint32_t ie_blob_len, - std::vector<WifiInformationElement>* hidl_ies) { - if (!ie_blob || !hidl_ies) { - return false; - } - *hidl_ies = {}; - const uint8_t* ies_begin = ie_blob; - const uint8_t* ies_end = ie_blob + ie_blob_len; - const uint8_t* next_ie = ies_begin; - using wifi_ie = legacy_hal::wifi_information_element; - constexpr size_t kIeHeaderLen = sizeof(wifi_ie); - // Each IE should atleast have the header (i.e |id| & |len| fields). - while (next_ie + kIeHeaderLen <= ies_end) { - const wifi_ie& legacy_ie = (*reinterpret_cast<const wifi_ie*>(next_ie)); - uint32_t curr_ie_len = kIeHeaderLen + legacy_ie.len; - if (next_ie + curr_ie_len > ies_end) { - LOG(ERROR) << "Error parsing IE blob. Next IE: " << (void*)next_ie - << ", Curr IE len: " << curr_ie_len - << ", IEs End: " << (void*)ies_end; - break; - } - WifiInformationElement hidl_ie; - if (!convertLegacyIeToHidl(legacy_ie, &hidl_ie)) { - LOG(ERROR) << "Error converting IE. Id: " << legacy_ie.id - << ", len: " << legacy_ie.len; - break; - } - hidl_ies->push_back(std::move(hidl_ie)); - next_ie += curr_ie_len; - } - // Check if the blob has been fully consumed. - if (next_ie != ies_end) { - LOG(ERROR) << "Failed to fully parse IE blob. Next IE: " - << (void*)next_ie << ", IEs End: " << (void*)ies_end; - } - return true; -} - -bool convertLegacyGscanResultToHidl( - const legacy_hal::wifi_scan_result& legacy_scan_result, bool has_ie_data, - StaScanResult* hidl_scan_result) { - if (!hidl_scan_result) { - return false; - } - *hidl_scan_result = {}; - hidl_scan_result->timeStampInUs = legacy_scan_result.ts; - hidl_scan_result->ssid = std::vector<uint8_t>( - legacy_scan_result.ssid, - legacy_scan_result.ssid + strnlen(legacy_scan_result.ssid, - sizeof(legacy_scan_result.ssid) - 1)); - memcpy(hidl_scan_result->bssid.data(), legacy_scan_result.bssid, - hidl_scan_result->bssid.size()); - hidl_scan_result->frequency = legacy_scan_result.channel; - hidl_scan_result->rssi = legacy_scan_result.rssi; - hidl_scan_result->beaconPeriodInMs = legacy_scan_result.beacon_period; - hidl_scan_result->capability = legacy_scan_result.capability; - if (has_ie_data) { - std::vector<WifiInformationElement> ies; - if (!convertLegacyIeBlobToHidl( - reinterpret_cast<const uint8_t*>(legacy_scan_result.ie_data), - legacy_scan_result.ie_length, &ies)) { - return false; - } - hidl_scan_result->informationElements = std::move(ies); - } - return true; -} - -bool convertLegacyCachedGscanResultsToHidl( - const legacy_hal::wifi_cached_scan_results& legacy_cached_scan_result, - StaScanData* hidl_scan_data) { - if (!hidl_scan_data) { - return false; - } - *hidl_scan_data = {}; - hidl_scan_data->flags = 0; - for (const auto flag : {legacy_hal::WIFI_SCAN_FLAG_INTERRUPTED}) { - if (legacy_cached_scan_result.flags & flag) { - hidl_scan_data->flags |= - static_cast<std::underlying_type<StaScanDataFlagMask>::type>( - convertLegacyGscanDataFlagToHidl(flag)); - } - } - hidl_scan_data->bucketsScanned = legacy_cached_scan_result.buckets_scanned; - - CHECK(legacy_cached_scan_result.num_results >= 0 && - legacy_cached_scan_result.num_results <= MAX_AP_CACHE_PER_SCAN); - std::vector<StaScanResult> hidl_scan_results; - for (int32_t result_idx = 0; - result_idx < legacy_cached_scan_result.num_results; result_idx++) { - StaScanResult hidl_scan_result; - if (!convertLegacyGscanResultToHidl( - legacy_cached_scan_result.results[result_idx], false, - &hidl_scan_result)) { - return false; - } - hidl_scan_results.push_back(hidl_scan_result); - } - hidl_scan_data->results = std::move(hidl_scan_results); - return true; -} - -bool convertLegacyVectorOfCachedGscanResultsToHidl( - const std::vector<legacy_hal::wifi_cached_scan_results>& - legacy_cached_scan_results, - std::vector<StaScanData>* hidl_scan_datas) { - if (!hidl_scan_datas) { - return false; - } - *hidl_scan_datas = {}; - for (const auto& legacy_cached_scan_result : legacy_cached_scan_results) { - StaScanData hidl_scan_data; - if (!convertLegacyCachedGscanResultsToHidl(legacy_cached_scan_result, - &hidl_scan_data)) { - return false; - } - hidl_scan_datas->push_back(hidl_scan_data); - } - return true; -} - -WifiDebugTxPacketFate convertLegacyDebugTxPacketFateToHidl( - legacy_hal::wifi_tx_packet_fate fate) { - switch (fate) { - case legacy_hal::TX_PKT_FATE_ACKED: - return WifiDebugTxPacketFate::ACKED; - case legacy_hal::TX_PKT_FATE_SENT: - return WifiDebugTxPacketFate::SENT; - case legacy_hal::TX_PKT_FATE_FW_QUEUED: - return WifiDebugTxPacketFate::FW_QUEUED; - case legacy_hal::TX_PKT_FATE_FW_DROP_INVALID: - return WifiDebugTxPacketFate::FW_DROP_INVALID; - case legacy_hal::TX_PKT_FATE_FW_DROP_NOBUFS: - return WifiDebugTxPacketFate::FW_DROP_NOBUFS; - case legacy_hal::TX_PKT_FATE_FW_DROP_OTHER: - return WifiDebugTxPacketFate::FW_DROP_OTHER; - case legacy_hal::TX_PKT_FATE_DRV_QUEUED: - return WifiDebugTxPacketFate::DRV_QUEUED; - case legacy_hal::TX_PKT_FATE_DRV_DROP_INVALID: - return WifiDebugTxPacketFate::DRV_DROP_INVALID; - case legacy_hal::TX_PKT_FATE_DRV_DROP_NOBUFS: - return WifiDebugTxPacketFate::DRV_DROP_NOBUFS; - case legacy_hal::TX_PKT_FATE_DRV_DROP_OTHER: - return WifiDebugTxPacketFate::DRV_DROP_OTHER; - }; - CHECK(false) << "Unknown legacy fate type: " << fate; -} - -WifiDebugRxPacketFate convertLegacyDebugRxPacketFateToHidl( - legacy_hal::wifi_rx_packet_fate fate) { - switch (fate) { - case legacy_hal::RX_PKT_FATE_SUCCESS: - return WifiDebugRxPacketFate::SUCCESS; - case legacy_hal::RX_PKT_FATE_FW_QUEUED: - return WifiDebugRxPacketFate::FW_QUEUED; - case legacy_hal::RX_PKT_FATE_FW_DROP_FILTER: - return WifiDebugRxPacketFate::FW_DROP_FILTER; - case legacy_hal::RX_PKT_FATE_FW_DROP_INVALID: - return WifiDebugRxPacketFate::FW_DROP_INVALID; - case legacy_hal::RX_PKT_FATE_FW_DROP_NOBUFS: - return WifiDebugRxPacketFate::FW_DROP_NOBUFS; - case legacy_hal::RX_PKT_FATE_FW_DROP_OTHER: - return WifiDebugRxPacketFate::FW_DROP_OTHER; - case legacy_hal::RX_PKT_FATE_DRV_QUEUED: - return WifiDebugRxPacketFate::DRV_QUEUED; - case legacy_hal::RX_PKT_FATE_DRV_DROP_FILTER: - return WifiDebugRxPacketFate::DRV_DROP_FILTER; - case legacy_hal::RX_PKT_FATE_DRV_DROP_INVALID: - return WifiDebugRxPacketFate::DRV_DROP_INVALID; - case legacy_hal::RX_PKT_FATE_DRV_DROP_NOBUFS: - return WifiDebugRxPacketFate::DRV_DROP_NOBUFS; - case legacy_hal::RX_PKT_FATE_DRV_DROP_OTHER: - return WifiDebugRxPacketFate::DRV_DROP_OTHER; - }; - CHECK(false) << "Unknown legacy fate type: " << fate; -} - -WifiDebugPacketFateFrameType convertLegacyDebugPacketFateFrameTypeToHidl( - legacy_hal::frame_type type) { - switch (type) { - case legacy_hal::FRAME_TYPE_UNKNOWN: - return WifiDebugPacketFateFrameType::UNKNOWN; - case legacy_hal::FRAME_TYPE_ETHERNET_II: - return WifiDebugPacketFateFrameType::ETHERNET_II; - case legacy_hal::FRAME_TYPE_80211_MGMT: - return WifiDebugPacketFateFrameType::MGMT_80211; - }; - CHECK(false) << "Unknown legacy frame type: " << type; -} - -bool convertLegacyDebugPacketFateFrameToHidl( - const legacy_hal::frame_info& legacy_frame, - WifiDebugPacketFateFrameInfo* hidl_frame) { - if (!hidl_frame) { - return false; - } - *hidl_frame = {}; - hidl_frame->frameType = - convertLegacyDebugPacketFateFrameTypeToHidl(legacy_frame.payload_type); - hidl_frame->frameLen = legacy_frame.frame_len; - hidl_frame->driverTimestampUsec = legacy_frame.driver_timestamp_usec; - hidl_frame->firmwareTimestampUsec = legacy_frame.firmware_timestamp_usec; - const uint8_t* frame_begin = reinterpret_cast<const uint8_t*>( - legacy_frame.frame_content.ethernet_ii_bytes); - hidl_frame->frameContent = - std::vector<uint8_t>(frame_begin, frame_begin + legacy_frame.frame_len); - return true; -} - -bool convertLegacyDebugTxPacketFateToHidl( - const legacy_hal::wifi_tx_report& legacy_fate, - WifiDebugTxPacketFateReport* hidl_fate) { - if (!hidl_fate) { - return false; - } - *hidl_fate = {}; - hidl_fate->fate = convertLegacyDebugTxPacketFateToHidl(legacy_fate.fate); - return convertLegacyDebugPacketFateFrameToHidl(legacy_fate.frame_inf, - &hidl_fate->frameInfo); -} - -bool convertLegacyVectorOfDebugTxPacketFateToHidl( - const std::vector<legacy_hal::wifi_tx_report>& legacy_fates, - std::vector<WifiDebugTxPacketFateReport>* hidl_fates) { - if (!hidl_fates) { - return false; - } - *hidl_fates = {}; - for (const auto& legacy_fate : legacy_fates) { - WifiDebugTxPacketFateReport hidl_fate; - if (!convertLegacyDebugTxPacketFateToHidl(legacy_fate, &hidl_fate)) { - return false; - } - hidl_fates->push_back(hidl_fate); - } - return true; -} - -bool convertLegacyDebugRxPacketFateToHidl( - const legacy_hal::wifi_rx_report& legacy_fate, - WifiDebugRxPacketFateReport* hidl_fate) { - if (!hidl_fate) { - return false; - } - *hidl_fate = {}; - hidl_fate->fate = convertLegacyDebugRxPacketFateToHidl(legacy_fate.fate); - return convertLegacyDebugPacketFateFrameToHidl(legacy_fate.frame_inf, - &hidl_fate->frameInfo); -} - -bool convertLegacyVectorOfDebugRxPacketFateToHidl( - const std::vector<legacy_hal::wifi_rx_report>& legacy_fates, - std::vector<WifiDebugRxPacketFateReport>* hidl_fates) { - if (!hidl_fates) { - return false; - } - *hidl_fates = {}; - for (const auto& legacy_fate : legacy_fates) { - WifiDebugRxPacketFateReport hidl_fate; - if (!convertLegacyDebugRxPacketFateToHidl(legacy_fate, &hidl_fate)) { - return false; - } - hidl_fates->push_back(hidl_fate); - } - return true; -} - -bool convertLegacyLinkLayerRadioStatsToHidl( - const legacy_hal::LinkLayerRadioStats& legacy_radio_stat, - V1_5::StaLinkLayerRadioStats* hidl_radio_stat) { - if (!hidl_radio_stat) { - return false; - } - *hidl_radio_stat = {}; - - hidl_radio_stat->radioId = legacy_radio_stat.stats.radio; - hidl_radio_stat->V1_3.V1_0.onTimeInMs = legacy_radio_stat.stats.on_time; - hidl_radio_stat->V1_3.V1_0.txTimeInMs = legacy_radio_stat.stats.tx_time; - hidl_radio_stat->V1_3.V1_0.rxTimeInMs = legacy_radio_stat.stats.rx_time; - hidl_radio_stat->V1_3.V1_0.onTimeInMsForScan = - legacy_radio_stat.stats.on_time_scan; - hidl_radio_stat->V1_3.V1_0.txTimeInMsPerLevel = - legacy_radio_stat.tx_time_per_levels; - hidl_radio_stat->V1_3.onTimeInMsForNanScan = - legacy_radio_stat.stats.on_time_nbd; - hidl_radio_stat->V1_3.onTimeInMsForBgScan = - legacy_radio_stat.stats.on_time_gscan; - hidl_radio_stat->V1_3.onTimeInMsForRoamScan = - legacy_radio_stat.stats.on_time_roam_scan; - hidl_radio_stat->V1_3.onTimeInMsForPnoScan = - legacy_radio_stat.stats.on_time_pno_scan; - hidl_radio_stat->V1_3.onTimeInMsForHs20Scan = - legacy_radio_stat.stats.on_time_hs20; - - std::vector<V1_3::WifiChannelStats> hidl_channel_stats; - - for (const auto& channel_stat : legacy_radio_stat.channel_stats) { - V1_3::WifiChannelStats hidl_channel_stat; - hidl_channel_stat.onTimeInMs = channel_stat.on_time; - hidl_channel_stat.ccaBusyTimeInMs = channel_stat.cca_busy_time; - /* - * TODO once b/119142899 is fixed, - * replace below code with convertLegacyWifiChannelInfoToHidl() - */ - hidl_channel_stat.channel.width = WifiChannelWidthInMhz::WIDTH_20; - hidl_channel_stat.channel.centerFreq = channel_stat.channel.center_freq; - hidl_channel_stat.channel.centerFreq0 = - channel_stat.channel.center_freq0; - hidl_channel_stat.channel.centerFreq1 = - channel_stat.channel.center_freq1; - hidl_channel_stats.push_back(hidl_channel_stat); - } - - hidl_radio_stat->V1_3.channelStats = hidl_channel_stats; - - return true; -} - -bool convertLegacyLinkLayerStatsToHidl( - const legacy_hal::LinkLayerStats& legacy_stats, - StaLinkLayerStats* hidl_stats) { - if (!hidl_stats) { - return false; - } - *hidl_stats = {}; - // iface legacy_stats conversion. - hidl_stats->iface.V1_0.beaconRx = legacy_stats.iface.beacon_rx; - hidl_stats->iface.V1_0.avgRssiMgmt = legacy_stats.iface.rssi_mgmt; - hidl_stats->iface.V1_0.wmeBePktStats.rxMpdu = - legacy_stats.iface.ac[legacy_hal::WIFI_AC_BE].rx_mpdu; - hidl_stats->iface.V1_0.wmeBePktStats.txMpdu = - legacy_stats.iface.ac[legacy_hal::WIFI_AC_BE].tx_mpdu; - hidl_stats->iface.V1_0.wmeBePktStats.lostMpdu = - legacy_stats.iface.ac[legacy_hal::WIFI_AC_BE].mpdu_lost; - hidl_stats->iface.V1_0.wmeBePktStats.retries = - legacy_stats.iface.ac[legacy_hal::WIFI_AC_BE].retries; - hidl_stats->iface.wmeBeContentionTimeStats.contentionTimeMinInUsec = - legacy_stats.iface.ac[legacy_hal::WIFI_AC_BE].contention_time_min; - hidl_stats->iface.wmeBeContentionTimeStats.contentionTimeMaxInUsec = - legacy_stats.iface.ac[legacy_hal::WIFI_AC_BE].contention_time_max; - hidl_stats->iface.wmeBeContentionTimeStats.contentionTimeAvgInUsec = - legacy_stats.iface.ac[legacy_hal::WIFI_AC_BE].contention_time_avg; - hidl_stats->iface.wmeBeContentionTimeStats.contentionNumSamples = - legacy_stats.iface.ac[legacy_hal::WIFI_AC_BE].contention_num_samples; - hidl_stats->iface.V1_0.wmeBkPktStats.rxMpdu = - legacy_stats.iface.ac[legacy_hal::WIFI_AC_BK].rx_mpdu; - hidl_stats->iface.V1_0.wmeBkPktStats.txMpdu = - legacy_stats.iface.ac[legacy_hal::WIFI_AC_BK].tx_mpdu; - hidl_stats->iface.V1_0.wmeBkPktStats.lostMpdu = - legacy_stats.iface.ac[legacy_hal::WIFI_AC_BK].mpdu_lost; - hidl_stats->iface.V1_0.wmeBkPktStats.retries = - legacy_stats.iface.ac[legacy_hal::WIFI_AC_BK].retries; - hidl_stats->iface.wmeBkContentionTimeStats.contentionTimeMinInUsec = - legacy_stats.iface.ac[legacy_hal::WIFI_AC_BK].contention_time_min; - hidl_stats->iface.wmeBkContentionTimeStats.contentionTimeMaxInUsec = - legacy_stats.iface.ac[legacy_hal::WIFI_AC_BK].contention_time_max; - hidl_stats->iface.wmeBkContentionTimeStats.contentionTimeAvgInUsec = - legacy_stats.iface.ac[legacy_hal::WIFI_AC_BK].contention_time_avg; - hidl_stats->iface.wmeBkContentionTimeStats.contentionNumSamples = - legacy_stats.iface.ac[legacy_hal::WIFI_AC_BK].contention_num_samples; - hidl_stats->iface.V1_0.wmeViPktStats.rxMpdu = - legacy_stats.iface.ac[legacy_hal::WIFI_AC_VI].rx_mpdu; - hidl_stats->iface.V1_0.wmeViPktStats.txMpdu = - legacy_stats.iface.ac[legacy_hal::WIFI_AC_VI].tx_mpdu; - hidl_stats->iface.V1_0.wmeViPktStats.lostMpdu = - legacy_stats.iface.ac[legacy_hal::WIFI_AC_VI].mpdu_lost; - hidl_stats->iface.V1_0.wmeViPktStats.retries = - legacy_stats.iface.ac[legacy_hal::WIFI_AC_VI].retries; - hidl_stats->iface.wmeViContentionTimeStats.contentionTimeMinInUsec = - legacy_stats.iface.ac[legacy_hal::WIFI_AC_VI].contention_time_min; - hidl_stats->iface.wmeViContentionTimeStats.contentionTimeMaxInUsec = - legacy_stats.iface.ac[legacy_hal::WIFI_AC_VI].contention_time_max; - hidl_stats->iface.wmeViContentionTimeStats.contentionTimeAvgInUsec = - legacy_stats.iface.ac[legacy_hal::WIFI_AC_VI].contention_time_avg; - hidl_stats->iface.wmeViContentionTimeStats.contentionNumSamples = - legacy_stats.iface.ac[legacy_hal::WIFI_AC_VI].contention_num_samples; - hidl_stats->iface.V1_0.wmeVoPktStats.rxMpdu = - legacy_stats.iface.ac[legacy_hal::WIFI_AC_VO].rx_mpdu; - hidl_stats->iface.V1_0.wmeVoPktStats.txMpdu = - legacy_stats.iface.ac[legacy_hal::WIFI_AC_VO].tx_mpdu; - hidl_stats->iface.V1_0.wmeVoPktStats.lostMpdu = - legacy_stats.iface.ac[legacy_hal::WIFI_AC_VO].mpdu_lost; - hidl_stats->iface.V1_0.wmeVoPktStats.retries = - legacy_stats.iface.ac[legacy_hal::WIFI_AC_VO].retries; - hidl_stats->iface.wmeVoContentionTimeStats.contentionTimeMinInUsec = - legacy_stats.iface.ac[legacy_hal::WIFI_AC_VO].contention_time_min; - hidl_stats->iface.wmeVoContentionTimeStats.contentionTimeMaxInUsec = - legacy_stats.iface.ac[legacy_hal::WIFI_AC_VO].contention_time_max; - hidl_stats->iface.wmeVoContentionTimeStats.contentionTimeAvgInUsec = - legacy_stats.iface.ac[legacy_hal::WIFI_AC_VO].contention_time_avg; - hidl_stats->iface.wmeVoContentionTimeStats.contentionNumSamples = - legacy_stats.iface.ac[legacy_hal::WIFI_AC_VO].contention_num_samples; - hidl_stats->iface.timeSliceDutyCycleInPercent = - legacy_stats.iface.info.time_slicing_duty_cycle_percent; - // peer info legacy_stats conversion. - std::vector<StaPeerInfo> hidl_peers_info_stats; - for (const auto& legacy_peer_info_stats : legacy_stats.peers) { - StaPeerInfo hidl_peer_info_stats; - if (!convertLegacyPeerInfoStatsToHidl(legacy_peer_info_stats, - &hidl_peer_info_stats)) { - return false; - } - hidl_peers_info_stats.push_back(hidl_peer_info_stats); - } - hidl_stats->iface.peers = hidl_peers_info_stats; - // radio legacy_stats conversion. - std::vector<V1_5::StaLinkLayerRadioStats> hidl_radios_stats; - for (const auto& legacy_radio_stats : legacy_stats.radios) { - V1_5::StaLinkLayerRadioStats hidl_radio_stats; - if (!convertLegacyLinkLayerRadioStatsToHidl(legacy_radio_stats, - &hidl_radio_stats)) { - return false; - } - hidl_radios_stats.push_back(hidl_radio_stats); - } - hidl_stats->radios = hidl_radios_stats; - // Timestamp in the HAL wrapper here since it's not provided in the legacy - // HAL API. - hidl_stats->timeStampInMs = uptimeMillis(); - return true; -} - -bool convertLegacyPeerInfoStatsToHidl( - const legacy_hal::WifiPeerInfo& legacy_peer_info_stats, - StaPeerInfo* hidl_peer_info_stats) { - if (!hidl_peer_info_stats) { - return false; - } - *hidl_peer_info_stats = {}; - hidl_peer_info_stats->staCount = - legacy_peer_info_stats.peer_info.bssload.sta_count; - hidl_peer_info_stats->chanUtil = - legacy_peer_info_stats.peer_info.bssload.chan_util; - - std::vector<StaRateStat> hidlRateStats; - for (const auto& legacy_rate_stats : legacy_peer_info_stats.rate_stats) { - StaRateStat rateStat; - if (!convertLegacyWifiRateInfoToHidl(legacy_rate_stats.rate, - &rateStat.rateInfo)) { - return false; - } - rateStat.txMpdu = legacy_rate_stats.tx_mpdu; - rateStat.rxMpdu = legacy_rate_stats.rx_mpdu; - rateStat.mpduLost = legacy_rate_stats.mpdu_lost; - rateStat.retries = legacy_rate_stats.retries; - hidlRateStats.push_back(rateStat); - } - hidl_peer_info_stats->rateStats = hidlRateStats; - return true; -} - -bool convertLegacyRoamingCapabilitiesToHidl( - const legacy_hal::wifi_roaming_capabilities& legacy_caps, - StaRoamingCapabilities* hidl_caps) { - if (!hidl_caps) { - return false; - } - *hidl_caps = {}; - hidl_caps->maxBlacklistSize = legacy_caps.max_blacklist_size; - hidl_caps->maxWhitelistSize = legacy_caps.max_whitelist_size; - return true; -} - -bool convertHidlRoamingConfigToLegacy( - const StaRoamingConfig& hidl_config, - legacy_hal::wifi_roaming_config* legacy_config) { - if (!legacy_config) { - return false; - } - *legacy_config = {}; - if (hidl_config.bssidBlacklist.size() > MAX_BLACKLIST_BSSID || - hidl_config.ssidWhitelist.size() > MAX_WHITELIST_SSID) { - return false; - } - legacy_config->num_blacklist_bssid = hidl_config.bssidBlacklist.size(); - uint32_t i = 0; - for (const auto& bssid : hidl_config.bssidBlacklist) { - CHECK(bssid.size() == sizeof(legacy_hal::mac_addr)); - memcpy(legacy_config->blacklist_bssid[i++], bssid.data(), bssid.size()); - } - legacy_config->num_whitelist_ssid = hidl_config.ssidWhitelist.size(); - i = 0; - for (const auto& ssid : hidl_config.ssidWhitelist) { - CHECK(ssid.size() <= sizeof(legacy_hal::ssid_t::ssid_str)); - legacy_config->whitelist_ssid[i].length = ssid.size(); - memcpy(legacy_config->whitelist_ssid[i].ssid_str, ssid.data(), - ssid.size()); - i++; - } - return true; -} - -legacy_hal::fw_roaming_state_t convertHidlRoamingStateToLegacy( - StaRoamingState state) { - switch (state) { - case StaRoamingState::ENABLED: - return legacy_hal::ROAMING_ENABLE; - case StaRoamingState::DISABLED: - return legacy_hal::ROAMING_DISABLE; - }; - CHECK(false); -} - -legacy_hal::NanMatchAlg convertHidlNanMatchAlgToLegacy(NanMatchAlg type) { - switch (type) { - case NanMatchAlg::MATCH_ONCE: - return legacy_hal::NAN_MATCH_ALG_MATCH_ONCE; - case NanMatchAlg::MATCH_CONTINUOUS: - return legacy_hal::NAN_MATCH_ALG_MATCH_CONTINUOUS; - case NanMatchAlg::MATCH_NEVER: - return legacy_hal::NAN_MATCH_ALG_MATCH_NEVER; - } - CHECK(false); -} - -legacy_hal::NanPublishType convertHidlNanPublishTypeToLegacy( - NanPublishType type) { - switch (type) { - case NanPublishType::UNSOLICITED: - return legacy_hal::NAN_PUBLISH_TYPE_UNSOLICITED; - case NanPublishType::SOLICITED: - return legacy_hal::NAN_PUBLISH_TYPE_SOLICITED; - case NanPublishType::UNSOLICITED_SOLICITED: - return legacy_hal::NAN_PUBLISH_TYPE_UNSOLICITED_SOLICITED; - } - CHECK(false); -} - -legacy_hal::NanTxType convertHidlNanTxTypeToLegacy(NanTxType type) { - switch (type) { - case NanTxType::BROADCAST: - return legacy_hal::NAN_TX_TYPE_BROADCAST; - case NanTxType::UNICAST: - return legacy_hal::NAN_TX_TYPE_UNICAST; - } - CHECK(false); -} - -legacy_hal::NanSubscribeType convertHidlNanSubscribeTypeToLegacy( - NanSubscribeType type) { - switch (type) { - case NanSubscribeType::PASSIVE: - return legacy_hal::NAN_SUBSCRIBE_TYPE_PASSIVE; - case NanSubscribeType::ACTIVE: - return legacy_hal::NAN_SUBSCRIBE_TYPE_ACTIVE; - } - CHECK(false); -} - -legacy_hal::NanSRFType convertHidlNanSrfTypeToLegacy(NanSrfType type) { - switch (type) { - case NanSrfType::BLOOM_FILTER: - return legacy_hal::NAN_SRF_ATTR_BLOOM_FILTER; - case NanSrfType::PARTIAL_MAC_ADDR: - return legacy_hal::NAN_SRF_ATTR_PARTIAL_MAC_ADDR; - } - CHECK(false); -} - -legacy_hal::NanDataPathChannelCfg convertHidlNanDataPathChannelCfgToLegacy( - NanDataPathChannelCfg type) { - switch (type) { - case NanDataPathChannelCfg::CHANNEL_NOT_REQUESTED: - return legacy_hal::NAN_DP_CHANNEL_NOT_REQUESTED; - case NanDataPathChannelCfg::REQUEST_CHANNEL_SETUP: - return legacy_hal::NAN_DP_REQUEST_CHANNEL_SETUP; - case NanDataPathChannelCfg::FORCE_CHANNEL_SETUP: - return legacy_hal::NAN_DP_FORCE_CHANNEL_SETUP; - } - CHECK(false); -} - -NanStatusType convertLegacyNanStatusTypeToHidl(legacy_hal::NanStatusType type) { - switch (type) { - case legacy_hal::NAN_STATUS_SUCCESS: - return NanStatusType::SUCCESS; - case legacy_hal::NAN_STATUS_INTERNAL_FAILURE: - return NanStatusType::INTERNAL_FAILURE; - case legacy_hal::NAN_STATUS_PROTOCOL_FAILURE: - return NanStatusType::PROTOCOL_FAILURE; - case legacy_hal::NAN_STATUS_INVALID_PUBLISH_SUBSCRIBE_ID: - return NanStatusType::INVALID_SESSION_ID; - case legacy_hal::NAN_STATUS_NO_RESOURCE_AVAILABLE: - return NanStatusType::NO_RESOURCES_AVAILABLE; - case legacy_hal::NAN_STATUS_INVALID_PARAM: - return NanStatusType::INVALID_ARGS; - case legacy_hal::NAN_STATUS_INVALID_REQUESTOR_INSTANCE_ID: - return NanStatusType::INVALID_PEER_ID; - case legacy_hal::NAN_STATUS_INVALID_NDP_ID: - return NanStatusType::INVALID_NDP_ID; - case legacy_hal::NAN_STATUS_NAN_NOT_ALLOWED: - return NanStatusType::NAN_NOT_ALLOWED; - case legacy_hal::NAN_STATUS_NO_OTA_ACK: - return NanStatusType::NO_OTA_ACK; - case legacy_hal::NAN_STATUS_ALREADY_ENABLED: - return NanStatusType::ALREADY_ENABLED; - case legacy_hal::NAN_STATUS_FOLLOWUP_QUEUE_FULL: - return NanStatusType::FOLLOWUP_TX_QUEUE_FULL; - case legacy_hal::NAN_STATUS_UNSUPPORTED_CONCURRENCY_NAN_DISABLED: - return NanStatusType::UNSUPPORTED_CONCURRENCY_NAN_DISABLED; - } - CHECK(false); -} - -void convertToWifiNanStatus(legacy_hal::NanStatusType type, const char* str, - size_t max_len, WifiNanStatus* wifiNanStatus) { - wifiNanStatus->status = convertLegacyNanStatusTypeToHidl(type); - wifiNanStatus->description = safeConvertChar(str, max_len); -} - -bool convertHidlNanEnableRequestToLegacy( - const V1_4::NanEnableRequest& hidl_request, - legacy_hal::NanEnableRequest* legacy_request) { - if (!legacy_request) { - LOG(ERROR) - << "convertHidlNanEnableRequestToLegacy: null legacy_request"; - return false; - } - *legacy_request = {}; - - legacy_request->config_2dot4g_support = 1; - legacy_request->support_2dot4g_val = - hidl_request.operateInBand[(size_t)NanBandIndex::NAN_BAND_24GHZ]; - legacy_request->config_support_5g = 1; - legacy_request->support_5g_val = - hidl_request.operateInBand[(size_t)NanBandIndex::NAN_BAND_5GHZ]; - legacy_request->config_hop_count_limit = 1; - legacy_request->hop_count_limit_val = hidl_request.hopCountMax; - legacy_request->master_pref = hidl_request.configParams.masterPref; - legacy_request->discovery_indication_cfg = 0; - legacy_request->discovery_indication_cfg |= - hidl_request.configParams.disableDiscoveryAddressChangeIndication ? 0x1 - : 0x0; - legacy_request->discovery_indication_cfg |= - hidl_request.configParams.disableStartedClusterIndication ? 0x2 : 0x0; - legacy_request->discovery_indication_cfg |= - hidl_request.configParams.disableJoinedClusterIndication ? 0x4 : 0x0; - legacy_request->config_sid_beacon = 1; - if (hidl_request.configParams.numberOfPublishServiceIdsInBeacon > 127) { - LOG(ERROR) << "convertHidlNanEnableRequestToLegacy: " - "numberOfPublishServiceIdsInBeacon > 127"; - return false; - } - legacy_request->sid_beacon_val = - (hidl_request.configParams.includePublishServiceIdsInBeacon ? 0x1 - : 0x0) | - (hidl_request.configParams.numberOfPublishServiceIdsInBeacon << 1); - legacy_request->config_subscribe_sid_beacon = 1; - if (hidl_request.configParams.numberOfSubscribeServiceIdsInBeacon > 127) { - LOG(ERROR) << "convertHidlNanEnableRequestToLegacy: " - "numberOfSubscribeServiceIdsInBeacon > 127"; - return false; - } - legacy_request->subscribe_sid_beacon_val = - (hidl_request.configParams.includeSubscribeServiceIdsInBeacon ? 0x1 - : 0x0) | - (hidl_request.configParams.numberOfSubscribeServiceIdsInBeacon << 1); - legacy_request->config_rssi_window_size = 1; - legacy_request->rssi_window_size_val = - hidl_request.configParams.rssiWindowSize; - legacy_request->config_disc_mac_addr_randomization = 1; - legacy_request->disc_mac_addr_rand_interval_sec = - hidl_request.configParams.macAddressRandomizationIntervalSec; - legacy_request->config_2dot4g_rssi_close = 1; - if (hidl_request.configParams.bandSpecificConfig.size() != 3) { - LOG(ERROR) << "convertHidlNanEnableRequestToLegacy: " - "bandSpecificConfig.size() != 3"; - return false; - } - legacy_request->rssi_close_2dot4g_val = - hidl_request.configParams - .bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_24GHZ] - .rssiClose; - legacy_request->config_2dot4g_rssi_middle = 1; - legacy_request->rssi_middle_2dot4g_val = - hidl_request.configParams - .bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_24GHZ] - .rssiMiddle; - legacy_request->config_2dot4g_rssi_proximity = 1; - legacy_request->rssi_proximity_2dot4g_val = - hidl_request.configParams - .bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_24GHZ] - .rssiCloseProximity; - legacy_request->config_scan_params = 1; - legacy_request->scan_params_val - .dwell_time[legacy_hal::NAN_CHANNEL_24G_BAND] = - hidl_request.configParams - .bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_24GHZ] - .dwellTimeMs; - legacy_request->scan_params_val - .scan_period[legacy_hal::NAN_CHANNEL_24G_BAND] = - hidl_request.configParams - .bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_24GHZ] - .scanPeriodSec; - legacy_request->config_dw.config_2dot4g_dw_band = - hidl_request.configParams - .bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_24GHZ] - .validDiscoveryWindowIntervalVal; - legacy_request->config_dw.dw_2dot4g_interval_val = - hidl_request.configParams - .bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_24GHZ] - .discoveryWindowIntervalVal; - legacy_request->config_5g_rssi_close = 1; - legacy_request->rssi_close_5g_val = - hidl_request.configParams - .bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_5GHZ] - .rssiClose; - legacy_request->config_5g_rssi_middle = 1; - legacy_request->rssi_middle_5g_val = - hidl_request.configParams - .bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_5GHZ] - .rssiMiddle; - legacy_request->config_5g_rssi_close_proximity = 1; - legacy_request->rssi_close_proximity_5g_val = - hidl_request.configParams - .bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_5GHZ] - .rssiCloseProximity; - legacy_request->scan_params_val - .dwell_time[legacy_hal::NAN_CHANNEL_5G_BAND_LOW] = - hidl_request.configParams - .bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_5GHZ] - .dwellTimeMs; - legacy_request->scan_params_val - .scan_period[legacy_hal::NAN_CHANNEL_5G_BAND_LOW] = - hidl_request.configParams - .bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_5GHZ] - .scanPeriodSec; - legacy_request->scan_params_val - .dwell_time[legacy_hal::NAN_CHANNEL_5G_BAND_HIGH] = - hidl_request.configParams - .bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_5GHZ] - .dwellTimeMs; - legacy_request->scan_params_val - .scan_period[legacy_hal::NAN_CHANNEL_5G_BAND_HIGH] = - hidl_request.configParams - .bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_5GHZ] - .scanPeriodSec; - legacy_request->config_dw.config_5g_dw_band = - hidl_request.configParams - .bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_5GHZ] - .validDiscoveryWindowIntervalVal; - legacy_request->config_dw.dw_5g_interval_val = - hidl_request.configParams - .bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_5GHZ] - .discoveryWindowIntervalVal; - if (hidl_request.debugConfigs.validClusterIdVals) { - legacy_request->cluster_low = - hidl_request.debugConfigs.clusterIdBottomRangeVal; - legacy_request->cluster_high = - hidl_request.debugConfigs.clusterIdTopRangeVal; - } else { // need 'else' since not configurable in legacy HAL - legacy_request->cluster_low = 0x0000; - legacy_request->cluster_high = 0xFFFF; - } - legacy_request->config_intf_addr = - hidl_request.debugConfigs.validIntfAddrVal; - memcpy(legacy_request->intf_addr_val, - hidl_request.debugConfigs.intfAddrVal.data(), 6); - legacy_request->config_oui = hidl_request.debugConfigs.validOuiVal; - legacy_request->oui_val = hidl_request.debugConfigs.ouiVal; - legacy_request->config_random_factor_force = - hidl_request.debugConfigs.validRandomFactorForceVal; - legacy_request->random_factor_force_val = - hidl_request.debugConfigs.randomFactorForceVal; - legacy_request->config_hop_count_force = - hidl_request.debugConfigs.validHopCountForceVal; - legacy_request->hop_count_force_val = - hidl_request.debugConfigs.hopCountForceVal; - legacy_request->config_24g_channel = - hidl_request.debugConfigs.validDiscoveryChannelVal; - legacy_request->channel_24g_val = - hidl_request.debugConfigs - .discoveryChannelMhzVal[(size_t)NanBandIndex::NAN_BAND_24GHZ]; - legacy_request->config_5g_channel = - hidl_request.debugConfigs.validDiscoveryChannelVal; - legacy_request->channel_5g_val = - hidl_request.debugConfigs - .discoveryChannelMhzVal[(size_t)NanBandIndex::NAN_BAND_5GHZ]; - legacy_request->config_2dot4g_beacons = - hidl_request.debugConfigs.validUseBeaconsInBandVal; - legacy_request->beacon_2dot4g_val = - hidl_request.debugConfigs - .useBeaconsInBandVal[(size_t)NanBandIndex::NAN_BAND_24GHZ]; - legacy_request->config_5g_beacons = - hidl_request.debugConfigs.validUseBeaconsInBandVal; - legacy_request->beacon_5g_val = - hidl_request.debugConfigs - .useBeaconsInBandVal[(size_t)NanBandIndex::NAN_BAND_5GHZ]; - legacy_request->config_2dot4g_sdf = - hidl_request.debugConfigs.validUseSdfInBandVal; - legacy_request->sdf_2dot4g_val = - hidl_request.debugConfigs - .useSdfInBandVal[(size_t)NanBandIndex::NAN_BAND_24GHZ]; - legacy_request->config_5g_sdf = - hidl_request.debugConfigs.validUseSdfInBandVal; - legacy_request->sdf_5g_val = - hidl_request.debugConfigs - .useSdfInBandVal[(size_t)NanBandIndex::NAN_BAND_5GHZ]; - - /* TODO: b/145609058 - * Missing updates needed to legacy_hal::NanEnableRequest and conversion to - * it for 6GHz band */ - - return true; -} - -bool convertHidlNanEnableRequest_1_4ToLegacy( - const V1_4::NanEnableRequest& hidl_request1, - const NanConfigRequestSupplemental& hidl_request2, - legacy_hal::NanEnableRequest* legacy_request) { - if (!legacy_request) { - LOG(ERROR) - << "convertHidlNanEnableRequest_1_4ToLegacy: null legacy_request"; - return false; - } - - *legacy_request = {}; - if (!convertHidlNanEnableRequestToLegacy(hidl_request1, legacy_request)) { - return false; - } - - legacy_request->config_discovery_beacon_int = 1; - legacy_request->discovery_beacon_interval = - hidl_request2.V1_2.discoveryBeaconIntervalMs; - legacy_request->config_nss = 1; - legacy_request->nss = hidl_request2.V1_2.numberOfSpatialStreamsInDiscovery; - legacy_request->config_dw_early_termination = 1; - legacy_request->enable_dw_termination = - hidl_request2.V1_2.enableDiscoveryWindowEarlyTermination; - legacy_request->config_enable_ranging = 1; - legacy_request->enable_ranging = hidl_request2.V1_2.enableRanging; - - return true; -} - -bool convertHidlNanEnableRequest_1_5ToLegacy( - const V1_4::NanEnableRequest& hidl_request1, - const NanConfigRequestSupplemental& hidl_request2, - legacy_hal::NanEnableRequest* legacy_request) { - if (!legacy_request) { - LOG(ERROR) - << "convertHidlNanEnableRequest_1_5ToLegacy: null legacy_request"; - return false; - } - - *legacy_request = {}; - if (!convertHidlNanEnableRequest_1_4ToLegacy(hidl_request1, hidl_request2, - legacy_request)) { - return false; - } - - legacy_request->config_enable_instant_mode = 1; - legacy_request->enable_instant_mode = - hidl_request2.enableInstantCommunicationMode; - - return true; -} - -bool convertHidlNanConfigRequest_1_5ToLegacy( - const V1_4::NanConfigRequest& hidl_request1, - const NanConfigRequestSupplemental& hidl_request2, - legacy_hal::NanConfigRequest* legacy_request) { - if (!legacy_request) { - LOG(ERROR) - << "convertHidlNanConfigRequest_1_5ToLegacy: null legacy_request"; - return false; - } - - *legacy_request = {}; - if (!convertHidlNanConfigRequest_1_4ToLegacy(hidl_request1, hidl_request2, - legacy_request)) { - return false; - } - - legacy_request->config_enable_instant_mode = 1; - legacy_request->enable_instant_mode = - hidl_request2.enableInstantCommunicationMode; - - return true; -} - -bool convertHidlNanPublishRequestToLegacy( - const NanPublishRequest& hidl_request, - legacy_hal::NanPublishRequest* legacy_request) { - if (!legacy_request) { - LOG(ERROR) - << "convertHidlNanPublishRequestToLegacy: null legacy_request"; - return false; - } - *legacy_request = {}; - - legacy_request->publish_id = hidl_request.baseConfigs.sessionId; - legacy_request->ttl = hidl_request.baseConfigs.ttlSec; - legacy_request->period = hidl_request.baseConfigs.discoveryWindowPeriod; - legacy_request->publish_count = hidl_request.baseConfigs.discoveryCount; - legacy_request->service_name_len = - hidl_request.baseConfigs.serviceName.size(); - if (legacy_request->service_name_len > NAN_MAX_SERVICE_NAME_LEN) { - LOG(ERROR) << "convertHidlNanPublishRequestToLegacy: service_name_len " - "too large"; - return false; - } - memcpy(legacy_request->service_name, - hidl_request.baseConfigs.serviceName.data(), - legacy_request->service_name_len); - legacy_request->publish_match_indicator = convertHidlNanMatchAlgToLegacy( - hidl_request.baseConfigs.discoveryMatchIndicator); - legacy_request->service_specific_info_len = - hidl_request.baseConfigs.serviceSpecificInfo.size(); - if (legacy_request->service_specific_info_len > - NAN_MAX_SERVICE_SPECIFIC_INFO_LEN) { - LOG(ERROR) << "convertHidlNanPublishRequestToLegacy: " - "service_specific_info_len too large"; - return false; - } - memcpy(legacy_request->service_specific_info, - hidl_request.baseConfigs.serviceSpecificInfo.data(), - legacy_request->service_specific_info_len); - legacy_request->sdea_service_specific_info_len = - hidl_request.baseConfigs.extendedServiceSpecificInfo.size(); - if (legacy_request->sdea_service_specific_info_len > - NAN_MAX_SDEA_SERVICE_SPECIFIC_INFO_LEN) { - LOG(ERROR) << "convertHidlNanPublishRequestToLegacy: " - "sdea_service_specific_info_len too large"; - return false; - } - memcpy(legacy_request->sdea_service_specific_info, - hidl_request.baseConfigs.extendedServiceSpecificInfo.data(), - legacy_request->sdea_service_specific_info_len); - legacy_request->rx_match_filter_len = - hidl_request.baseConfigs.rxMatchFilter.size(); - if (legacy_request->rx_match_filter_len > NAN_MAX_MATCH_FILTER_LEN) { - LOG(ERROR) << "convertHidlNanPublishRequestToLegacy: " - "rx_match_filter_len too large"; - return false; - } - memcpy(legacy_request->rx_match_filter, - hidl_request.baseConfigs.rxMatchFilter.data(), - legacy_request->rx_match_filter_len); - legacy_request->tx_match_filter_len = - hidl_request.baseConfigs.txMatchFilter.size(); - if (legacy_request->tx_match_filter_len > NAN_MAX_MATCH_FILTER_LEN) { - LOG(ERROR) << "convertHidlNanPublishRequestToLegacy: " - "tx_match_filter_len too large"; - return false; - } - memcpy(legacy_request->tx_match_filter, - hidl_request.baseConfigs.txMatchFilter.data(), - legacy_request->tx_match_filter_len); - legacy_request->rssi_threshold_flag = - hidl_request.baseConfigs.useRssiThreshold; - legacy_request->recv_indication_cfg = 0; - legacy_request->recv_indication_cfg |= - hidl_request.baseConfigs.disableDiscoveryTerminationIndication ? 0x1 - : 0x0; - legacy_request->recv_indication_cfg |= - hidl_request.baseConfigs.disableMatchExpirationIndication ? 0x2 : 0x0; - legacy_request->recv_indication_cfg |= - hidl_request.baseConfigs.disableFollowupReceivedIndication ? 0x4 : 0x0; - legacy_request->recv_indication_cfg |= 0x8; - legacy_request->cipher_type = - (unsigned int)hidl_request.baseConfigs.securityConfig.cipherType; - if (hidl_request.baseConfigs.securityConfig.securityType == - NanDataPathSecurityType::PMK) { - legacy_request->key_info.key_type = - legacy_hal::NAN_SECURITY_KEY_INPUT_PMK; - legacy_request->key_info.body.pmk_info.pmk_len = - hidl_request.baseConfigs.securityConfig.pmk.size(); - if (legacy_request->key_info.body.pmk_info.pmk_len != - NAN_PMK_INFO_LEN) { - LOG(ERROR) - << "convertHidlNanPublishRequestToLegacy: invalid pmk_len"; - return false; - } - memcpy(legacy_request->key_info.body.pmk_info.pmk, - hidl_request.baseConfigs.securityConfig.pmk.data(), - legacy_request->key_info.body.pmk_info.pmk_len); - } - if (hidl_request.baseConfigs.securityConfig.securityType == - NanDataPathSecurityType::PASSPHRASE) { - legacy_request->key_info.key_type = - legacy_hal::NAN_SECURITY_KEY_INPUT_PASSPHRASE; - legacy_request->key_info.body.passphrase_info.passphrase_len = - hidl_request.baseConfigs.securityConfig.passphrase.size(); - if (legacy_request->key_info.body.passphrase_info.passphrase_len < - NAN_SECURITY_MIN_PASSPHRASE_LEN) { - LOG(ERROR) << "convertHidlNanPublishRequestToLegacy: " - "passphrase_len too small"; - return false; - } - if (legacy_request->key_info.body.passphrase_info.passphrase_len > - NAN_SECURITY_MAX_PASSPHRASE_LEN) { - LOG(ERROR) << "convertHidlNanPublishRequestToLegacy: " - "passphrase_len too large"; - return false; - } - memcpy(legacy_request->key_info.body.passphrase_info.passphrase, - hidl_request.baseConfigs.securityConfig.passphrase.data(), - legacy_request->key_info.body.passphrase_info.passphrase_len); - } - legacy_request->sdea_params.security_cfg = - (hidl_request.baseConfigs.securityConfig.securityType != - NanDataPathSecurityType::OPEN) - ? legacy_hal::NAN_DP_CONFIG_SECURITY - : legacy_hal::NAN_DP_CONFIG_NO_SECURITY; - legacy_request->sdea_params.ranging_state = - hidl_request.baseConfigs.rangingRequired - ? legacy_hal::NAN_RANGING_ENABLE - : legacy_hal::NAN_RANGING_DISABLE; - legacy_request->ranging_cfg.ranging_interval_msec = - hidl_request.baseConfigs.rangingIntervalMsec; - legacy_request->ranging_cfg.config_ranging_indications = - hidl_request.baseConfigs.configRangingIndications; - legacy_request->ranging_cfg.distance_ingress_mm = - hidl_request.baseConfigs.distanceIngressCm * 10; - legacy_request->ranging_cfg.distance_egress_mm = - hidl_request.baseConfigs.distanceEgressCm * 10; - legacy_request->ranging_auto_response = - hidl_request.baseConfigs.rangingRequired - ? legacy_hal::NAN_RANGING_AUTO_RESPONSE_ENABLE - : legacy_hal::NAN_RANGING_AUTO_RESPONSE_DISABLE; - legacy_request->sdea_params.range_report = - legacy_hal::NAN_DISABLE_RANGE_REPORT; - legacy_request->publish_type = - convertHidlNanPublishTypeToLegacy(hidl_request.publishType); - legacy_request->tx_type = convertHidlNanTxTypeToLegacy(hidl_request.txType); - legacy_request->service_responder_policy = - hidl_request.autoAcceptDataPathRequests - ? legacy_hal::NAN_SERVICE_ACCEPT_POLICY_ALL - : legacy_hal::NAN_SERVICE_ACCEPT_POLICY_NONE; - - return true; -} - -bool convertHidlNanSubscribeRequestToLegacy( - const NanSubscribeRequest& hidl_request, - legacy_hal::NanSubscribeRequest* legacy_request) { - if (!legacy_request) { - LOG(ERROR) - << "convertHidlNanSubscribeRequestToLegacy: legacy_request is null"; - return false; - } - *legacy_request = {}; - - legacy_request->subscribe_id = hidl_request.baseConfigs.sessionId; - legacy_request->ttl = hidl_request.baseConfigs.ttlSec; - legacy_request->period = hidl_request.baseConfigs.discoveryWindowPeriod; - legacy_request->subscribe_count = hidl_request.baseConfigs.discoveryCount; - legacy_request->service_name_len = - hidl_request.baseConfigs.serviceName.size(); - if (legacy_request->service_name_len > NAN_MAX_SERVICE_NAME_LEN) { - LOG(ERROR) << "convertHidlNanSubscribeRequestToLegacy: " - "service_name_len too large"; - return false; - } - memcpy(legacy_request->service_name, - hidl_request.baseConfigs.serviceName.data(), - legacy_request->service_name_len); - legacy_request->subscribe_match_indicator = convertHidlNanMatchAlgToLegacy( - hidl_request.baseConfigs.discoveryMatchIndicator); - legacy_request->service_specific_info_len = - hidl_request.baseConfigs.serviceSpecificInfo.size(); - if (legacy_request->service_specific_info_len > - NAN_MAX_SERVICE_SPECIFIC_INFO_LEN) { - LOG(ERROR) << "convertHidlNanSubscribeRequestToLegacy: " - "service_specific_info_len too large"; - return false; - } - memcpy(legacy_request->service_specific_info, - hidl_request.baseConfigs.serviceSpecificInfo.data(), - legacy_request->service_specific_info_len); - legacy_request->sdea_service_specific_info_len = - hidl_request.baseConfigs.extendedServiceSpecificInfo.size(); - if (legacy_request->sdea_service_specific_info_len > - NAN_MAX_SDEA_SERVICE_SPECIFIC_INFO_LEN) { - LOG(ERROR) << "convertHidlNanSubscribeRequestToLegacy: " - "sdea_service_specific_info_len too large"; - return false; - } - memcpy(legacy_request->sdea_service_specific_info, - hidl_request.baseConfigs.extendedServiceSpecificInfo.data(), - legacy_request->sdea_service_specific_info_len); - legacy_request->rx_match_filter_len = - hidl_request.baseConfigs.rxMatchFilter.size(); - if (legacy_request->rx_match_filter_len > NAN_MAX_MATCH_FILTER_LEN) { - LOG(ERROR) << "convertHidlNanSubscribeRequestToLegacy: " - "rx_match_filter_len too large"; - return false; - } - memcpy(legacy_request->rx_match_filter, - hidl_request.baseConfigs.rxMatchFilter.data(), - legacy_request->rx_match_filter_len); - legacy_request->tx_match_filter_len = - hidl_request.baseConfigs.txMatchFilter.size(); - if (legacy_request->tx_match_filter_len > NAN_MAX_MATCH_FILTER_LEN) { - LOG(ERROR) << "convertHidlNanSubscribeRequestToLegacy: " - "tx_match_filter_len too large"; - return false; - } - memcpy(legacy_request->tx_match_filter, - hidl_request.baseConfigs.txMatchFilter.data(), - legacy_request->tx_match_filter_len); - legacy_request->rssi_threshold_flag = - hidl_request.baseConfigs.useRssiThreshold; - legacy_request->recv_indication_cfg = 0; - legacy_request->recv_indication_cfg |= - hidl_request.baseConfigs.disableDiscoveryTerminationIndication ? 0x1 - : 0x0; - legacy_request->recv_indication_cfg |= - hidl_request.baseConfigs.disableMatchExpirationIndication ? 0x2 : 0x0; - legacy_request->recv_indication_cfg |= - hidl_request.baseConfigs.disableFollowupReceivedIndication ? 0x4 : 0x0; - legacy_request->cipher_type = - (unsigned int)hidl_request.baseConfigs.securityConfig.cipherType; - if (hidl_request.baseConfigs.securityConfig.securityType == - NanDataPathSecurityType::PMK) { - legacy_request->key_info.key_type = - legacy_hal::NAN_SECURITY_KEY_INPUT_PMK; - legacy_request->key_info.body.pmk_info.pmk_len = - hidl_request.baseConfigs.securityConfig.pmk.size(); - if (legacy_request->key_info.body.pmk_info.pmk_len != - NAN_PMK_INFO_LEN) { - LOG(ERROR) - << "convertHidlNanSubscribeRequestToLegacy: invalid pmk_len"; - return false; - } - memcpy(legacy_request->key_info.body.pmk_info.pmk, - hidl_request.baseConfigs.securityConfig.pmk.data(), - legacy_request->key_info.body.pmk_info.pmk_len); - } - if (hidl_request.baseConfigs.securityConfig.securityType == - NanDataPathSecurityType::PASSPHRASE) { - legacy_request->key_info.key_type = - legacy_hal::NAN_SECURITY_KEY_INPUT_PASSPHRASE; - legacy_request->key_info.body.passphrase_info.passphrase_len = - hidl_request.baseConfigs.securityConfig.passphrase.size(); - if (legacy_request->key_info.body.passphrase_info.passphrase_len < - NAN_SECURITY_MIN_PASSPHRASE_LEN) { - LOG(ERROR) << "convertHidlNanSubscribeRequestToLegacy: " - "passphrase_len too small"; - return false; - } - if (legacy_request->key_info.body.passphrase_info.passphrase_len > - NAN_SECURITY_MAX_PASSPHRASE_LEN) { - LOG(ERROR) << "convertHidlNanSubscribeRequestToLegacy: " - "passphrase_len too large"; - return false; - } - memcpy(legacy_request->key_info.body.passphrase_info.passphrase, - hidl_request.baseConfigs.securityConfig.passphrase.data(), - legacy_request->key_info.body.passphrase_info.passphrase_len); - } - legacy_request->sdea_params.security_cfg = - (hidl_request.baseConfigs.securityConfig.securityType != - NanDataPathSecurityType::OPEN) - ? legacy_hal::NAN_DP_CONFIG_SECURITY - : legacy_hal::NAN_DP_CONFIG_NO_SECURITY; - legacy_request->sdea_params.ranging_state = - hidl_request.baseConfigs.rangingRequired - ? legacy_hal::NAN_RANGING_ENABLE - : legacy_hal::NAN_RANGING_DISABLE; - legacy_request->ranging_cfg.ranging_interval_msec = - hidl_request.baseConfigs.rangingIntervalMsec; - legacy_request->ranging_cfg.config_ranging_indications = - hidl_request.baseConfigs.configRangingIndications; - legacy_request->ranging_cfg.distance_ingress_mm = - hidl_request.baseConfigs.distanceIngressCm * 10; - legacy_request->ranging_cfg.distance_egress_mm = - hidl_request.baseConfigs.distanceEgressCm * 10; - legacy_request->ranging_auto_response = - hidl_request.baseConfigs.rangingRequired - ? legacy_hal::NAN_RANGING_AUTO_RESPONSE_ENABLE - : legacy_hal::NAN_RANGING_AUTO_RESPONSE_DISABLE; - legacy_request->sdea_params.range_report = - legacy_hal::NAN_DISABLE_RANGE_REPORT; - legacy_request->subscribe_type = - convertHidlNanSubscribeTypeToLegacy(hidl_request.subscribeType); - legacy_request->serviceResponseFilter = - convertHidlNanSrfTypeToLegacy(hidl_request.srfType); - legacy_request->serviceResponseInclude = - hidl_request.srfRespondIfInAddressSet - ? legacy_hal::NAN_SRF_INCLUDE_RESPOND - : legacy_hal::NAN_SRF_INCLUDE_DO_NOT_RESPOND; - legacy_request->useServiceResponseFilter = - hidl_request.shouldUseSrf ? legacy_hal::NAN_USE_SRF - : legacy_hal::NAN_DO_NOT_USE_SRF; - legacy_request->ssiRequiredForMatchIndication = - hidl_request.isSsiRequiredForMatch - ? legacy_hal::NAN_SSI_REQUIRED_IN_MATCH_IND - : legacy_hal::NAN_SSI_NOT_REQUIRED_IN_MATCH_IND; - legacy_request->num_intf_addr_present = hidl_request.intfAddr.size(); - if (legacy_request->num_intf_addr_present > NAN_MAX_SUBSCRIBE_MAX_ADDRESS) { - LOG(ERROR) << "convertHidlNanSubscribeRequestToLegacy: " - "num_intf_addr_present - too many"; - return false; - } - for (int i = 0; i < legacy_request->num_intf_addr_present; i++) { - memcpy(legacy_request->intf_addr[i], hidl_request.intfAddr[i].data(), - 6); - } - - return true; -} - -bool convertHidlNanTransmitFollowupRequestToLegacy( - const NanTransmitFollowupRequest& hidl_request, - legacy_hal::NanTransmitFollowupRequest* legacy_request) { - if (!legacy_request) { - LOG(ERROR) << "convertHidlNanTransmitFollowupRequestToLegacy: " - "legacy_request is null"; - return false; - } - *legacy_request = {}; - - legacy_request->publish_subscribe_id = hidl_request.discoverySessionId; - legacy_request->requestor_instance_id = hidl_request.peerId; - memcpy(legacy_request->addr, hidl_request.addr.data(), 6); - legacy_request->priority = hidl_request.isHighPriority - ? legacy_hal::NAN_TX_PRIORITY_HIGH - : legacy_hal::NAN_TX_PRIORITY_NORMAL; - legacy_request->dw_or_faw = hidl_request.shouldUseDiscoveryWindow - ? legacy_hal::NAN_TRANSMIT_IN_DW - : legacy_hal::NAN_TRANSMIT_IN_FAW; - legacy_request->service_specific_info_len = - hidl_request.serviceSpecificInfo.size(); - if (legacy_request->service_specific_info_len > - NAN_MAX_SERVICE_SPECIFIC_INFO_LEN) { - LOG(ERROR) << "convertHidlNanTransmitFollowupRequestToLegacy: " - "service_specific_info_len too large"; - return false; - } - memcpy(legacy_request->service_specific_info, - hidl_request.serviceSpecificInfo.data(), - legacy_request->service_specific_info_len); - legacy_request->sdea_service_specific_info_len = - hidl_request.extendedServiceSpecificInfo.size(); - if (legacy_request->sdea_service_specific_info_len > - NAN_MAX_SDEA_SERVICE_SPECIFIC_INFO_LEN) { - LOG(ERROR) << "convertHidlNanTransmitFollowupRequestToLegacy: " - "sdea_service_specific_info_len too large"; - return false; - } - memcpy(legacy_request->sdea_service_specific_info, - hidl_request.extendedServiceSpecificInfo.data(), - legacy_request->sdea_service_specific_info_len); - legacy_request->recv_indication_cfg = - hidl_request.disableFollowupResultIndication ? 0x1 : 0x0; - - return true; -} - -bool convertHidlNanConfigRequestToLegacy( - const V1_4::NanConfigRequest& hidl_request, - legacy_hal::NanConfigRequest* legacy_request) { - if (!legacy_request) { - LOG(ERROR) - << "convertHidlNanConfigRequestToLegacy: legacy_request is null"; - return false; - } - *legacy_request = {}; - - // TODO: b/34059183 tracks missing configurations in legacy HAL or uknown - // defaults - legacy_request->master_pref = hidl_request.masterPref; - legacy_request->discovery_indication_cfg = 0; - legacy_request->discovery_indication_cfg |= - hidl_request.disableDiscoveryAddressChangeIndication ? 0x1 : 0x0; - legacy_request->discovery_indication_cfg |= - hidl_request.disableStartedClusterIndication ? 0x2 : 0x0; - legacy_request->discovery_indication_cfg |= - hidl_request.disableJoinedClusterIndication ? 0x4 : 0x0; - legacy_request->config_sid_beacon = 1; - if (hidl_request.numberOfPublishServiceIdsInBeacon > 127) { - LOG(ERROR) << "convertHidlNanConfigRequestToLegacy: " - "numberOfPublishServiceIdsInBeacon > 127"; - return false; - } - legacy_request->sid_beacon = - (hidl_request.includePublishServiceIdsInBeacon ? 0x1 : 0x0) | - (hidl_request.numberOfPublishServiceIdsInBeacon << 1); - legacy_request->config_subscribe_sid_beacon = 1; - if (hidl_request.numberOfSubscribeServiceIdsInBeacon > 127) { - LOG(ERROR) << "convertHidlNanConfigRequestToLegacy: " - "numberOfSubscribeServiceIdsInBeacon > 127"; - return false; - } - legacy_request->subscribe_sid_beacon_val = - (hidl_request.includeSubscribeServiceIdsInBeacon ? 0x1 : 0x0) | - (hidl_request.numberOfSubscribeServiceIdsInBeacon << 1); - legacy_request->config_rssi_window_size = 1; - legacy_request->rssi_window_size_val = hidl_request.rssiWindowSize; - legacy_request->config_disc_mac_addr_randomization = 1; - legacy_request->disc_mac_addr_rand_interval_sec = - hidl_request.macAddressRandomizationIntervalSec; - /* TODO : missing - legacy_request->config_2dot4g_rssi_close = 1; - legacy_request->rssi_close_2dot4g_val = - hidl_request.bandSpecificConfig[ - (size_t) NanBandIndex::NAN_BAND_24GHZ].rssiClose; - legacy_request->config_2dot4g_rssi_middle = 1; - legacy_request->rssi_middle_2dot4g_val = - hidl_request.bandSpecificConfig[ - (size_t) NanBandIndex::NAN_BAND_24GHZ].rssiMiddle; - legacy_request->config_2dot4g_rssi_proximity = 1; - legacy_request->rssi_proximity_2dot4g_val = - hidl_request.bandSpecificConfig[ - (size_t) NanBandIndex::NAN_BAND_24GHZ].rssiCloseProximity; - */ - legacy_request->config_scan_params = 1; - legacy_request->scan_params_val - .dwell_time[legacy_hal::NAN_CHANNEL_24G_BAND] = - hidl_request.bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_24GHZ] - .dwellTimeMs; - legacy_request->scan_params_val - .scan_period[legacy_hal::NAN_CHANNEL_24G_BAND] = - hidl_request.bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_24GHZ] - .scanPeriodSec; - legacy_request->config_dw.config_2dot4g_dw_band = - hidl_request.bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_24GHZ] - .validDiscoveryWindowIntervalVal; - legacy_request->config_dw.dw_2dot4g_interval_val = - hidl_request.bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_24GHZ] - .discoveryWindowIntervalVal; - /* TODO: missing - legacy_request->config_5g_rssi_close = 1; - legacy_request->rssi_close_5g_val = - hidl_request.bandSpecificConfig[ - (size_t) NanBandIndex::NAN_BAND_5GHZ].rssiClose; - legacy_request->config_5g_rssi_middle = 1; - legacy_request->rssi_middle_5g_val = - hidl_request.bandSpecificConfig[ - (size_t) NanBandIndex::NAN_BAND_5GHZ].rssiMiddle; - */ - legacy_request->config_5g_rssi_close_proximity = 1; - legacy_request->rssi_close_proximity_5g_val = - hidl_request.bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_5GHZ] - .rssiCloseProximity; - legacy_request->scan_params_val - .dwell_time[legacy_hal::NAN_CHANNEL_5G_BAND_LOW] = - hidl_request.bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_5GHZ] - .dwellTimeMs; - legacy_request->scan_params_val - .scan_period[legacy_hal::NAN_CHANNEL_5G_BAND_LOW] = - hidl_request.bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_5GHZ] - .scanPeriodSec; - legacy_request->scan_params_val - .dwell_time[legacy_hal::NAN_CHANNEL_5G_BAND_HIGH] = - hidl_request.bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_5GHZ] - .dwellTimeMs; - legacy_request->scan_params_val - .scan_period[legacy_hal::NAN_CHANNEL_5G_BAND_HIGH] = - hidl_request.bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_5GHZ] - .scanPeriodSec; - legacy_request->config_dw.config_5g_dw_band = - hidl_request.bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_5GHZ] - .validDiscoveryWindowIntervalVal; - legacy_request->config_dw.dw_5g_interval_val = - hidl_request.bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_5GHZ] - .discoveryWindowIntervalVal; - /* TODO: b/145609058 - * Missing updates needed to legacy_hal::NanConfigRequest and conversion to - * it for 6GHz band */ - - return true; -} - -bool convertHidlNanConfigRequest_1_4ToLegacy( - const V1_4::NanConfigRequest& hidl_request1, - const NanConfigRequestSupplemental& hidl_request2, - legacy_hal::NanConfigRequest* legacy_request) { - if (!legacy_request) { - LOG(ERROR) << "convertHidlNanConfigRequest_1_4ToLegacy: legacy_request " - "is null"; - return false; - } - - *legacy_request = {}; - if (!convertHidlNanConfigRequestToLegacy(hidl_request1, legacy_request)) { - return false; - } - - legacy_request->config_discovery_beacon_int = 1; - legacy_request->discovery_beacon_interval = - hidl_request2.V1_2.discoveryBeaconIntervalMs; - legacy_request->config_nss = 1; - legacy_request->nss = hidl_request2.V1_2.numberOfSpatialStreamsInDiscovery; - legacy_request->config_dw_early_termination = 1; - legacy_request->enable_dw_termination = - hidl_request2.V1_2.enableDiscoveryWindowEarlyTermination; - legacy_request->config_enable_ranging = 1; - legacy_request->enable_ranging = hidl_request2.V1_2.enableRanging; - - return true; -} - -bool convertHidlNanDataPathInitiatorRequestToLegacy( - const NanInitiateDataPathRequest& hidl_request, - legacy_hal::NanDataPathInitiatorRequest* legacy_request) { - if (!legacy_request) { - LOG(ERROR) << "convertHidlNanDataPathInitiatorRequestToLegacy: " - "legacy_request is null"; - return false; - } - *legacy_request = {}; - - legacy_request->requestor_instance_id = hidl_request.peerId; - memcpy(legacy_request->peer_disc_mac_addr, - hidl_request.peerDiscMacAddr.data(), 6); - legacy_request->channel_request_type = - convertHidlNanDataPathChannelCfgToLegacy( - hidl_request.channelRequestType); - legacy_request->channel = hidl_request.channel; - if (strnlen(hidl_request.ifaceName.c_str(), IFNAMSIZ + 1) == IFNAMSIZ + 1) { - LOG(ERROR) << "convertHidlNanDataPathInitiatorRequestToLegacy: " - "ifaceName too long"; - return false; - } - strncpy(legacy_request->ndp_iface, hidl_request.ifaceName.c_str(), - IFNAMSIZ + 1); - legacy_request->ndp_cfg.security_cfg = - (hidl_request.securityConfig.securityType != - NanDataPathSecurityType::OPEN) - ? legacy_hal::NAN_DP_CONFIG_SECURITY - : legacy_hal::NAN_DP_CONFIG_NO_SECURITY; - legacy_request->app_info.ndp_app_info_len = hidl_request.appInfo.size(); - if (legacy_request->app_info.ndp_app_info_len > NAN_DP_MAX_APP_INFO_LEN) { - LOG(ERROR) << "convertHidlNanDataPathInitiatorRequestToLegacy: " - "ndp_app_info_len too large"; - return false; - } - memcpy(legacy_request->app_info.ndp_app_info, hidl_request.appInfo.data(), - legacy_request->app_info.ndp_app_info_len); - legacy_request->cipher_type = - (unsigned int)hidl_request.securityConfig.cipherType; - if (hidl_request.securityConfig.securityType == - NanDataPathSecurityType::PMK) { - legacy_request->key_info.key_type = - legacy_hal::NAN_SECURITY_KEY_INPUT_PMK; - legacy_request->key_info.body.pmk_info.pmk_len = - hidl_request.securityConfig.pmk.size(); - if (legacy_request->key_info.body.pmk_info.pmk_len != - NAN_PMK_INFO_LEN) { - LOG(ERROR) << "convertHidlNanDataPathInitiatorRequestToLegacy: " - "invalid pmk_len"; - return false; - } - memcpy(legacy_request->key_info.body.pmk_info.pmk, - hidl_request.securityConfig.pmk.data(), - legacy_request->key_info.body.pmk_info.pmk_len); - } - if (hidl_request.securityConfig.securityType == - NanDataPathSecurityType::PASSPHRASE) { - legacy_request->key_info.key_type = - legacy_hal::NAN_SECURITY_KEY_INPUT_PASSPHRASE; - legacy_request->key_info.body.passphrase_info.passphrase_len = - hidl_request.securityConfig.passphrase.size(); - if (legacy_request->key_info.body.passphrase_info.passphrase_len < - NAN_SECURITY_MIN_PASSPHRASE_LEN) { - LOG(ERROR) << "convertHidlNanDataPathInitiatorRequestToLegacy: " - "passphrase_len too small"; - return false; - } - if (legacy_request->key_info.body.passphrase_info.passphrase_len > - NAN_SECURITY_MAX_PASSPHRASE_LEN) { - LOG(ERROR) << "convertHidlNanDataPathInitiatorRequestToLegacy: " - "passphrase_len too large"; - return false; - } - memcpy(legacy_request->key_info.body.passphrase_info.passphrase, - hidl_request.securityConfig.passphrase.data(), - legacy_request->key_info.body.passphrase_info.passphrase_len); - } - legacy_request->service_name_len = hidl_request.serviceNameOutOfBand.size(); - if (legacy_request->service_name_len > NAN_MAX_SERVICE_NAME_LEN) { - LOG(ERROR) << "convertHidlNanDataPathInitiatorRequestToLegacy: " - "service_name_len too large"; - return false; - } - memcpy(legacy_request->service_name, - hidl_request.serviceNameOutOfBand.data(), - legacy_request->service_name_len); - - return true; -} - -bool convertHidlNanDataPathIndicationResponseToLegacy( - const NanRespondToDataPathIndicationRequest& hidl_request, - legacy_hal::NanDataPathIndicationResponse* legacy_request) { - if (!legacy_request) { - LOG(ERROR) << "convertHidlNanDataPathIndicationResponseToLegacy: " - "legacy_request is null"; - return false; - } - *legacy_request = {}; - - legacy_request->rsp_code = hidl_request.acceptRequest - ? legacy_hal::NAN_DP_REQUEST_ACCEPT - : legacy_hal::NAN_DP_REQUEST_REJECT; - legacy_request->ndp_instance_id = hidl_request.ndpInstanceId; - if (strnlen(hidl_request.ifaceName.c_str(), IFNAMSIZ + 1) == IFNAMSIZ + 1) { - LOG(ERROR) << "convertHidlNanDataPathIndicationResponseToLegacy: " - "ifaceName too long"; - return false; - } - strncpy(legacy_request->ndp_iface, hidl_request.ifaceName.c_str(), - IFNAMSIZ + 1); - legacy_request->ndp_cfg.security_cfg = - (hidl_request.securityConfig.securityType != - NanDataPathSecurityType::OPEN) - ? legacy_hal::NAN_DP_CONFIG_SECURITY - : legacy_hal::NAN_DP_CONFIG_NO_SECURITY; - legacy_request->app_info.ndp_app_info_len = hidl_request.appInfo.size(); - if (legacy_request->app_info.ndp_app_info_len > NAN_DP_MAX_APP_INFO_LEN) { - LOG(ERROR) << "convertHidlNanDataPathIndicationResponseToLegacy: " - "ndp_app_info_len too large"; - return false; - } - memcpy(legacy_request->app_info.ndp_app_info, hidl_request.appInfo.data(), - legacy_request->app_info.ndp_app_info_len); - legacy_request->cipher_type = - (unsigned int)hidl_request.securityConfig.cipherType; - if (hidl_request.securityConfig.securityType == - NanDataPathSecurityType::PMK) { - legacy_request->key_info.key_type = - legacy_hal::NAN_SECURITY_KEY_INPUT_PMK; - legacy_request->key_info.body.pmk_info.pmk_len = - hidl_request.securityConfig.pmk.size(); - if (legacy_request->key_info.body.pmk_info.pmk_len != - NAN_PMK_INFO_LEN) { - LOG(ERROR) << "convertHidlNanDataPathIndicationResponseToLegacy: " - "invalid pmk_len"; - return false; - } - memcpy(legacy_request->key_info.body.pmk_info.pmk, - hidl_request.securityConfig.pmk.data(), - legacy_request->key_info.body.pmk_info.pmk_len); - } - if (hidl_request.securityConfig.securityType == - NanDataPathSecurityType::PASSPHRASE) { - legacy_request->key_info.key_type = - legacy_hal::NAN_SECURITY_KEY_INPUT_PASSPHRASE; - legacy_request->key_info.body.passphrase_info.passphrase_len = - hidl_request.securityConfig.passphrase.size(); - if (legacy_request->key_info.body.passphrase_info.passphrase_len < - NAN_SECURITY_MIN_PASSPHRASE_LEN) { - LOG(ERROR) << "convertHidlNanDataPathIndicationResponseToLegacy: " - "passphrase_len too small"; - return false; - } - if (legacy_request->key_info.body.passphrase_info.passphrase_len > - NAN_SECURITY_MAX_PASSPHRASE_LEN) { - LOG(ERROR) << "convertHidlNanDataPathIndicationResponseToLegacy: " - "passphrase_len too large"; - return false; - } - memcpy(legacy_request->key_info.body.passphrase_info.passphrase, - hidl_request.securityConfig.passphrase.data(), - legacy_request->key_info.body.passphrase_info.passphrase_len); - } - legacy_request->service_name_len = hidl_request.serviceNameOutOfBand.size(); - if (legacy_request->service_name_len > NAN_MAX_SERVICE_NAME_LEN) { - LOG(ERROR) << "convertHidlNanDataPathIndicationResponseToLegacy: " - "service_name_len too large"; - return false; - } - memcpy(legacy_request->service_name, - hidl_request.serviceNameOutOfBand.data(), - legacy_request->service_name_len); - - return true; -} - -bool convertLegacyNanResponseHeaderToHidl( - const legacy_hal::NanResponseMsg& legacy_response, - WifiNanStatus* wifiNanStatus) { - if (!wifiNanStatus) { - LOG(ERROR) - << "convertLegacyNanResponseHeaderToHidl: wifiNanStatus is null"; - return false; - } - *wifiNanStatus = {}; - - convertToWifiNanStatus(legacy_response.status, legacy_response.nan_error, - sizeof(legacy_response.nan_error), wifiNanStatus); - return true; -} - -bool convertLegacyNanCapabilitiesResponseToHidl( - const legacy_hal::NanCapabilities& legacy_response, - NanCapabilities* hidl_response) { - if (!hidl_response) { - LOG(ERROR) << "convertLegacyNanCapabilitiesResponseToHidl: " - "hidl_response is null"; - return false; - } - *hidl_response = {}; - - hidl_response->V1_0.maxConcurrentClusters = - legacy_response.max_concurrent_nan_clusters; - hidl_response->V1_0.maxPublishes = legacy_response.max_publishes; - hidl_response->V1_0.maxSubscribes = legacy_response.max_subscribes; - hidl_response->V1_0.maxServiceNameLen = - legacy_response.max_service_name_len; - hidl_response->V1_0.maxMatchFilterLen = - legacy_response.max_match_filter_len; - hidl_response->V1_0.maxTotalMatchFilterLen = - legacy_response.max_total_match_filter_len; - hidl_response->V1_0.maxServiceSpecificInfoLen = - legacy_response.max_service_specific_info_len; - hidl_response->V1_0.maxExtendedServiceSpecificInfoLen = - legacy_response.max_sdea_service_specific_info_len; - hidl_response->V1_0.maxNdiInterfaces = legacy_response.max_ndi_interfaces; - hidl_response->V1_0.maxNdpSessions = legacy_response.max_ndp_sessions; - hidl_response->V1_0.maxAppInfoLen = legacy_response.max_app_info_len; - hidl_response->V1_0.maxQueuedTransmitFollowupMsgs = - legacy_response.max_queued_transmit_followup_msgs; - hidl_response->V1_0.maxSubscribeInterfaceAddresses = - legacy_response.max_subscribe_address; - hidl_response->V1_0.supportedCipherSuites = - legacy_response.cipher_suites_supported; - hidl_response->instantCommunicationModeSupportFlag = - legacy_response.is_instant_mode_supported; - - return true; -} - -bool convertLegacyNanMatchIndToHidl(const legacy_hal::NanMatchInd& legacy_ind, - NanMatchInd* hidl_ind) { - if (!hidl_ind) { - LOG(ERROR) << "convertLegacyNanMatchIndToHidl: hidl_ind is null"; - return false; - } - *hidl_ind = {}; - - hidl_ind->discoverySessionId = legacy_ind.publish_subscribe_id; - hidl_ind->peerId = legacy_ind.requestor_instance_id; - hidl_ind->addr = hidl_array<uint8_t, 6>(legacy_ind.addr); - hidl_ind->serviceSpecificInfo = - std::vector<uint8_t>(legacy_ind.service_specific_info, - legacy_ind.service_specific_info + - legacy_ind.service_specific_info_len); - hidl_ind->extendedServiceSpecificInfo = - std::vector<uint8_t>(legacy_ind.sdea_service_specific_info, - legacy_ind.sdea_service_specific_info + - legacy_ind.sdea_service_specific_info_len); - hidl_ind->matchFilter = std::vector<uint8_t>( - legacy_ind.sdf_match_filter, - legacy_ind.sdf_match_filter + legacy_ind.sdf_match_filter_len); - hidl_ind->matchOccuredInBeaconFlag = legacy_ind.match_occured_flag == 1; - hidl_ind->outOfResourceFlag = legacy_ind.out_of_resource_flag == 1; - hidl_ind->rssiValue = legacy_ind.rssi_value; - hidl_ind->peerCipherType = (NanCipherSuiteType)legacy_ind.peer_cipher_type; - hidl_ind->peerRequiresSecurityEnabledInNdp = - legacy_ind.peer_sdea_params.security_cfg == - legacy_hal::NAN_DP_CONFIG_SECURITY; - hidl_ind->peerRequiresRanging = legacy_ind.peer_sdea_params.ranging_state == - legacy_hal::NAN_RANGING_ENABLE; - hidl_ind->rangingMeasurementInCm = - legacy_ind.range_info.range_measurement_mm / 10; - hidl_ind->rangingIndicationType = legacy_ind.range_info.ranging_event_type; - - return true; -} - -bool convertLegacyNanFollowupIndToHidl( - const legacy_hal::NanFollowupInd& legacy_ind, - NanFollowupReceivedInd* hidl_ind) { - if (!hidl_ind) { - LOG(ERROR) << "convertLegacyNanFollowupIndToHidl: hidl_ind is null"; - return false; - } - *hidl_ind = {}; - - hidl_ind->discoverySessionId = legacy_ind.publish_subscribe_id; - hidl_ind->peerId = legacy_ind.requestor_instance_id; - hidl_ind->addr = hidl_array<uint8_t, 6>(legacy_ind.addr); - hidl_ind->receivedInFaw = legacy_ind.dw_or_faw == 1; - hidl_ind->serviceSpecificInfo = - std::vector<uint8_t>(legacy_ind.service_specific_info, - legacy_ind.service_specific_info + - legacy_ind.service_specific_info_len); - hidl_ind->extendedServiceSpecificInfo = - std::vector<uint8_t>(legacy_ind.sdea_service_specific_info, - legacy_ind.sdea_service_specific_info + - legacy_ind.sdea_service_specific_info_len); - - return true; -} - -bool convertLegacyNanDataPathRequestIndToHidl( - const legacy_hal::NanDataPathRequestInd& legacy_ind, - NanDataPathRequestInd* hidl_ind) { - if (!hidl_ind) { - LOG(ERROR) - << "convertLegacyNanDataPathRequestIndToHidl: hidl_ind is null"; - return false; - } - *hidl_ind = {}; - - hidl_ind->discoverySessionId = legacy_ind.service_instance_id; - hidl_ind->peerDiscMacAddr = - hidl_array<uint8_t, 6>(legacy_ind.peer_disc_mac_addr); - hidl_ind->ndpInstanceId = legacy_ind.ndp_instance_id; - hidl_ind->securityRequired = - legacy_ind.ndp_cfg.security_cfg == legacy_hal::NAN_DP_CONFIG_SECURITY; - hidl_ind->appInfo = - std::vector<uint8_t>(legacy_ind.app_info.ndp_app_info, - legacy_ind.app_info.ndp_app_info + - legacy_ind.app_info.ndp_app_info_len); - - return true; -} - -bool convertLegacyNdpChannelInfoToHidl( - const legacy_hal::NanChannelInfo& legacy_struct, - V1_2::NanDataPathChannelInfo* hidl_struct) { - if (!hidl_struct) { - LOG(ERROR) << "convertLegacyNdpChannelInfoToHidl: hidl_struct is null"; - return false; - } - *hidl_struct = {}; - - hidl_struct->channelFreq = legacy_struct.channel; - hidl_struct->channelBandwidth = convertLegacyWifiChannelWidthToHidl( - (legacy_hal::wifi_channel_width)legacy_struct.bandwidth); - hidl_struct->numSpatialStreams = legacy_struct.nss; - - return true; -} - -bool convertLegacyNanDataPathConfirmIndToHidl( - const legacy_hal::NanDataPathConfirmInd& legacy_ind, - V1_2::NanDataPathConfirmInd* hidl_ind) { - if (!hidl_ind) { - LOG(ERROR) - << "convertLegacyNanDataPathConfirmIndToHidl: hidl_ind is null"; - return false; - } - *hidl_ind = {}; - - hidl_ind->V1_0.ndpInstanceId = legacy_ind.ndp_instance_id; - hidl_ind->V1_0.dataPathSetupSuccess = - legacy_ind.rsp_code == legacy_hal::NAN_DP_REQUEST_ACCEPT; - hidl_ind->V1_0.peerNdiMacAddr = - hidl_array<uint8_t, 6>(legacy_ind.peer_ndi_mac_addr); - hidl_ind->V1_0.appInfo = - std::vector<uint8_t>(legacy_ind.app_info.ndp_app_info, - legacy_ind.app_info.ndp_app_info + - legacy_ind.app_info.ndp_app_info_len); - hidl_ind->V1_0.status.status = - convertLegacyNanStatusTypeToHidl(legacy_ind.reason_code); - hidl_ind->V1_0.status.description = ""; // TODO: b/34059183 - - std::vector<V1_2::NanDataPathChannelInfo> channelInfo; - for (unsigned int i = 0; i < legacy_ind.num_channels; ++i) { - V1_2::NanDataPathChannelInfo hidl_struct; - if (!convertLegacyNdpChannelInfoToHidl(legacy_ind.channel_info[i], - &hidl_struct)) { - return false; - } - channelInfo.push_back(hidl_struct); - } - hidl_ind->channelInfo = channelInfo; - - return true; -} - -bool convertLegacyNanDataPathScheduleUpdateIndToHidl( - const legacy_hal::NanDataPathScheduleUpdateInd& legacy_ind, - V1_2::NanDataPathScheduleUpdateInd* hidl_ind) { - if (!hidl_ind) { - LOG(ERROR) << "convertLegacyNanDataPathScheduleUpdateIndToHidl: " - "hidl_ind is null"; - return false; - } - *hidl_ind = {}; - - hidl_ind->peerDiscoveryAddress = - hidl_array<uint8_t, 6>(legacy_ind.peer_mac_addr); - std::vector<V1_2::NanDataPathChannelInfo> channelInfo; - for (unsigned int i = 0; i < legacy_ind.num_channels; ++i) { - V1_2::NanDataPathChannelInfo hidl_struct; - if (!convertLegacyNdpChannelInfoToHidl(legacy_ind.channel_info[i], - &hidl_struct)) { - return false; - } - channelInfo.push_back(hidl_struct); - } - hidl_ind->channelInfo = channelInfo; - std::vector<uint32_t> ndpInstanceIds; - for (unsigned int i = 0; i < legacy_ind.num_ndp_instances; ++i) { - ndpInstanceIds.push_back(legacy_ind.ndp_instance_id[i]); - } - hidl_ind->ndpInstanceIds = ndpInstanceIds; - - return true; -} - -legacy_hal::wifi_rtt_type convertHidlRttTypeToLegacy(RttType type) { - switch (type) { - case RttType::ONE_SIDED: - return legacy_hal::RTT_TYPE_1_SIDED; - case RttType::TWO_SIDED: - return legacy_hal::RTT_TYPE_2_SIDED; - }; - CHECK(false); -} - -RttType convertLegacyRttTypeToHidl(legacy_hal::wifi_rtt_type type) { - switch (type) { - case legacy_hal::RTT_TYPE_1_SIDED: - return RttType::ONE_SIDED; - case legacy_hal::RTT_TYPE_2_SIDED: - return RttType::TWO_SIDED; - }; - CHECK(false) << "Unknown legacy type: " << type; -} - -legacy_hal::rtt_peer_type convertHidlRttPeerTypeToLegacy(RttPeerType type) { - switch (type) { - case RttPeerType::AP: - return legacy_hal::RTT_PEER_AP; - case RttPeerType::STA: - return legacy_hal::RTT_PEER_STA; - case RttPeerType::P2P_GO: - return legacy_hal::RTT_PEER_P2P_GO; - case RttPeerType::P2P_CLIENT: - return legacy_hal::RTT_PEER_P2P_CLIENT; - case RttPeerType::NAN: - return legacy_hal::RTT_PEER_NAN; - }; - CHECK(false); -} - -legacy_hal::wifi_channel_width convertHidlWifiChannelWidthToLegacy( - WifiChannelWidthInMhz type) { - switch (type) { - case WifiChannelWidthInMhz::WIDTH_20: - return legacy_hal::WIFI_CHAN_WIDTH_20; - case WifiChannelWidthInMhz::WIDTH_40: - return legacy_hal::WIFI_CHAN_WIDTH_40; - case WifiChannelWidthInMhz::WIDTH_80: - return legacy_hal::WIFI_CHAN_WIDTH_80; - case WifiChannelWidthInMhz::WIDTH_160: - return legacy_hal::WIFI_CHAN_WIDTH_160; - case WifiChannelWidthInMhz::WIDTH_80P80: - return legacy_hal::WIFI_CHAN_WIDTH_80P80; - case WifiChannelWidthInMhz::WIDTH_5: - return legacy_hal::WIFI_CHAN_WIDTH_5; - case WifiChannelWidthInMhz::WIDTH_10: - return legacy_hal::WIFI_CHAN_WIDTH_10; - case WifiChannelWidthInMhz::WIDTH_INVALID: - return legacy_hal::WIFI_CHAN_WIDTH_INVALID; - }; - CHECK(false); -} - -WifiChannelWidthInMhz convertLegacyWifiChannelWidthToHidl( - legacy_hal::wifi_channel_width type) { - switch (type) { - case legacy_hal::WIFI_CHAN_WIDTH_20: - return WifiChannelWidthInMhz::WIDTH_20; - case legacy_hal::WIFI_CHAN_WIDTH_40: - return WifiChannelWidthInMhz::WIDTH_40; - case legacy_hal::WIFI_CHAN_WIDTH_80: - return WifiChannelWidthInMhz::WIDTH_80; - case legacy_hal::WIFI_CHAN_WIDTH_160: - return WifiChannelWidthInMhz::WIDTH_160; - case legacy_hal::WIFI_CHAN_WIDTH_80P80: - return WifiChannelWidthInMhz::WIDTH_80P80; - case legacy_hal::WIFI_CHAN_WIDTH_5: - return WifiChannelWidthInMhz::WIDTH_5; - case legacy_hal::WIFI_CHAN_WIDTH_10: - return WifiChannelWidthInMhz::WIDTH_10; - default: - return WifiChannelWidthInMhz::WIDTH_INVALID; - }; -} - -legacy_hal::wifi_rtt_preamble convertHidlRttPreambleToLegacy( - V1_4::RttPreamble type) { - switch (type) { - case V1_4::RttPreamble::LEGACY: - return legacy_hal::WIFI_RTT_PREAMBLE_LEGACY; - case V1_4::RttPreamble::HT: - return legacy_hal::WIFI_RTT_PREAMBLE_HT; - case V1_4::RttPreamble::VHT: - return legacy_hal::WIFI_RTT_PREAMBLE_VHT; - case V1_4::RttPreamble::HE: - return legacy_hal::WIFI_RTT_PREAMBLE_HE; - }; - CHECK(false); -} - -V1_4::RttPreamble convertLegacyRttPreambleToHidl( - legacy_hal::wifi_rtt_preamble type) { - switch (type) { - case legacy_hal::WIFI_RTT_PREAMBLE_LEGACY: - return V1_4::RttPreamble::LEGACY; - case legacy_hal::WIFI_RTT_PREAMBLE_HT: - return V1_4::RttPreamble::HT; - case legacy_hal::WIFI_RTT_PREAMBLE_VHT: - return V1_4::RttPreamble::VHT; - case legacy_hal::WIFI_RTT_PREAMBLE_HE: - return V1_4::RttPreamble::HE; - }; - CHECK(false) << "Unknown legacy type: " << type; -} - -legacy_hal::wifi_rtt_bw convertHidlRttBwToLegacy(RttBw type) { - switch (type) { - case RttBw::BW_5MHZ: - return legacy_hal::WIFI_RTT_BW_5; - case RttBw::BW_10MHZ: - return legacy_hal::WIFI_RTT_BW_10; - case RttBw::BW_20MHZ: - return legacy_hal::WIFI_RTT_BW_20; - case RttBw::BW_40MHZ: - return legacy_hal::WIFI_RTT_BW_40; - case RttBw::BW_80MHZ: - return legacy_hal::WIFI_RTT_BW_80; - case RttBw::BW_160MHZ: - return legacy_hal::WIFI_RTT_BW_160; - }; - CHECK(false); -} - -RttBw convertLegacyRttBwToHidl(legacy_hal::wifi_rtt_bw type) { - switch (type) { - case legacy_hal::WIFI_RTT_BW_5: - return RttBw::BW_5MHZ; - case legacy_hal::WIFI_RTT_BW_10: - return RttBw::BW_10MHZ; - case legacy_hal::WIFI_RTT_BW_20: - return RttBw::BW_20MHZ; - case legacy_hal::WIFI_RTT_BW_40: - return RttBw::BW_40MHZ; - case legacy_hal::WIFI_RTT_BW_80: - return RttBw::BW_80MHZ; - case legacy_hal::WIFI_RTT_BW_160: - return RttBw::BW_160MHZ; - }; - CHECK(false) << "Unknown legacy type: " << type; -} - -legacy_hal::wifi_motion_pattern convertHidlRttMotionPatternToLegacy( - RttMotionPattern type) { - switch (type) { - case RttMotionPattern::NOT_EXPECTED: - return legacy_hal::WIFI_MOTION_NOT_EXPECTED; - case RttMotionPattern::EXPECTED: - return legacy_hal::WIFI_MOTION_EXPECTED; - case RttMotionPattern::UNKNOWN: - return legacy_hal::WIFI_MOTION_UNKNOWN; - }; - CHECK(false); -} - -V1_4::WifiRatePreamble convertLegacyWifiRatePreambleToHidl(uint8_t preamble) { - switch (preamble) { - case 0: - return V1_4::WifiRatePreamble::OFDM; - case 1: - return V1_4::WifiRatePreamble::CCK; - case 2: - return V1_4::WifiRatePreamble::HT; - case 3: - return V1_4::WifiRatePreamble::VHT; - case 4: - return V1_4::WifiRatePreamble::HE; - default: - return V1_4::WifiRatePreamble::RESERVED; - }; - CHECK(false) << "Unknown legacy preamble: " << preamble; -} - -WifiRateNss convertLegacyWifiRateNssToHidl(uint8_t nss) { - switch (nss) { - case 0: - return WifiRateNss::NSS_1x1; - case 1: - return WifiRateNss::NSS_2x2; - case 2: - return WifiRateNss::NSS_3x3; - case 3: - return WifiRateNss::NSS_4x4; - }; - CHECK(false) << "Unknown legacy nss: " << nss; - return {}; -} - -RttStatus convertLegacyRttStatusToHidl(legacy_hal::wifi_rtt_status status) { - switch (status) { - case legacy_hal::RTT_STATUS_SUCCESS: - return RttStatus::SUCCESS; - case legacy_hal::RTT_STATUS_FAILURE: - return RttStatus::FAILURE; - case legacy_hal::RTT_STATUS_FAIL_NO_RSP: - return RttStatus::FAIL_NO_RSP; - case legacy_hal::RTT_STATUS_FAIL_REJECTED: - return RttStatus::FAIL_REJECTED; - case legacy_hal::RTT_STATUS_FAIL_NOT_SCHEDULED_YET: - return RttStatus::FAIL_NOT_SCHEDULED_YET; - case legacy_hal::RTT_STATUS_FAIL_TM_TIMEOUT: - return RttStatus::FAIL_TM_TIMEOUT; - case legacy_hal::RTT_STATUS_FAIL_AP_ON_DIFF_CHANNEL: - return RttStatus::FAIL_AP_ON_DIFF_CHANNEL; - case legacy_hal::RTT_STATUS_FAIL_NO_CAPABILITY: - return RttStatus::FAIL_NO_CAPABILITY; - case legacy_hal::RTT_STATUS_ABORTED: - return RttStatus::ABORTED; - case legacy_hal::RTT_STATUS_FAIL_INVALID_TS: - return RttStatus::FAIL_INVALID_TS; - case legacy_hal::RTT_STATUS_FAIL_PROTOCOL: - return RttStatus::FAIL_PROTOCOL; - case legacy_hal::RTT_STATUS_FAIL_SCHEDULE: - return RttStatus::FAIL_SCHEDULE; - case legacy_hal::RTT_STATUS_FAIL_BUSY_TRY_LATER: - return RttStatus::FAIL_BUSY_TRY_LATER; - case legacy_hal::RTT_STATUS_INVALID_REQ: - return RttStatus::INVALID_REQ; - case legacy_hal::RTT_STATUS_NO_WIFI: - return RttStatus::NO_WIFI; - case legacy_hal::RTT_STATUS_FAIL_FTM_PARAM_OVERRIDE: - return RttStatus::FAIL_FTM_PARAM_OVERRIDE; - case legacy_hal::RTT_STATUS_NAN_RANGING_PROTOCOL_FAILURE: - return RttStatus::FAILURE; // TODO: add HIDL enumeration - case legacy_hal::RTT_STATUS_NAN_RANGING_CONCURRENCY_NOT_SUPPORTED: - return RttStatus::FAILURE; // TODO: add HIDL enumeration - }; - CHECK(false) << "Unknown legacy status: " << status; -} - -bool convertHidlWifiChannelInfoToLegacy( - const WifiChannelInfo& hidl_info, - legacy_hal::wifi_channel_info* legacy_info) { - if (!legacy_info) { - return false; - } - *legacy_info = {}; - legacy_info->width = convertHidlWifiChannelWidthToLegacy(hidl_info.width); - legacy_info->center_freq = hidl_info.centerFreq; - legacy_info->center_freq0 = hidl_info.centerFreq0; - legacy_info->center_freq1 = hidl_info.centerFreq1; - return true; -} - -bool convertLegacyWifiChannelInfoToHidl( - const legacy_hal::wifi_channel_info& legacy_info, - WifiChannelInfo* hidl_info) { - if (!hidl_info) { - return false; - } - *hidl_info = {}; - hidl_info->width = convertLegacyWifiChannelWidthToHidl(legacy_info.width); - hidl_info->centerFreq = legacy_info.center_freq; - hidl_info->centerFreq0 = legacy_info.center_freq0; - hidl_info->centerFreq1 = legacy_info.center_freq1; - return true; -} - -bool convertHidlRttConfigToLegacy(const V1_4::RttConfig& hidl_config, - legacy_hal::wifi_rtt_config* legacy_config) { - if (!legacy_config) { - return false; - } - *legacy_config = {}; - CHECK(hidl_config.addr.size() == sizeof(legacy_config->addr)); - memcpy(legacy_config->addr, hidl_config.addr.data(), - hidl_config.addr.size()); - legacy_config->type = convertHidlRttTypeToLegacy(hidl_config.type); - legacy_config->peer = convertHidlRttPeerTypeToLegacy(hidl_config.peer); - if (!convertHidlWifiChannelInfoToLegacy(hidl_config.channel, - &legacy_config->channel)) { - return false; - } - legacy_config->burst_period = hidl_config.burstPeriod; - legacy_config->num_burst = hidl_config.numBurst; - legacy_config->num_frames_per_burst = hidl_config.numFramesPerBurst; - legacy_config->num_retries_per_rtt_frame = - hidl_config.numRetriesPerRttFrame; - legacy_config->num_retries_per_ftmr = hidl_config.numRetriesPerFtmr; - legacy_config->LCI_request = hidl_config.mustRequestLci; - legacy_config->LCR_request = hidl_config.mustRequestLcr; - legacy_config->burst_duration = hidl_config.burstDuration; - legacy_config->preamble = - convertHidlRttPreambleToLegacy(hidl_config.preamble); - legacy_config->bw = convertHidlRttBwToLegacy(hidl_config.bw); - return true; -} - -bool convertHidlVectorOfRttConfigToLegacy( - const std::vector<V1_4::RttConfig>& hidl_configs, - std::vector<legacy_hal::wifi_rtt_config>* legacy_configs) { - if (!legacy_configs) { - return false; - } - *legacy_configs = {}; - for (const auto& hidl_config : hidl_configs) { - legacy_hal::wifi_rtt_config legacy_config; - if (!convertHidlRttConfigToLegacy(hidl_config, &legacy_config)) { - return false; - } - legacy_configs->push_back(legacy_config); - } - return true; -} - -bool convertHidlRttLciInformationToLegacy( - const RttLciInformation& hidl_info, - legacy_hal::wifi_lci_information* legacy_info) { - if (!legacy_info) { - return false; - } - *legacy_info = {}; - legacy_info->latitude = hidl_info.latitude; - legacy_info->longitude = hidl_info.longitude; - legacy_info->altitude = hidl_info.altitude; - legacy_info->latitude_unc = hidl_info.latitudeUnc; - legacy_info->longitude_unc = hidl_info.longitudeUnc; - legacy_info->altitude_unc = hidl_info.altitudeUnc; - legacy_info->motion_pattern = - convertHidlRttMotionPatternToLegacy(hidl_info.motionPattern); - legacy_info->floor = hidl_info.floor; - legacy_info->height_above_floor = hidl_info.heightAboveFloor; - legacy_info->height_unc = hidl_info.heightUnc; - return true; -} - -bool convertHidlRttLcrInformationToLegacy( - const RttLcrInformation& hidl_info, - legacy_hal::wifi_lcr_information* legacy_info) { - if (!legacy_info) { - return false; - } - *legacy_info = {}; - CHECK(hidl_info.countryCode.size() == sizeof(legacy_info->country_code)); - memcpy(legacy_info->country_code, hidl_info.countryCode.data(), - hidl_info.countryCode.size()); - if (hidl_info.civicInfo.size() > sizeof(legacy_info->civic_info)) { - return false; - } - legacy_info->length = hidl_info.civicInfo.size(); - memcpy(legacy_info->civic_info, hidl_info.civicInfo.c_str(), - hidl_info.civicInfo.size()); - return true; -} - -bool convertHidlRttResponderToLegacy( - const V1_4::RttResponder& hidl_responder, - legacy_hal::wifi_rtt_responder* legacy_responder) { - if (!legacy_responder) { - return false; - } - *legacy_responder = {}; - if (!convertHidlWifiChannelInfoToLegacy(hidl_responder.channel, - &legacy_responder->channel)) { - return false; - } - legacy_responder->preamble = - convertHidlRttPreambleToLegacy(hidl_responder.preamble); - return true; -} - -bool convertLegacyRttResponderToHidl( - const legacy_hal::wifi_rtt_responder& legacy_responder, - V1_4::RttResponder* hidl_responder) { - if (!hidl_responder) { - return false; - } - *hidl_responder = {}; - if (!convertLegacyWifiChannelInfoToHidl(legacy_responder.channel, - &hidl_responder->channel)) { - return false; - } - hidl_responder->preamble = - convertLegacyRttPreambleToHidl(legacy_responder.preamble); - return true; -} - -bool convertLegacyRttCapabilitiesToHidl( - const legacy_hal::wifi_rtt_capabilities& legacy_capabilities, - V1_4::RttCapabilities* hidl_capabilities) { - if (!hidl_capabilities) { - return false; - } - *hidl_capabilities = {}; - hidl_capabilities->rttOneSidedSupported = - legacy_capabilities.rtt_one_sided_supported; - hidl_capabilities->rttFtmSupported = legacy_capabilities.rtt_ftm_supported; - hidl_capabilities->lciSupported = legacy_capabilities.lci_support; - hidl_capabilities->lcrSupported = legacy_capabilities.lcr_support; - hidl_capabilities->responderSupported = - legacy_capabilities.responder_supported; - hidl_capabilities->preambleSupport = 0; - for (const auto flag : - {legacy_hal::WIFI_RTT_PREAMBLE_LEGACY, - legacy_hal::WIFI_RTT_PREAMBLE_HT, legacy_hal::WIFI_RTT_PREAMBLE_VHT, - legacy_hal::WIFI_RTT_PREAMBLE_HE}) { - if (legacy_capabilities.preamble_support & flag) { - hidl_capabilities->preambleSupport |= - static_cast<std::underlying_type<V1_4::RttPreamble>::type>( - convertLegacyRttPreambleToHidl(flag)); - } - } - hidl_capabilities->bwSupport = 0; - for (const auto flag : - {legacy_hal::WIFI_RTT_BW_5, legacy_hal::WIFI_RTT_BW_10, - legacy_hal::WIFI_RTT_BW_20, legacy_hal::WIFI_RTT_BW_40, - legacy_hal::WIFI_RTT_BW_80, legacy_hal::WIFI_RTT_BW_160}) { - if (legacy_capabilities.bw_support & flag) { - hidl_capabilities->bwSupport |= - static_cast<std::underlying_type<RttBw>::type>( - convertLegacyRttBwToHidl(flag)); - } - } - hidl_capabilities->mcVersion = legacy_capabilities.mc_version; - return true; -} - -bool convertLegacyWifiRateInfoToHidl(const legacy_hal::wifi_rate& legacy_rate, - V1_4::WifiRateInfo* hidl_rate) { - if (!hidl_rate) { - return false; - } - *hidl_rate = {}; - hidl_rate->preamble = - convertLegacyWifiRatePreambleToHidl(legacy_rate.preamble); - hidl_rate->nss = convertLegacyWifiRateNssToHidl(legacy_rate.nss); - hidl_rate->bw = convertLegacyWifiChannelWidthToHidl( - static_cast<legacy_hal::wifi_channel_width>(legacy_rate.bw)); - hidl_rate->rateMcsIdx = legacy_rate.rateMcsIdx; - hidl_rate->bitRateInKbps = legacy_rate.bitrate; - return true; -} - -bool convertLegacyRttResultToHidl( - const legacy_hal::wifi_rtt_result& legacy_result, - V1_4::RttResult* hidl_result) { - if (!hidl_result) { - return false; - } - *hidl_result = {}; - CHECK(sizeof(legacy_result.addr) == hidl_result->addr.size()); - memcpy(hidl_result->addr.data(), legacy_result.addr, - sizeof(legacy_result.addr)); - hidl_result->burstNum = legacy_result.burst_num; - hidl_result->measurementNumber = legacy_result.measurement_number; - hidl_result->successNumber = legacy_result.success_number; - hidl_result->numberPerBurstPeer = legacy_result.number_per_burst_peer; - hidl_result->status = convertLegacyRttStatusToHidl(legacy_result.status); - hidl_result->retryAfterDuration = legacy_result.retry_after_duration; - hidl_result->type = convertLegacyRttTypeToHidl(legacy_result.type); - hidl_result->rssi = legacy_result.rssi; - hidl_result->rssiSpread = legacy_result.rssi_spread; - if (!convertLegacyWifiRateInfoToHidl(legacy_result.tx_rate, - &hidl_result->txRate)) { - return false; - } - if (!convertLegacyWifiRateInfoToHidl(legacy_result.rx_rate, - &hidl_result->rxRate)) { - return false; - } - hidl_result->rtt = legacy_result.rtt; - hidl_result->rttSd = legacy_result.rtt_sd; - hidl_result->rttSpread = legacy_result.rtt_spread; - hidl_result->distanceInMm = legacy_result.distance_mm; - hidl_result->distanceSdInMm = legacy_result.distance_sd_mm; - hidl_result->distanceSpreadInMm = legacy_result.distance_spread_mm; - hidl_result->timeStampInUs = legacy_result.ts; - hidl_result->burstDurationInMs = legacy_result.burst_duration; - hidl_result->negotiatedBurstNum = legacy_result.negotiated_burst_num; - if (legacy_result.LCI && - !convertLegacyIeToHidl(*legacy_result.LCI, &hidl_result->lci)) { - return false; - } - if (legacy_result.LCR && - !convertLegacyIeToHidl(*legacy_result.LCR, &hidl_result->lcr)) { - return false; - } - return true; -} - -bool convertLegacyVectorOfRttResultToHidl( - const std::vector<const legacy_hal::wifi_rtt_result*>& legacy_results, - std::vector<V1_4::RttResult>* hidl_results) { - if (!hidl_results) { - return false; - } - *hidl_results = {}; - for (const auto legacy_result : legacy_results) { - V1_4::RttResult hidl_result; - if (!convertLegacyRttResultToHidl(*legacy_result, &hidl_result)) { - return false; - } - hidl_results->push_back(hidl_result); - } - return true; -} - -legacy_hal::wifi_interface_type convertHidlIfaceTypeToLegacy( - IfaceType hidl_interface_type) { - switch (hidl_interface_type) { - case IfaceType::STA: - return legacy_hal::WIFI_INTERFACE_TYPE_STA; - case IfaceType::AP: - return legacy_hal::WIFI_INTERFACE_TYPE_AP; - case IfaceType::P2P: - return legacy_hal::WIFI_INTERFACE_TYPE_P2P; - case IfaceType::NAN: - return legacy_hal::WIFI_INTERFACE_TYPE_NAN; - } - CHECK(false); -} - -legacy_hal::wifi_multi_sta_use_case convertHidlMultiStaUseCaseToLegacy( - IWifiChip::MultiStaUseCase use_case) { - switch (use_case) { - case IWifiChip::MultiStaUseCase::DUAL_STA_TRANSIENT_PREFER_PRIMARY: - return legacy_hal::WIFI_DUAL_STA_TRANSIENT_PREFER_PRIMARY; - case IWifiChip::MultiStaUseCase::DUAL_STA_NON_TRANSIENT_UNBIASED: - return legacy_hal::WIFI_DUAL_STA_NON_TRANSIENT_UNBIASED; - } - CHECK(false); -} - -bool convertHidlCoexUnsafeChannelToLegacy( - const IWifiChip::CoexUnsafeChannel& hidl_unsafe_channel, - legacy_hal::wifi_coex_unsafe_channel* legacy_unsafe_channel) { - if (!legacy_unsafe_channel) { - return false; - } - *legacy_unsafe_channel = {}; - switch (hidl_unsafe_channel.band) { - case WifiBand::BAND_24GHZ: - legacy_unsafe_channel->band = legacy_hal::WLAN_MAC_2_4_BAND; - break; - case WifiBand::BAND_5GHZ: - legacy_unsafe_channel->band = legacy_hal::WLAN_MAC_5_0_BAND; - break; - default: - return false; - }; - legacy_unsafe_channel->channel = hidl_unsafe_channel.channel; - legacy_unsafe_channel->power_cap_dbm = hidl_unsafe_channel.powerCapDbm; - return true; -} - -bool convertHidlVectorOfCoexUnsafeChannelToLegacy( - const std::vector<IWifiChip::CoexUnsafeChannel>& hidl_unsafe_channels, - std::vector<legacy_hal::wifi_coex_unsafe_channel>* legacy_unsafe_channels) { - if (!legacy_unsafe_channels) { - return false; - } - *legacy_unsafe_channels = {}; - for (const auto& hidl_unsafe_channel : hidl_unsafe_channels) { - legacy_hal::wifi_coex_unsafe_channel legacy_unsafe_channel; - if (!hidl_struct_util::convertHidlCoexUnsafeChannelToLegacy( - hidl_unsafe_channel, &legacy_unsafe_channel)) { - return false; - } - legacy_unsafe_channels->push_back(legacy_unsafe_channel); - } - return true; -} - -} // namespace hidl_struct_util -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android diff --git a/wifi/1.5/default/hidl_struct_util.h b/wifi/1.5/default/hidl_struct_util.h deleted file mode 100644 index 352f213664..0000000000 --- a/wifi/1.5/default/hidl_struct_util.h +++ /dev/null @@ -1,227 +0,0 @@ -/* - * Copyright (C) 2016 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef HIDL_STRUCT_UTIL_H_ -#define HIDL_STRUCT_UTIL_H_ - -#include <vector> - -#include <android/hardware/wifi/1.0/IWifiChip.h> -#include <android/hardware/wifi/1.0/types.h> -#include <android/hardware/wifi/1.2/types.h> -#include <android/hardware/wifi/1.3/types.h> -#include <android/hardware/wifi/1.4/IWifiChipEventCallback.h> -#include <android/hardware/wifi/1.4/types.h> -#include <android/hardware/wifi/1.5/IWifiChip.h> -#include <android/hardware/wifi/1.5/types.h> - -#include "wifi_legacy_hal.h" - -/** - * This file contains a bunch of functions to convert structs from the legacy - * HAL to HIDL and vice versa. - * TODO(b/32093047): Add unit tests for these conversion methods in the VTS test - * suite. - */ -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { -namespace hidl_struct_util { -using namespace android::hardware::wifi::V1_0; - -// Chip conversion methods. -bool convertLegacyFeaturesToHidlChipCapabilities( - uint64_t legacy_feature_set, uint32_t legacy_logger_feature_set, - uint32_t* hidl_caps); -bool convertLegacyDebugRingBufferStatusToHidl( - const legacy_hal::wifi_ring_buffer_status& legacy_status, - WifiDebugRingBufferStatus* hidl_status); -bool convertLegacyVectorOfDebugRingBufferStatusToHidl( - const std::vector<legacy_hal::wifi_ring_buffer_status>& legacy_status_vec, - std::vector<WifiDebugRingBufferStatus>* hidl_status_vec); -bool convertLegacyWakeReasonStatsToHidl( - const legacy_hal::WakeReasonStats& legacy_stats, - WifiDebugHostWakeReasonStats* hidl_stats); -legacy_hal::wifi_power_scenario convertHidlTxPowerScenarioToLegacy( - V1_1::IWifiChip::TxPowerScenario hidl_scenario); -legacy_hal::wifi_latency_mode convertHidlLatencyModeToLegacy( - V1_3::IWifiChip::LatencyMode hidl_latency_mode); -legacy_hal::wifi_power_scenario convertHidlTxPowerScenarioToLegacy_1_2( - V1_2::IWifiChip::TxPowerScenario hidl_scenario); -bool convertLegacyWifiMacInfosToHidl( - const std::vector<legacy_hal::WifiMacInfo>& legacy_mac_infos, - std::vector<V1_4::IWifiChipEventCallback::RadioModeInfo>* - hidl_radio_mode_infos); -legacy_hal::wifi_interface_type convertHidlIfaceTypeToLegacy( - IfaceType hidl_interface_type); -legacy_hal::wifi_multi_sta_use_case convertHidlMultiStaUseCaseToLegacy( - IWifiChip::MultiStaUseCase use_case); -bool convertHidlCoexUnsafeChannelToLegacy( - const IWifiChip::CoexUnsafeChannel& hidl_unsafe_channel, - legacy_hal::wifi_coex_unsafe_channel* legacy_unsafe_channel); -bool convertHidlVectorOfCoexUnsafeChannelToLegacy( - const std::vector<IWifiChip::CoexUnsafeChannel>& hidl_unsafe_channels, - std::vector<legacy_hal::wifi_coex_unsafe_channel>* legacy_unsafe_channels); - -// STA iface conversion methods. -bool convertLegacyFeaturesToHidlStaCapabilities( - uint64_t legacy_feature_set, uint32_t legacy_logger_feature_set, - uint32_t* hidl_caps); -bool convertLegacyApfCapabilitiesToHidl( - const legacy_hal::PacketFilterCapabilities& legacy_caps, - StaApfPacketFilterCapabilities* hidl_caps); -bool convertLegacyGscanCapabilitiesToHidl( - const legacy_hal::wifi_gscan_capabilities& legacy_caps, - StaBackgroundScanCapabilities* hidl_caps); -legacy_hal::wifi_band convertHidlWifiBandToLegacy(V1_0::WifiBand band); -bool convertHidlGscanParamsToLegacy( - const StaBackgroundScanParameters& hidl_scan_params, - legacy_hal::wifi_scan_cmd_params* legacy_scan_params); -// |has_ie_data| indicates whether or not the wifi_scan_result includes 802.11 -// Information Elements (IEs) -bool convertLegacyGscanResultToHidl( - const legacy_hal::wifi_scan_result& legacy_scan_result, bool has_ie_data, - StaScanResult* hidl_scan_result); -// |cached_results| is assumed to not include IEs. -bool convertLegacyVectorOfCachedGscanResultsToHidl( - const std::vector<legacy_hal::wifi_cached_scan_results>& - legacy_cached_scan_results, - std::vector<StaScanData>* hidl_scan_datas); -bool convertLegacyLinkLayerStatsToHidl( - const legacy_hal::LinkLayerStats& legacy_stats, - StaLinkLayerStats* hidl_stats); -bool convertLegacyRoamingCapabilitiesToHidl( - const legacy_hal::wifi_roaming_capabilities& legacy_caps, - StaRoamingCapabilities* hidl_caps); -bool convertHidlRoamingConfigToLegacy( - const StaRoamingConfig& hidl_config, - legacy_hal::wifi_roaming_config* legacy_config); -legacy_hal::fw_roaming_state_t convertHidlRoamingStateToLegacy( - StaRoamingState state); -bool convertLegacyVectorOfDebugTxPacketFateToHidl( - const std::vector<legacy_hal::wifi_tx_report>& legacy_fates, - std::vector<WifiDebugTxPacketFateReport>* hidl_fates); -bool convertLegacyVectorOfDebugRxPacketFateToHidl( - const std::vector<legacy_hal::wifi_rx_report>& legacy_fates, - std::vector<WifiDebugRxPacketFateReport>* hidl_fates); - -// NAN iface conversion methods. -void convertToWifiNanStatus(legacy_hal::NanStatusType type, const char* str, - size_t max_len, WifiNanStatus* wifiNanStatus); -bool convertHidlNanEnableRequestToLegacy( - const V1_4::NanEnableRequest& hidl_request, - legacy_hal::NanEnableRequest* legacy_request); -bool convertHidlNanConfigRequestToLegacy( - const V1_4::NanConfigRequest& hidl_request, - legacy_hal::NanConfigRequest* legacy_request); -bool convertHidlNanEnableRequest_1_4ToLegacy( - const V1_4::NanEnableRequest& hidl_request1, - const NanConfigRequestSupplemental& hidl_request2, - legacy_hal::NanEnableRequest* legacy_request); -bool convertHidlNanConfigRequest_1_4ToLegacy( - const V1_4::NanConfigRequest& hidl_request1, - const NanConfigRequestSupplemental& hidl_request2, - legacy_hal::NanConfigRequest* legacy_request); -bool convertHidlNanEnableRequest_1_5ToLegacy( - const V1_4::NanEnableRequest& hidl_request1, - const NanConfigRequestSupplemental& hidl_request2, - legacy_hal::NanEnableRequest* legacy_request); -bool convertHidlNanConfigRequest_1_5ToLegacy( - const V1_4::NanConfigRequest& hidl_request1, - const NanConfigRequestSupplemental& hidl_request2, - legacy_hal::NanConfigRequest* legacy_request); -bool convertHidlNanPublishRequestToLegacy( - const NanPublishRequest& hidl_request, - legacy_hal::NanPublishRequest* legacy_request); -bool convertHidlNanSubscribeRequestToLegacy( - const NanSubscribeRequest& hidl_request, - legacy_hal::NanSubscribeRequest* legacy_request); -bool convertHidlNanTransmitFollowupRequestToLegacy( - const NanTransmitFollowupRequest& hidl_request, - legacy_hal::NanTransmitFollowupRequest* legacy_request); -bool convertHidlNanDataPathInitiatorRequestToLegacy( - const NanInitiateDataPathRequest& hidl_request, - legacy_hal::NanDataPathInitiatorRequest* legacy_request); -bool convertHidlNanDataPathIndicationResponseToLegacy( - const NanRespondToDataPathIndicationRequest& hidl_response, - legacy_hal::NanDataPathIndicationResponse* legacy_response); -bool convertLegacyNanResponseHeaderToHidl( - const legacy_hal::NanResponseMsg& legacy_response, - WifiNanStatus* wifiNanStatus); -bool convertLegacyNanCapabilitiesResponseToHidl( - const legacy_hal::NanCapabilities& legacy_response, - NanCapabilities* hidl_response); -bool convertLegacyNanMatchIndToHidl(const legacy_hal::NanMatchInd& legacy_ind, - NanMatchInd* hidl_ind); -bool convertLegacyNanFollowupIndToHidl( - const legacy_hal::NanFollowupInd& legacy_ind, - NanFollowupReceivedInd* hidl_ind); -bool convertLegacyNanDataPathRequestIndToHidl( - const legacy_hal::NanDataPathRequestInd& legacy_ind, - NanDataPathRequestInd* hidl_ind); -bool convertLegacyNanDataPathConfirmIndToHidl( - const legacy_hal::NanDataPathConfirmInd& legacy_ind, - V1_2::NanDataPathConfirmInd* hidl_ind); -bool convertLegacyNanDataPathScheduleUpdateIndToHidl( - const legacy_hal::NanDataPathScheduleUpdateInd& legacy_ind, - V1_2::NanDataPathScheduleUpdateInd* hidl_ind); - -// RTT controller conversion methods. -bool convertHidlVectorOfRttConfigToLegacy( - const std::vector<V1_4::RttConfig>& hidl_configs, - std::vector<legacy_hal::wifi_rtt_config>* legacy_configs); -bool convertHidlRttLciInformationToLegacy( - const RttLciInformation& hidl_info, - legacy_hal::wifi_lci_information* legacy_info); -bool convertHidlRttLcrInformationToLegacy( - const RttLcrInformation& hidl_info, - legacy_hal::wifi_lcr_information* legacy_info); -bool convertHidlRttResponderToLegacy( - const V1_4::RttResponder& hidl_responder, - legacy_hal::wifi_rtt_responder* legacy_responder); -bool convertHidlWifiChannelInfoToLegacy( - const WifiChannelInfo& hidl_info, - legacy_hal::wifi_channel_info* legacy_info); -bool convertLegacyRttResponderToHidl( - const legacy_hal::wifi_rtt_responder& legacy_responder, - V1_4::RttResponder* hidl_responder); -bool convertLegacyRttCapabilitiesToHidl( - const legacy_hal::wifi_rtt_capabilities& legacy_capabilities, - V1_4::RttCapabilities* hidl_capabilities); -bool convertLegacyVectorOfRttResultToHidl( - const std::vector<const legacy_hal::wifi_rtt_result*>& legacy_results, - std::vector<V1_4::RttResult>* hidl_results); -uint32_t convertHidlWifiBandToLegacyMacBand(V1_5::WifiBand band); -uint32_t convertHidlWifiIfaceModeToLegacy(uint32_t hidl_iface_mask); -uint32_t convertHidlUsableChannelFilterToLegacy(uint32_t hidl_filter_mask); -bool convertLegacyWifiUsableChannelsToHidl( - const std::vector<legacy_hal::wifi_usable_channel>& legacy_usable_channels, - std::vector<V1_5::WifiUsableChannel>* hidl_usable_channels); -bool convertLegacyPeerInfoStatsToHidl( - const legacy_hal::WifiPeerInfo& legacy_peer_info_stats, - StaPeerInfo* hidl_peer_info_stats); -bool convertLegacyWifiRateInfoToHidl(const legacy_hal::wifi_rate& legacy_rate, - V1_4::WifiRateInfo* hidl_rate); -} // namespace hidl_struct_util -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android - -#endif // HIDL_STRUCT_UTIL_H_ diff --git a/wifi/1.5/default/hidl_sync_util.cpp b/wifi/1.5/default/hidl_sync_util.cpp deleted file mode 100644 index 93eefe9560..0000000000 --- a/wifi/1.5/default/hidl_sync_util.cpp +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (C) 2016 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "hidl_sync_util.h" - -namespace { -std::recursive_mutex g_mutex; -} // namespace - -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { -namespace hidl_sync_util { - -std::unique_lock<std::recursive_mutex> acquireGlobalLock() { - return std::unique_lock<std::recursive_mutex>{g_mutex}; -} - -} // namespace hidl_sync_util -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android diff --git a/wifi/1.5/default/hidl_sync_util.h b/wifi/1.5/default/hidl_sync_util.h deleted file mode 100644 index e706f4cd87..0000000000 --- a/wifi/1.5/default/hidl_sync_util.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2016 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef HIDL_SYNC_UTIL_H_ -#define HIDL_SYNC_UTIL_H_ - -#include <mutex> - -// Utility that provides a global lock to synchronize access between -// the HIDL thread and the legacy HAL's event loop. -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { -namespace hidl_sync_util { -std::unique_lock<std::recursive_mutex> acquireGlobalLock(); -} // namespace hidl_sync_util -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android -#endif // HIDL_SYNC_UTIL_H_ diff --git a/wifi/1.5/default/ringbuffer.cpp b/wifi/1.5/default/ringbuffer.cpp deleted file mode 100644 index f554111e61..0000000000 --- a/wifi/1.5/default/ringbuffer.cpp +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include <android-base/logging.h> - -#include "ringbuffer.h" - -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { - -Ringbuffer::Ringbuffer(size_t maxSize) : size_(0), maxSize_(maxSize) {} - -void Ringbuffer::append(const std::vector<uint8_t>& input) { - if (input.size() == 0) { - return; - } - if (input.size() > maxSize_) { - LOG(INFO) << "Oversized message of " << input.size() - << " bytes is dropped"; - return; - } - data_.push_back(input); - size_ += input.size() * sizeof(input[0]); - while (size_ > maxSize_) { - size_ -= data_.front().size() * sizeof(data_.front()[0]); - data_.pop_front(); - } -} - -const std::list<std::vector<uint8_t>>& Ringbuffer::getData() const { - return data_; -} - -void Ringbuffer::clear() { - data_.clear(); - size_ = 0; -} - -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android diff --git a/wifi/1.5/default/ringbuffer.h b/wifi/1.5/default/ringbuffer.h deleted file mode 100644 index 03fb37a6a2..0000000000 --- a/wifi/1.5/default/ringbuffer.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef RINGBUFFER_H_ -#define RINGBUFFER_H_ - -#include <list> -#include <vector> - -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { - -/** - * Ringbuffer object used to store debug data. - */ -class Ringbuffer { - public: - explicit Ringbuffer(size_t maxSize); - - // Appends the data buffer and deletes from the front until buffer is - // within |maxSize_|. - void append(const std::vector<uint8_t>& input); - const std::list<std::vector<uint8_t>>& getData() const; - void clear(); - - private: - std::list<std::vector<uint8_t>> data_; - size_t size_; - size_t maxSize_; -}; - -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android - -#endif // RINGBUFFER_H_ diff --git a/wifi/1.5/default/service.cpp b/wifi/1.5/default/service.cpp deleted file mode 100644 index 4c089d86ea..0000000000 --- a/wifi/1.5/default/service.cpp +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright (C) 2016 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include <android-base/logging.h> -#include <hidl/HidlLazyUtils.h> -#include <hidl/HidlTransportSupport.h> -#include <signal.h> -#include <utils/Looper.h> -#include <utils/StrongPointer.h> -#include <hwbinder/ProcessState.h> -#include <cutils/properties.h> - -#include "wifi.h" -#include "wifi_feature_flags.h" -#include "wifi_legacy_hal.h" -#include "wifi_legacy_hal_factory.h" -#include "wifi_mode_controller.h" - -using android::hardware::configureRpcThreadpool; -using android::hardware::joinRpcThreadpool; -using android::hardware::LazyServiceRegistrar; -using android::hardware::wifi::V1_5::implementation::feature_flags:: - WifiFeatureFlags; -using android::hardware::wifi::V1_5::implementation::legacy_hal::WifiLegacyHal; -using android::hardware::wifi::V1_5::implementation::legacy_hal:: - WifiLegacyHalFactory; -using android::hardware::wifi::V1_5::implementation::mode_controller:: - WifiModeController; - -#ifdef ARCH_ARM_32 -#define DEFAULT_WIFIHAL_HW_BINDER_SIZE_KB 16 -size_t getHWBinderMmapSize() { - size_t value = 0; - value = property_get_int32("persist.vendor.wifi.wifihal.hw.binder.size", DEFAULT_WIFIHAL_HW_BINDER_SIZE_KB); - if (!value) value = DEFAULT_WIFIHAL_HW_BINDER_SIZE_KB; // deafult to 1 page of 4 Kb - - return 1024 * value; -} -#endif /* ARCH_ARM_32 */ - -#ifdef LAZY_SERVICE -const bool kLazyService = true; -#else -const bool kLazyService = false; -#endif - -int main(int /*argc*/, char** argv) { - signal(SIGPIPE, SIG_IGN); -#ifdef ARCH_ARM_32 - android::hardware::ProcessState::initWithMmapSize(getHWBinderMmapSize()); -#endif /* ARCH_ARM_32 */ - android::base::InitLogging( - argv, android::base::LogdLogger(android::base::SYSTEM)); - LOG(INFO) << "Wifi Hal is booting up..."; - - configureRpcThreadpool(1, true /* callerWillJoin */); - - const auto iface_tool = - std::make_shared<android::wifi_system::InterfaceTool>(); - const auto legacy_hal_factory = - std::make_shared<WifiLegacyHalFactory>(iface_tool); - - // Setup hwbinder service - android::sp<android::hardware::wifi::V1_5::IWifi> service = - new android::hardware::wifi::V1_5::implementation::Wifi( - iface_tool, legacy_hal_factory, - std::make_shared<WifiModeController>(), - std::make_shared<WifiFeatureFlags>()); - if (kLazyService) { - auto registrar = LazyServiceRegistrar::getInstance(); - CHECK_EQ(registrar.registerService(service), android::NO_ERROR) - << "Failed to register wifi HAL"; - } else { - CHECK_EQ(service->registerAsService(), android::NO_ERROR) - << "Failed to register wifi HAL"; - } - - joinRpcThreadpool(); - - LOG(INFO) << "Wifi Hal is terminating..."; - return 0; -} diff --git a/wifi/1.5/default/tests/hidl_struct_util_unit_tests.cpp b/wifi/1.5/default/tests/hidl_struct_util_unit_tests.cpp deleted file mode 100644 index 4b4ebd6138..0000000000 --- a/wifi/1.5/default/tests/hidl_struct_util_unit_tests.cpp +++ /dev/null @@ -1,424 +0,0 @@ -/* - * Copyright (C) 2017, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include <android-base/logging.h> -#include <android-base/macros.h> -#include <gmock/gmock.h> - -#undef NAN -#include "hidl_struct_util.h" - -using testing::Test; - -namespace { -constexpr uint32_t kMacId1 = 1; -constexpr uint32_t kMacId2 = 2; -constexpr uint32_t kIfaceChannel1 = 3; -constexpr uint32_t kIfaceChannel2 = 5; -constexpr char kIfaceName1[] = "wlan0"; -constexpr char kIfaceName2[] = "wlan1"; -} // namespace -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { -using namespace android::hardware::wifi::V1_0; -using ::android::hardware::wifi::V1_0::WifiChannelWidthInMhz; - -class HidlStructUtilTest : public Test {}; - -TEST_F(HidlStructUtilTest, CanConvertLegacyWifiMacInfosToHidlWithOneMac) { - std::vector<legacy_hal::WifiMacInfo> legacy_mac_infos; - legacy_hal::WifiMacInfo legacy_mac_info1 = { - .wlan_mac_id = kMacId1, - .mac_band = - legacy_hal::WLAN_MAC_5_0_BAND | legacy_hal::WLAN_MAC_2_4_BAND}; - legacy_hal::WifiIfaceInfo legacy_iface_info1 = {.name = kIfaceName1, - .channel = kIfaceChannel1}; - legacy_hal::WifiIfaceInfo legacy_iface_info2 = {.name = kIfaceName2, - .channel = kIfaceChannel2}; - legacy_mac_info1.iface_infos.push_back(legacy_iface_info1); - legacy_mac_info1.iface_infos.push_back(legacy_iface_info2); - legacy_mac_infos.push_back(legacy_mac_info1); - - std::vector<V1_4::IWifiChipEventCallback::RadioModeInfo> - hidl_radio_mode_infos; - ASSERT_TRUE(hidl_struct_util::convertLegacyWifiMacInfosToHidl( - legacy_mac_infos, &hidl_radio_mode_infos)); - - ASSERT_EQ(1u, hidl_radio_mode_infos.size()); - auto hidl_radio_mode_info1 = hidl_radio_mode_infos[0]; - EXPECT_EQ(legacy_mac_info1.wlan_mac_id, hidl_radio_mode_info1.radioId); - EXPECT_EQ(V1_4::WifiBand::BAND_24GHZ_5GHZ, hidl_radio_mode_info1.bandInfo); - ASSERT_EQ(2u, hidl_radio_mode_info1.ifaceInfos.size()); - auto hidl_iface_info1 = hidl_radio_mode_info1.ifaceInfos[0]; - EXPECT_EQ(legacy_iface_info1.name, hidl_iface_info1.name); - EXPECT_EQ(static_cast<uint32_t>(legacy_iface_info1.channel), - hidl_iface_info1.channel); - auto hidl_iface_info2 = hidl_radio_mode_info1.ifaceInfos[1]; - EXPECT_EQ(legacy_iface_info2.name, hidl_iface_info2.name); - EXPECT_EQ(static_cast<uint32_t>(legacy_iface_info2.channel), - hidl_iface_info2.channel); -} - -TEST_F(HidlStructUtilTest, CanConvertLegacyWifiMacInfosToHidlWithTwoMac) { - std::vector<legacy_hal::WifiMacInfo> legacy_mac_infos; - legacy_hal::WifiMacInfo legacy_mac_info1 = { - .wlan_mac_id = kMacId1, .mac_band = legacy_hal::WLAN_MAC_5_0_BAND}; - legacy_hal::WifiIfaceInfo legacy_iface_info1 = {.name = kIfaceName1, - .channel = kIfaceChannel1}; - legacy_hal::WifiMacInfo legacy_mac_info2 = { - .wlan_mac_id = kMacId2, .mac_band = legacy_hal::WLAN_MAC_2_4_BAND}; - legacy_hal::WifiIfaceInfo legacy_iface_info2 = {.name = kIfaceName2, - .channel = kIfaceChannel2}; - legacy_mac_info1.iface_infos.push_back(legacy_iface_info1); - legacy_mac_infos.push_back(legacy_mac_info1); - legacy_mac_info2.iface_infos.push_back(legacy_iface_info2); - legacy_mac_infos.push_back(legacy_mac_info2); - - std::vector<V1_4::IWifiChipEventCallback::RadioModeInfo> - hidl_radio_mode_infos; - ASSERT_TRUE(hidl_struct_util::convertLegacyWifiMacInfosToHidl( - legacy_mac_infos, &hidl_radio_mode_infos)); - - ASSERT_EQ(2u, hidl_radio_mode_infos.size()); - - // Find mac info 1. - const auto hidl_radio_mode_info1 = - std::find_if(hidl_radio_mode_infos.begin(), hidl_radio_mode_infos.end(), - [&legacy_mac_info1]( - const V1_4::IWifiChipEventCallback::RadioModeInfo& x) { - return x.radioId == legacy_mac_info1.wlan_mac_id; - }); - ASSERT_NE(hidl_radio_mode_infos.end(), hidl_radio_mode_info1); - EXPECT_EQ(V1_4::WifiBand::BAND_5GHZ, hidl_radio_mode_info1->bandInfo); - ASSERT_EQ(1u, hidl_radio_mode_info1->ifaceInfos.size()); - auto hidl_iface_info1 = hidl_radio_mode_info1->ifaceInfos[0]; - EXPECT_EQ(legacy_iface_info1.name, hidl_iface_info1.name); - EXPECT_EQ(static_cast<uint32_t>(legacy_iface_info1.channel), - hidl_iface_info1.channel); - - // Find mac info 2. - const auto hidl_radio_mode_info2 = - std::find_if(hidl_radio_mode_infos.begin(), hidl_radio_mode_infos.end(), - [&legacy_mac_info2]( - const V1_4::IWifiChipEventCallback::RadioModeInfo& x) { - return x.radioId == legacy_mac_info2.wlan_mac_id; - }); - ASSERT_NE(hidl_radio_mode_infos.end(), hidl_radio_mode_info2); - EXPECT_EQ(V1_4::WifiBand::BAND_24GHZ, hidl_radio_mode_info2->bandInfo); - ASSERT_EQ(1u, hidl_radio_mode_info2->ifaceInfos.size()); - auto hidl_iface_info2 = hidl_radio_mode_info2->ifaceInfos[0]; - EXPECT_EQ(legacy_iface_info2.name, hidl_iface_info2.name); - EXPECT_EQ(static_cast<uint32_t>(legacy_iface_info2.channel), - hidl_iface_info2.channel); -} - -TEST_F(HidlStructUtilTest, canConvertLegacyLinkLayerStatsToHidl) { - legacy_hal::LinkLayerStats legacy_stats{}; - legacy_stats.radios.push_back(legacy_hal::LinkLayerRadioStats{}); - legacy_stats.radios.push_back(legacy_hal::LinkLayerRadioStats{}); - legacy_stats.peers.push_back(legacy_hal::WifiPeerInfo{}); - legacy_stats.peers.push_back(legacy_hal::WifiPeerInfo{}); - legacy_stats.iface.beacon_rx = rand(); - legacy_stats.iface.rssi_mgmt = rand(); - legacy_stats.iface.ac[legacy_hal::WIFI_AC_BE].rx_mpdu = rand(); - legacy_stats.iface.ac[legacy_hal::WIFI_AC_BE].tx_mpdu = rand(); - legacy_stats.iface.ac[legacy_hal::WIFI_AC_BE].mpdu_lost = rand(); - legacy_stats.iface.ac[legacy_hal::WIFI_AC_BE].retries = rand(); - legacy_stats.iface.ac[legacy_hal::WIFI_AC_BE].contention_time_min = rand(); - legacy_stats.iface.ac[legacy_hal::WIFI_AC_BE].contention_time_max = rand(); - legacy_stats.iface.ac[legacy_hal::WIFI_AC_BE].contention_time_avg = rand(); - legacy_stats.iface.ac[legacy_hal::WIFI_AC_BE].contention_num_samples = - rand(); - - legacy_stats.iface.ac[legacy_hal::WIFI_AC_BK].rx_mpdu = rand(); - legacy_stats.iface.ac[legacy_hal::WIFI_AC_BK].tx_mpdu = rand(); - legacy_stats.iface.ac[legacy_hal::WIFI_AC_BK].mpdu_lost = rand(); - legacy_stats.iface.ac[legacy_hal::WIFI_AC_BK].retries = rand(); - legacy_stats.iface.ac[legacy_hal::WIFI_AC_BK].contention_time_min = rand(); - legacy_stats.iface.ac[legacy_hal::WIFI_AC_BK].contention_time_max = rand(); - legacy_stats.iface.ac[legacy_hal::WIFI_AC_BK].contention_time_avg = rand(); - legacy_stats.iface.ac[legacy_hal::WIFI_AC_BK].contention_num_samples = - rand(); - - legacy_stats.iface.ac[legacy_hal::WIFI_AC_VI].rx_mpdu = rand(); - legacy_stats.iface.ac[legacy_hal::WIFI_AC_VI].tx_mpdu = rand(); - legacy_stats.iface.ac[legacy_hal::WIFI_AC_VI].mpdu_lost = rand(); - legacy_stats.iface.ac[legacy_hal::WIFI_AC_VI].retries = rand(); - legacy_stats.iface.ac[legacy_hal::WIFI_AC_VI].contention_time_min = rand(); - legacy_stats.iface.ac[legacy_hal::WIFI_AC_VI].contention_time_max = rand(); - legacy_stats.iface.ac[legacy_hal::WIFI_AC_VI].contention_time_avg = rand(); - legacy_stats.iface.ac[legacy_hal::WIFI_AC_VI].contention_num_samples = - rand(); - - legacy_stats.iface.ac[legacy_hal::WIFI_AC_VO].rx_mpdu = rand(); - legacy_stats.iface.ac[legacy_hal::WIFI_AC_VO].tx_mpdu = rand(); - legacy_stats.iface.ac[legacy_hal::WIFI_AC_VO].mpdu_lost = rand(); - legacy_stats.iface.ac[legacy_hal::WIFI_AC_VO].retries = rand(); - legacy_stats.iface.ac[legacy_hal::WIFI_AC_VO].contention_time_min = rand(); - legacy_stats.iface.ac[legacy_hal::WIFI_AC_VO].contention_time_max = rand(); - legacy_stats.iface.ac[legacy_hal::WIFI_AC_VO].contention_time_avg = rand(); - legacy_stats.iface.ac[legacy_hal::WIFI_AC_VO].contention_num_samples = - rand(); - - legacy_stats.iface.info.time_slicing_duty_cycle_percent = rand(); - legacy_stats.iface.num_peers = 1; - - for (auto& radio : legacy_stats.radios) { - radio.stats.radio = rand(); - radio.stats.on_time = rand(); - radio.stats.tx_time = rand(); - radio.stats.rx_time = rand(); - radio.stats.on_time_scan = rand(); - radio.stats.on_time_nbd = rand(); - radio.stats.on_time_gscan = rand(); - radio.stats.on_time_roam_scan = rand(); - radio.stats.on_time_pno_scan = rand(); - radio.stats.on_time_hs20 = rand(); - for (int i = 0; i < 4; i++) { - radio.tx_time_per_levels.push_back(rand()); - } - - legacy_hal::wifi_channel_stat channel_stat1 = { - .channel = {legacy_hal::WIFI_CHAN_WIDTH_20, 2437, 2437, 0}, - .on_time = 0x1111, - .cca_busy_time = 0x55, - }; - legacy_hal::wifi_channel_stat channel_stat2 = { - .channel = {legacy_hal::WIFI_CHAN_WIDTH_20, 5180, 5180, 0}, - .on_time = 0x2222, - .cca_busy_time = 0x66, - }; - radio.channel_stats.push_back(channel_stat1); - radio.channel_stats.push_back(channel_stat2); - } - - for (auto& peer : legacy_stats.peers) { - peer.peer_info.bssload.sta_count = rand(); - peer.peer_info.bssload.chan_util = rand(); - wifi_rate_stat rate_stat1 = { - .rate = {3, 1, 2, 5, 0, 0}, - .tx_mpdu = 0, - .rx_mpdu = 1, - .mpdu_lost = 2, - .retries = 3, - .retries_short = 4, - .retries_long = 5, - }; - wifi_rate_stat rate_stat2 = { - .rate = {2, 2, 1, 6, 0, 1}, - .tx_mpdu = 6, - .rx_mpdu = 7, - .mpdu_lost = 8, - .retries = 9, - .retries_short = 10, - .retries_long = 11, - }; - peer.rate_stats.push_back(rate_stat1); - peer.rate_stats.push_back(rate_stat2); - } - - V1_5::StaLinkLayerStats converted{}; - hidl_struct_util::convertLegacyLinkLayerStatsToHidl(legacy_stats, - &converted); - EXPECT_EQ(legacy_stats.iface.beacon_rx, converted.iface.V1_0.beaconRx); - EXPECT_EQ(legacy_stats.iface.rssi_mgmt, converted.iface.V1_0.avgRssiMgmt); - EXPECT_EQ(legacy_stats.iface.ac[legacy_hal::WIFI_AC_BE].rx_mpdu, - converted.iface.V1_0.wmeBePktStats.rxMpdu); - EXPECT_EQ(legacy_stats.iface.ac[legacy_hal::WIFI_AC_BE].tx_mpdu, - converted.iface.V1_0.wmeBePktStats.txMpdu); - EXPECT_EQ(legacy_stats.iface.ac[legacy_hal::WIFI_AC_BE].mpdu_lost, - converted.iface.V1_0.wmeBePktStats.lostMpdu); - EXPECT_EQ(legacy_stats.iface.ac[legacy_hal::WIFI_AC_BE].retries, - converted.iface.V1_0.wmeBePktStats.retries); - EXPECT_EQ(legacy_stats.iface.ac[legacy_hal::WIFI_AC_BE].contention_time_min, - converted.iface.wmeBeContentionTimeStats.contentionTimeMinInUsec); - EXPECT_EQ(legacy_stats.iface.ac[legacy_hal::WIFI_AC_BE].contention_time_max, - converted.iface.wmeBeContentionTimeStats.contentionTimeMaxInUsec); - EXPECT_EQ(legacy_stats.iface.ac[legacy_hal::WIFI_AC_BE].contention_time_avg, - converted.iface.wmeBeContentionTimeStats.contentionTimeAvgInUsec); - EXPECT_EQ( - legacy_stats.iface.ac[legacy_hal::WIFI_AC_BE].contention_num_samples, - converted.iface.wmeBeContentionTimeStats.contentionNumSamples); - - EXPECT_EQ(legacy_stats.iface.ac[legacy_hal::WIFI_AC_BK].rx_mpdu, - converted.iface.V1_0.wmeBkPktStats.rxMpdu); - EXPECT_EQ(legacy_stats.iface.ac[legacy_hal::WIFI_AC_BK].tx_mpdu, - converted.iface.V1_0.wmeBkPktStats.txMpdu); - EXPECT_EQ(legacy_stats.iface.ac[legacy_hal::WIFI_AC_BK].mpdu_lost, - converted.iface.V1_0.wmeBkPktStats.lostMpdu); - EXPECT_EQ(legacy_stats.iface.ac[legacy_hal::WIFI_AC_BK].retries, - converted.iface.V1_0.wmeBkPktStats.retries); - EXPECT_EQ(legacy_stats.iface.ac[legacy_hal::WIFI_AC_BK].contention_time_min, - converted.iface.wmeBkContentionTimeStats.contentionTimeMinInUsec); - EXPECT_EQ(legacy_stats.iface.ac[legacy_hal::WIFI_AC_BK].contention_time_max, - converted.iface.wmeBkContentionTimeStats.contentionTimeMaxInUsec); - EXPECT_EQ(legacy_stats.iface.ac[legacy_hal::WIFI_AC_BK].contention_time_avg, - converted.iface.wmeBkContentionTimeStats.contentionTimeAvgInUsec); - EXPECT_EQ( - legacy_stats.iface.ac[legacy_hal::WIFI_AC_BK].contention_num_samples, - converted.iface.wmeBkContentionTimeStats.contentionNumSamples); - - EXPECT_EQ(legacy_stats.iface.ac[legacy_hal::WIFI_AC_VI].rx_mpdu, - converted.iface.V1_0.wmeViPktStats.rxMpdu); - EXPECT_EQ(legacy_stats.iface.ac[legacy_hal::WIFI_AC_VI].tx_mpdu, - converted.iface.V1_0.wmeViPktStats.txMpdu); - EXPECT_EQ(legacy_stats.iface.ac[legacy_hal::WIFI_AC_VI].mpdu_lost, - converted.iface.V1_0.wmeViPktStats.lostMpdu); - EXPECT_EQ(legacy_stats.iface.ac[legacy_hal::WIFI_AC_VI].retries, - converted.iface.V1_0.wmeViPktStats.retries); - EXPECT_EQ(legacy_stats.iface.ac[legacy_hal::WIFI_AC_VI].contention_time_min, - converted.iface.wmeViContentionTimeStats.contentionTimeMinInUsec); - EXPECT_EQ(legacy_stats.iface.ac[legacy_hal::WIFI_AC_VI].contention_time_max, - converted.iface.wmeViContentionTimeStats.contentionTimeMaxInUsec); - EXPECT_EQ(legacy_stats.iface.ac[legacy_hal::WIFI_AC_VI].contention_time_avg, - converted.iface.wmeViContentionTimeStats.contentionTimeAvgInUsec); - EXPECT_EQ( - legacy_stats.iface.ac[legacy_hal::WIFI_AC_VI].contention_num_samples, - converted.iface.wmeViContentionTimeStats.contentionNumSamples); - - EXPECT_EQ(legacy_stats.iface.ac[legacy_hal::WIFI_AC_VO].rx_mpdu, - converted.iface.V1_0.wmeVoPktStats.rxMpdu); - EXPECT_EQ(legacy_stats.iface.ac[legacy_hal::WIFI_AC_VO].tx_mpdu, - converted.iface.V1_0.wmeVoPktStats.txMpdu); - EXPECT_EQ(legacy_stats.iface.ac[legacy_hal::WIFI_AC_VO].mpdu_lost, - converted.iface.V1_0.wmeVoPktStats.lostMpdu); - EXPECT_EQ(legacy_stats.iface.ac[legacy_hal::WIFI_AC_VO].retries, - converted.iface.V1_0.wmeVoPktStats.retries); - EXPECT_EQ(legacy_stats.iface.ac[legacy_hal::WIFI_AC_VO].contention_time_min, - converted.iface.wmeVoContentionTimeStats.contentionTimeMinInUsec); - EXPECT_EQ(legacy_stats.iface.ac[legacy_hal::WIFI_AC_VO].contention_time_max, - converted.iface.wmeVoContentionTimeStats.contentionTimeMaxInUsec); - EXPECT_EQ(legacy_stats.iface.ac[legacy_hal::WIFI_AC_VO].contention_time_avg, - converted.iface.wmeVoContentionTimeStats.contentionTimeAvgInUsec); - EXPECT_EQ( - legacy_stats.iface.ac[legacy_hal::WIFI_AC_VO].contention_num_samples, - converted.iface.wmeVoContentionTimeStats.contentionNumSamples); - - EXPECT_EQ(legacy_stats.iface.info.time_slicing_duty_cycle_percent, - converted.iface.timeSliceDutyCycleInPercent); - - EXPECT_EQ(legacy_stats.radios.size(), converted.radios.size()); - for (size_t i = 0; i < legacy_stats.radios.size(); i++) { - EXPECT_EQ(legacy_stats.radios[i].stats.radio, - converted.radios[i].radioId); - EXPECT_EQ(legacy_stats.radios[i].stats.on_time, - converted.radios[i].V1_3.V1_0.onTimeInMs); - EXPECT_EQ(legacy_stats.radios[i].stats.tx_time, - converted.radios[i].V1_3.V1_0.txTimeInMs); - EXPECT_EQ(legacy_stats.radios[i].stats.rx_time, - converted.radios[i].V1_3.V1_0.rxTimeInMs); - EXPECT_EQ(legacy_stats.radios[i].stats.on_time_scan, - converted.radios[i].V1_3.V1_0.onTimeInMsForScan); - EXPECT_EQ(legacy_stats.radios[i].tx_time_per_levels.size(), - converted.radios[i].V1_3.V1_0.txTimeInMsPerLevel.size()); - for (size_t j = 0; j < legacy_stats.radios[i].tx_time_per_levels.size(); - j++) { - EXPECT_EQ(legacy_stats.radios[i].tx_time_per_levels[j], - converted.radios[i].V1_3.V1_0.txTimeInMsPerLevel[j]); - } - EXPECT_EQ(legacy_stats.radios[i].stats.on_time_nbd, - converted.radios[i].V1_3.onTimeInMsForNanScan); - EXPECT_EQ(legacy_stats.radios[i].stats.on_time_gscan, - converted.radios[i].V1_3.onTimeInMsForBgScan); - EXPECT_EQ(legacy_stats.radios[i].stats.on_time_roam_scan, - converted.radios[i].V1_3.onTimeInMsForRoamScan); - EXPECT_EQ(legacy_stats.radios[i].stats.on_time_pno_scan, - converted.radios[i].V1_3.onTimeInMsForPnoScan); - EXPECT_EQ(legacy_stats.radios[i].stats.on_time_hs20, - converted.radios[i].V1_3.onTimeInMsForHs20Scan); - EXPECT_EQ(legacy_stats.radios[i].channel_stats.size(), - converted.radios[i].V1_3.channelStats.size()); - for (size_t k = 0; k < legacy_stats.radios[i].channel_stats.size(); - k++) { - auto& legacy_channel_st = legacy_stats.radios[i].channel_stats[k]; - EXPECT_EQ(WifiChannelWidthInMhz::WIDTH_20, - converted.radios[i].V1_3.channelStats[k].channel.width); - EXPECT_EQ( - WifiChannelInMhz(legacy_channel_st.channel.center_freq), - converted.radios[i].V1_3.channelStats[k].channel.centerFreq); - EXPECT_EQ( - WifiChannelInMhz(legacy_channel_st.channel.center_freq0), - converted.radios[i].V1_3.channelStats[k].channel.centerFreq0); - EXPECT_EQ( - WifiChannelInMhz(legacy_channel_st.channel.center_freq1), - converted.radios[i].V1_3.channelStats[k].channel.centerFreq1); - EXPECT_EQ(legacy_channel_st.cca_busy_time, - converted.radios[i].V1_3.channelStats[k].ccaBusyTimeInMs); - EXPECT_EQ(legacy_channel_st.on_time, - converted.radios[i].V1_3.channelStats[k].onTimeInMs); - } - } - - EXPECT_EQ(legacy_stats.peers.size(), converted.iface.peers.size()); - for (size_t i = 0; i < legacy_stats.peers.size(); i++) { - EXPECT_EQ(legacy_stats.peers[i].peer_info.bssload.sta_count, - converted.iface.peers[i].staCount); - EXPECT_EQ(legacy_stats.peers[i].peer_info.bssload.chan_util, - converted.iface.peers[i].chanUtil); - for (size_t j = 0; j < legacy_stats.peers[i].rate_stats.size(); j++) { - EXPECT_EQ(legacy_stats.peers[i].rate_stats[j].rate.preamble, - (uint32_t)converted.iface.peers[i] - .rateStats[j] - .rateInfo.preamble); - EXPECT_EQ( - legacy_stats.peers[i].rate_stats[j].rate.nss, - (uint32_t)converted.iface.peers[i].rateStats[j].rateInfo.nss); - EXPECT_EQ( - legacy_stats.peers[i].rate_stats[j].rate.bw, - (uint32_t)converted.iface.peers[i].rateStats[j].rateInfo.bw); - EXPECT_EQ( - legacy_stats.peers[i].rate_stats[j].rate.rateMcsIdx, - converted.iface.peers[i].rateStats[j].rateInfo.rateMcsIdx); - EXPECT_EQ(legacy_stats.peers[i].rate_stats[j].tx_mpdu, - converted.iface.peers[i].rateStats[j].txMpdu); - EXPECT_EQ(legacy_stats.peers[i].rate_stats[j].rx_mpdu, - converted.iface.peers[i].rateStats[j].rxMpdu); - EXPECT_EQ(legacy_stats.peers[i].rate_stats[j].mpdu_lost, - converted.iface.peers[i].rateStats[j].mpduLost); - EXPECT_EQ(legacy_stats.peers[i].rate_stats[j].retries, - converted.iface.peers[i].rateStats[j].retries); - } - } -} - -TEST_F(HidlStructUtilTest, CanConvertLegacyFeaturesToHidl) { - using HidlChipCaps = V1_3::IWifiChip::ChipCapabilityMask; - - uint32_t hidle_caps; - - uint32_t legacy_feature_set = - WIFI_FEATURE_D2D_RTT | WIFI_FEATURE_SET_LATENCY_MODE; - uint32_t legacy_logger_feature_set = - legacy_hal::WIFI_LOGGER_DRIVER_DUMP_SUPPORTED; - - ASSERT_TRUE(hidl_struct_util::convertLegacyFeaturesToHidlChipCapabilities( - legacy_feature_set, legacy_logger_feature_set, &hidle_caps)); - - EXPECT_EQ(HidlChipCaps::DEBUG_RING_BUFFER_VENDOR_DATA | - HidlChipCaps::DEBUG_HOST_WAKE_REASON_STATS | - HidlChipCaps::DEBUG_ERROR_ALERTS | HidlChipCaps::D2D_RTT | - HidlChipCaps::SET_LATENCY_MODE | - HidlChipCaps::DEBUG_MEMORY_DRIVER_DUMP, - hidle_caps); -} -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android diff --git a/wifi/1.5/default/tests/main.cpp b/wifi/1.5/default/tests/main.cpp deleted file mode 100644 index 9aac837242..0000000000 --- a/wifi/1.5/default/tests/main.cpp +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright (C) 2017 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include <gmock/gmock.h> -#include <gtest/gtest.h> - -#include <android-base/logging.h> - -int main(int argc, char** argv) { - ::testing::InitGoogleTest(&argc, argv); - ::testing::InitGoogleMock(&argc, argv); - // Force ourselves to always log to stderr - android::base::InitLogging(argv, android::base::StderrLogger); - return RUN_ALL_TESTS(); -} diff --git a/wifi/1.5/default/tests/mock_interface_tool.cpp b/wifi/1.5/default/tests/mock_interface_tool.cpp deleted file mode 100644 index b99a16446c..0000000000 --- a/wifi/1.5/default/tests/mock_interface_tool.cpp +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include <android-base/logging.h> -#include <android-base/macros.h> -#include <gmock/gmock.h> - -#undef NAN // This is weird, NAN is defined in bionic/libc/include/math.h:38 -#include "mock_interface_tool.h" - -namespace android { -namespace wifi_system { - -MockInterfaceTool::MockInterfaceTool() {} - -} // namespace wifi_system -} // namespace android diff --git a/wifi/1.5/default/tests/mock_interface_tool.h b/wifi/1.5/default/tests/mock_interface_tool.h deleted file mode 100644 index 0f17551f96..0000000000 --- a/wifi/1.5/default/tests/mock_interface_tool.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef MOCK_INTERFACE_TOOL_H -#define MOCK_INTERFACE_TOOL_H - -#include <gmock/gmock.h> -#include <wifi_system/interface_tool.h> - -namespace android { -namespace wifi_system { - -class MockInterfaceTool : public InterfaceTool { - public: - MockInterfaceTool(); - - MOCK_METHOD1(GetUpState, bool(const char* if_name)); - MOCK_METHOD2(SetUpState, bool(const char* if_name, bool request_up)); - MOCK_METHOD1(SetWifiUpState, bool(bool request_up)); - MOCK_METHOD2(SetMacAddress, - bool(const char* if_name, - const std::array<uint8_t, ETH_ALEN>& address)); - MOCK_METHOD1(GetFactoryMacAddress, - std::array<uint8_t, ETH_ALEN>(const char* if_name)); - -}; // class MockInterfaceTool - -} // namespace wifi_system -} // namespace android - -#endif // MOCK_INTERFACE_TOOL_H diff --git a/wifi/1.5/default/tests/mock_wifi_feature_flags.cpp b/wifi/1.5/default/tests/mock_wifi_feature_flags.cpp deleted file mode 100644 index 2f66ba121b..0000000000 --- a/wifi/1.5/default/tests/mock_wifi_feature_flags.cpp +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (C) 2017 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include <gmock/gmock.h> - -#include "mock_wifi_feature_flags.h" - -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { -namespace feature_flags { - -MockWifiFeatureFlags::MockWifiFeatureFlags() {} - -} // namespace feature_flags -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android diff --git a/wifi/1.5/default/tests/mock_wifi_feature_flags.h b/wifi/1.5/default/tests/mock_wifi_feature_flags.h deleted file mode 100644 index c3877edd60..0000000000 --- a/wifi/1.5/default/tests/mock_wifi_feature_flags.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (C) 2017 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef MOCK_WIFI_FEATURE_FLAGS_H_ -#define MOCK_WIFI_FEATURE_FLAGS_H_ - -#include <gmock/gmock.h> -#undef NAN // This is weird, NAN is defined in bionic/libc/include/math.h:38 - -#include "wifi_feature_flags.h" - -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { -namespace feature_flags { - -class MockWifiFeatureFlags : public WifiFeatureFlags { - public: - MockWifiFeatureFlags(); - - MOCK_METHOD1(getChipModes, - std::vector<V1_0::IWifiChip::ChipMode>(bool is_primary)); - MOCK_METHOD0(isApMacRandomizationDisabled, bool()); -}; - -} // namespace feature_flags -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android - -#endif // MOCK_WIFI_FEATURE_FLAGS_H_ diff --git a/wifi/1.5/default/tests/mock_wifi_iface_util.cpp b/wifi/1.5/default/tests/mock_wifi_iface_util.cpp deleted file mode 100644 index b101c4ac34..0000000000 --- a/wifi/1.5/default/tests/mock_wifi_iface_util.cpp +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include <android-base/logging.h> -#include <android-base/macros.h> -#include <gmock/gmock.h> - -#undef NAN // This is weird, NAN is defined in bionic/libc/include/math.h:38 -#include "mock_wifi_iface_util.h" - -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { -namespace iface_util { - -MockWifiIfaceUtil::MockWifiIfaceUtil( - const std::weak_ptr<wifi_system::InterfaceTool> iface_tool, - const std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal) - : WifiIfaceUtil(iface_tool, legacy_hal) {} -} // namespace iface_util -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android diff --git a/wifi/1.5/default/tests/mock_wifi_iface_util.h b/wifi/1.5/default/tests/mock_wifi_iface_util.h deleted file mode 100644 index 6d5f59ce53..0000000000 --- a/wifi/1.5/default/tests/mock_wifi_iface_util.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef MOCK_WIFI_IFACE_UTIL_H_ -#define MOCK_WIFI_IFACE_UTIL_H_ - -#include <gmock/gmock.h> - -#include "wifi_iface_util.h" - -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { -namespace iface_util { - -class MockWifiIfaceUtil : public WifiIfaceUtil { - public: - MockWifiIfaceUtil( - const std::weak_ptr<wifi_system::InterfaceTool> iface_tool, - const std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal); - MOCK_METHOD1(getFactoryMacAddress, - std::array<uint8_t, 6>(const std::string&)); - MOCK_METHOD2(setMacAddress, - bool(const std::string&, const std::array<uint8_t, 6>&)); - MOCK_METHOD0(getOrCreateRandomMacAddress, std::array<uint8_t, 6>()); - MOCK_METHOD2(registerIfaceEventHandlers, - void(const std::string&, IfaceEventHandlers)); - MOCK_METHOD1(unregisterIfaceEventHandlers, void(const std::string&)); - MOCK_METHOD2(setUpState, bool(const std::string&, bool)); - MOCK_METHOD1(ifNameToIndex, unsigned(const std::string&)); -}; -} // namespace iface_util -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android - -#endif // MOCK_WIFI_IFACE_UTIL_H_ diff --git a/wifi/1.5/default/tests/mock_wifi_legacy_hal.cpp b/wifi/1.5/default/tests/mock_wifi_legacy_hal.cpp deleted file mode 100644 index d13c5568b3..0000000000 --- a/wifi/1.5/default/tests/mock_wifi_legacy_hal.cpp +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2017 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include <android-base/logging.h> -#include <android-base/macros.h> -#include <gmock/gmock.h> - -#undef NAN // This is weird, NAN is defined in bionic/libc/include/math.h:38 -#include "mock_wifi_legacy_hal.h" - -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { -namespace legacy_hal { - -MockWifiLegacyHal::MockWifiLegacyHal( - const std::weak_ptr<wifi_system::InterfaceTool> iface_tool, - const wifi_hal_fn& fn, bool is_primary) - : WifiLegacyHal(iface_tool, fn, is_primary) {} -} // namespace legacy_hal -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android diff --git a/wifi/1.5/default/tests/mock_wifi_legacy_hal.h b/wifi/1.5/default/tests/mock_wifi_legacy_hal.h deleted file mode 100644 index 826b35f8dd..0000000000 --- a/wifi/1.5/default/tests/mock_wifi_legacy_hal.h +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (C) 2017 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef MOCK_WIFI_LEGACY_HAL_H_ -#define MOCK_WIFI_LEGACY_HAL_H_ - -#include <gmock/gmock.h> - -#include "wifi_legacy_hal.h" - -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { -namespace legacy_hal { - -class MockWifiLegacyHal : public WifiLegacyHal { - public: - MockWifiLegacyHal( - const std::weak_ptr<wifi_system::InterfaceTool> iface_tool, - const wifi_hal_fn& fn, bool is_primary); - MOCK_METHOD0(initialize, wifi_error()); - MOCK_METHOD0(start, wifi_error()); - MOCK_METHOD2(stop, wifi_error(std::unique_lock<std::recursive_mutex>*, - const std::function<void()>&)); - MOCK_METHOD2(setDfsFlag, wifi_error(const std::string&, bool)); - MOCK_METHOD2(registerRadioModeChangeCallbackHandler, - wifi_error(const std::string&, - const on_radio_mode_change_callback&)); - MOCK_METHOD1(getFirmwareVersion, std::pair<wifi_error, std::string>( - const std::string& iface_name)); - MOCK_METHOD1(getDriverVersion, std::pair<wifi_error, std::string>( - const std::string& iface_name)); - - MOCK_METHOD2(selectTxPowerScenario, - wifi_error(const std::string& iface_name, - wifi_power_scenario scenario)); - MOCK_METHOD1(resetTxPowerScenario, - wifi_error(const std::string& iface_name)); - MOCK_METHOD2(nanRegisterCallbackHandlers, - wifi_error(const std::string&, const NanCallbackHandlers&)); - MOCK_METHOD2(nanDisableRequest, - wifi_error(const std::string&, transaction_id)); - MOCK_METHOD3(nanDataInterfaceDelete, - wifi_error(const std::string&, transaction_id, - const std::string&)); - MOCK_METHOD2(createVirtualInterface, - wifi_error(const std::string& ifname, - wifi_interface_type iftype)); - MOCK_METHOD1(deleteVirtualInterface, wifi_error(const std::string& ifname)); - MOCK_METHOD0(waitForDriverReady, wifi_error()); -}; -} // namespace legacy_hal -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android - -#endif // MOCK_WIFI_LEGACY_HAL_H_ diff --git a/wifi/1.5/default/tests/mock_wifi_mode_controller.cpp b/wifi/1.5/default/tests/mock_wifi_mode_controller.cpp deleted file mode 100644 index e7ab22a01b..0000000000 --- a/wifi/1.5/default/tests/mock_wifi_mode_controller.cpp +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2017 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include <android-base/logging.h> -#include <android-base/macros.h> -#include <gmock/gmock.h> - -#undef NAN // This is weird, NAN is defined in bionic/libc/include/math.h:38 -#include "mock_wifi_mode_controller.h" - -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { -namespace mode_controller { - -MockWifiModeController::MockWifiModeController() : WifiModeController() {} -} // namespace mode_controller -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android diff --git a/wifi/1.5/default/tests/mock_wifi_mode_controller.h b/wifi/1.5/default/tests/mock_wifi_mode_controller.h deleted file mode 100644 index b9151f18b4..0000000000 --- a/wifi/1.5/default/tests/mock_wifi_mode_controller.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) 2017 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef MOCK_WIFI_MODE_CONTROLLER_H_ -#define MOCK_WIFI_MODE_CONTROLLER_H_ - -#include <gmock/gmock.h> - -#include "wifi_mode_controller.h" - -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { -namespace mode_controller { - -class MockWifiModeController : public WifiModeController { - public: - MockWifiModeController(); - MOCK_METHOD0(initialize, bool()); - MOCK_METHOD1(changeFirmwareMode, bool(IfaceType)); - MOCK_METHOD1(isFirmwareModeChangeNeeded, bool(IfaceType)); - MOCK_METHOD0(deinitialize, bool()); -}; -} // namespace mode_controller -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android - -#endif // MOCK_WIFI_MODE_CONTROLLER_H_ diff --git a/wifi/1.5/default/tests/ringbuffer_unit_tests.cpp b/wifi/1.5/default/tests/ringbuffer_unit_tests.cpp deleted file mode 100644 index 6fd34ee29c..0000000000 --- a/wifi/1.5/default/tests/ringbuffer_unit_tests.cpp +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (C) 2018, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include <gmock/gmock.h> - -#include "ringbuffer.h" - -using testing::Return; -using testing::Test; - -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { - -class RingbufferTest : public Test { - public: - const uint32_t maxBufferSize_ = 10; - Ringbuffer buffer_{maxBufferSize_}; -}; - -TEST_F(RingbufferTest, CreateEmptyBuffer) { - ASSERT_TRUE(buffer_.getData().empty()); -} - -TEST_F(RingbufferTest, CanUseFullBufferCapacity) { - const std::vector<uint8_t> input(maxBufferSize_ / 2, '0'); - const std::vector<uint8_t> input2(maxBufferSize_ / 2, '1'); - buffer_.append(input); - buffer_.append(input2); - ASSERT_EQ(2u, buffer_.getData().size()); - EXPECT_EQ(input, buffer_.getData().front()); - EXPECT_EQ(input2, buffer_.getData().back()); -} - -TEST_F(RingbufferTest, OldDataIsRemovedOnOverflow) { - const std::vector<uint8_t> input(maxBufferSize_ / 2, '0'); - const std::vector<uint8_t> input2(maxBufferSize_ / 2, '1'); - const std::vector<uint8_t> input3 = {'G'}; - buffer_.append(input); - buffer_.append(input2); - buffer_.append(input3); - ASSERT_EQ(2u, buffer_.getData().size()); - EXPECT_EQ(input2, buffer_.getData().front()); - EXPECT_EQ(input3, buffer_.getData().back()); -} - -TEST_F(RingbufferTest, MultipleOldDataIsRemovedOnOverflow) { - const std::vector<uint8_t> input(maxBufferSize_ / 2, '0'); - const std::vector<uint8_t> input2(maxBufferSize_ / 2, '1'); - const std::vector<uint8_t> input3(maxBufferSize_, '2'); - buffer_.append(input); - buffer_.append(input2); - buffer_.append(input3); - ASSERT_EQ(1u, buffer_.getData().size()); - EXPECT_EQ(input3, buffer_.getData().front()); -} - -TEST_F(RingbufferTest, AppendingEmptyBufferDoesNotAddGarbage) { - const std::vector<uint8_t> input = {}; - buffer_.append(input); - ASSERT_TRUE(buffer_.getData().empty()); -} - -TEST_F(RingbufferTest, OversizedAppendIsDropped) { - const std::vector<uint8_t> input(maxBufferSize_ + 1, '0'); - buffer_.append(input); - ASSERT_TRUE(buffer_.getData().empty()); -} - -TEST_F(RingbufferTest, OversizedAppendDoesNotDropExistingData) { - const std::vector<uint8_t> input(maxBufferSize_, '0'); - const std::vector<uint8_t> input2(maxBufferSize_ + 1, '1'); - buffer_.append(input); - buffer_.append(input2); - ASSERT_EQ(1u, buffer_.getData().size()); - EXPECT_EQ(input, buffer_.getData().front()); -} -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android diff --git a/wifi/1.5/default/tests/runtests.sh b/wifi/1.5/default/tests/runtests.sh deleted file mode 100755 index 6bce3ef8c4..0000000000 --- a/wifi/1.5/default/tests/runtests.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env bash - -# Copyright(C) 2017 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0(the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http:// www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -if [ -z $ANDROID_BUILD_TOP ]; then - echo "You need to source and lunch before you can use this script" - exit 1 -fi -set -e - -$ANDROID_BUILD_TOP/build/soong/soong_ui.bash --make-mode android.hardware.wifi@1.0-service-tests -adb root -adb sync data -adb shell /data/nativetest64/vendor/android.hardware.wifi@1.0-service-tests/android.hardware.wifi@1.0-service-tests diff --git a/wifi/1.5/default/tests/wifi_chip_unit_tests.cpp b/wifi/1.5/default/tests/wifi_chip_unit_tests.cpp deleted file mode 100644 index 0ad6f3e821..0000000000 --- a/wifi/1.5/default/tests/wifi_chip_unit_tests.cpp +++ /dev/null @@ -1,905 +0,0 @@ -/* - * Copyright (C) 2017, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include <android-base/logging.h> -#include <android-base/macros.h> -#include <cutils/properties.h> -#include <gmock/gmock.h> - -#undef NAN // This is weird, NAN is defined in bionic/libc/include/math.h:38 -#include "wifi_chip.h" - -#include "mock_interface_tool.h" -#include "mock_wifi_feature_flags.h" -#include "mock_wifi_iface_util.h" -#include "mock_wifi_legacy_hal.h" -#include "mock_wifi_mode_controller.h" - -using testing::NiceMock; -using testing::Return; -using testing::Test; - -namespace { -using android::hardware::wifi::V1_0::ChipId; - -constexpr ChipId kFakeChipId = 5; -} // namespace - -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { - -class WifiChipTest : public Test { - protected: - void setupV1IfaceCombination() { - // clang-format off - const hidl_vec<V1_0::IWifiChip::ChipIfaceCombination> combinationsSta = { - {{{{IfaceType::STA}, 1}, {{IfaceType::P2P}, 1}}} - }; - const hidl_vec<V1_0::IWifiChip::ChipIfaceCombination> combinationsAp = { - {{{{IfaceType::AP}, 1}}} - }; - const std::vector<V1_0::IWifiChip::ChipMode> modes = { - {feature_flags::chip_mode_ids::kV1Sta, combinationsSta}, - {feature_flags::chip_mode_ids::kV1Ap, combinationsAp} - }; - // clang-format on - EXPECT_CALL(*feature_flags_, getChipModes(true)) - .WillRepeatedly(testing::Return(modes)); - } - - void setupV1_AwareIfaceCombination() { - // clang-format off - const hidl_vec<V1_0::IWifiChip::ChipIfaceCombination> combinationsSta = { - {{{{IfaceType::STA}, 1}, {{IfaceType::P2P, IfaceType::NAN}, 1}}} - }; - const hidl_vec<V1_0::IWifiChip::ChipIfaceCombination> combinationsAp = { - {{{{IfaceType::AP}, 1}}} - }; - const std::vector<V1_0::IWifiChip::ChipMode> modes = { - {feature_flags::chip_mode_ids::kV1Sta, combinationsSta}, - {feature_flags::chip_mode_ids::kV1Ap, combinationsAp} - }; - // clang-format on - EXPECT_CALL(*feature_flags_, getChipModes(true)) - .WillRepeatedly(testing::Return(modes)); - } - - void setupV1_AwareDisabledApIfaceCombination() { - // clang-format off - const hidl_vec<V1_0::IWifiChip::ChipIfaceCombination> combinationsSta = { - {{{{IfaceType::STA}, 1}, {{IfaceType::P2P, IfaceType::NAN}, 1}}} - }; - const std::vector<V1_0::IWifiChip::ChipMode> modes = { - {feature_flags::chip_mode_ids::kV1Sta, combinationsSta} - }; - // clang-format on - EXPECT_CALL(*feature_flags_, getChipModes(true)) - .WillRepeatedly(testing::Return(modes)); - } - - void setupV2_AwareIfaceCombination() { - // clang-format off - const hidl_vec<V1_0::IWifiChip::ChipIfaceCombination> combinations = { - {{{{IfaceType::STA}, 1}, {{IfaceType::AP}, 1}}}, - {{{{IfaceType::STA}, 1}, {{IfaceType::P2P, IfaceType::NAN}, 1}}} - }; - const std::vector<V1_0::IWifiChip::ChipMode> modes = { - {feature_flags::chip_mode_ids::kV3, combinations} - }; - // clang-format on - EXPECT_CALL(*feature_flags_, getChipModes(true)) - .WillRepeatedly(testing::Return(modes)); - } - - void setupV2_AwareDisabledApIfaceCombination() { - // clang-format off - const hidl_vec<V1_0::IWifiChip::ChipIfaceCombination> combinations = { - {{{{IfaceType::STA}, 1}, {{IfaceType::P2P, IfaceType::NAN}, 1}}} - }; - const std::vector<V1_0::IWifiChip::ChipMode> modes = { - {feature_flags::chip_mode_ids::kV3, combinations} - }; - // clang-format on - EXPECT_CALL(*feature_flags_, getChipModes(true)) - .WillRepeatedly(testing::Return(modes)); - } - - void setup_MultiIfaceCombination() { - // clang-format off - const hidl_vec<V1_0::IWifiChip::ChipIfaceCombination> combinations = { - {{{{IfaceType::STA}, 3}, {{IfaceType::AP}, 1}}} - }; - const std::vector<V1_0::IWifiChip::ChipMode> modes = { - {feature_flags::chip_mode_ids::kV3, combinations} - }; - // clang-format on - EXPECT_CALL(*feature_flags_, getChipModes(true)) - .WillRepeatedly(testing::Return(modes)); - } - - void assertNumberOfModes(uint32_t num_modes) { - chip_->getAvailableModes( - [num_modes](const WifiStatus& status, - const std::vector<WifiChip::ChipMode>& modes) { - ASSERT_EQ(WifiStatusCode::SUCCESS, status.code); - // V2_Aware has 1 mode of operation. - ASSERT_EQ(num_modes, modes.size()); - }); - } - - void findModeAndConfigureForIfaceType(const IfaceType& type) { - // This should be aligned with kInvalidModeId in wifi_chip.cpp. - ChipModeId mode_id = UINT32_MAX; - chip_->getAvailableModes( - [&mode_id, &type](const WifiStatus& status, - const std::vector<WifiChip::ChipMode>& modes) { - ASSERT_EQ(WifiStatusCode::SUCCESS, status.code); - for (const auto& mode : modes) { - for (const auto& combination : mode.availableCombinations) { - for (const auto& limit : combination.limits) { - if (limit.types.end() != - std::find(limit.types.begin(), - limit.types.end(), type)) { - mode_id = mode.id; - } - } - } - } - }); - ASSERT_NE(UINT32_MAX, mode_id); - - chip_->configureChip(mode_id, [](const WifiStatus& status) { - ASSERT_EQ(WifiStatusCode::SUCCESS, status.code); - }); - } - - // Returns an empty string on error. - std::string createIface(const IfaceType& type) { - std::string iface_name; - if (type == IfaceType::AP) { - chip_->createApIface( - [&iface_name](const WifiStatus& status, - const sp<V1_0::IWifiApIface>& iface) { - if (WifiStatusCode::SUCCESS == status.code) { - ASSERT_NE(iface.get(), nullptr); - iface->getName([&iface_name](const WifiStatus& status, - const hidl_string& name) { - ASSERT_EQ(WifiStatusCode::SUCCESS, status.code); - iface_name = name.c_str(); - }); - } - }); - } else if (type == IfaceType::NAN) { - chip_->createNanIface( - [&iface_name]( - const WifiStatus& status, - const sp<android::hardware::wifi::V1_0::IWifiNanIface>& - iface) { - if (WifiStatusCode::SUCCESS == status.code) { - ASSERT_NE(iface.get(), nullptr); - iface->getName([&iface_name](const WifiStatus& status, - const hidl_string& name) { - ASSERT_EQ(WifiStatusCode::SUCCESS, status.code); - iface_name = name.c_str(); - }); - } - }); - } else if (type == IfaceType::P2P) { - chip_->createP2pIface( - [&iface_name](const WifiStatus& status, - const sp<IWifiP2pIface>& iface) { - if (WifiStatusCode::SUCCESS == status.code) { - ASSERT_NE(iface.get(), nullptr); - iface->getName([&iface_name](const WifiStatus& status, - const hidl_string& name) { - ASSERT_EQ(WifiStatusCode::SUCCESS, status.code); - iface_name = name.c_str(); - }); - } - }); - } else if (type == IfaceType::STA) { - chip_->createStaIface( - [&iface_name](const WifiStatus& status, - const sp<V1_0::IWifiStaIface>& iface) { - if (WifiStatusCode::SUCCESS == status.code) { - ASSERT_NE(iface.get(), nullptr); - iface->getName([&iface_name](const WifiStatus& status, - const hidl_string& name) { - ASSERT_EQ(WifiStatusCode::SUCCESS, status.code); - iface_name = name.c_str(); - }); - } - }); - } - return iface_name; - } - - void removeIface(const IfaceType& type, const std::string& iface_name) { - if (type == IfaceType::AP) { - chip_->removeApIface(iface_name, [](const WifiStatus& status) { - ASSERT_EQ(WifiStatusCode::SUCCESS, status.code); - }); - } else if (type == IfaceType::NAN) { - chip_->removeNanIface(iface_name, [](const WifiStatus& status) { - ASSERT_EQ(WifiStatusCode::SUCCESS, status.code); - }); - } else if (type == IfaceType::P2P) { - chip_->removeP2pIface(iface_name, [](const WifiStatus& status) { - ASSERT_EQ(WifiStatusCode::SUCCESS, status.code); - }); - } else if (type == IfaceType::STA) { - chip_->removeStaIface(iface_name, [](const WifiStatus& status) { - ASSERT_EQ(WifiStatusCode::SUCCESS, status.code); - }); - } - } - - bool createRttController() { - bool success = false; - chip_->createRttController_1_4( - NULL, [&success](const WifiStatus& status, - const sp<IWifiRttController>& rtt) { - if (WifiStatusCode::SUCCESS == status.code) { - ASSERT_NE(rtt.get(), nullptr); - success = true; - } - }); - return success; - } - - static void subsystemRestartHandler(const std::string& /*error*/) {} - - sp<WifiChip> chip_; - ChipId chip_id_ = kFakeChipId; - legacy_hal::wifi_hal_fn fake_func_table_; - std::shared_ptr<NiceMock<wifi_system::MockInterfaceTool>> iface_tool_{ - new NiceMock<wifi_system::MockInterfaceTool>}; - std::shared_ptr<NiceMock<legacy_hal::MockWifiLegacyHal>> legacy_hal_{ - new NiceMock<legacy_hal::MockWifiLegacyHal>(iface_tool_, - fake_func_table_, true)}; - std::shared_ptr<NiceMock<mode_controller::MockWifiModeController>> - mode_controller_{new NiceMock<mode_controller::MockWifiModeController>}; - std::shared_ptr<NiceMock<iface_util::MockWifiIfaceUtil>> iface_util_{ - new NiceMock<iface_util::MockWifiIfaceUtil>(iface_tool_, legacy_hal_)}; - std::shared_ptr<NiceMock<feature_flags::MockWifiFeatureFlags>> - feature_flags_{new NiceMock<feature_flags::MockWifiFeatureFlags>}; - - public: - void SetUp() override { - chip_ = - new WifiChip(chip_id_, true, legacy_hal_, mode_controller_, - iface_util_, feature_flags_, subsystemRestartHandler); - - EXPECT_CALL(*mode_controller_, changeFirmwareMode(testing::_)) - .WillRepeatedly(testing::Return(true)); - EXPECT_CALL(*legacy_hal_, start()) - .WillRepeatedly(testing::Return(legacy_hal::WIFI_SUCCESS)); - } - - void TearDown() override { - // Restore default system iface names (This should ideally be using a - // mock). - property_set("wifi.interface", "wlan0"); - property_set("wifi.concurrent.interface", "wlan1"); - property_set("wifi.aware.interface", nullptr); - } -}; - -////////// V1 Iface Combinations //////////// -// Mode 1 - STA + P2P -// Mode 2 - AP -class WifiChipV1IfaceCombinationTest : public WifiChipTest { - public: - void SetUp() override { - setupV1IfaceCombination(); - WifiChipTest::SetUp(); - // V1 has 2 modes of operation. - assertNumberOfModes(2u); - } -}; - -TEST_F(WifiChipV1IfaceCombinationTest, StaMode_CreateSta_ShouldSucceed) { - findModeAndConfigureForIfaceType(IfaceType::STA); - ASSERT_EQ(createIface(IfaceType::STA), "wlan0"); -} - -TEST_F(WifiChipV1IfaceCombinationTest, StaMode_CreateP2p_ShouldSucceed) { - findModeAndConfigureForIfaceType(IfaceType::STA); - ASSERT_FALSE(createIface(IfaceType::P2P).empty()); -} - -TEST_F(WifiChipV1IfaceCombinationTest, StaMode_CreateNan_ShouldFail) { - findModeAndConfigureForIfaceType(IfaceType::STA); - ASSERT_TRUE(createIface(IfaceType::NAN).empty()); -} - -TEST_F(WifiChipV1IfaceCombinationTest, StaMode_CreateAp_ShouldFail) { - findModeAndConfigureForIfaceType(IfaceType::STA); - ASSERT_TRUE(createIface(IfaceType::AP).empty()); -} - -TEST_F(WifiChipV1IfaceCombinationTest, StaMode_CreateStaP2p_ShouldSucceed) { - findModeAndConfigureForIfaceType(IfaceType::STA); - ASSERT_FALSE(createIface(IfaceType::STA).empty()); - ASSERT_FALSE(createIface(IfaceType::P2P).empty()); -} - -TEST_F(WifiChipV1IfaceCombinationTest, ApMode_CreateAp_ShouldSucceed) { - findModeAndConfigureForIfaceType(IfaceType::AP); - ASSERT_EQ(createIface(IfaceType::AP), "wlan0"); -} - -TEST_F(WifiChipV1IfaceCombinationTest, ApMode_CreateSta_ShouldFail) { - findModeAndConfigureForIfaceType(IfaceType::AP); - ASSERT_TRUE(createIface(IfaceType::STA).empty()); -} - -TEST_F(WifiChipV1IfaceCombinationTest, ApMode_CreateP2p_ShouldFail) { - findModeAndConfigureForIfaceType(IfaceType::AP); - ASSERT_TRUE(createIface(IfaceType::STA).empty()); -} - -TEST_F(WifiChipV1IfaceCombinationTest, ApMode_CreateNan_ShouldFail) { - findModeAndConfigureForIfaceType(IfaceType::AP); - ASSERT_TRUE(createIface(IfaceType::NAN).empty()); -} - -////////// V1 + Aware Iface Combinations //////////// -// Mode 1 - STA + P2P/NAN -// Mode 2 - AP -class WifiChipV1_AwareIfaceCombinationTest : public WifiChipTest { - public: - void SetUp() override { - setupV1_AwareIfaceCombination(); - WifiChipTest::SetUp(); - // V1_Aware has 2 modes of operation. - assertNumberOfModes(2u); - } -}; - -TEST_F(WifiChipV1_AwareIfaceCombinationTest, StaMode_CreateSta_ShouldSucceed) { - findModeAndConfigureForIfaceType(IfaceType::STA); - ASSERT_EQ(createIface(IfaceType::STA), "wlan0"); -} - -TEST_F(WifiChipV1_AwareIfaceCombinationTest, StaMode_CreateP2p_ShouldSucceed) { - findModeAndConfigureForIfaceType(IfaceType::STA); - ASSERT_FALSE(createIface(IfaceType::P2P).empty()); -} - -TEST_F(WifiChipV1_AwareIfaceCombinationTest, StaMode_CreateNan_ShouldSucceed) { - findModeAndConfigureForIfaceType(IfaceType::STA); - ASSERT_FALSE(createIface(IfaceType::NAN).empty()); -} - -TEST_F(WifiChipV1_AwareIfaceCombinationTest, StaMode_CreateAp_ShouldFail) { - findModeAndConfigureForIfaceType(IfaceType::STA); - ASSERT_TRUE(createIface(IfaceType::AP).empty()); -} - -TEST_F(WifiChipV1_AwareIfaceCombinationTest, - StaMode_CreateStaP2p_ShouldSucceed) { - findModeAndConfigureForIfaceType(IfaceType::STA); - ASSERT_FALSE(createIface(IfaceType::STA).empty()); - ASSERT_FALSE(createIface(IfaceType::P2P).empty()); -} - -TEST_F(WifiChipV1_AwareIfaceCombinationTest, - StaMode_CreateStaNan_ShouldSucceed) { - findModeAndConfigureForIfaceType(IfaceType::STA); - ASSERT_FALSE(createIface(IfaceType::STA).empty()); - ASSERT_FALSE(createIface(IfaceType::NAN).empty()); -} - -TEST_F(WifiChipV1_AwareIfaceCombinationTest, - StaMode_CreateStaP2PNan_ShouldFail) { - findModeAndConfigureForIfaceType(IfaceType::STA); - ASSERT_FALSE(createIface(IfaceType::STA).empty()); - ASSERT_FALSE(createIface(IfaceType::P2P).empty()); - ASSERT_TRUE(createIface(IfaceType::NAN).empty()); -} - -TEST_F(WifiChipV1_AwareIfaceCombinationTest, - StaMode_CreateStaNan_AfterP2pRemove_ShouldSucceed) { - findModeAndConfigureForIfaceType(IfaceType::STA); - ASSERT_FALSE(createIface(IfaceType::STA).empty()); - const auto p2p_iface_name = createIface(IfaceType::P2P); - ASSERT_FALSE(p2p_iface_name.empty()); - ASSERT_TRUE(createIface(IfaceType::NAN).empty()); - - // After removing P2P iface, NAN iface creation should succeed. - removeIface(IfaceType::P2P, p2p_iface_name); - ASSERT_FALSE(createIface(IfaceType::NAN).empty()); -} - -TEST_F(WifiChipV1_AwareIfaceCombinationTest, - StaMode_CreateStaP2p_AfterNanRemove_ShouldSucceed) { - findModeAndConfigureForIfaceType(IfaceType::STA); - ASSERT_FALSE(createIface(IfaceType::STA).empty()); - const auto nan_iface_name = createIface(IfaceType::NAN); - ASSERT_FALSE(nan_iface_name.empty()); - ASSERT_TRUE(createIface(IfaceType::P2P).empty()); - - // After removing NAN iface, P2P iface creation should succeed. - removeIface(IfaceType::NAN, nan_iface_name); - ASSERT_FALSE(createIface(IfaceType::P2P).empty()); -} - -TEST_F(WifiChipV1_AwareIfaceCombinationTest, ApMode_CreateAp_ShouldSucceed) { - findModeAndConfigureForIfaceType(IfaceType::AP); - ASSERT_EQ(createIface(IfaceType::AP), "wlan0"); -} - -TEST_F(WifiChipV1_AwareIfaceCombinationTest, ApMode_CreateSta_ShouldFail) { - findModeAndConfigureForIfaceType(IfaceType::AP); - ASSERT_TRUE(createIface(IfaceType::STA).empty()); -} - -TEST_F(WifiChipV1_AwareIfaceCombinationTest, ApMode_CreateP2p_ShouldFail) { - findModeAndConfigureForIfaceType(IfaceType::AP); - ASSERT_TRUE(createIface(IfaceType::STA).empty()); -} - -TEST_F(WifiChipV1_AwareIfaceCombinationTest, ApMode_CreateNan_ShouldFail) { - findModeAndConfigureForIfaceType(IfaceType::AP); - ASSERT_TRUE(createIface(IfaceType::NAN).empty()); -} - -TEST_F(WifiChipV1_AwareIfaceCombinationTest, RttControllerFlowStaModeNoSta) { - findModeAndConfigureForIfaceType(IfaceType::STA); - ASSERT_TRUE(createRttController()); -} - -TEST_F(WifiChipV1_AwareIfaceCombinationTest, RttControllerFlowStaModeWithSta) { - findModeAndConfigureForIfaceType(IfaceType::STA); - ASSERT_FALSE(createIface(IfaceType::STA).empty()); - ASSERT_TRUE(createRttController()); -} - -TEST_F(WifiChipV1_AwareIfaceCombinationTest, RttControllerFlowApToSta) { - findModeAndConfigureForIfaceType(IfaceType::AP); - const auto ap_iface_name = createIface(IfaceType::AP); - ASSERT_FALSE(ap_iface_name.empty()); - ASSERT_FALSE(createRttController()); - - removeIface(IfaceType::AP, ap_iface_name); - - findModeAndConfigureForIfaceType(IfaceType::STA); - ASSERT_TRUE(createRttController()); -} - -TEST_F(WifiChipV1_AwareIfaceCombinationTest, SelectTxScenarioWithOnlySta) { - findModeAndConfigureForIfaceType(IfaceType::STA); - ASSERT_EQ(createIface(IfaceType::STA), "wlan0"); - EXPECT_CALL(*legacy_hal_, selectTxPowerScenario("wlan0", testing::_)) - .WillOnce(testing::Return(legacy_hal::WIFI_SUCCESS)); - chip_->selectTxPowerScenario_1_2( - V1_2::IWifiChip::TxPowerScenario::ON_HEAD_CELL_OFF, - [](const WifiStatus& status) { - ASSERT_EQ(WifiStatusCode::SUCCESS, status.code); - }); -} - -TEST_F(WifiChipV1_AwareIfaceCombinationTest, SelectTxScenarioWithOnlyAp) { - findModeAndConfigureForIfaceType(IfaceType::AP); - ASSERT_EQ(createIface(IfaceType::AP), "wlan0"); - EXPECT_CALL(*legacy_hal_, selectTxPowerScenario("wlan0", testing::_)) - .WillOnce(testing::Return(legacy_hal::WIFI_SUCCESS)); - chip_->selectTxPowerScenario_1_2( - V1_2::IWifiChip::TxPowerScenario::ON_HEAD_CELL_OFF, - [](const WifiStatus& status) { - ASSERT_EQ(WifiStatusCode::SUCCESS, status.code); - }); -} - -////////// V2 + Aware Iface Combinations //////////// -// Mode 1 - STA + STA/AP -// - STA + P2P/NAN -class WifiChipV2_AwareIfaceCombinationTest : public WifiChipTest { - public: - void SetUp() override { - setupV2_AwareIfaceCombination(); - WifiChipTest::SetUp(); - // V2_Aware has 1 mode of operation. - assertNumberOfModes(1u); - } -}; - -TEST_F(WifiChipV2_AwareIfaceCombinationTest, CreateSta_ShouldSucceed) { - findModeAndConfigureForIfaceType(IfaceType::STA); - ASSERT_EQ(createIface(IfaceType::STA), "wlan0"); -} - -TEST_F(WifiChipV2_AwareIfaceCombinationTest, CreateP2p_ShouldSucceed) { - findModeAndConfigureForIfaceType(IfaceType::STA); - ASSERT_FALSE(createIface(IfaceType::P2P).empty()); -} - -TEST_F(WifiChipV2_AwareIfaceCombinationTest, CreateNan_ShouldSucceed) { - findModeAndConfigureForIfaceType(IfaceType::STA); - ASSERT_FALSE(createIface(IfaceType::NAN).empty()); -} - -TEST_F(WifiChipV2_AwareIfaceCombinationTest, CreateAp_ShouldSucceed) { - findModeAndConfigureForIfaceType(IfaceType::STA); - ASSERT_EQ(createIface(IfaceType::AP), "wlan1"); -} - -TEST_F(WifiChipV2_AwareIfaceCombinationTest, CreateStaSta_ShouldFail) { - findModeAndConfigureForIfaceType(IfaceType::AP); - ASSERT_EQ(createIface(IfaceType::STA), "wlan0"); - ASSERT_TRUE(createIface(IfaceType::STA).empty()); -} - -TEST_F(WifiChipV2_AwareIfaceCombinationTest, CreateStaAp_ShouldSucceed) { - findModeAndConfigureForIfaceType(IfaceType::AP); - ASSERT_EQ(createIface(IfaceType::STA), "wlan0"); - ASSERT_EQ(createIface(IfaceType::AP), "wlan1"); -} - -TEST_F(WifiChipV2_AwareIfaceCombinationTest, CreateApSta_ShouldSucceed) { - findModeAndConfigureForIfaceType(IfaceType::AP); - ASSERT_EQ(createIface(IfaceType::AP), "wlan1"); - ASSERT_EQ(createIface(IfaceType::STA), "wlan0"); -} - -TEST_F(WifiChipV2_AwareIfaceCombinationTest, - CreateSta_AfterStaApRemove_ShouldSucceed) { - findModeAndConfigureForIfaceType(IfaceType::STA); - const auto sta_iface_name = createIface(IfaceType::STA); - ASSERT_FALSE(sta_iface_name.empty()); - const auto ap_iface_name = createIface(IfaceType::AP); - ASSERT_FALSE(ap_iface_name.empty()); - - ASSERT_TRUE(createIface(IfaceType::STA).empty()); - - // After removing AP & STA iface, STA iface creation should succeed. - removeIface(IfaceType::STA, sta_iface_name); - removeIface(IfaceType::AP, ap_iface_name); - ASSERT_FALSE(createIface(IfaceType::STA).empty()); -} - -TEST_F(WifiChipV2_AwareIfaceCombinationTest, CreateStaP2p_ShouldSucceed) { - findModeAndConfigureForIfaceType(IfaceType::STA); - ASSERT_FALSE(createIface(IfaceType::STA).empty()); - ASSERT_FALSE(createIface(IfaceType::P2P).empty()); -} - -TEST_F(WifiChipV2_AwareIfaceCombinationTest, CreateStaNan_ShouldSucceed) { - findModeAndConfigureForIfaceType(IfaceType::STA); - ASSERT_FALSE(createIface(IfaceType::STA).empty()); - ASSERT_FALSE(createIface(IfaceType::NAN).empty()); -} - -TEST_F(WifiChipV2_AwareIfaceCombinationTest, CreateStaP2PNan_ShouldFail) { - findModeAndConfigureForIfaceType(IfaceType::STA); - ASSERT_FALSE(createIface(IfaceType::STA).empty()); - ASSERT_FALSE(createIface(IfaceType::P2P).empty()); - ASSERT_TRUE(createIface(IfaceType::NAN).empty()); -} - -TEST_F(WifiChipV2_AwareIfaceCombinationTest, - CreateStaNan_AfterP2pRemove_ShouldSucceed) { - findModeAndConfigureForIfaceType(IfaceType::STA); - ASSERT_FALSE(createIface(IfaceType::STA).empty()); - const auto p2p_iface_name = createIface(IfaceType::P2P); - ASSERT_FALSE(p2p_iface_name.empty()); - ASSERT_TRUE(createIface(IfaceType::NAN).empty()); - - // After removing P2P iface, NAN iface creation should succeed. - removeIface(IfaceType::P2P, p2p_iface_name); - ASSERT_FALSE(createIface(IfaceType::NAN).empty()); -} - -TEST_F(WifiChipV2_AwareIfaceCombinationTest, - CreateStaP2p_AfterNanRemove_ShouldSucceed) { - findModeAndConfigureForIfaceType(IfaceType::STA); - ASSERT_FALSE(createIface(IfaceType::STA).empty()); - const auto nan_iface_name = createIface(IfaceType::NAN); - ASSERT_FALSE(nan_iface_name.empty()); - ASSERT_TRUE(createIface(IfaceType::P2P).empty()); - - // After removing NAN iface, P2P iface creation should succeed. - removeIface(IfaceType::NAN, nan_iface_name); - ASSERT_FALSE(createIface(IfaceType::P2P).empty()); -} - -TEST_F(WifiChipV2_AwareIfaceCombinationTest, CreateApNan_ShouldFail) { - findModeAndConfigureForIfaceType(IfaceType::AP); - ASSERT_FALSE(createIface(IfaceType::AP).empty()); - ASSERT_TRUE(createIface(IfaceType::NAN).empty()); -} - -TEST_F(WifiChipV2_AwareIfaceCombinationTest, CreateApP2p_ShouldFail) { - findModeAndConfigureForIfaceType(IfaceType::AP); - ASSERT_FALSE(createIface(IfaceType::AP).empty()); - ASSERT_TRUE(createIface(IfaceType::P2P).empty()); -} - -TEST_F(WifiChipV2_AwareIfaceCombinationTest, - StaMode_CreateStaNan_AfterP2pRemove_ShouldSucceed) { - findModeAndConfigureForIfaceType(IfaceType::STA); - ASSERT_FALSE(createIface(IfaceType::STA).empty()); - const auto p2p_iface_name = createIface(IfaceType::P2P); - ASSERT_FALSE(p2p_iface_name.empty()); - ASSERT_TRUE(createIface(IfaceType::NAN).empty()); - - // After removing P2P iface, NAN iface creation should succeed. - removeIface(IfaceType::P2P, p2p_iface_name); - ASSERT_FALSE(createIface(IfaceType::NAN).empty()); -} - -TEST_F(WifiChipV2_AwareIfaceCombinationTest, - StaMode_CreateStaP2p_AfterNanRemove_ShouldSucceed) { - findModeAndConfigureForIfaceType(IfaceType::STA); - ASSERT_FALSE(createIface(IfaceType::STA).empty()); - const auto nan_iface_name = createIface(IfaceType::NAN); - ASSERT_FALSE(nan_iface_name.empty()); - ASSERT_TRUE(createIface(IfaceType::P2P).empty()); - - // After removing NAN iface, P2P iface creation should succeed. - removeIface(IfaceType::NAN, nan_iface_name); - ASSERT_FALSE(createIface(IfaceType::P2P).empty()); -} - -TEST_F(WifiChipV2_AwareIfaceCombinationTest, - CreateStaAp_EnsureDifferentIfaceNames) { - findModeAndConfigureForIfaceType(IfaceType::AP); - const auto sta_iface_name = createIface(IfaceType::STA); - const auto ap_iface_name = createIface(IfaceType::AP); - ASSERT_FALSE(sta_iface_name.empty()); - ASSERT_FALSE(ap_iface_name.empty()); - ASSERT_NE(sta_iface_name, ap_iface_name); -} - -TEST_F(WifiChipV2_AwareIfaceCombinationTest, RttControllerFlowStaModeNoSta) { - findModeAndConfigureForIfaceType(IfaceType::STA); - ASSERT_TRUE(createRttController()); -} - -TEST_F(WifiChipV2_AwareIfaceCombinationTest, RttControllerFlowStaModeWithSta) { - findModeAndConfigureForIfaceType(IfaceType::STA); - ASSERT_FALSE(createIface(IfaceType::STA).empty()); - ASSERT_TRUE(createRttController()); -} - -TEST_F(WifiChipV2_AwareIfaceCombinationTest, RttControllerFlow) { - findModeAndConfigureForIfaceType(IfaceType::STA); - ASSERT_FALSE(createIface(IfaceType::STA).empty()); - ASSERT_FALSE(createIface(IfaceType::AP).empty()); - ASSERT_TRUE(createRttController()); -} - -TEST_F(WifiChipV2_AwareIfaceCombinationTest, SelectTxScenarioWithOnlySta) { - findModeAndConfigureForIfaceType(IfaceType::STA); - ASSERT_EQ(createIface(IfaceType::STA), "wlan0"); - EXPECT_CALL(*legacy_hal_, selectTxPowerScenario("wlan0", testing::_)) - .WillOnce(testing::Return(legacy_hal::WIFI_SUCCESS)); - chip_->selectTxPowerScenario_1_2( - V1_2::IWifiChip::TxPowerScenario::ON_HEAD_CELL_OFF, - [](const WifiStatus& status) { - ASSERT_EQ(WifiStatusCode::SUCCESS, status.code); - }); -} - -TEST_F(WifiChipV2_AwareIfaceCombinationTest, SelectTxScenarioWithOnlyAp) { - findModeAndConfigureForIfaceType(IfaceType::AP); - ASSERT_EQ(createIface(IfaceType::AP), "wlan1"); - EXPECT_CALL(*legacy_hal_, selectTxPowerScenario("wlan1", testing::_)) - .WillOnce(testing::Return(legacy_hal::WIFI_SUCCESS)); - chip_->selectTxPowerScenario_1_2( - V1_2::IWifiChip::TxPowerScenario::ON_HEAD_CELL_OFF, - [](const WifiStatus& status) { - ASSERT_EQ(WifiStatusCode::SUCCESS, status.code); - }); -} - -TEST_F(WifiChipV2_AwareIfaceCombinationTest, - InvalidateAndRemoveNanOnStaRemove) { - findModeAndConfigureForIfaceType(IfaceType::STA); - ASSERT_EQ(createIface(IfaceType::STA), "wlan0"); - - // Create NAN iface - ASSERT_EQ(createIface(IfaceType::NAN), "wlan0"); - - // We should have 1 nan iface. - chip_->getNanIfaceNames( - [](const WifiStatus& status, const hidl_vec<hidl_string>& iface_names) { - ASSERT_EQ(WifiStatusCode::SUCCESS, status.code); - ASSERT_EQ(iface_names.size(), 1u); - ASSERT_EQ(iface_names[0], "wlan0"); - }); - // Retrieve the exact iface object. - sp<android::hardware::wifi::V1_0::IWifiNanIface> nan_iface; - chip_->getNanIface( - "wlan0", - [&nan_iface]( - const WifiStatus& status, - const sp<android::hardware::wifi::V1_0::IWifiNanIface>& iface) { - ASSERT_EQ(WifiStatusCode::SUCCESS, status.code); - ASSERT_NE(iface.get(), nullptr); - nan_iface = iface; - }); - - // Remove the STA iface. - removeIface(IfaceType::STA, "wlan0"); - // We should have 0 nan iface now. - chip_->getNanIfaceNames( - [](const WifiStatus& status, const hidl_vec<hidl_string>& iface_names) { - ASSERT_EQ(WifiStatusCode::SUCCESS, status.code); - ASSERT_EQ(iface_names.size(), 0u); - }); - // Any operation on the nan iface object should return error now. - nan_iface->getName( - [](const WifiStatus& status, const std::string& /* iface_name */) { - ASSERT_EQ(WifiStatusCode::ERROR_WIFI_IFACE_INVALID, status.code); - }); -} - -TEST_F(WifiChipV2_AwareIfaceCombinationTest, - InvalidateAndRemoveRttControllerOnStaRemove) { - findModeAndConfigureForIfaceType(IfaceType::STA); - ASSERT_EQ(createIface(IfaceType::STA), "wlan0"); - - // Create RTT controller - sp<IWifiRttController> rtt_controller; - chip_->createRttController_1_4( - NULL, [&rtt_controller](const WifiStatus& status, - const sp<IWifiRttController>& rtt) { - if (WifiStatusCode::SUCCESS == status.code) { - ASSERT_NE(rtt.get(), nullptr); - rtt_controller = rtt; - } - }); - - // Remove the STA iface. - removeIface(IfaceType::STA, "wlan0"); - - // Any operation on the rtt controller object should return error now. - rtt_controller->getBoundIface( - [](const WifiStatus& status, const sp<IWifiIface>& /* iface */) { - ASSERT_EQ(WifiStatusCode::ERROR_WIFI_RTT_CONTROLLER_INVALID, - status.code); - }); -} - -TEST_F(WifiChipV2_AwareIfaceCombinationTest, CreateNanWithSharedNanIface) { - property_set("wifi.aware.interface", nullptr); - findModeAndConfigureForIfaceType(IfaceType::STA); - ASSERT_EQ(createIface(IfaceType::STA), "wlan0"); - ASSERT_EQ(createIface(IfaceType::NAN), "wlan0"); - removeIface(IfaceType::NAN, "wlan0"); - EXPECT_CALL(*iface_util_, setUpState(testing::_, testing::_)).Times(0); -} - -TEST_F(WifiChipV2_AwareIfaceCombinationTest, CreateNanWithDedicatedNanIface) { - property_set("wifi.aware.interface", "aware0"); - findModeAndConfigureForIfaceType(IfaceType::STA); - ASSERT_EQ(createIface(IfaceType::STA), "wlan0"); - EXPECT_CALL(*iface_util_, ifNameToIndex("aware0")) - .WillOnce(testing::Return(4)); - EXPECT_CALL(*iface_util_, setUpState("aware0", true)) - .WillOnce(testing::Return(true)); - ASSERT_EQ(createIface(IfaceType::NAN), "aware0"); - - EXPECT_CALL(*iface_util_, setUpState("aware0", false)) - .WillOnce(testing::Return(true)); - removeIface(IfaceType::NAN, "aware0"); -} - -////////// V1 Iface Combinations when AP creation is disabled ////////// -class WifiChipV1_AwareDisabledApIfaceCombinationTest : public WifiChipTest { - public: - void SetUp() override { - setupV1_AwareDisabledApIfaceCombination(); - WifiChipTest::SetUp(); - } -}; - -TEST_F(WifiChipV1_AwareDisabledApIfaceCombinationTest, - StaMode_CreateSta_ShouldSucceed) { - findModeAndConfigureForIfaceType(IfaceType::STA); - ASSERT_FALSE(createIface(IfaceType::STA).empty()); - ASSERT_TRUE(createIface(IfaceType::AP).empty()); -} - -////////// V2 Iface Combinations when AP creation is disabled ////////// -class WifiChipV2_AwareDisabledApIfaceCombinationTest : public WifiChipTest { - public: - void SetUp() override { - setupV2_AwareDisabledApIfaceCombination(); - WifiChipTest::SetUp(); - } -}; - -TEST_F(WifiChipV2_AwareDisabledApIfaceCombinationTest, - CreateSta_ShouldSucceed) { - findModeAndConfigureForIfaceType(IfaceType::STA); - ASSERT_FALSE(createIface(IfaceType::STA).empty()); - ASSERT_TRUE(createIface(IfaceType::AP).empty()); -} - -////////// Hypothetical Iface Combination with multiple ifaces ////////// -class WifiChip_MultiIfaceTest : public WifiChipTest { - public: - void SetUp() override { - setup_MultiIfaceCombination(); - WifiChipTest::SetUp(); - } -}; - -TEST_F(WifiChip_MultiIfaceTest, Create3Sta) { - findModeAndConfigureForIfaceType(IfaceType::STA); - ASSERT_FALSE(createIface(IfaceType::STA).empty()); - ASSERT_FALSE(createIface(IfaceType::STA).empty()); - ASSERT_FALSE(createIface(IfaceType::STA).empty()); - ASSERT_TRUE(createIface(IfaceType::STA).empty()); -} - -TEST_F(WifiChip_MultiIfaceTest, CreateStaWithDefaultNames) { - property_set("wifi.interface.0", ""); - property_set("wifi.interface.1", ""); - property_set("wifi.interface.2", ""); - property_set("wifi.interface", ""); - property_set("wifi.concurrent.interface", ""); - findModeAndConfigureForIfaceType(IfaceType::STA); - ASSERT_EQ(createIface(IfaceType::STA), "wlan0"); - ASSERT_EQ(createIface(IfaceType::STA), "wlan1"); - ASSERT_EQ(createIface(IfaceType::STA), "wlan2"); -} - -TEST_F(WifiChip_MultiIfaceTest, CreateStaWithCustomNames) { - property_set("wifi.interface.0", "test0"); - property_set("wifi.interface.1", "test1"); - property_set("wifi.interface.2", "test2"); - property_set("wifi.interface", "bad0"); - property_set("wifi.concurrent.interface", "bad1"); - findModeAndConfigureForIfaceType(IfaceType::STA); - ASSERT_EQ(createIface(IfaceType::STA), "bad0"); - ASSERT_EQ(createIface(IfaceType::STA), "bad1"); - ASSERT_EQ(createIface(IfaceType::STA), "test2"); -} - -TEST_F(WifiChip_MultiIfaceTest, CreateStaWithCustomAltNames) { - property_set("wifi.interface.0", ""); - property_set("wifi.interface.1", ""); - property_set("wifi.interface.2", ""); - property_set("wifi.interface", "testA0"); - property_set("wifi.concurrent.interface", "testA1"); - findModeAndConfigureForIfaceType(IfaceType::STA); - ASSERT_EQ(createIface(IfaceType::STA), "testA0"); - ASSERT_EQ(createIface(IfaceType::STA), "testA1"); - ASSERT_EQ(createIface(IfaceType::STA), "wlan2"); -} - -TEST_F(WifiChip_MultiIfaceTest, CreateApStartsWithIdx1) { - findModeAndConfigureForIfaceType(IfaceType::STA); - // First AP will be slotted to wlan1. - ASSERT_EQ(createIface(IfaceType::AP), "wlan1"); - // First STA will be slotted to wlan0. - ASSERT_EQ(createIface(IfaceType::STA), "wlan0"); - // All further STA will be slotted to the remaining free indices. - ASSERT_EQ(createIface(IfaceType::STA), "wlan2"); - ASSERT_EQ(createIface(IfaceType::STA), "wlan3"); -} -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android diff --git a/wifi/1.5/default/tests/wifi_iface_util_unit_tests.cpp b/wifi/1.5/default/tests/wifi_iface_util_unit_tests.cpp deleted file mode 100644 index 8b67bb80c8..0000000000 --- a/wifi/1.5/default/tests/wifi_iface_util_unit_tests.cpp +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright (C) 2019, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include <android-base/logging.h> -#include <android-base/macros.h> -#include <gmock/gmock.h> - -#undef NAN -#include "wifi_iface_util.h" - -#include "mock_interface_tool.h" -#include "mock_wifi_legacy_hal.h" - -using testing::NiceMock; -using testing::Test; - -namespace { -constexpr uint8_t kValidUnicastLocallyAssignedMacAddressMask = 0x02; -constexpr uint8_t kMacAddress[] = {0x02, 0x12, 0x45, 0x56, 0xab, 0xcc}; -constexpr char kIfaceName[] = "test-wlan0"; - -bool isValidUnicastLocallyAssignedMacAddress( - const std::array<uint8_t, 6>& mac_address) { - uint8_t first_byte = mac_address[0]; - return (first_byte & 0x3) == kValidUnicastLocallyAssignedMacAddressMask; -} -} // namespace - -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { -namespace iface_util { -class WifiIfaceUtilTest : public Test { - protected: - std::shared_ptr<NiceMock<wifi_system::MockInterfaceTool>> iface_tool_{ - new NiceMock<wifi_system::MockInterfaceTool>}; - legacy_hal::wifi_hal_fn fake_func_table_; - std::shared_ptr<NiceMock<legacy_hal::MockWifiLegacyHal>> legacy_hal_{ - new NiceMock<legacy_hal::MockWifiLegacyHal>(iface_tool_, - fake_func_table_, true)}; - WifiIfaceUtil* iface_util_ = new WifiIfaceUtil(iface_tool_, legacy_hal_); -}; - -TEST_F(WifiIfaceUtilTest, GetOrCreateRandomMacAddress) { - auto mac_address = iface_util_->getOrCreateRandomMacAddress(); - ASSERT_TRUE(isValidUnicastLocallyAssignedMacAddress(mac_address)); - - // All further calls should return the same MAC address. - ASSERT_EQ(mac_address, iface_util_->getOrCreateRandomMacAddress()); - ASSERT_EQ(mac_address, iface_util_->getOrCreateRandomMacAddress()); -} - -TEST_F(WifiIfaceUtilTest, IfaceEventHandlers_SetMacAddress) { - std::array<uint8_t, 6> mac_address = {}; - std::copy(std::begin(kMacAddress), std::end(kMacAddress), - std::begin(mac_address)); - EXPECT_CALL(*iface_tool_, SetMacAddress(testing::_, testing::_)) - .WillRepeatedly(testing::Return(true)); - EXPECT_CALL(*iface_tool_, SetUpState(testing::_, testing::_)) - .WillRepeatedly(testing::Return(true)); - - // Register for iface state toggle events. - bool callback_invoked = false; - iface_util::IfaceEventHandlers event_handlers = {}; - event_handlers.on_state_toggle_off_on = - [&callback_invoked](const std::string& /* iface_name */) { - callback_invoked = true; - }; - iface_util_->registerIfaceEventHandlers(kIfaceName, event_handlers); - // Invoke setMacAddress and ensure that the cb is invoked. - ASSERT_TRUE(iface_util_->setMacAddress(kIfaceName, mac_address)); - ASSERT_TRUE(callback_invoked); - - // Unregister for iface state toggle events. - callback_invoked = false; - iface_util_->unregisterIfaceEventHandlers(kIfaceName); - // Invoke setMacAddress and ensure that the cb is not invoked. - ASSERT_TRUE(iface_util_->setMacAddress(kIfaceName, mac_address)); - ASSERT_FALSE(callback_invoked); -} -} // namespace iface_util -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android diff --git a/wifi/1.5/default/tests/wifi_nan_iface_unit_tests.cpp b/wifi/1.5/default/tests/wifi_nan_iface_unit_tests.cpp deleted file mode 100644 index 32da55ec2b..0000000000 --- a/wifi/1.5/default/tests/wifi_nan_iface_unit_tests.cpp +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Copyright (C) 2019, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include <android-base/logging.h> -#include <android-base/macros.h> -#include <cutils/properties.h> -#include <gmock/gmock.h> - -#undef NAN // This is weird, NAN is defined in bionic/libc/include/math.h:38 -#include "wifi_nan_iface.h" - -#include "mock_interface_tool.h" -#include "mock_wifi_feature_flags.h" -#include "mock_wifi_iface_util.h" -#include "mock_wifi_legacy_hal.h" - -using testing::NiceMock; -using testing::Return; -using testing::Test; - -namespace { -constexpr char kIfaceName[] = "mockWlan0"; -} // namespace - -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { - -using android::hardware::wifi::V1_2::NanDataPathConfirmInd; - -bool CaptureIfaceEventHandlers( - const std::string& /* iface_name*/, - iface_util::IfaceEventHandlers in_iface_event_handlers, - iface_util::IfaceEventHandlers* out_iface_event_handlers) { - *out_iface_event_handlers = in_iface_event_handlers; - return true; -} - -class MockNanIfaceEventCallback : public IWifiNanIfaceEventCallback { - public: - MockNanIfaceEventCallback() = default; - - MOCK_METHOD3( - notifyCapabilitiesResponse, - Return<void>(uint16_t, const WifiNanStatus&, - const android::hardware::wifi::V1_0::NanCapabilities&)); - MOCK_METHOD2(notifyEnableResponse, - Return<void>(uint16_t, const WifiNanStatus&)); - MOCK_METHOD2(notifyConfigResponse, - Return<void>(uint16_t, const WifiNanStatus&)); - MOCK_METHOD2(notifyDisableResponse, - Return<void>(uint16_t, const WifiNanStatus&)); - MOCK_METHOD3(notifyStartPublishResponse, - Return<void>(uint16_t, const WifiNanStatus&, uint8_t)); - MOCK_METHOD2(notifyStopPublishResponse, - Return<void>(uint16_t, const WifiNanStatus&)); - MOCK_METHOD3(notifyStartSubscribeResponse, - Return<void>(uint16_t, const WifiNanStatus&, uint8_t)); - MOCK_METHOD2(notifyStopSubscribeResponse, - Return<void>(uint16_t, const WifiNanStatus&)); - MOCK_METHOD2(notifyTransmitFollowupResponse, - Return<void>(uint16_t, const WifiNanStatus&)); - MOCK_METHOD2(notifyCreateDataInterfaceResponse, - Return<void>(uint16_t, const WifiNanStatus&)); - MOCK_METHOD2(notifyDeleteDataInterfaceResponse, - Return<void>(uint16_t, const WifiNanStatus&)); - MOCK_METHOD3(notifyInitiateDataPathResponse, - Return<void>(uint16_t, const WifiNanStatus&, uint32_t)); - MOCK_METHOD2(notifyRespondToDataPathIndicationResponse, - Return<void>(uint16_t, const WifiNanStatus&)); - MOCK_METHOD2(notifyTerminateDataPathResponse, - Return<void>(uint16_t, const WifiNanStatus&)); - MOCK_METHOD1(eventClusterEvent, Return<void>(const NanClusterEventInd&)); - MOCK_METHOD1(eventDisabled, Return<void>(const WifiNanStatus&)); - MOCK_METHOD2(eventPublishTerminated, - Return<void>(uint8_t, const WifiNanStatus&)); - MOCK_METHOD2(eventSubscribeTerminated, - Return<void>(uint8_t, const WifiNanStatus&)); - MOCK_METHOD1(eventMatch, Return<void>(const NanMatchInd&)); - MOCK_METHOD2(eventMatchExpired, Return<void>(uint8_t, uint32_t)); - MOCK_METHOD1(eventFollowupReceived, - Return<void>(const NanFollowupReceivedInd&)); - MOCK_METHOD2(eventTransmitFollowup, - Return<void>(uint16_t, const WifiNanStatus&)); - MOCK_METHOD1(eventDataPathRequest, - Return<void>(const NanDataPathRequestInd&)); - MOCK_METHOD1( - eventDataPathConfirm, - Return<void>( - const android::hardware::wifi::V1_0::NanDataPathConfirmInd&)); - MOCK_METHOD1(eventDataPathTerminated, Return<void>(uint32_t)); - MOCK_METHOD1(eventDataPathConfirm_1_2, - Return<void>(const NanDataPathConfirmInd&)); - MOCK_METHOD1(eventDataPathScheduleUpdate, - Return<void>(const NanDataPathScheduleUpdateInd&)); - MOCK_METHOD3(notifyCapabilitiesResponse_1_5, - Return<void>(uint16_t, const WifiNanStatus&, - const NanCapabilities&)); -}; - -class WifiNanIfaceTest : public Test { - protected: - legacy_hal::wifi_hal_fn fake_func_table_; - std::shared_ptr<NiceMock<wifi_system::MockInterfaceTool>> iface_tool_{ - new NiceMock<wifi_system::MockInterfaceTool>}; - std::shared_ptr<NiceMock<legacy_hal::MockWifiLegacyHal>> legacy_hal_{ - new NiceMock<legacy_hal::MockWifiLegacyHal>(iface_tool_, - fake_func_table_, true)}; - std::shared_ptr<NiceMock<iface_util::MockWifiIfaceUtil>> iface_util_{ - new NiceMock<iface_util::MockWifiIfaceUtil>(iface_tool_, legacy_hal_)}; -}; - -TEST_F(WifiNanIfaceTest, IfacEventHandlers_OnStateToggleOffOn) { - iface_util::IfaceEventHandlers captured_iface_event_handlers = {}; - EXPECT_CALL(*legacy_hal_, - nanRegisterCallbackHandlers(testing::_, testing::_)) - .WillOnce(testing::Return(legacy_hal::WIFI_SUCCESS)); - EXPECT_CALL(*iface_util_, - registerIfaceEventHandlers(testing::_, testing::_)) - .WillOnce(testing::Invoke( - bind(CaptureIfaceEventHandlers, std::placeholders::_1, - std::placeholders::_2, &captured_iface_event_handlers))); - sp<WifiNanIface> nan_iface = - new WifiNanIface(kIfaceName, false, legacy_hal_, iface_util_); - - // Register a mock nan event callback. - sp<NiceMock<MockNanIfaceEventCallback>> mock_event_callback{ - new NiceMock<MockNanIfaceEventCallback>}; - nan_iface->registerEventCallback( - mock_event_callback, [](const WifiStatus& status) { - ASSERT_EQ(WifiStatusCode::SUCCESS, status.code); - }); - // Ensure that the eventDisabled() function in mock callback will be - // invoked. - WifiNanStatus expected_nan_status = { - NanStatusType::UNSUPPORTED_CONCURRENCY_NAN_DISABLED, ""}; - EXPECT_CALL(*mock_event_callback, eventDisabled(expected_nan_status)) - .Times(1); - - // Trigger the iface state toggle callback. - captured_iface_event_handlers.on_state_toggle_off_on(kIfaceName); -} -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android diff --git a/wifi/1.5/default/wifi.cpp b/wifi/1.5/default/wifi.cpp deleted file mode 100644 index a85b242a8a..0000000000 --- a/wifi/1.5/default/wifi.cpp +++ /dev/null @@ -1,304 +0,0 @@ -/* - * Copyright (C) 2016 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include <android-base/logging.h> - -#include "hidl_return_util.h" -#include "wifi.h" -#include "wifi_status_util.h" - -namespace { -// Starting Chip ID, will be assigned to primary chip -static constexpr android::hardware::wifi::V1_0::ChipId kPrimaryChipId = 0; -} // namespace - -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { -using hidl_return_util::validateAndCall; -using hidl_return_util::validateAndCallWithLock; - -Wifi::Wifi( - const std::shared_ptr<wifi_system::InterfaceTool> iface_tool, - const std::shared_ptr<legacy_hal::WifiLegacyHalFactory> legacy_hal_factory, - const std::shared_ptr<mode_controller::WifiModeController> mode_controller, - const std::shared_ptr<feature_flags::WifiFeatureFlags> feature_flags) - : iface_tool_(iface_tool), - legacy_hal_factory_(legacy_hal_factory), - mode_controller_(mode_controller), - feature_flags_(feature_flags), - run_state_(RunState::STOPPED) {} - -bool Wifi::isValid() { - // This object is always valid. - return true; -} - -Return<void> Wifi::registerEventCallback( - const sp<V1_0::IWifiEventCallback>& event_callback, - registerEventCallback_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_UNKNOWN, - &Wifi::registerEventCallbackInternal, hidl_status_cb, - event_callback); -} - -Return<void> Wifi::registerEventCallback_1_5( - const sp<V1_5::IWifiEventCallback>& event_callback, - registerEventCallback_1_5_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_UNKNOWN, - &Wifi::registerEventCallbackInternal_1_5, - hidl_status_cb, event_callback); -} - -Return<bool> Wifi::isStarted() { return run_state_ != RunState::STOPPED; } - -Return<void> Wifi::start(start_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_UNKNOWN, - &Wifi::startInternal, hidl_status_cb); -} - -Return<void> Wifi::stop(stop_cb hidl_status_cb) { - return validateAndCallWithLock(this, WifiStatusCode::ERROR_UNKNOWN, - &Wifi::stopInternal, hidl_status_cb); -} - -Return<void> Wifi::getChipIds(getChipIds_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_UNKNOWN, - &Wifi::getChipIdsInternal, hidl_status_cb); -} - -Return<void> Wifi::getChip(ChipId chip_id, getChip_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_UNKNOWN, - &Wifi::getChipInternal, hidl_status_cb, chip_id); -} - -Return<void> Wifi::debug(const hidl_handle& handle, - const hidl_vec<hidl_string>&) { - LOG(INFO) << "-----------Debug is called----------------"; - if (chips_.size() == 0) { - return Void(); - } - - for (sp<WifiChip> chip : chips_) { - if (!chip.get()) continue; - - chip->debug(handle, {}); - } - return Void(); -} - -WifiStatus Wifi::registerEventCallbackInternal( - const sp<V1_0::IWifiEventCallback>& event_callback __unused) { - // Deprecated support for this callback. - return createWifiStatus(WifiStatusCode::ERROR_NOT_SUPPORTED); -} - -WifiStatus Wifi::registerEventCallbackInternal_1_5( - const sp<V1_5::IWifiEventCallback>& event_callback) { - if (!event_cb_handler_.addCallback(event_callback)) { - return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN); - } - return createWifiStatus(WifiStatusCode::SUCCESS); -} - -WifiStatus Wifi::startInternal() { - if (run_state_ == RunState::STARTED) { - return createWifiStatus(WifiStatusCode::SUCCESS); - } else if (run_state_ == RunState::STOPPING) { - return createWifiStatus(WifiStatusCode::ERROR_NOT_AVAILABLE, - "HAL is stopping"); - } - WifiStatus wifi_status = initializeModeControllerAndLegacyHal(); - if (wifi_status.code == WifiStatusCode::SUCCESS) { - // Register the callback for subsystem restart - const auto& on_subsystem_restart_callback = - [this](const std::string& error) { - WifiStatus wifi_status = - createWifiStatus(WifiStatusCode::ERROR_UNKNOWN, error); - for (const auto& callback : event_cb_handler_.getCallbacks()) { - LOG(INFO) << "Attempting to invoke onSubsystemRestart " - "callback"; - if (!callback->onSubsystemRestart(wifi_status).isOk()) { - LOG(ERROR) - << "Failed to invoke onSubsystemRestart callback"; - } else { - LOG(INFO) << "Succeeded to invoke onSubsystemRestart " - "callback"; - } - } - }; - - // Create the chip instance once the HAL is started. - android::hardware::wifi::V1_0::ChipId chipId = kPrimaryChipId; - for (auto& hal : legacy_hals_) { - chips_.push_back(new WifiChip( - chipId, chipId == kPrimaryChipId, hal, mode_controller_, - std::make_shared<iface_util::WifiIfaceUtil>(iface_tool_, hal), - feature_flags_, on_subsystem_restart_callback)); - chipId++; - } - run_state_ = RunState::STARTED; - for (const auto& callback : event_cb_handler_.getCallbacks()) { - if (!callback->onStart().isOk()) { - LOG(ERROR) << "Failed to invoke onStart callback"; - }; - } - LOG(INFO) << "Wifi HAL started"; - } else { - for (const auto& callback : event_cb_handler_.getCallbacks()) { - if (!callback->onFailure(wifi_status).isOk()) { - LOG(ERROR) << "Failed to invoke onFailure callback"; - } - } - LOG(ERROR) << "Wifi HAL start failed"; - // Clear the event callback objects since the HAL start failed. - event_cb_handler_.invalidate(); - } - return wifi_status; -} - -WifiStatus Wifi::stopInternal( - /* NONNULL */ std::unique_lock<std::recursive_mutex>* lock) { - if (run_state_ == RunState::STOPPED) { - return createWifiStatus(WifiStatusCode::SUCCESS); - } else if (run_state_ == RunState::STOPPING) { - return createWifiStatus(WifiStatusCode::ERROR_NOT_AVAILABLE, - "HAL is stopping"); - } - // Clear the chip object and its child objects since the HAL is now - // stopped. - for (auto& chip : chips_) { - if (chip.get()) { - chip->invalidate(); - chip.clear(); - } - } - chips_.clear(); - WifiStatus wifi_status = stopLegacyHalAndDeinitializeModeController(lock); - if (wifi_status.code == WifiStatusCode::SUCCESS) { - for (const auto& callback : event_cb_handler_.getCallbacks()) { - if (!callback->onStop().isOk()) { - LOG(ERROR) << "Failed to invoke onStop callback"; - }; - } - LOG(INFO) << "Wifi HAL stopped"; - } else { - for (const auto& callback : event_cb_handler_.getCallbacks()) { - if (!callback->onFailure(wifi_status).isOk()) { - LOG(ERROR) << "Failed to invoke onFailure callback"; - } - } - LOG(ERROR) << "Wifi HAL stop failed"; - } - // Clear the event callback objects since the HAL is now stopped. - event_cb_handler_.invalidate(); - return wifi_status; -} - -std::pair<WifiStatus, std::vector<ChipId>> Wifi::getChipIdsInternal() { - std::vector<ChipId> chip_ids; - - for (auto& chip : chips_) { - ChipId chip_id = getChipIdFromWifiChip(chip); - if (chip_id != UINT32_MAX) chip_ids.emplace_back(chip_id); - } - return {createWifiStatus(WifiStatusCode::SUCCESS), std::move(chip_ids)}; -} - -std::pair<WifiStatus, sp<V1_4::IWifiChip>> Wifi::getChipInternal( - ChipId chip_id) { - for (auto& chip : chips_) { - ChipId cand_id = getChipIdFromWifiChip(chip); - if ((cand_id != UINT32_MAX) && (cand_id == chip_id)) - return {createWifiStatus(WifiStatusCode::SUCCESS), chip}; - } - - return {createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS), nullptr}; -} - -WifiStatus Wifi::initializeModeControllerAndLegacyHal() { - if (!mode_controller_->initialize()) { - LOG(ERROR) << "Failed to initialize firmware mode controller"; - return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN); - } - - legacy_hals_ = legacy_hal_factory_->getHals(); - if (legacy_hals_.empty()) - return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN); - int index = 0; // for failure log - for (auto& hal : legacy_hals_) { - legacy_hal::wifi_error legacy_status = hal->initialize(); - if (legacy_status != legacy_hal::WIFI_SUCCESS) { - // Currently WifiLegacyHal::initialize does not allocate extra mem, - // only initializes the function table. If this changes, need to - // implement WifiLegacyHal::deinitialize and deinitalize the - // HALs already initialized - LOG(ERROR) << "Failed to initialize legacy HAL index: " << index - << " error: " << legacyErrorToString(legacy_status); - return createWifiStatusFromLegacyError(legacy_status); - } - index++; - } - return createWifiStatus(WifiStatusCode::SUCCESS); -} - -WifiStatus Wifi::stopLegacyHalAndDeinitializeModeController( - /* NONNULL */ std::unique_lock<std::recursive_mutex>* lock) { - legacy_hal::wifi_error legacy_status = legacy_hal::WIFI_SUCCESS; - int index = 0; - - run_state_ = RunState::STOPPING; - for (auto& hal : legacy_hals_) { - legacy_hal::wifi_error tmp = hal->stop(lock, [&]() {}); - if (tmp != legacy_hal::WIFI_SUCCESS) { - LOG(ERROR) << "Failed to stop legacy HAL index: " << index - << " error: " << legacyErrorToString(legacy_status); - legacy_status = tmp; - } - index++; - } - run_state_ = RunState::STOPPED; - - if (legacy_status != legacy_hal::WIFI_SUCCESS) { - LOG(ERROR) << "One or more legacy HALs failed to stop"; - return createWifiStatusFromLegacyError(legacy_status); - } - if (!mode_controller_->deinitialize()) { - LOG(ERROR) << "Failed to deinitialize firmware mode controller"; - return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN); - } - return createWifiStatus(WifiStatusCode::SUCCESS); -} - -ChipId Wifi::getChipIdFromWifiChip(sp<WifiChip>& chip) { - ChipId chip_id = UINT32_MAX; - if (chip.get()) { - chip->getId([&](WifiStatus status, uint32_t id) { - if (status.code == WifiStatusCode::SUCCESS) { - chip_id = id; - } - }); - } - - return chip_id; -} -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android diff --git a/wifi/1.5/default/wifi.h b/wifi/1.5/default/wifi.h deleted file mode 100644 index c94ef3f4cf..0000000000 --- a/wifi/1.5/default/wifi.h +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright (C) 2016 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef WIFI_H_ -#define WIFI_H_ - -// HACK: NAN is a macro defined in math.h, which can be included in various -// headers. This wifi HAL uses an enum called NAN, which does not compile when -// the macro is defined. Undefine NAN to work around it. -#undef NAN -#include <android/hardware/wifi/1.5/IWifi.h> - -#include <android-base/macros.h> -#include <utils/Looper.h> -#include <functional> - -#include "hidl_callback_util.h" -#include "wifi_chip.h" -#include "wifi_feature_flags.h" -#include "wifi_legacy_hal.h" -#include "wifi_legacy_hal_factory.h" -#include "wifi_mode_controller.h" - -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { - -/** - * Root HIDL interface object used to control the Wifi HAL. - */ -class Wifi : public V1_5::IWifi { - public: - Wifi(const std::shared_ptr<wifi_system::InterfaceTool> iface_tool, - const std::shared_ptr<legacy_hal::WifiLegacyHalFactory> - legacy_hal_factory, - const std::shared_ptr<mode_controller::WifiModeController> - mode_controller, - const std::shared_ptr<feature_flags::WifiFeatureFlags> feature_flags); - - bool isValid(); - - // HIDL methods exposed. - Return<void> registerEventCallback( - const sp<V1_0::IWifiEventCallback>& event_callback, - registerEventCallback_cb hidl_status_cb) override; - Return<void> registerEventCallback_1_5( - const sp<V1_5::IWifiEventCallback>& event_callback, - registerEventCallback_1_5_cb hidl_status_cb) override; - Return<bool> isStarted() override; - Return<void> start(start_cb hidl_status_cb) override; - Return<void> stop(stop_cb hidl_status_cb) override; - Return<void> getChipIds(getChipIds_cb hidl_status_cb) override; - Return<void> getChip(ChipId chip_id, getChip_cb hidl_status_cb) override; - Return<void> debug(const hidl_handle& handle, - const hidl_vec<hidl_string>& options) override; - - private: - enum class RunState { STOPPED, STARTED, STOPPING }; - - // Corresponding worker functions for the HIDL methods. - WifiStatus registerEventCallbackInternal( - const sp<V1_0::IWifiEventCallback>& event_callback __unused); - WifiStatus registerEventCallbackInternal_1_5( - const sp<V1_5::IWifiEventCallback>& event_callback); - WifiStatus startInternal(); - WifiStatus stopInternal(std::unique_lock<std::recursive_mutex>* lock); - std::pair<WifiStatus, std::vector<ChipId>> getChipIdsInternal(); - std::pair<WifiStatus, sp<V1_4::IWifiChip>> getChipInternal(ChipId chip_id); - - WifiStatus initializeModeControllerAndLegacyHal(); - WifiStatus stopLegacyHalAndDeinitializeModeController( - std::unique_lock<std::recursive_mutex>* lock); - ChipId getChipIdFromWifiChip(sp<WifiChip>& chip); - - // Instance is created in this root level |IWifi| HIDL interface object - // and shared with all the child HIDL interface objects. - std::shared_ptr<wifi_system::InterfaceTool> iface_tool_; - std::shared_ptr<legacy_hal::WifiLegacyHalFactory> legacy_hal_factory_; - std::shared_ptr<mode_controller::WifiModeController> mode_controller_; - std::vector<std::shared_ptr<legacy_hal::WifiLegacyHal>> legacy_hals_; - std::shared_ptr<feature_flags::WifiFeatureFlags> feature_flags_; - RunState run_state_; - std::vector<sp<WifiChip>> chips_; - hidl_callback_util::HidlCallbackHandler<V1_5::IWifiEventCallback> - event_cb_handler_; - - DISALLOW_COPY_AND_ASSIGN(Wifi); -}; - -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android - -#endif // WIFI_H_ diff --git a/wifi/1.5/default/wifi_ap_iface.cpp b/wifi/1.5/default/wifi_ap_iface.cpp deleted file mode 100644 index 1ae7905f74..0000000000 --- a/wifi/1.5/default/wifi_ap_iface.cpp +++ /dev/null @@ -1,220 +0,0 @@ -/* - * Copyright (C) 2016 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include <android-base/logging.h> - -#include "hidl_return_util.h" -#include "hidl_struct_util.h" -#include "wifi_ap_iface.h" -#include "wifi_status_util.h" - -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { -using hidl_return_util::validateAndCall; - -WifiApIface::WifiApIface( - const std::string& ifname, const std::vector<std::string>& instances, - const std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal, - const std::weak_ptr<iface_util::WifiIfaceUtil> iface_util) - : ifname_(ifname), - instances_(instances), - legacy_hal_(legacy_hal), - iface_util_(iface_util), - is_valid_(true) {} - -void WifiApIface::invalidate() { - legacy_hal_.reset(); - is_valid_ = false; -} - -bool WifiApIface::isValid() { return is_valid_; } - -std::string WifiApIface::getName() { return ifname_; } - -void WifiApIface::removeInstance(std::string instance) { - instances_.erase( - std::remove(instances_.begin(), instances_.end(), instance), - instances_.end()); -} - -Return<void> WifiApIface::getName(getName_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiApIface::getNameInternal, hidl_status_cb); -} - -Return<void> WifiApIface::getType(getType_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiApIface::getTypeInternal, hidl_status_cb); -} - -Return<void> WifiApIface::setCountryCode(const hidl_array<int8_t, 2>& code, - setCountryCode_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiApIface::setCountryCodeInternal, hidl_status_cb, - code); -} - -Return<void> WifiApIface::getValidFrequenciesForBand( - V1_0::WifiBand band, getValidFrequenciesForBand_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiApIface::getValidFrequenciesForBandInternal, - hidl_status_cb, band); -} - -Return<void> WifiApIface::setMacAddress(const hidl_array<uint8_t, 6>& mac, - setMacAddress_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiApIface::setMacAddressInternal, hidl_status_cb, - mac); -} - -Return<void> WifiApIface::getFactoryMacAddress( - getFactoryMacAddress_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiApIface::getFactoryMacAddressInternal, - hidl_status_cb, - instances_.size() > 0 ? instances_[0] : ifname_); -} - -Return<void> WifiApIface::resetToFactoryMacAddress( - resetToFactoryMacAddress_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiApIface::resetToFactoryMacAddressInternal, - hidl_status_cb); -} - -Return<void> WifiApIface::getBridgedInstances( - getBridgedInstances_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiApIface::getBridgedInstancesInternal, - hidl_status_cb); -} - -std::pair<WifiStatus, std::string> WifiApIface::getNameInternal() { - return {createWifiStatus(WifiStatusCode::SUCCESS), ifname_}; -} - -std::pair<WifiStatus, IfaceType> WifiApIface::getTypeInternal() { - return {createWifiStatus(WifiStatusCode::SUCCESS), IfaceType::AP}; -} - -WifiStatus WifiApIface::setCountryCodeInternal( - const std::array<int8_t, 2>& code) { - legacy_hal::wifi_error legacy_status = legacy_hal_.lock()->setCountryCode( - instances_.size() > 0 ? instances_[0] : ifname_, code); - return createWifiStatusFromLegacyError(legacy_status); -} - -std::pair<WifiStatus, std::vector<WifiChannelInMhz>> -WifiApIface::getValidFrequenciesForBandInternal(V1_0::WifiBand band) { - static_assert(sizeof(WifiChannelInMhz) == sizeof(uint32_t), - "Size mismatch"); - legacy_hal::wifi_error legacy_status; - std::vector<uint32_t> valid_frequencies; - std::tie(legacy_status, valid_frequencies) = - legacy_hal_.lock()->getValidFrequenciesForBand( - instances_.size() > 0 ? instances_[0] : ifname_, - hidl_struct_util::convertHidlWifiBandToLegacy(band)); - return {createWifiStatusFromLegacyError(legacy_status), valid_frequencies}; -} - -WifiStatus WifiApIface::setMacAddressInternal( - const std::array<uint8_t, 6>& mac) { - // Support random MAC up to 2 interfaces - if (instances_.size() == 2) { - int rbyte = 1; - for (auto const& intf : instances_) { - std::array<uint8_t, 6> rmac = mac; - // reverse the bits to avoid collision - rmac[rbyte] = 0xff - rmac[rbyte]; - if (!iface_util_.lock()->setMacAddress(intf, rmac)) { - LOG(INFO) << "Failed to set random mac address on " << intf; - return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN); - } - rbyte++; - } - } - // It also needs to set mac address for bridged interface, otherwise the mac - // address of bridged interface will be changed after one of instance - // down. - if (!iface_util_.lock()->setMacAddress(ifname_, mac)) { - LOG(ERROR) << "Fail to config MAC for interface " << ifname_; - return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN); - } - return createWifiStatus(WifiStatusCode::SUCCESS); -} - -std::pair<WifiStatus, std::array<uint8_t, 6>> -WifiApIface::getFactoryMacAddressInternal(const std::string& ifaceName) { - std::array<uint8_t, 6> mac = - iface_util_.lock()->getFactoryMacAddress(ifaceName); - if (mac[0] == 0 && mac[1] == 0 && mac[2] == 0 && mac[3] == 0 && - mac[4] == 0 && mac[5] == 0) { - return {createWifiStatus(WifiStatusCode::ERROR_UNKNOWN), mac}; - } - return {createWifiStatus(WifiStatusCode::SUCCESS), mac}; -} - -WifiStatus WifiApIface::resetToFactoryMacAddressInternal() { - std::pair<WifiStatus, std::array<uint8_t, 6>> getMacResult; - if (instances_.size() == 2) { - for (auto const& intf : instances_) { - getMacResult = getFactoryMacAddressInternal(intf); - LOG(DEBUG) << "Reset MAC to factory MAC on " << intf; - if (getMacResult.first.code != WifiStatusCode::SUCCESS || - !iface_util_.lock()->setMacAddress(intf, getMacResult.second)) { - return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN); - } - } - // It needs to set mac address for bridged interface, otherwise the mac - // address of the bridged interface will be changed after one of the - // instance down. Thus we are generating a random MAC address for the - // bridged interface even if we got the request to reset the Factory - // MAC. Since the bridged interface is an internal interface for the - // operation of bpf and others networking operation. - if (!iface_util_.lock()->setMacAddress( - ifname_, iface_util_.lock()->createRandomMacAddress())) { - LOG(ERROR) << "Fail to config MAC for bridged interface " - << ifname_; - return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN); - } - } else { - getMacResult = getFactoryMacAddressInternal(ifname_); - LOG(DEBUG) << "Reset MAC to factory MAC on " << ifname_; - if (getMacResult.first.code != WifiStatusCode::SUCCESS || - !iface_util_.lock()->setMacAddress(ifname_, getMacResult.second)) { - return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN); - } - } - return createWifiStatus(WifiStatusCode::SUCCESS); -} - -std::pair<WifiStatus, std::vector<hidl_string>> -WifiApIface::getBridgedInstancesInternal() { - std::vector<hidl_string> instances; - for (const auto& instance_name : instances_) { - instances.push_back(instance_name); - } - return {createWifiStatus(WifiStatusCode::SUCCESS), instances}; -} -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android diff --git a/wifi/1.5/default/wifi_ap_iface.h b/wifi/1.5/default/wifi_ap_iface.h deleted file mode 100644 index 8f8387deae..0000000000 --- a/wifi/1.5/default/wifi_ap_iface.h +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright (C) 2016 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef WIFI_AP_IFACE_H_ -#define WIFI_AP_IFACE_H_ - -#include <android-base/macros.h> -#include <android/hardware/wifi/1.5/IWifiApIface.h> - -#include "wifi_iface_util.h" -#include "wifi_legacy_hal.h" - -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { -using namespace android::hardware::wifi::V1_0; - -/** - * HIDL interface object used to control a AP Iface instance. - */ -class WifiApIface : public V1_5::IWifiApIface { - public: - WifiApIface(const std::string& ifname, - const std::vector<std::string>& instances, - const std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal, - const std::weak_ptr<iface_util::WifiIfaceUtil> iface_util); - // Refer to |WifiChip::invalidate()|. - void invalidate(); - bool isValid(); - std::string getName(); - void removeInstance(std::string instance); - - // HIDL methods exposed. - Return<void> getName(getName_cb hidl_status_cb) override; - Return<void> getType(getType_cb hidl_status_cb) override; - Return<void> setCountryCode(const hidl_array<int8_t, 2>& code, - setCountryCode_cb hidl_status_cb) override; - Return<void> getValidFrequenciesForBand( - V1_0::WifiBand band, - getValidFrequenciesForBand_cb hidl_status_cb) override; - Return<void> setMacAddress(const hidl_array<uint8_t, 6>& mac, - setMacAddress_cb hidl_status_cb) override; - Return<void> getFactoryMacAddress( - getFactoryMacAddress_cb hidl_status_cb) override; - Return<void> resetToFactoryMacAddress( - resetToFactoryMacAddress_cb hidl_status_cb) override; - - Return<void> getBridgedInstances( - getBridgedInstances_cb hidl_status_cb) override; - - private: - // Corresponding worker functions for the HIDL methods. - std::pair<WifiStatus, std::string> getNameInternal(); - std::pair<WifiStatus, IfaceType> getTypeInternal(); - WifiStatus setCountryCodeInternal(const std::array<int8_t, 2>& code); - std::pair<WifiStatus, std::vector<WifiChannelInMhz>> - getValidFrequenciesForBandInternal(V1_0::WifiBand band); - WifiStatus setMacAddressInternal(const std::array<uint8_t, 6>& mac); - std::pair<WifiStatus, std::array<uint8_t, 6>> getFactoryMacAddressInternal( - const std::string& ifaceName); - WifiStatus resetToFactoryMacAddressInternal(); - std::pair<WifiStatus, std::vector<hidl_string>> - getBridgedInstancesInternal(); - - std::string ifname_; - std::vector<std::string> instances_; - std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal_; - std::weak_ptr<iface_util::WifiIfaceUtil> iface_util_; - bool is_valid_; - - DISALLOW_COPY_AND_ASSIGN(WifiApIface); -}; - -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android - -#endif // WIFI_AP_IFACE_H_ diff --git a/wifi/1.5/default/wifi_chip.cpp b/wifi/1.5/default/wifi_chip.cpp deleted file mode 100644 index def8bb8226..0000000000 --- a/wifi/1.5/default/wifi_chip.cpp +++ /dev/null @@ -1,2112 +0,0 @@ -/* - * Copyright (C) 2016 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include <fcntl.h> - -#include <android-base/logging.h> -#include <android-base/unique_fd.h> -#include <cutils/properties.h> -#include <net/if.h> -#include <sys/stat.h> -#include <sys/sysmacros.h> -#include <net/if.h> - -#include "hidl_return_util.h" -#include "hidl_struct_util.h" -#include "wifi_chip.h" -#include "wifi_status_util.h" - -#define P2P_MGMT_DEVICE_PREFIX "p2p-dev-" - -namespace { -using android::sp; -using android::base::unique_fd; -using android::hardware::hidl_string; -using android::hardware::hidl_vec; -using android::hardware::wifi::V1_0::ChipModeId; -using android::hardware::wifi::V1_0::IfaceType; -using android::hardware::wifi::V1_0::IWifiChip; - -constexpr char kCpioMagic[] = "070701"; -constexpr size_t kMaxBufferSizeBytes = 1024 * 1024 * 3; -constexpr uint32_t kMaxRingBufferFileAgeSeconds = 60 * 60 * 10; -constexpr uint32_t kMaxRingBufferFileNum = 20; -constexpr char kTombstoneFolderPath[] = "/data/vendor/tombstones/wifi/"; -constexpr char kActiveWlanIfaceNameProperty[] = "wifi.active.interface"; -constexpr char kNoActiveWlanIfaceNamePropertyValue[] = ""; -constexpr unsigned kMaxWlanIfaces = 5; -constexpr char kApBridgeIfacePrefix[] = "ap_br_"; - -template <typename Iface> -void invalidateAndClear(std::vector<sp<Iface>>& ifaces, sp<Iface> iface) { - iface->invalidate(); - ifaces.erase(std::remove(ifaces.begin(), ifaces.end(), iface), - ifaces.end()); -} - -template <typename Iface> -void invalidateAndClearAll(std::vector<sp<Iface>>& ifaces) { - for (const auto& iface : ifaces) { - iface->invalidate(); - } - ifaces.clear(); -} - -template <typename Iface> -std::vector<hidl_string> getNames(std::vector<sp<Iface>>& ifaces) { - std::vector<hidl_string> names; - for (const auto& iface : ifaces) { - names.emplace_back(iface->getName()); - } - return names; -} - -template <typename Iface> -sp<Iface> findUsingName(std::vector<sp<Iface>>& ifaces, - const std::string& name) { - std::vector<hidl_string> names; - for (const auto& iface : ifaces) { - if (name == iface->getName()) { - return iface; - } - } - return nullptr; -} - -std::string getWlanIfaceName(unsigned idx) { - if (idx >= kMaxWlanIfaces) { - CHECK(false) << "Requested interface beyond wlan" << kMaxWlanIfaces; - return {}; - } - - std::array<char, PROPERTY_VALUE_MAX> buffer; - if (idx == 0 || idx == 1) { - const char* altPropName = - (idx == 0) ? "wifi.interface" : "wifi.concurrent.interface"; - auto res = property_get(altPropName, buffer.data(), nullptr); - if (res > 0) return buffer.data(); - } - std::string propName = "wifi.interface." + std::to_string(idx); - auto res = property_get(propName.c_str(), buffer.data(), nullptr); - if (res > 0) return buffer.data(); - - return "wlan" + std::to_string(idx); -} - -// Returns the dedicated iface name if defined. -// Returns two ifaces in bridged mode. -std::vector<std::string> getPredefinedApIfaceNames(bool is_bridged) { - std::vector<std::string> ifnames; - std::array<char, PROPERTY_VALUE_MAX> buffer; - buffer.fill(0); - if (property_get("ro.vendor.wifi.sap.interface", buffer.data(), nullptr) == - 0) { - return ifnames; - } - ifnames.push_back(buffer.data()); - if (is_bridged) { - buffer.fill(0); - if (property_get("ro.vendor.wifi.sap.concurrent.iface", buffer.data(), - nullptr) == 0) { - return ifnames; - } - ifnames.push_back(buffer.data()); - } - return ifnames; -} - -std::string getPredefinedP2pIfaceName() { - std::array<char, PROPERTY_VALUE_MAX> primaryIfaceName; - char p2pParentIfname[100]; - std::string p2pDevIfName = ""; - std::array<char, PROPERTY_VALUE_MAX> buffer; - property_get("wifi.direct.interface", buffer.data(), "p2p0"); - if (strncmp(buffer.data(), P2P_MGMT_DEVICE_PREFIX, - strlen(P2P_MGMT_DEVICE_PREFIX)) == 0) { - /* Get the p2p parent interface name from p2p device interface name set - * in property */ - strncpy(p2pParentIfname, buffer.data() + strlen(P2P_MGMT_DEVICE_PREFIX), - strlen(buffer.data()) - strlen(P2P_MGMT_DEVICE_PREFIX)); - if (property_get(kActiveWlanIfaceNameProperty, primaryIfaceName.data(), - nullptr) == 0) { - return buffer.data(); - } - /* Check if the parent interface derived from p2p device interface name - * is active */ - if (strncmp(p2pParentIfname, primaryIfaceName.data(), - strlen(buffer.data()) - strlen(P2P_MGMT_DEVICE_PREFIX)) != - 0) { - /* - * Update the predefined p2p device interface parent interface name - * with current active wlan interface - */ - p2pDevIfName += P2P_MGMT_DEVICE_PREFIX; - p2pDevIfName += primaryIfaceName.data(); - LOG(INFO) << "update the p2p device interface name to " - << p2pDevIfName.c_str(); - return p2pDevIfName; - } - } - return buffer.data(); -} - -// Returns the dedicated iface name if one is defined. -std::string getPredefinedNanIfaceName() { - std::array<char, PROPERTY_VALUE_MAX> buffer; - if (property_get("wifi.aware.interface", buffer.data(), nullptr) == 0) { - return {}; - } - return buffer.data(); -} - -void setActiveWlanIfaceNameProperty(const std::string& ifname) { - auto res = property_set(kActiveWlanIfaceNameProperty, ifname.data()); - if (res != 0) { - PLOG(ERROR) << "Failed to set active wlan iface name property"; - } -} - -// delete files that meet either conditions: -// 1. older than a predefined time in the wifi tombstone dir. -// 2. Files in excess to a predefined amount, starting from the oldest ones -bool removeOldFilesInternal() { - time_t now = time(0); - const time_t delete_files_before = now - kMaxRingBufferFileAgeSeconds; - std::unique_ptr<DIR, decltype(&closedir)> dir_dump( - opendir(kTombstoneFolderPath), closedir); - if (!dir_dump) { - PLOG(ERROR) << "Failed to open directory"; - return false; - } - struct dirent* dp; - bool success = true; - std::list<std::pair<const time_t, std::string>> valid_files; - while ((dp = readdir(dir_dump.get()))) { - if (dp->d_type != DT_REG) { - continue; - } - std::string cur_file_name(dp->d_name); - struct stat cur_file_stat; - std::string cur_file_path = kTombstoneFolderPath + cur_file_name; - if (stat(cur_file_path.c_str(), &cur_file_stat) == -1) { - PLOG(ERROR) << "Failed to get file stat for " << cur_file_path; - success = false; - continue; - } - const time_t cur_file_time = cur_file_stat.st_mtime; - valid_files.push_back( - std::pair<const time_t, std::string>(cur_file_time, cur_file_path)); - } - valid_files.sort(); // sort the list of files by last modified time from - // small to big. - uint32_t cur_file_count = valid_files.size(); - for (auto cur_file : valid_files) { - if (cur_file_count > kMaxRingBufferFileNum || - cur_file.first < delete_files_before) { - if (unlink(cur_file.second.c_str()) != 0) { - PLOG(ERROR) << "Error deleting file"; - success = false; - } - cur_file_count--; - } else { - break; - } - } - return success; -} - -// Helper function for |cpioArchiveFilesInDir| -bool cpioWriteHeader(int out_fd, struct stat& st, const char* file_name, - size_t file_name_len) { - std::array<char, 32 * 1024> read_buf; - ssize_t llen = - sprintf(read_buf.data(), - "%s%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X", - kCpioMagic, static_cast<int>(st.st_ino), st.st_mode, st.st_uid, - st.st_gid, static_cast<int>(st.st_nlink), - static_cast<int>(st.st_mtime), static_cast<int>(st.st_size), - major(st.st_dev), minor(st.st_dev), major(st.st_rdev), - minor(st.st_rdev), static_cast<uint32_t>(file_name_len), 0); - if (write(out_fd, read_buf.data(), llen) == -1) { - PLOG(ERROR) << "Error writing cpio header to file " << file_name; - return false; - } - if (write(out_fd, file_name, file_name_len) == -1) { - PLOG(ERROR) << "Error writing filename to file " << file_name; - return false; - } - - // NUL Pad header up to 4 multiple bytes. - llen = (llen + file_name_len) % 4; - if (llen != 0) { - const uint32_t zero = 0; - if (write(out_fd, &zero, 4 - llen) == -1) { - PLOG(ERROR) << "Error padding 0s to file " << file_name; - return false; - } - } - return true; -} - -// Helper function for |cpioArchiveFilesInDir| -size_t cpioWriteFileContent(int fd_read, int out_fd, struct stat& st) { - // writing content of file - std::array<char, 32 * 1024> read_buf; - ssize_t llen = st.st_size; - size_t n_error = 0; - while (llen > 0) { - ssize_t bytes_read = read(fd_read, read_buf.data(), read_buf.size()); - if (bytes_read == -1) { - PLOG(ERROR) << "Error reading file"; - return ++n_error; - } - llen -= bytes_read; - if (write(out_fd, read_buf.data(), bytes_read) == -1) { - PLOG(ERROR) << "Error writing data to file"; - return ++n_error; - } - if (bytes_read == 0) { // this should never happen, but just in case - // to unstuck from while loop - PLOG(ERROR) << "Unexpected read result"; - n_error++; - break; - } - } - llen = st.st_size % 4; - if (llen != 0) { - const uint32_t zero = 0; - if (write(out_fd, &zero, 4 - llen) == -1) { - PLOG(ERROR) << "Error padding 0s to file"; - return ++n_error; - } - } - return n_error; -} - -// Helper function for |cpioArchiveFilesInDir| -bool cpioWriteFileTrailer(int out_fd) { - std::array<char, 4096> read_buf; - read_buf.fill(0); - if (write(out_fd, read_buf.data(), - sprintf(read_buf.data(), "070701%040X%056X%08XTRAILER!!!", 1, - 0x0b, 0) + - 4) == -1) { - PLOG(ERROR) << "Error writing trailing bytes"; - return false; - } - return true; -} - -// Archives all files in |input_dir| and writes result into |out_fd| -// Logic obtained from //external/toybox/toys/posix/cpio.c "Output cpio archive" -// portion -size_t cpioArchiveFilesInDir(int out_fd, const char* input_dir) { - struct dirent* dp; - size_t n_error = 0; - std::unique_ptr<DIR, decltype(&closedir)> dir_dump(opendir(input_dir), - closedir); - if (!dir_dump) { - PLOG(ERROR) << "Failed to open directory"; - return ++n_error; - } - while ((dp = readdir(dir_dump.get()))) { - if (dp->d_type != DT_REG) { - continue; - } - std::string cur_file_name(dp->d_name); - struct stat st; - const std::string cur_file_path = kTombstoneFolderPath + cur_file_name; - if (stat(cur_file_path.c_str(), &st) == -1) { - PLOG(ERROR) << "Failed to get file stat for " << cur_file_path; - n_error++; - continue; - } - const int fd_read = open(cur_file_path.c_str(), O_RDONLY); - if (fd_read == -1) { - PLOG(ERROR) << "Failed to open file " << cur_file_path; - n_error++; - continue; - } - std::string file_name_with_last_modified_time = - cur_file_name + "-" + std::to_string(st.st_mtime); - // string.size() does not include the null terminator. The cpio FreeBSD - // file header expects the null character to be included in the length. - const size_t file_name_len = - file_name_with_last_modified_time.size() + 1; - unique_fd file_auto_closer(fd_read); - if (!cpioWriteHeader(out_fd, st, - file_name_with_last_modified_time.c_str(), - file_name_len)) { - return ++n_error; - } - size_t write_error = cpioWriteFileContent(fd_read, out_fd, st); - if (write_error) { - return n_error + write_error; - } - } - if (!cpioWriteFileTrailer(out_fd)) { - return ++n_error; - } - return n_error; -} - -// Helper function to create a non-const char*. -std::vector<char> makeCharVec(const std::string& str) { - std::vector<char> vec(str.size() + 1); - vec.assign(str.begin(), str.end()); - vec.push_back('\0'); - return vec; -} - -} // namespace - -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { -using hidl_return_util::validateAndCall; -using hidl_return_util::validateAndCallWithLock; - -WifiChip::WifiChip( - ChipId chip_id, bool is_primary, - const std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal, - const std::weak_ptr<mode_controller::WifiModeController> mode_controller, - const std::shared_ptr<iface_util::WifiIfaceUtil> iface_util, - const std::weak_ptr<feature_flags::WifiFeatureFlags> feature_flags, - const std::function<void(const std::string&)>& handler) - : chip_id_(chip_id), - legacy_hal_(legacy_hal), - mode_controller_(mode_controller), - iface_util_(iface_util), - is_valid_(true), - current_mode_id_(feature_flags::chip_mode_ids::kInvalid), - modes_(feature_flags.lock()->getChipModes(is_primary)), - debug_ring_buffer_cb_registered_(false), - subsystemCallbackHandler_(handler) { - setActiveWlanIfaceNameProperty(kNoActiveWlanIfaceNamePropertyValue); -} - -void WifiChip::invalidate() { - if (!writeRingbufferFilesInternal()) { - LOG(ERROR) << "Error writing files to flash"; - } - invalidateAndRemoveAllIfaces(); - setActiveWlanIfaceNameProperty(kNoActiveWlanIfaceNamePropertyValue); - legacy_hal_.reset(); - event_cb_handler_.invalidate(); - is_valid_ = false; -} - -bool WifiChip::isValid() { return is_valid_; } - -std::set<sp<V1_4::IWifiChipEventCallback>> WifiChip::getEventCallbacks() { - return event_cb_handler_.getCallbacks(); -} - -Return<void> WifiChip::getId(getId_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::getIdInternal, hidl_status_cb); -} - -// Deprecated support for this callback -Return<void> WifiChip::registerEventCallback( - const sp<V1_0::IWifiChipEventCallback>& event_callback, - registerEventCallback_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::registerEventCallbackInternal, - hidl_status_cb, event_callback); -} - -Return<void> WifiChip::getCapabilities(getCapabilities_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::getCapabilitiesInternal, hidl_status_cb); -} - -Return<void> WifiChip::getAvailableModes(getAvailableModes_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::getAvailableModesInternal, - hidl_status_cb); -} - -Return<void> WifiChip::configureChip(ChipModeId mode_id, - configureChip_cb hidl_status_cb) { - return validateAndCallWithLock( - this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::configureChipInternal, hidl_status_cb, mode_id); -} - -Return<void> WifiChip::getMode(getMode_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::getModeInternal, hidl_status_cb); -} - -Return<void> WifiChip::requestChipDebugInfo( - requestChipDebugInfo_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::requestChipDebugInfoInternal, - hidl_status_cb); -} - -Return<void> WifiChip::requestDriverDebugDump( - requestDriverDebugDump_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::requestDriverDebugDumpInternal, - hidl_status_cb); -} - -Return<void> WifiChip::requestFirmwareDebugDump( - requestFirmwareDebugDump_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::requestFirmwareDebugDumpInternal, - hidl_status_cb); -} - -Return<void> WifiChip::createApIface(createApIface_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::createApIfaceInternal, hidl_status_cb); -} - -Return<void> WifiChip::createBridgedApIface( - createBridgedApIface_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::createBridgedApIfaceInternal, - hidl_status_cb); -} - -Return<void> WifiChip::getApIfaceNames(getApIfaceNames_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::getApIfaceNamesInternal, hidl_status_cb); -} - -Return<void> WifiChip::getApIface(const hidl_string& ifname, - getApIface_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::getApIfaceInternal, hidl_status_cb, - ifname); -} - -Return<void> WifiChip::removeApIface(const hidl_string& ifname, - removeApIface_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::removeApIfaceInternal, hidl_status_cb, - ifname); -} - -Return<void> WifiChip::removeIfaceInstanceFromBridgedApIface( - const hidl_string& ifname, const hidl_string& ifInstanceName, - removeIfaceInstanceFromBridgedApIface_cb hidl_status_cb) { - return validateAndCall( - this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::removeIfaceInstanceFromBridgedApIfaceInternal, - hidl_status_cb, ifname, ifInstanceName); -} - -Return<void> WifiChip::createNanIface(createNanIface_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::createNanIfaceInternal, hidl_status_cb); -} - -Return<void> WifiChip::getNanIfaceNames(getNanIfaceNames_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::getNanIfaceNamesInternal, hidl_status_cb); -} - -Return<void> WifiChip::getNanIface(const hidl_string& ifname, - getNanIface_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::getNanIfaceInternal, hidl_status_cb, - ifname); -} - -Return<void> WifiChip::removeNanIface(const hidl_string& ifname, - removeNanIface_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::removeNanIfaceInternal, hidl_status_cb, - ifname); -} - -Return<void> WifiChip::createP2pIface(createP2pIface_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::createP2pIfaceInternal, hidl_status_cb); -} - -Return<void> WifiChip::getP2pIfaceNames(getP2pIfaceNames_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::getP2pIfaceNamesInternal, hidl_status_cb); -} - -Return<void> WifiChip::getP2pIface(const hidl_string& ifname, - getP2pIface_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::getP2pIfaceInternal, hidl_status_cb, - ifname); -} - -Return<void> WifiChip::removeP2pIface(const hidl_string& ifname, - removeP2pIface_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::removeP2pIfaceInternal, hidl_status_cb, - ifname); -} - -Return<void> WifiChip::createStaIface(createStaIface_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::createStaIfaceInternal, hidl_status_cb); -} - -Return<void> WifiChip::getStaIfaceNames(getStaIfaceNames_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::getStaIfaceNamesInternal, hidl_status_cb); -} - -Return<void> WifiChip::getStaIface(const hidl_string& ifname, - getStaIface_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::getStaIfaceInternal, hidl_status_cb, - ifname); -} - -Return<void> WifiChip::removeStaIface(const hidl_string& ifname, - removeStaIface_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::removeStaIfaceInternal, hidl_status_cb, - ifname); -} - -Return<void> WifiChip::createRttController( - const sp<IWifiIface>& bound_iface, createRttController_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::createRttControllerInternal, - hidl_status_cb, bound_iface); -} - -Return<void> WifiChip::getDebugRingBuffersStatus( - getDebugRingBuffersStatus_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::getDebugRingBuffersStatusInternal, - hidl_status_cb); -} - -Return<void> WifiChip::startLoggingToDebugRingBuffer( - const hidl_string& ring_name, WifiDebugRingBufferVerboseLevel verbose_level, - uint32_t max_interval_in_sec, uint32_t min_data_size_in_bytes, - startLoggingToDebugRingBuffer_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::startLoggingToDebugRingBufferInternal, - hidl_status_cb, ring_name, verbose_level, - max_interval_in_sec, min_data_size_in_bytes); -} - -Return<void> WifiChip::forceDumpToDebugRingBuffer( - const hidl_string& ring_name, - forceDumpToDebugRingBuffer_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::forceDumpToDebugRingBufferInternal, - hidl_status_cb, ring_name); -} - -Return<void> WifiChip::flushRingBufferToFile( - flushRingBufferToFile_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::flushRingBufferToFileInternal, - hidl_status_cb); -} - -Return<void> WifiChip::stopLoggingToDebugRingBuffer( - stopLoggingToDebugRingBuffer_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::stopLoggingToDebugRingBufferInternal, - hidl_status_cb); -} - -Return<void> WifiChip::getDebugHostWakeReasonStats( - getDebugHostWakeReasonStats_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::getDebugHostWakeReasonStatsInternal, - hidl_status_cb); -} - -Return<void> WifiChip::enableDebugErrorAlerts( - bool enable, enableDebugErrorAlerts_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::enableDebugErrorAlertsInternal, - hidl_status_cb, enable); -} - -Return<void> WifiChip::selectTxPowerScenario( - V1_1::IWifiChip::TxPowerScenario scenario, - selectTxPowerScenario_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::selectTxPowerScenarioInternal, - hidl_status_cb, scenario); -} - -Return<void> WifiChip::resetTxPowerScenario( - resetTxPowerScenario_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::resetTxPowerScenarioInternal, - hidl_status_cb); -} - -Return<void> WifiChip::setLatencyMode(LatencyMode mode, - setLatencyMode_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::setLatencyModeInternal, hidl_status_cb, - mode); -} - -Return<void> WifiChip::registerEventCallback_1_2( - const sp<V1_2::IWifiChipEventCallback>& event_callback, - registerEventCallback_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::registerEventCallbackInternal_1_2, - hidl_status_cb, event_callback); -} - -Return<void> WifiChip::selectTxPowerScenario_1_2( - TxPowerScenario scenario, selectTxPowerScenario_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::selectTxPowerScenarioInternal_1_2, - hidl_status_cb, scenario); -} - -Return<void> WifiChip::getCapabilities_1_3(getCapabilities_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::getCapabilitiesInternal_1_3, - hidl_status_cb); -} - -Return<void> WifiChip::getCapabilities_1_5( - getCapabilities_1_5_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::getCapabilitiesInternal_1_5, - hidl_status_cb); -} - -Return<void> WifiChip::debug(const hidl_handle& handle, - const hidl_vec<hidl_string>&) { - if (handle != nullptr && handle->numFds >= 1) { - { - std::unique_lock<std::mutex> lk(lock_t); - for (const auto& item : ringbuffer_map_) { - forceDumpToDebugRingBufferInternal(item.first); - } - // unique_lock unlocked here - } - usleep(100 * 1000); // sleep for 100 milliseconds to wait for - // ringbuffer updates. - int fd = handle->data[0]; - if (!writeRingbufferFilesInternal()) { - LOG(ERROR) << "Error writing files to flash"; - } - uint32_t n_error = cpioArchiveFilesInDir(fd, kTombstoneFolderPath); - if (n_error != 0) { - LOG(ERROR) << n_error << " errors occured in cpio function"; - } - fsync(fd); - } else { - LOG(ERROR) << "File handle error"; - } - return Void(); -} - -Return<void> WifiChip::createRttController_1_4( - const sp<IWifiIface>& bound_iface, - createRttController_1_4_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::createRttControllerInternal_1_4, - hidl_status_cb, bound_iface); -} - -Return<void> WifiChip::registerEventCallback_1_4( - const sp<V1_4::IWifiChipEventCallback>& event_callback, - registerEventCallback_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::registerEventCallbackInternal_1_4, - hidl_status_cb, event_callback); -} - -Return<void> WifiChip::setMultiStaPrimaryConnection( - const hidl_string& ifname, setMultiStaPrimaryConnection_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::setMultiStaPrimaryConnectionInternal, - hidl_status_cb, ifname); -} - -Return<void> WifiChip::setMultiStaUseCase( - MultiStaUseCase use_case, setMultiStaUseCase_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::setMultiStaUseCaseInternal, - hidl_status_cb, use_case); -} - -Return<void> WifiChip::setCoexUnsafeChannels( - const hidl_vec<CoexUnsafeChannel>& unsafeChannels, - hidl_bitfield<CoexRestriction> restrictions, - setCoexUnsafeChannels_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::setCoexUnsafeChannelsInternal, - hidl_status_cb, unsafeChannels, restrictions); -} - -Return<void> WifiChip::setCountryCode(const hidl_array<int8_t, 2>& code, - setCountryCode_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiChip::setCountryCodeInternal, hidl_status_cb, - code); -} - -Return<void> WifiChip::getUsableChannels( - WifiBand band, hidl_bitfield<WifiIfaceMode> ifaceModeMask, - hidl_bitfield<UsableChannelFilter> filterMask, - getUsableChannels_cb _hidl_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::getUsableChannelsInternal, _hidl_cb, band, - ifaceModeMask, filterMask); -} - -Return<void> WifiChip::triggerSubsystemRestart( - triggerSubsystemRestart_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_CHIP_INVALID, - &WifiChip::triggerSubsystemRestartInternal, - hidl_status_cb); -} - -void WifiChip::QcRemoveAndClearDynamicIfaces() { - for (const auto& iface : created_ap_ifaces_) { - std::string ifname = iface->getName(); - legacy_hal::wifi_error legacy_status = - legacy_hal_.lock()->deleteVirtualInterface(ifname); - if (legacy_status != legacy_hal::WIFI_SUCCESS) { - LOG(ERROR) << "Failed to remove interface: " << ifname << " " - << legacyErrorToString(legacy_status); - } - } - - for (const auto& iface : created_sta_ifaces_) { - std::string ifname = iface->getName(); - legacy_hal::wifi_error legacy_status = - legacy_hal_.lock()->deleteVirtualInterface(ifname); - if (legacy_status != legacy_hal::WIFI_SUCCESS) { - LOG(ERROR) << "Failed to remove interface: " << ifname << " " - << legacyErrorToString(legacy_status); - } - } - - // created_ap/sta_ifaces are also part of sta/ap_ifaces. - // Do no invalidate here. - - created_ap_ifaces_.clear(); - created_sta_ifaces_.clear(); -} - -void WifiChip::invalidateAndRemoveAllIfaces() { - QcRemoveAndClearDynamicIfaces(); - invalidateAndClearBridgedApAll(); - invalidateAndClearAll(ap_ifaces_); - invalidateAndClearAll(nan_ifaces_); - invalidateAndClearAll(p2p_ifaces_); - invalidateAndClearAll(sta_ifaces_); - // Since all the ifaces are invalid now, all RTT controller objects - // using those ifaces also need to be invalidated. - for (const auto& rtt : rtt_controllers_) { - rtt->invalidate(); - } - rtt_controllers_.clear(); -} - -void WifiChip::invalidateAndRemoveDependencies( - const std::string& removed_iface_name) { - for (auto it = nan_ifaces_.begin(); it != nan_ifaces_.end();) { - auto nan_iface = *it; - if (nan_iface->getName() == removed_iface_name) { - nan_iface->invalidate(); - for (const auto& callback : event_cb_handler_.getCallbacks()) { - if (!callback - ->onIfaceRemoved(IfaceType::NAN, removed_iface_name) - .isOk()) { - LOG(ERROR) << "Failed to invoke onIfaceRemoved callback"; - } - } - it = nan_ifaces_.erase(it); - } else { - ++it; - } - } - - for (auto it = rtt_controllers_.begin(); it != rtt_controllers_.end();) { - auto rtt = *it; - if (rtt->getIfaceName() == removed_iface_name) { - rtt->invalidate(); - it = rtt_controllers_.erase(it); - } else { - ++it; - } - } -} - -std::pair<WifiStatus, ChipId> WifiChip::getIdInternal() { - return {createWifiStatus(WifiStatusCode::SUCCESS), chip_id_}; -} - -WifiStatus WifiChip::registerEventCallbackInternal( - const sp<V1_0::IWifiChipEventCallback>& /* event_callback */) { - // Deprecated support for this callback. - return createWifiStatus(WifiStatusCode::ERROR_NOT_SUPPORTED); -} - -std::pair<WifiStatus, uint32_t> WifiChip::getCapabilitiesInternal() { - // Deprecated support for this callback. - return {createWifiStatus(WifiStatusCode::ERROR_NOT_SUPPORTED), 0}; -} - -std::pair<WifiStatus, std::vector<V1_4::IWifiChip::ChipMode>> -WifiChip::getAvailableModesInternal() { - return {createWifiStatus(WifiStatusCode::SUCCESS), modes_}; -} - -WifiStatus WifiChip::configureChipInternal( - /* NONNULL */ std::unique_lock<std::recursive_mutex>* lock, - ChipModeId mode_id) { - if (!isValidModeId(mode_id)) { - return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS); - } - if (mode_id == current_mode_id_) { - LOG(DEBUG) << "Already in the specified mode " << mode_id; - return createWifiStatus(WifiStatusCode::SUCCESS); - } - WifiStatus status = handleChipConfiguration(lock, mode_id); - if (status.code != WifiStatusCode::SUCCESS) { - for (const auto& callback : event_cb_handler_.getCallbacks()) { - if (!callback->onChipReconfigureFailure(status).isOk()) { - LOG(ERROR) - << "Failed to invoke onChipReconfigureFailure callback"; - } - } - return status; - } - for (const auto& callback : event_cb_handler_.getCallbacks()) { - if (!callback->onChipReconfigured(mode_id).isOk()) { - LOG(ERROR) << "Failed to invoke onChipReconfigured callback"; - } - } - current_mode_id_ = mode_id; - LOG(INFO) << "Configured chip in mode " << mode_id; - setActiveWlanIfaceNameProperty(getFirstActiveWlanIfaceName()); - - legacy_hal_.lock()->registerSubsystemRestartCallbackHandler( - subsystemCallbackHandler_); - - return status; -} - -std::pair<WifiStatus, uint32_t> WifiChip::getModeInternal() { - if (!isValidModeId(current_mode_id_)) { - return {createWifiStatus(WifiStatusCode::ERROR_NOT_AVAILABLE), - current_mode_id_}; - } - return {createWifiStatus(WifiStatusCode::SUCCESS), current_mode_id_}; -} - -std::pair<WifiStatus, V1_4::IWifiChip::ChipDebugInfo> -WifiChip::requestChipDebugInfoInternal() { - V1_4::IWifiChip::ChipDebugInfo result; - legacy_hal::wifi_error legacy_status; - std::string driver_desc; - const auto ifname = getFirstActiveWlanIfaceName(); - std::tie(legacy_status, driver_desc) = - legacy_hal_.lock()->getDriverVersion(ifname); - if (legacy_status != legacy_hal::WIFI_SUCCESS) { - LOG(ERROR) << "Failed to get driver version: " - << legacyErrorToString(legacy_status); - WifiStatus status = createWifiStatusFromLegacyError( - legacy_status, "failed to get driver version"); - return {status, result}; - } - result.driverDescription = driver_desc.c_str(); - - std::string firmware_desc; - std::tie(legacy_status, firmware_desc) = - legacy_hal_.lock()->getFirmwareVersion(ifname); - if (legacy_status != legacy_hal::WIFI_SUCCESS) { - LOG(ERROR) << "Failed to get firmware version: " - << legacyErrorToString(legacy_status); - WifiStatus status = createWifiStatusFromLegacyError( - legacy_status, "failed to get firmware version"); - return {status, result}; - } - result.firmwareDescription = firmware_desc.c_str(); - - return {createWifiStatus(WifiStatusCode::SUCCESS), result}; -} - -std::pair<WifiStatus, std::vector<uint8_t>> -WifiChip::requestDriverDebugDumpInternal() { - legacy_hal::wifi_error legacy_status; - std::vector<uint8_t> driver_dump; - std::tie(legacy_status, driver_dump) = - legacy_hal_.lock()->requestDriverMemoryDump( - getFirstActiveWlanIfaceName()); - if (legacy_status != legacy_hal::WIFI_SUCCESS) { - LOG(ERROR) << "Failed to get driver debug dump: " - << legacyErrorToString(legacy_status); - return {createWifiStatusFromLegacyError(legacy_status), - std::vector<uint8_t>()}; - } - return {createWifiStatus(WifiStatusCode::SUCCESS), driver_dump}; -} - -std::pair<WifiStatus, std::vector<uint8_t>> -WifiChip::requestFirmwareDebugDumpInternal() { - legacy_hal::wifi_error legacy_status; - std::vector<uint8_t> firmware_dump; - std::tie(legacy_status, firmware_dump) = - legacy_hal_.lock()->requestFirmwareMemoryDump( - getFirstActiveWlanIfaceName()); - if (legacy_status != legacy_hal::WIFI_SUCCESS) { - LOG(ERROR) << "Failed to get firmware debug dump: " - << legacyErrorToString(legacy_status); - return {createWifiStatusFromLegacyError(legacy_status), {}}; - } - return {createWifiStatus(WifiStatusCode::SUCCESS), firmware_dump}; -} - -WifiStatus WifiChip::createVirtualApInterface(const std::string& apVirtIf) { - legacy_hal::wifi_error legacy_status; - legacy_status = legacy_hal_.lock()->createVirtualInterface( - apVirtIf, - hidl_struct_util::convertHidlIfaceTypeToLegacy(IfaceType::AP)); - if (legacy_status != legacy_hal::WIFI_SUCCESS) { - LOG(ERROR) << "Failed to add interface: " << apVirtIf << " " - << legacyErrorToString(legacy_status); - return createWifiStatusFromLegacyError(legacy_status); - } - return createWifiStatus(WifiStatusCode::SUCCESS); -} - -sp<WifiApIface> WifiChip::newWifiApIface(std::string& ifname) { - std::vector<std::string> ap_instances; - for (auto const& it : br_ifaces_ap_instances_) { - if (it.first == ifname) { - ap_instances = it.second; - } - } - iface_util_->setRandomMacAddressIndex(ap_ifaces_.size()); - sp<WifiApIface> iface = - new WifiApIface(ifname, ap_instances, legacy_hal_, iface_util_); - ap_ifaces_.push_back(iface); - for (const auto& callback : event_cb_handler_.getCallbacks()) { - if (!callback->onIfaceAdded(IfaceType::AP, ifname).isOk()) { - LOG(ERROR) << "Failed to invoke onIfaceAdded callback"; - } - } - setActiveWlanIfaceNameProperty(getFirstActiveWlanIfaceName()); - return iface; -} - -std::pair<WifiStatus, sp<V1_5::IWifiApIface>> -WifiChip::createApIfaceInternal() { - if (!canCurrentModeSupportIfaceOfTypeWithCurrentIfaces(IfaceType::AP)) { - return {createWifiStatus(WifiStatusCode::ERROR_NOT_AVAILABLE), {}}; - } - bool iface_created = false; - std::string ifname = allocateApIfaceName(); - if (!if_nametoindex(ifname.c_str())) { - WifiStatus status = createVirtualApInterface(ifname); - if (status.code != WifiStatusCode::SUCCESS) { - return {status, {}}; - } - iface_created = true; - } - sp<WifiApIface> iface = newWifiApIface(ifname); - if (iface_created) created_ap_ifaces_.push_back(iface); - return {createWifiStatus(WifiStatusCode::SUCCESS), iface}; -} - -std::pair<WifiStatus, sp<V1_5::IWifiApIface>> -WifiChip::createBridgedApIfaceInternal() { - if (!canCurrentModeSupportIfaceOfTypeWithCurrentIfaces(IfaceType::AP)) { - return {createWifiStatus(WifiStatusCode::ERROR_NOT_AVAILABLE), {}}; - } - std::vector<std::string> ap_instances = allocateBridgedApInstanceNames(); - if (ap_instances.size() < 2) { - LOG(ERROR) << "Fail to allocate two instances"; - return {createWifiStatus(WifiStatusCode::ERROR_NOT_AVAILABLE), {}}; - } - std::string br_ifname = kApBridgeIfacePrefix + ap_instances[0]; - for (int i = 0; i < 2; i++) { - WifiStatus status = createVirtualApInterface(ap_instances[i]); - if (status.code != WifiStatusCode::SUCCESS) { - if (i != 0) { // The failure happened when creating second virtual - // iface. - legacy_hal_.lock()->deleteVirtualInterface( - ap_instances.front()); // Remove the first virtual iface. - } - return {status, {}}; - } - } - br_ifaces_ap_instances_[br_ifname] = ap_instances; - if (!iface_util_->createBridge(br_ifname)) { - LOG(ERROR) << "Failed createBridge - br_name=" << br_ifname.c_str(); - invalidateAndClearBridgedAp(br_ifname); - return {createWifiStatus(WifiStatusCode::ERROR_NOT_AVAILABLE), {}}; - } - for (auto const& instance : ap_instances) { - // Bind ap instance interface to AP bridge - if (!iface_util_->addIfaceToBridge(br_ifname, instance)) { - LOG(ERROR) << "Failed add if to Bridge - if_name=" - << instance.c_str(); - invalidateAndClearBridgedAp(br_ifname); - return {createWifiStatus(WifiStatusCode::ERROR_NOT_AVAILABLE), {}}; - } - } - sp<WifiApIface> iface = newWifiApIface(br_ifname); - return {createWifiStatus(WifiStatusCode::SUCCESS), iface}; -} - -std::pair<WifiStatus, std::vector<hidl_string>> -WifiChip::getApIfaceNamesInternal() { - if (ap_ifaces_.empty()) { - return {createWifiStatus(WifiStatusCode::SUCCESS), {}}; - } - return {createWifiStatus(WifiStatusCode::SUCCESS), getNames(ap_ifaces_)}; -} - -std::pair<WifiStatus, sp<V1_5::IWifiApIface>> WifiChip::getApIfaceInternal( - const std::string& ifname) { - const auto iface = findUsingName(ap_ifaces_, ifname); - if (!iface.get()) { - return {createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS), nullptr}; - } - return {createWifiStatus(WifiStatusCode::SUCCESS), iface}; -} - -WifiStatus WifiChip::removeApIfaceInternal(const std::string& ifname) { - const auto iface = findUsingName(ap_ifaces_, ifname); - if (!iface.get()) { - return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS); - } - // Invalidate & remove any dependent objects first. - // Note: This is probably not required because we never create - // nan/rtt objects over AP iface. But, there is no harm to do it - // here and not make that assumption all over the place. - invalidateAndRemoveDependencies(ifname); - if (findUsingName(created_ap_ifaces_, ifname) != nullptr) { - invalidateAndClear(created_ap_ifaces_, iface); - } - // Clear the bridge interface and the iface instance. - invalidateAndClearBridgedAp(ifname); - invalidateAndClear(ap_ifaces_, iface); - for (const auto& callback : event_cb_handler_.getCallbacks()) { - if (!callback->onIfaceRemoved(IfaceType::AP, ifname).isOk()) { - LOG(ERROR) << "Failed to invoke onIfaceRemoved callback"; - } - } - setActiveWlanIfaceNameProperty(getFirstActiveWlanIfaceName()); - return createWifiStatus(WifiStatusCode::SUCCESS); -} - -WifiStatus WifiChip::removeIfaceInstanceFromBridgedApIfaceInternal( - const std::string& ifname, const std::string& ifInstanceName) { - const auto iface = findUsingName(ap_ifaces_, ifname); - if (!iface.get() || ifInstanceName.empty()) { - return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS); - } - // Requires to remove one of the instance in bridge mode - for (auto const& it : br_ifaces_ap_instances_) { - if (it.first == ifname) { - std::vector<std::string> ap_instances = it.second; - for (auto const& iface : ap_instances) { - if (iface == ifInstanceName) { - if (!iface_util_->removeIfaceFromBridge(it.first, iface)) { - LOG(ERROR) - << "Failed to remove interface: " << ifInstanceName - << " from " << ifname; - return createWifiStatus( - WifiStatusCode::ERROR_NOT_AVAILABLE); - } - legacy_hal::wifi_error legacy_status = - legacy_hal_.lock()->deleteVirtualInterface(iface); - if (legacy_status != legacy_hal::WIFI_SUCCESS) { - LOG(ERROR) << "Failed to del interface: " << iface - << " " << legacyErrorToString(legacy_status); - return createWifiStatusFromLegacyError(legacy_status); - } - ap_instances.erase( - std::remove(ap_instances.begin(), ap_instances.end(), - ifInstanceName), - ap_instances.end()); - br_ifaces_ap_instances_[ifname] = ap_instances; - break; - } - } - break; - } - } - iface->removeInstance(ifInstanceName); - setActiveWlanIfaceNameProperty(getFirstActiveWlanIfaceName()); - - return createWifiStatus(WifiStatusCode::SUCCESS); -} - -std::pair<WifiStatus, sp<V1_4::IWifiNanIface>> -WifiChip::createNanIfaceInternal() { - if (!canCurrentModeSupportIfaceOfTypeWithCurrentIfaces(IfaceType::NAN)) { - return {createWifiStatus(WifiStatusCode::ERROR_NOT_AVAILABLE), {}}; - } - bool is_dedicated_iface = true; - std::string ifname = getPredefinedNanIfaceName(); - if (ifname.empty() || !iface_util_->ifNameToIndex(ifname)) { - // Use the first shared STA iface (wlan0) if a dedicated aware iface is - // not defined. - ifname = getFirstActiveWlanIfaceName(); - is_dedicated_iface = false; - } - sp<WifiNanIface> iface = - new WifiNanIface(ifname, is_dedicated_iface, legacy_hal_, iface_util_); - nan_ifaces_.push_back(iface); - for (const auto& callback : event_cb_handler_.getCallbacks()) { - if (!callback->onIfaceAdded(IfaceType::NAN, ifname).isOk()) { - LOG(ERROR) << "Failed to invoke onIfaceAdded callback"; - } - } - return {createWifiStatus(WifiStatusCode::SUCCESS), iface}; -} - -std::pair<WifiStatus, std::vector<hidl_string>> -WifiChip::getNanIfaceNamesInternal() { - if (nan_ifaces_.empty()) { - return {createWifiStatus(WifiStatusCode::SUCCESS), {}}; - } - return {createWifiStatus(WifiStatusCode::SUCCESS), getNames(nan_ifaces_)}; -} - -std::pair<WifiStatus, sp<V1_4::IWifiNanIface>> WifiChip::getNanIfaceInternal( - const std::string& ifname) { - const auto iface = findUsingName(nan_ifaces_, ifname); - if (!iface.get()) { - return {createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS), nullptr}; - } - return {createWifiStatus(WifiStatusCode::SUCCESS), iface}; -} - -WifiStatus WifiChip::removeNanIfaceInternal(const std::string& ifname) { - const auto iface = findUsingName(nan_ifaces_, ifname); - if (!iface.get()) { - return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS); - } - invalidateAndClear(nan_ifaces_, iface); - for (const auto& callback : event_cb_handler_.getCallbacks()) { - if (!callback->onIfaceRemoved(IfaceType::NAN, ifname).isOk()) { - LOG(ERROR) << "Failed to invoke onIfaceAdded callback"; - } - } - return createWifiStatus(WifiStatusCode::SUCCESS); -} - -std::pair<WifiStatus, sp<IWifiP2pIface>> WifiChip::createP2pIfaceInternal() { - if (!canCurrentModeSupportIfaceOfTypeWithCurrentIfaces(IfaceType::P2P)) { - return {createWifiStatus(WifiStatusCode::ERROR_NOT_AVAILABLE), {}}; - } - std::string ifname = getPredefinedP2pIfaceName(); - sp<WifiP2pIface> iface = new WifiP2pIface(ifname, legacy_hal_); - p2p_ifaces_.push_back(iface); - for (const auto& callback : event_cb_handler_.getCallbacks()) { - if (!callback->onIfaceAdded(IfaceType::P2P, ifname).isOk()) { - LOG(ERROR) << "Failed to invoke onIfaceAdded callback"; - } - } - return {createWifiStatus(WifiStatusCode::SUCCESS), iface}; -} - -std::pair<WifiStatus, std::vector<hidl_string>> -WifiChip::getP2pIfaceNamesInternal() { - if (p2p_ifaces_.empty()) { - return {createWifiStatus(WifiStatusCode::SUCCESS), {}}; - } - return {createWifiStatus(WifiStatusCode::SUCCESS), getNames(p2p_ifaces_)}; -} - -std::pair<WifiStatus, sp<IWifiP2pIface>> WifiChip::getP2pIfaceInternal( - const std::string& ifname) { - const auto iface = findUsingName(p2p_ifaces_, ifname); - if (!iface.get()) { - return {createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS), nullptr}; - } - return {createWifiStatus(WifiStatusCode::SUCCESS), iface}; -} - -WifiStatus WifiChip::removeP2pIfaceInternal(const std::string& ifname) { - const auto iface = findUsingName(p2p_ifaces_, ifname); - if (!iface.get()) { - return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS); - } - invalidateAndClear(p2p_ifaces_, iface); - for (const auto& callback : event_cb_handler_.getCallbacks()) { - if (!callback->onIfaceRemoved(IfaceType::P2P, ifname).isOk()) { - LOG(ERROR) << "Failed to invoke onIfaceRemoved callback"; - } - } - return createWifiStatus(WifiStatusCode::SUCCESS); -} - -std::pair<WifiStatus, sp<V1_5::IWifiStaIface>> -WifiChip::createStaIfaceInternal() { - if (!canCurrentModeSupportIfaceOfTypeWithCurrentIfaces(IfaceType::STA)) { - return {createWifiStatus(WifiStatusCode::ERROR_NOT_AVAILABLE), {}}; - } - bool iface_created = false; - std::string ifname = allocateStaIfaceName(); - if (!if_nametoindex(ifname.c_str())) { - legacy_hal::wifi_error legacy_status = - legacy_hal_.lock()->createVirtualInterface( - ifname, - hidl_struct_util::convertHidlIfaceTypeToLegacy(IfaceType::STA)); - if (legacy_status != legacy_hal::WIFI_SUCCESS) { - LOG(ERROR) << "Failed to add interface: " << ifname << " " - << legacyErrorToString(legacy_status); - return {createWifiStatusFromLegacyError(legacy_status), {}}; - } - iface_created = true; - } - sp<WifiStaIface> iface = new WifiStaIface(ifname, legacy_hal_, iface_util_); - sta_ifaces_.push_back(iface); - if (iface_created) created_sta_ifaces_.push_back(iface); - for (const auto& callback : event_cb_handler_.getCallbacks()) { - if (!callback->onIfaceAdded(IfaceType::STA, ifname).isOk()) { - LOG(ERROR) << "Failed to invoke onIfaceAdded callback"; - } - } - setActiveWlanIfaceNameProperty(getFirstActiveWlanIfaceName()); - return {createWifiStatus(WifiStatusCode::SUCCESS), iface}; -} - -std::pair<WifiStatus, std::vector<hidl_string>> -WifiChip::getStaIfaceNamesInternal() { - if (sta_ifaces_.empty()) { - return {createWifiStatus(WifiStatusCode::SUCCESS), {}}; - } - return {createWifiStatus(WifiStatusCode::SUCCESS), getNames(sta_ifaces_)}; -} - -std::pair<WifiStatus, sp<V1_5::IWifiStaIface>> WifiChip::getStaIfaceInternal( - const std::string& ifname) { - const auto iface = findUsingName(sta_ifaces_, ifname); - if (!iface.get()) { - return {createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS), nullptr}; - } - return {createWifiStatus(WifiStatusCode::SUCCESS), iface}; -} - -WifiStatus WifiChip::removeStaIfaceInternal(const std::string& ifname) { - const auto iface = findUsingName(sta_ifaces_, ifname); - if (!iface.get()) { - return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS); - } - // Invalidate & remove any dependent objects first. - invalidateAndRemoveDependencies(ifname); - if (findUsingName(created_sta_ifaces_, ifname) != nullptr) { - legacy_hal::wifi_error legacy_status = - legacy_hal_.lock()->deleteVirtualInterface(ifname); - if (legacy_status != legacy_hal::WIFI_SUCCESS) { - LOG(ERROR) << "Failed to remove interface: " << ifname << " " - << legacyErrorToString(legacy_status); - } - invalidateAndClear(created_sta_ifaces_, iface); - } - invalidateAndClear(sta_ifaces_, iface); - for (const auto& callback : event_cb_handler_.getCallbacks()) { - if (!callback->onIfaceRemoved(IfaceType::STA, ifname).isOk()) { - LOG(ERROR) << "Failed to invoke onIfaceRemoved callback"; - } - } - setActiveWlanIfaceNameProperty(getFirstActiveWlanIfaceName()); - return createWifiStatus(WifiStatusCode::SUCCESS); -} - -std::pair<WifiStatus, sp<V1_0::IWifiRttController>> -WifiChip::createRttControllerInternal(const sp<IWifiIface>& /*bound_iface*/) { - LOG(ERROR) << "createRttController is not supported on this HAL"; - return {createWifiStatus(WifiStatusCode::ERROR_NOT_SUPPORTED), {}}; -} - -std::pair<WifiStatus, std::vector<WifiDebugRingBufferStatus>> -WifiChip::getDebugRingBuffersStatusInternal() { - legacy_hal::wifi_error legacy_status; - std::vector<legacy_hal::wifi_ring_buffer_status> - legacy_ring_buffer_status_vec; - std::tie(legacy_status, legacy_ring_buffer_status_vec) = - legacy_hal_.lock()->getRingBuffersStatus(getFirstActiveWlanIfaceName()); - if (legacy_status != legacy_hal::WIFI_SUCCESS) { - return {createWifiStatusFromLegacyError(legacy_status), {}}; - } - std::vector<WifiDebugRingBufferStatus> hidl_ring_buffer_status_vec; - if (!hidl_struct_util::convertLegacyVectorOfDebugRingBufferStatusToHidl( - legacy_ring_buffer_status_vec, &hidl_ring_buffer_status_vec)) { - return {createWifiStatus(WifiStatusCode::ERROR_UNKNOWN), {}}; - } - return {createWifiStatus(WifiStatusCode::SUCCESS), - hidl_ring_buffer_status_vec}; -} - -WifiStatus WifiChip::startLoggingToDebugRingBufferInternal( - const hidl_string& ring_name, WifiDebugRingBufferVerboseLevel verbose_level, - uint32_t max_interval_in_sec, uint32_t min_data_size_in_bytes) { - WifiStatus status = registerDebugRingBufferCallback(); - if (status.code != WifiStatusCode::SUCCESS) { - return status; - } - legacy_hal::wifi_error legacy_status = - legacy_hal_.lock()->startRingBufferLogging( - getFirstActiveWlanIfaceName(), ring_name, - static_cast< - std::underlying_type<WifiDebugRingBufferVerboseLevel>::type>( - verbose_level), - max_interval_in_sec, min_data_size_in_bytes); - ringbuffer_map_.insert(std::pair<std::string, Ringbuffer>( - ring_name, Ringbuffer(kMaxBufferSizeBytes))); - // if verbose logging enabled, turn up HAL daemon logging as well. - if (verbose_level < WifiDebugRingBufferVerboseLevel::VERBOSE) { - android::base::SetMinimumLogSeverity(android::base::DEBUG); - } else { - android::base::SetMinimumLogSeverity(android::base::VERBOSE); - } - return createWifiStatusFromLegacyError(legacy_status); -} - -WifiStatus WifiChip::forceDumpToDebugRingBufferInternal( - const hidl_string& ring_name) { - WifiStatus status = registerDebugRingBufferCallback(); - if (status.code != WifiStatusCode::SUCCESS) { - return status; - } - legacy_hal::wifi_error legacy_status = - legacy_hal_.lock()->getRingBufferData(getFirstActiveWlanIfaceName(), - ring_name); - - return createWifiStatusFromLegacyError(legacy_status); -} - -WifiStatus WifiChip::flushRingBufferToFileInternal() { - if (!writeRingbufferFilesInternal()) { - LOG(ERROR) << "Error writing files to flash"; - return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN); - } - return createWifiStatus(WifiStatusCode::SUCCESS); -} - -WifiStatus WifiChip::stopLoggingToDebugRingBufferInternal() { - legacy_hal::wifi_error legacy_status = - legacy_hal_.lock()->deregisterRingBufferCallbackHandler( - getFirstActiveWlanIfaceName()); - if (legacy_status == legacy_hal::WIFI_SUCCESS) { - debug_ring_buffer_cb_registered_ = false; - } - return createWifiStatusFromLegacyError(legacy_status); -} - -std::pair<WifiStatus, WifiDebugHostWakeReasonStats> -WifiChip::getDebugHostWakeReasonStatsInternal() { - legacy_hal::wifi_error legacy_status; - legacy_hal::WakeReasonStats legacy_stats; - std::tie(legacy_status, legacy_stats) = - legacy_hal_.lock()->getWakeReasonStats(getFirstActiveWlanIfaceName()); - if (legacy_status != legacy_hal::WIFI_SUCCESS) { - return {createWifiStatusFromLegacyError(legacy_status), {}}; - } - WifiDebugHostWakeReasonStats hidl_stats; - if (!hidl_struct_util::convertLegacyWakeReasonStatsToHidl(legacy_stats, - &hidl_stats)) { - return {createWifiStatus(WifiStatusCode::ERROR_UNKNOWN), {}}; - } - return {createWifiStatus(WifiStatusCode::SUCCESS), hidl_stats}; -} - -WifiStatus WifiChip::enableDebugErrorAlertsInternal(bool enable) { - legacy_hal::wifi_error legacy_status; - if (enable) { - android::wp<WifiChip> weak_ptr_this(this); - const auto& on_alert_callback = [weak_ptr_this]( - int32_t error_code, - std::vector<uint8_t> debug_data) { - const auto shared_ptr_this = weak_ptr_this.promote(); - if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { - LOG(ERROR) << "Callback invoked on an invalid object"; - return; - } - for (const auto& callback : shared_ptr_this->getEventCallbacks()) { - if (!callback->onDebugErrorAlert(error_code, debug_data) - .isOk()) { - LOG(ERROR) << "Failed to invoke onDebugErrorAlert callback"; - } - } - }; - legacy_status = legacy_hal_.lock()->registerErrorAlertCallbackHandler( - getFirstActiveWlanIfaceName(), on_alert_callback); - } else { - legacy_status = legacy_hal_.lock()->deregisterErrorAlertCallbackHandler( - getFirstActiveWlanIfaceName()); - } - return createWifiStatusFromLegacyError(legacy_status); -} - -WifiStatus WifiChip::selectTxPowerScenarioInternal( - V1_1::IWifiChip::TxPowerScenario scenario) { - auto legacy_status = legacy_hal_.lock()->selectTxPowerScenario( - getFirstActiveWlanIfaceName(), - hidl_struct_util::convertHidlTxPowerScenarioToLegacy(scenario)); - return createWifiStatusFromLegacyError(legacy_status); -} - -WifiStatus WifiChip::resetTxPowerScenarioInternal() { - auto legacy_status = - legacy_hal_.lock()->resetTxPowerScenario(getFirstActiveWlanIfaceName()); - return createWifiStatusFromLegacyError(legacy_status); -} - -WifiStatus WifiChip::setLatencyModeInternal(LatencyMode mode) { - auto legacy_status = legacy_hal_.lock()->setLatencyMode( - getFirstActiveWlanIfaceName(), - hidl_struct_util::convertHidlLatencyModeToLegacy(mode)); - return createWifiStatusFromLegacyError(legacy_status); -} - -WifiStatus WifiChip::registerEventCallbackInternal_1_2( - const sp<V1_2::IWifiChipEventCallback>& /* event_callback */) { - // Deprecated support for this callback. - return createWifiStatus(WifiStatusCode::ERROR_NOT_SUPPORTED); -} - -WifiStatus WifiChip::selectTxPowerScenarioInternal_1_2( - TxPowerScenario scenario) { - auto legacy_status = legacy_hal_.lock()->selectTxPowerScenario( - getFirstActiveWlanIfaceName(), - hidl_struct_util::convertHidlTxPowerScenarioToLegacy_1_2(scenario)); - return createWifiStatusFromLegacyError(legacy_status); -} - -std::pair<WifiStatus, uint32_t> WifiChip::getCapabilitiesInternal_1_3() { - // Deprecated support for this callback. - return {createWifiStatus(WifiStatusCode::ERROR_NOT_SUPPORTED), 0}; -} - -std::pair<WifiStatus, uint32_t> WifiChip::getCapabilitiesInternal_1_5() { - legacy_hal::wifi_error legacy_status; - uint64_t legacy_feature_set; - uint32_t legacy_logger_feature_set; - const auto ifname = getFirstActiveWlanIfaceName(); - std::tie(legacy_status, legacy_feature_set) = - legacy_hal_.lock()->getSupportedFeatureSet(ifname); - if (legacy_status != legacy_hal::WIFI_SUCCESS) { - return {createWifiStatusFromLegacyError(legacy_status), 0}; - } - std::tie(legacy_status, legacy_logger_feature_set) = - legacy_hal_.lock()->getLoggerSupportedFeatureSet(ifname); - if (legacy_status != legacy_hal::WIFI_SUCCESS) { - // some devices don't support querying logger feature set - legacy_logger_feature_set = 0; - } - uint32_t hidl_caps; - if (!hidl_struct_util::convertLegacyFeaturesToHidlChipCapabilities( - legacy_feature_set, legacy_logger_feature_set, &hidl_caps)) { - return {createWifiStatus(WifiStatusCode::ERROR_UNKNOWN), 0}; - } - return {createWifiStatus(WifiStatusCode::SUCCESS), hidl_caps}; -} - -std::pair<WifiStatus, sp<V1_4::IWifiRttController>> -WifiChip::createRttControllerInternal_1_4(const sp<IWifiIface>& bound_iface) { - if (sta_ifaces_.size() == 0 && - !canCurrentModeSupportIfaceOfType(IfaceType::STA)) { - LOG(ERROR) - << "createRttControllerInternal_1_4: Chip cannot support STAs " - "(and RTT by extension)"; - return {createWifiStatus(WifiStatusCode::ERROR_NOT_AVAILABLE), {}}; - } - sp<WifiRttController> rtt = new WifiRttController( - getFirstActiveWlanIfaceName(), bound_iface, legacy_hal_); - rtt_controllers_.emplace_back(rtt); - return {createWifiStatus(WifiStatusCode::SUCCESS), rtt}; -} - -WifiStatus WifiChip::registerEventCallbackInternal_1_4( - const sp<V1_4::IWifiChipEventCallback>& event_callback) { - if (!event_cb_handler_.addCallback(event_callback)) { - return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN); - } - return createWifiStatus(WifiStatusCode::SUCCESS); -} - -WifiStatus WifiChip::setMultiStaPrimaryConnectionInternal( - const std::string& ifname) { - auto legacy_status = - legacy_hal_.lock()->multiStaSetPrimaryConnection(ifname); - return createWifiStatusFromLegacyError(legacy_status); -} - -WifiStatus WifiChip::setMultiStaUseCaseInternal(MultiStaUseCase use_case) { - auto legacy_status = legacy_hal_.lock()->multiStaSetUseCase( - hidl_struct_util::convertHidlMultiStaUseCaseToLegacy(use_case)); - return createWifiStatusFromLegacyError(legacy_status); -} - -WifiStatus WifiChip::setCoexUnsafeChannelsInternal( - std::vector<CoexUnsafeChannel> unsafe_channels, uint32_t restrictions) { - std::vector<legacy_hal::wifi_coex_unsafe_channel> legacy_unsafe_channels; - if (!hidl_struct_util::convertHidlVectorOfCoexUnsafeChannelToLegacy( - unsafe_channels, &legacy_unsafe_channels)) { - return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS); - } - uint32_t legacy_restrictions = 0; - if (restrictions & CoexRestriction::WIFI_DIRECT) { - legacy_restrictions |= legacy_hal::wifi_coex_restriction::WIFI_DIRECT; - } - if (restrictions & CoexRestriction::SOFTAP) { - legacy_restrictions |= legacy_hal::wifi_coex_restriction::SOFTAP; - } - if (restrictions & CoexRestriction::WIFI_AWARE) { - legacy_restrictions |= legacy_hal::wifi_coex_restriction::WIFI_AWARE; - } - auto legacy_status = legacy_hal_.lock()->setCoexUnsafeChannels( - legacy_unsafe_channels, legacy_restrictions); - return createWifiStatusFromLegacyError(legacy_status); -} - -WifiStatus WifiChip::setCountryCodeInternal(const std::array<int8_t, 2>& code) { - auto legacy_status = - legacy_hal_.lock()->setCountryCode(getFirstActiveWlanIfaceName(), code); - return createWifiStatusFromLegacyError(legacy_status); -} - -std::pair<WifiStatus, std::vector<WifiUsableChannel>> -WifiChip::getUsableChannelsInternal(WifiBand band, uint32_t ifaceModeMask, - uint32_t filterMask) { - legacy_hal::wifi_error legacy_status; - std::vector<legacy_hal::wifi_usable_channel> legacy_usable_channels; - std::tie(legacy_status, legacy_usable_channels) = - legacy_hal_.lock()->getUsableChannels( - hidl_struct_util::convertHidlWifiBandToLegacyMacBand(band), - hidl_struct_util::convertHidlWifiIfaceModeToLegacy(ifaceModeMask), - hidl_struct_util::convertHidlUsableChannelFilterToLegacy( - filterMask)); - - if (legacy_status != legacy_hal::WIFI_SUCCESS) { - return {createWifiStatusFromLegacyError(legacy_status), {}}; - } - std::vector<WifiUsableChannel> hidl_usable_channels; - if (!hidl_struct_util::convertLegacyWifiUsableChannelsToHidl( - legacy_usable_channels, &hidl_usable_channels)) { - return {createWifiStatus(WifiStatusCode::ERROR_UNKNOWN), {}}; - } - return {createWifiStatus(WifiStatusCode::SUCCESS), hidl_usable_channels}; -} - -WifiStatus WifiChip::triggerSubsystemRestartInternal() { - auto legacy_status = legacy_hal_.lock()->triggerSubsystemRestart(); - return createWifiStatusFromLegacyError(legacy_status); -} - -WifiStatus WifiChip::handleChipConfiguration( - /* NONNULL */ std::unique_lock<std::recursive_mutex>* lock, - ChipModeId mode_id) { - // If the chip is already configured in a different mode, stop - // the legacy HAL and then start it after firmware mode change. - if (isValidModeId(current_mode_id_)) { - LOG(INFO) << "Reconfiguring chip from mode " << current_mode_id_ - << " to mode " << mode_id; - invalidateAndRemoveAllIfaces(); - legacy_hal::wifi_error legacy_status = - legacy_hal_.lock()->stop(lock, []() {}); - if (legacy_status != legacy_hal::WIFI_SUCCESS) { - LOG(ERROR) << "Failed to stop legacy HAL: " - << legacyErrorToString(legacy_status); - return createWifiStatusFromLegacyError(legacy_status); - } - } - // Firmware mode change not needed for V2 devices. - bool success = true; - if (mode_id == feature_flags::chip_mode_ids::kV1Sta) { - success = mode_controller_.lock()->changeFirmwareMode(IfaceType::STA); - } else if (mode_id == feature_flags::chip_mode_ids::kV1Ap) { - success = mode_controller_.lock()->changeFirmwareMode(IfaceType::AP); - } - if (!success) { - return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN); - } - legacy_hal::wifi_error legacy_status = legacy_hal_.lock()->start(); - if (legacy_status != legacy_hal::WIFI_SUCCESS) { - LOG(ERROR) << "Failed to start legacy HAL: " - << legacyErrorToString(legacy_status); - return createWifiStatusFromLegacyError(legacy_status); - } - // Every time the HAL is restarted, we need to register the - // radio mode change callback. - WifiStatus status = registerRadioModeChangeCallback(); - if (status.code != WifiStatusCode::SUCCESS) { - // This probably is not a critical failure? - LOG(ERROR) << "Failed to register radio mode change callback"; - } - // Extract and save the version information into property. - std::pair<WifiStatus, V1_4::IWifiChip::ChipDebugInfo> version_info; - version_info = WifiChip::requestChipDebugInfoInternal(); - if (WifiStatusCode::SUCCESS == version_info.first.code) { - property_set("vendor.wlan.firmware.version", - version_info.second.firmwareDescription.c_str()); - property_set("vendor.wlan.driver.version", - version_info.second.driverDescription.c_str()); - } - - return createWifiStatus(WifiStatusCode::SUCCESS); -} - -WifiStatus WifiChip::registerDebugRingBufferCallback() { - if (debug_ring_buffer_cb_registered_) { - return createWifiStatus(WifiStatusCode::SUCCESS); - } - - android::wp<WifiChip> weak_ptr_this(this); - const auto& on_ring_buffer_data_callback = - [weak_ptr_this](const std::string& name, - const std::vector<uint8_t>& data, - const legacy_hal::wifi_ring_buffer_status& status) { - const auto shared_ptr_this = weak_ptr_this.promote(); - if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { - LOG(ERROR) << "Callback invoked on an invalid object"; - return; - } - WifiDebugRingBufferStatus hidl_status; - if (!hidl_struct_util::convertLegacyDebugRingBufferStatusToHidl( - status, &hidl_status)) { - LOG(ERROR) << "Error converting ring buffer status"; - return; - } - { - std::unique_lock<std::mutex> lk(shared_ptr_this->lock_t); - const auto& target = - shared_ptr_this->ringbuffer_map_.find(name); - if (target != shared_ptr_this->ringbuffer_map_.end()) { - Ringbuffer& cur_buffer = target->second; - cur_buffer.append(data); - } else { - LOG(ERROR) << "Ringname " << name << " not found"; - return; - } - // unique_lock unlocked here - } - }; - legacy_hal::wifi_error legacy_status = - legacy_hal_.lock()->registerRingBufferCallbackHandler( - getFirstActiveWlanIfaceName(), on_ring_buffer_data_callback); - - if (legacy_status == legacy_hal::WIFI_SUCCESS) { - debug_ring_buffer_cb_registered_ = true; - } - return createWifiStatusFromLegacyError(legacy_status); -} - -WifiStatus WifiChip::registerRadioModeChangeCallback() { - android::wp<WifiChip> weak_ptr_this(this); - const auto& on_radio_mode_change_callback = - [weak_ptr_this](const std::vector<legacy_hal::WifiMacInfo>& mac_infos) { - const auto shared_ptr_this = weak_ptr_this.promote(); - if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { - LOG(ERROR) << "Callback invoked on an invalid object"; - return; - } - std::vector<V1_4::IWifiChipEventCallback::RadioModeInfo> - hidl_radio_mode_infos; - if (!hidl_struct_util::convertLegacyWifiMacInfosToHidl( - mac_infos, &hidl_radio_mode_infos)) { - LOG(ERROR) << "Error converting wifi mac info"; - return; - } - for (const auto& callback : shared_ptr_this->getEventCallbacks()) { - if (!callback->onRadioModeChange_1_4(hidl_radio_mode_infos) - .isOk()) { - LOG(ERROR) << "Failed to invoke onRadioModeChange_1_4" - << " callback on: " << toString(callback); - } - } - }; - legacy_hal::wifi_error legacy_status = - legacy_hal_.lock()->registerRadioModeChangeCallbackHandler( - getFirstActiveWlanIfaceName(), on_radio_mode_change_callback); - return createWifiStatusFromLegacyError(legacy_status); -} - -std::vector<V1_4::IWifiChip::ChipIfaceCombination> -WifiChip::getCurrentModeIfaceCombinations() { - if (!isValidModeId(current_mode_id_)) { - LOG(ERROR) << "Chip not configured in a mode yet"; - return {}; - } - for (const auto& mode : modes_) { - if (mode.id == current_mode_id_) { - return mode.availableCombinations; - } - } - CHECK(0) << "Expected to find iface combinations for current mode!"; - return {}; -} - -// Returns a map indexed by IfaceType with the number of ifaces currently -// created of the corresponding type. -std::map<IfaceType, size_t> WifiChip::getCurrentIfaceCombination() { - std::map<IfaceType, size_t> iface_counts; - iface_counts[IfaceType::AP] = ap_ifaces_.size(); - iface_counts[IfaceType::NAN] = nan_ifaces_.size(); - iface_counts[IfaceType::P2P] = p2p_ifaces_.size(); - iface_counts[IfaceType::STA] = sta_ifaces_.size(); - return iface_counts; -} - -// This expands the provided iface combinations to a more parseable -// form. Returns a vector of available combinations possible with the number -// of ifaces of each type in the combination. -// This method is a port of HalDeviceManager.expandIfaceCombos() from framework. -std::vector<std::map<IfaceType, size_t>> WifiChip::expandIfaceCombinations( - const V1_4::IWifiChip::ChipIfaceCombination& combination) { - uint32_t num_expanded_combos = 1; - for (const auto& limit : combination.limits) { - for (uint32_t i = 0; i < limit.maxIfaces; i++) { - num_expanded_combos *= limit.types.size(); - } - } - - // Allocate the vector of expanded combos and reset all iface counts to 0 - // in each combo. - std::vector<std::map<IfaceType, size_t>> expanded_combos; - expanded_combos.resize(num_expanded_combos); - for (auto& expanded_combo : expanded_combos) { - for (const auto type : - {IfaceType::AP, IfaceType::NAN, IfaceType::P2P, IfaceType::STA}) { - expanded_combo[type] = 0; - } - } - uint32_t span = num_expanded_combos; - for (const auto& limit : combination.limits) { - for (uint32_t i = 0; i < limit.maxIfaces; i++) { - span /= limit.types.size(); - for (uint32_t k = 0; k < num_expanded_combos; ++k) { - const auto iface_type = - limit.types[(k / span) % limit.types.size()]; - expanded_combos[k][iface_type]++; - } - } - } - return expanded_combos; -} - -bool WifiChip::canExpandedIfaceComboSupportIfaceOfTypeWithCurrentIfaces( - const std::map<IfaceType, size_t>& expanded_combo, - IfaceType requested_type) { - const auto current_combo = getCurrentIfaceCombination(); - - // Check if we have space for 1 more iface of |type| in this combo - for (const auto type : - {IfaceType::AP, IfaceType::NAN, IfaceType::P2P, IfaceType::STA}) { - size_t num_ifaces_needed = current_combo.at(type); - if (type == requested_type) { - num_ifaces_needed++; - } - size_t num_ifaces_allowed = expanded_combo.at(type); - if (num_ifaces_needed > num_ifaces_allowed) { - return false; - } - } - return true; -} - -// This method does the following: -// a) Enumerate all possible iface combos by expanding the current -// ChipIfaceCombination. -// b) Check if the requested iface type can be added to the current mode -// with the iface combination that is already active. -bool WifiChip::canCurrentModeSupportIfaceOfTypeWithCurrentIfaces( - IfaceType requested_type) { - if (!isValidModeId(current_mode_id_)) { - LOG(ERROR) << "Chip not configured in a mode yet"; - return false; - } - const auto combinations = getCurrentModeIfaceCombinations(); - for (const auto& combination : combinations) { - const auto expanded_combos = expandIfaceCombinations(combination); - for (const auto& expanded_combo : expanded_combos) { - if (canExpandedIfaceComboSupportIfaceOfTypeWithCurrentIfaces( - expanded_combo, requested_type)) { - return true; - } - } - } - return false; -} - -// Note: This does not consider ifaces already active. It only checks if the -// provided expanded iface combination can support the requested combo. -bool WifiChip::canExpandedIfaceComboSupportIfaceCombo( - const std::map<IfaceType, size_t>& expanded_combo, - const std::map<IfaceType, size_t>& req_combo) { - // Check if we have space for 1 more iface of |type| in this combo - for (const auto type : - {IfaceType::AP, IfaceType::NAN, IfaceType::P2P, IfaceType::STA}) { - if (req_combo.count(type) == 0) { - // Iface of "type" not in the req_combo. - continue; - } - size_t num_ifaces_needed = req_combo.at(type); - size_t num_ifaces_allowed = expanded_combo.at(type); - if (num_ifaces_needed > num_ifaces_allowed) { - return false; - } - } - return true; -} -// This method does the following: -// a) Enumerate all possible iface combos by expanding the current -// ChipIfaceCombination. -// b) Check if the requested iface combo can be added to the current mode. -// Note: This does not consider ifaces already active. It only checks if the -// current mode can support the requested combo. -bool WifiChip::canCurrentModeSupportIfaceCombo( - const std::map<IfaceType, size_t>& req_combo) { - if (!isValidModeId(current_mode_id_)) { - LOG(ERROR) << "Chip not configured in a mode yet"; - return false; - } - const auto combinations = getCurrentModeIfaceCombinations(); - for (const auto& combination : combinations) { - const auto expanded_combos = expandIfaceCombinations(combination); - for (const auto& expanded_combo : expanded_combos) { - if (canExpandedIfaceComboSupportIfaceCombo(expanded_combo, - req_combo)) { - return true; - } - } - } - return false; -} - -// This method does the following: -// a) Enumerate all possible iface combos by expanding the current -// ChipIfaceCombination. -// b) Check if the requested iface type can be added to the current mode. -bool WifiChip::canCurrentModeSupportIfaceOfType(IfaceType requested_type) { - // Check if we can support at least 1 iface of type. - std::map<IfaceType, size_t> req_iface_combo; - req_iface_combo[requested_type] = 1; - return canCurrentModeSupportIfaceCombo(req_iface_combo); -} - -bool WifiChip::isValidModeId(ChipModeId mode_id) { - for (const auto& mode : modes_) { - if (mode.id == mode_id) { - return true; - } - } - return false; -} - -bool WifiChip::isStaApConcurrencyAllowedInCurrentMode() { - // Check if we can support at least 1 STA & 1 AP concurrently. - std::map<IfaceType, size_t> req_iface_combo; - req_iface_combo[IfaceType::AP] = 1; - req_iface_combo[IfaceType::STA] = 1; - return canCurrentModeSupportIfaceCombo(req_iface_combo); -} - -bool WifiChip::isDualStaConcurrencyAllowedInCurrentMode() { - // Check if we can support at least 2 STA concurrently. - std::map<IfaceType, size_t> req_iface_combo; - req_iface_combo[IfaceType::STA] = 2; - return canCurrentModeSupportIfaceCombo(req_iface_combo); -} - -std::string WifiChip::getFirstActiveWlanIfaceName() { - if (sta_ifaces_.size() > 0) return sta_ifaces_[0]->getName(); - if (ap_ifaces_.size() > 0) { - // If the first active wlan iface is bridged iface. - // Return first instance name. - for (auto const& it : br_ifaces_ap_instances_) { - if (it.first == ap_ifaces_[0]->getName()) { - return it.second[0]; - } - } - return ap_ifaces_[0]->getName(); - } - // This could happen if the chip call is made before any STA/AP - // iface is created. Default to wlan0 for such cases. - LOG(WARNING) << "No active wlan interfaces in use! Using default"; - return getWlanIfaceNameWithType(IfaceType::STA, 0); -} - -// Return the first wlan (wlan0, wlan1 etc.) starting from |start_idx| -// not already in use. -// Note: This doesn't check the actual presence of these interfaces. -std::string WifiChip::allocateApOrStaIfaceName(IfaceType type, - uint32_t start_idx) { - for (unsigned idx = start_idx; idx < kMaxWlanIfaces; idx++) { - const auto ifname = getWlanIfaceNameWithType(type, idx); - if (findUsingNameFromBridgedApInstances(ifname)) continue; - if (findUsingName(ap_ifaces_, ifname)) continue; - if (findUsingName(sta_ifaces_, ifname)) continue; - return ifname; - } - // This should never happen. We screwed up somewhere if it did. - CHECK(false) << "All wlan interfaces in use already!"; - return {}; -} - -uint32_t WifiChip::startIdxOfApIface() { - if (isDualStaConcurrencyAllowedInCurrentMode()) { - // When the HAL support dual STAs, AP should start with idx 2. - return 2; - } else if (isStaApConcurrencyAllowedInCurrentMode()) { - // When the HAL support STA + AP but it doesn't support dual STAs. - // AP should start with idx 1. - return 1; - } - // No concurrency support. - return 0; -} - -// AP iface names start with idx 1 for modes supporting -// concurrent STA, else start with idx 0. -std::string WifiChip::allocateApIfaceName() { - // Check if we have a dedicated iface for AP. - std::vector<std::string> ifnames = getPredefinedApIfaceNames(false); - if (!ifnames.empty()) { - return ifnames[0]; - } - return allocateApOrStaIfaceName(IfaceType::AP, startIdxOfApIface()); -} - -std::vector<std::string> WifiChip::allocateBridgedApInstanceNames() { - // Check if we have a dedicated iface for AP. - std::vector<std::string> instances = getPredefinedApIfaceNames(true); - if (instances.size() == 2) { - return instances; - } else { - int num_ifaces_need_to_allocate = 2 - instances.size(); - for (int i = 0; i < num_ifaces_need_to_allocate; i++) { - std::string instance_name = allocateApOrStaIfaceName( - IfaceType::AP, startIdxOfApIface() + i); - if (!instance_name.empty()) { - instances.push_back(instance_name); - } - } - } - return instances; -} - -// STA iface names start with idx 0. -// Primary STA iface will always be 0. -std::string WifiChip::allocateStaIfaceName() { - return allocateApOrStaIfaceName(IfaceType::STA, 0); -} - -bool WifiChip::writeRingbufferFilesInternal() { - if (!removeOldFilesInternal()) { - LOG(ERROR) << "Error occurred while deleting old tombstone files"; - return false; - } - // write ringbuffers to file - { - std::unique_lock<std::mutex> lk(lock_t); - for (auto& item : ringbuffer_map_) { - Ringbuffer& cur_buffer = item.second; - if (cur_buffer.getData().empty()) { - continue; - } - const std::string file_path_raw = - kTombstoneFolderPath + item.first + "XXXXXXXXXX"; - const int dump_fd = mkstemp(makeCharVec(file_path_raw).data()); - if (dump_fd == -1) { - PLOG(ERROR) << "create file failed"; - return false; - } - unique_fd file_auto_closer(dump_fd); - for (const auto& cur_block : cur_buffer.getData()) { - if (write(dump_fd, cur_block.data(), - sizeof(cur_block[0]) * cur_block.size()) == -1) { - PLOG(ERROR) << "Error writing to file"; - } - } - cur_buffer.clear(); - } - // unique_lock unlocked here - } - return true; -} - -std::string WifiChip::getWlanIfaceNameWithType(IfaceType type, unsigned idx) { - std::string ifname; - - // let the legacy hal override the interface name - legacy_hal::wifi_error err = - legacy_hal_.lock()->getSupportedIfaceName((uint32_t)type, ifname); - if (err == legacy_hal::WIFI_SUCCESS) return ifname; - - return getWlanIfaceName(idx); -} - -void WifiChip::invalidateAndClearBridgedApAll() { - for (auto const& it : br_ifaces_ap_instances_) { - for (auto const& iface : it.second) { - iface_util_->removeIfaceFromBridge(it.first, iface); - legacy_hal_.lock()->deleteVirtualInterface(iface); - } - iface_util_->deleteBridge(it.first); - } - br_ifaces_ap_instances_.clear(); -} - -void WifiChip::invalidateAndClearBridgedAp(const std::string& br_name) { - if (br_name.empty()) return; - // delete managed interfaces - for (auto const& it : br_ifaces_ap_instances_) { - if (it.first == br_name) { - for (auto const& iface : it.second) { - iface_util_->removeIfaceFromBridge(br_name, iface); - legacy_hal_.lock()->deleteVirtualInterface(iface); - } - iface_util_->deleteBridge(br_name); - br_ifaces_ap_instances_.erase(br_name); - break; - } - } - return; -} - -bool WifiChip::findUsingNameFromBridgedApInstances(const std::string& name) { - for (auto const& it : br_ifaces_ap_instances_) { - if (it.first == name) { - return true; - } - for (auto const& iface : it.second) { - if (iface == name) { - return true; - } - } - } - return false; -} - -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android diff --git a/wifi/1.5/default/wifi_chip.h b/wifi/1.5/default/wifi_chip.h deleted file mode 100644 index 51ade5d810..0000000000 --- a/wifi/1.5/default/wifi_chip.h +++ /dev/null @@ -1,348 +0,0 @@ -/* - * Copyright (C) 2016 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef WIFI_CHIP_H_ -#define WIFI_CHIP_H_ - -#include <list> -#include <map> -#include <mutex> - -#include <android-base/macros.h> -#include <android/hardware/wifi/1.4/IWifiRttController.h> -#include <android/hardware/wifi/1.5/IWifiChip.h> - -#include "hidl_callback_util.h" -#include "ringbuffer.h" -#include "wifi_ap_iface.h" -#include "wifi_feature_flags.h" -#include "wifi_legacy_hal.h" -#include "wifi_mode_controller.h" -#include "wifi_nan_iface.h" -#include "wifi_p2p_iface.h" -#include "wifi_rtt_controller.h" -#include "wifi_sta_iface.h" - -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { -using namespace android::hardware::wifi::V1_0; - -/** - * HIDL interface object used to control a Wifi HAL chip instance. - * Since there is only a single chip instance used today, there is no - * identifying handle information stored here. - */ -class WifiChip : public V1_5::IWifiChip { - public: - WifiChip(ChipId chip_id, bool is_primary, - const std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal, - const std::weak_ptr<mode_controller::WifiModeController> - mode_controller, - const std::shared_ptr<iface_util::WifiIfaceUtil> iface_util, - const std::weak_ptr<feature_flags::WifiFeatureFlags> feature_flags, - const std::function<void(const std::string&)>& - subsystemCallbackHandler); - // HIDL does not provide a built-in mechanism to let the server invalidate - // a HIDL interface object after creation. If any client process holds onto - // a reference to the object in their context, any method calls on that - // reference will continue to be directed to the server. - // - // However Wifi HAL needs to control the lifetime of these objects. So, add - // a public |invalidate| method to |WifiChip| and it's child objects. This - // will be used to mark an object invalid when either: - // a) Wifi HAL is stopped, or - // b) Wifi Chip is reconfigured. - // - // All HIDL method implementations should check if the object is still - // marked valid before processing them. - void invalidate(); - bool isValid(); - std::set<sp<V1_4::IWifiChipEventCallback>> getEventCallbacks(); - - // HIDL methods exposed. - Return<void> getId(getId_cb hidl_status_cb) override; - // Deprecated support for this callback - Return<void> registerEventCallback( - const sp<V1_0::IWifiChipEventCallback>& event_callback, - registerEventCallback_cb hidl_status_cb) override; - Return<void> getCapabilities(getCapabilities_cb hidl_status_cb) override; - Return<void> getAvailableModes( - getAvailableModes_cb hidl_status_cb) override; - Return<void> configureChip(ChipModeId mode_id, - configureChip_cb hidl_status_cb) override; - Return<void> getMode(getMode_cb hidl_status_cb) override; - Return<void> requestChipDebugInfo( - requestChipDebugInfo_cb hidl_status_cb) override; - Return<void> requestDriverDebugDump( - requestDriverDebugDump_cb hidl_status_cb) override; - Return<void> requestFirmwareDebugDump( - requestFirmwareDebugDump_cb hidl_status_cb) override; - Return<void> createApIface(createApIface_cb hidl_status_cb) override; - Return<void> createBridgedApIface( - createBridgedApIface_cb hidl_status_cb) override; - Return<void> getApIfaceNames(getApIfaceNames_cb hidl_status_cb) override; - Return<void> getApIface(const hidl_string& ifname, - getApIface_cb hidl_status_cb) override; - Return<void> removeApIface(const hidl_string& ifname, - removeApIface_cb hidl_status_cb) override; - Return<void> removeIfaceInstanceFromBridgedApIface( - const hidl_string& brIfaceName, const hidl_string& ifaceInstanceName, - removeIfaceInstanceFromBridgedApIface_cb hidl_status_cb) override; - Return<void> createNanIface(createNanIface_cb hidl_status_cb) override; - Return<void> getNanIfaceNames(getNanIfaceNames_cb hidl_status_cb) override; - Return<void> getNanIface(const hidl_string& ifname, - getNanIface_cb hidl_status_cb) override; - Return<void> removeNanIface(const hidl_string& ifname, - removeNanIface_cb hidl_status_cb) override; - Return<void> createP2pIface(createP2pIface_cb hidl_status_cb) override; - Return<void> getP2pIfaceNames(getP2pIfaceNames_cb hidl_status_cb) override; - Return<void> getP2pIface(const hidl_string& ifname, - getP2pIface_cb hidl_status_cb) override; - Return<void> removeP2pIface(const hidl_string& ifname, - removeP2pIface_cb hidl_status_cb) override; - Return<void> createStaIface(createStaIface_cb hidl_status_cb) override; - Return<void> getStaIfaceNames(getStaIfaceNames_cb hidl_status_cb) override; - Return<void> getStaIface(const hidl_string& ifname, - getStaIface_cb hidl_status_cb) override; - Return<void> removeStaIface(const hidl_string& ifname, - removeStaIface_cb hidl_status_cb) override; - Return<void> createRttController( - const sp<IWifiIface>& bound_iface, - createRttController_cb hidl_status_cb) override; - Return<void> getDebugRingBuffersStatus( - getDebugRingBuffersStatus_cb hidl_status_cb) override; - Return<void> startLoggingToDebugRingBuffer( - const hidl_string& ring_name, - WifiDebugRingBufferVerboseLevel verbose_level, - uint32_t max_interval_in_sec, uint32_t min_data_size_in_bytes, - startLoggingToDebugRingBuffer_cb hidl_status_cb) override; - Return<void> forceDumpToDebugRingBuffer( - const hidl_string& ring_name, - forceDumpToDebugRingBuffer_cb hidl_status_cb) override; - Return<void> flushRingBufferToFile( - flushRingBufferToFile_cb hidl_status_cb) override; - Return<void> stopLoggingToDebugRingBuffer( - stopLoggingToDebugRingBuffer_cb hidl_status_cb) override; - Return<void> getDebugHostWakeReasonStats( - getDebugHostWakeReasonStats_cb hidl_status_cb) override; - Return<void> enableDebugErrorAlerts( - bool enable, enableDebugErrorAlerts_cb hidl_status_cb) override; - Return<void> selectTxPowerScenario( - V1_1::IWifiChip::TxPowerScenario scenario, - selectTxPowerScenario_cb hidl_status_cb) override; - Return<void> resetTxPowerScenario( - resetTxPowerScenario_cb hidl_status_cb) override; - Return<void> setLatencyMode(LatencyMode mode, - setLatencyMode_cb hidl_status_cb) override; - Return<void> registerEventCallback_1_2( - const sp<V1_2::IWifiChipEventCallback>& event_callback, - registerEventCallback_1_2_cb hidl_status_cb) override; - Return<void> selectTxPowerScenario_1_2( - TxPowerScenario scenario, - selectTxPowerScenario_cb hidl_status_cb) override; - Return<void> getCapabilities_1_3( - getCapabilities_cb hidl_status_cb) override; - Return<void> getCapabilities_1_5( - getCapabilities_1_5_cb hidl_status_cb) override; - Return<void> debug(const hidl_handle& handle, - const hidl_vec<hidl_string>& options) override; - Return<void> createRttController_1_4( - const sp<IWifiIface>& bound_iface, - createRttController_1_4_cb hidl_status_cb) override; - Return<void> registerEventCallback_1_4( - const sp<V1_4::IWifiChipEventCallback>& event_callback, - registerEventCallback_1_4_cb hidl_status_cb) override; - Return<void> setMultiStaPrimaryConnection( - const hidl_string& ifname, - setMultiStaPrimaryConnection_cb hidl_status_cb) override; - Return<void> setMultiStaUseCase( - MultiStaUseCase use_case, - setMultiStaUseCase_cb hidl_status_cb) override; - Return<void> setCoexUnsafeChannels( - const hidl_vec<CoexUnsafeChannel>& unsafe_channels, - hidl_bitfield<IfaceType> restrictions, - setCoexUnsafeChannels_cb hidl_status_cb) override; - Return<void> setCountryCode(const hidl_array<int8_t, 2>& code, - setCountryCode_cb _hidl_cb) override; - Return<void> getUsableChannels( - WifiBand band, hidl_bitfield<WifiIfaceMode> ifaceModeMask, - hidl_bitfield<UsableChannelFilter> filterMask, - getUsableChannels_cb _hidl_cb) override; - Return<void> triggerSubsystemRestart( - triggerSubsystemRestart_cb hidl_status_cb) override; - - private: - void invalidateAndRemoveAllIfaces(); - // When a STA iface is removed any dependent NAN-ifaces/RTT-controllers are - // invalidated & removed. - void invalidateAndRemoveDependencies(const std::string& removed_iface_name); - - // Corresponding worker functions for the HIDL methods. - std::pair<WifiStatus, ChipId> getIdInternal(); - // Deprecated support for this callback - WifiStatus registerEventCallbackInternal( - const sp<V1_0::IWifiChipEventCallback>& event_callback); - std::pair<WifiStatus, uint32_t> getCapabilitiesInternal(); - std::pair<WifiStatus, std::vector<ChipMode>> getAvailableModesInternal(); - WifiStatus configureChipInternal( - std::unique_lock<std::recursive_mutex>* lock, ChipModeId mode_id); - std::pair<WifiStatus, uint32_t> getModeInternal(); - std::pair<WifiStatus, IWifiChip::ChipDebugInfo> - requestChipDebugInfoInternal(); - std::pair<WifiStatus, std::vector<uint8_t>> - requestDriverDebugDumpInternal(); - std::pair<WifiStatus, std::vector<uint8_t>> - requestFirmwareDebugDumpInternal(); - sp<WifiApIface> newWifiApIface(std::string& ifname); - WifiStatus createVirtualApInterface(const std::string& apVirtIf); - std::pair<WifiStatus, sp<V1_5::IWifiApIface>> createApIfaceInternal(); - std::pair<WifiStatus, sp<V1_5::IWifiApIface>> - createBridgedApIfaceInternal(); - std::pair<WifiStatus, std::vector<hidl_string>> getApIfaceNamesInternal(); - std::pair<WifiStatus, sp<V1_5::IWifiApIface>> getApIfaceInternal( - const std::string& ifname); - WifiStatus removeApIfaceInternal(const std::string& ifname); - WifiStatus removeIfaceInstanceFromBridgedApIfaceInternal( - const std::string& brIfaceName, const std::string& ifInstanceName); - std::pair<WifiStatus, sp<V1_4::IWifiNanIface>> createNanIfaceInternal(); - std::pair<WifiStatus, std::vector<hidl_string>> getNanIfaceNamesInternal(); - std::pair<WifiStatus, sp<V1_4::IWifiNanIface>> getNanIfaceInternal( - const std::string& ifname); - WifiStatus removeNanIfaceInternal(const std::string& ifname); - std::pair<WifiStatus, sp<IWifiP2pIface>> createP2pIfaceInternal(); - std::pair<WifiStatus, std::vector<hidl_string>> getP2pIfaceNamesInternal(); - std::pair<WifiStatus, sp<IWifiP2pIface>> getP2pIfaceInternal( - const std::string& ifname); - WifiStatus removeP2pIfaceInternal(const std::string& ifname); - std::pair<WifiStatus, sp<V1_5::IWifiStaIface>> createStaIfaceInternal(); - std::pair<WifiStatus, std::vector<hidl_string>> getStaIfaceNamesInternal(); - std::pair<WifiStatus, sp<V1_5::IWifiStaIface>> getStaIfaceInternal( - const std::string& ifname); - WifiStatus removeStaIfaceInternal(const std::string& ifname); - std::pair<WifiStatus, sp<V1_0::IWifiRttController>> - createRttControllerInternal(const sp<IWifiIface>& bound_iface); - std::pair<WifiStatus, std::vector<WifiDebugRingBufferStatus>> - getDebugRingBuffersStatusInternal(); - WifiStatus startLoggingToDebugRingBufferInternal( - const hidl_string& ring_name, - WifiDebugRingBufferVerboseLevel verbose_level, - uint32_t max_interval_in_sec, uint32_t min_data_size_in_bytes); - WifiStatus forceDumpToDebugRingBufferInternal(const hidl_string& ring_name); - WifiStatus flushRingBufferToFileInternal(); - WifiStatus stopLoggingToDebugRingBufferInternal(); - std::pair<WifiStatus, WifiDebugHostWakeReasonStats> - getDebugHostWakeReasonStatsInternal(); - WifiStatus enableDebugErrorAlertsInternal(bool enable); - WifiStatus selectTxPowerScenarioInternal( - V1_1::IWifiChip::TxPowerScenario scenario); - WifiStatus resetTxPowerScenarioInternal(); - WifiStatus setLatencyModeInternal(LatencyMode mode); - WifiStatus registerEventCallbackInternal_1_2( - const sp<V1_2::IWifiChipEventCallback>& event_callback); - WifiStatus selectTxPowerScenarioInternal_1_2(TxPowerScenario scenario); - std::pair<WifiStatus, uint32_t> getCapabilitiesInternal_1_3(); - std::pair<WifiStatus, uint32_t> getCapabilitiesInternal_1_5(); - std::pair<WifiStatus, sp<V1_4::IWifiRttController>> - createRttControllerInternal_1_4(const sp<IWifiIface>& bound_iface); - WifiStatus registerEventCallbackInternal_1_4( - const sp<V1_4::IWifiChipEventCallback>& event_callback); - WifiStatus setMultiStaPrimaryConnectionInternal(const std::string& ifname); - WifiStatus setMultiStaUseCaseInternal(MultiStaUseCase use_case); - WifiStatus setCoexUnsafeChannelsInternal( - std::vector<CoexUnsafeChannel> unsafe_channels, uint32_t restrictions); - WifiStatus setCountryCodeInternal(const std::array<int8_t, 2>& code); - std::pair<WifiStatus, std::vector<WifiUsableChannel>> - getUsableChannelsInternal(WifiBand band, uint32_t ifaceModeMask, - uint32_t filterMask); - WifiStatus handleChipConfiguration( - std::unique_lock<std::recursive_mutex>* lock, ChipModeId mode_id); - WifiStatus registerDebugRingBufferCallback(); - WifiStatus registerRadioModeChangeCallback(); - - std::vector<V1_4::IWifiChip::ChipIfaceCombination> - getCurrentModeIfaceCombinations(); - std::map<IfaceType, size_t> getCurrentIfaceCombination(); - std::vector<std::map<IfaceType, size_t>> expandIfaceCombinations( - const V1_4::IWifiChip::ChipIfaceCombination& combination); - bool canExpandedIfaceComboSupportIfaceOfTypeWithCurrentIfaces( - const std::map<IfaceType, size_t>& expanded_combo, - IfaceType requested_type); - bool canCurrentModeSupportIfaceOfTypeWithCurrentIfaces( - IfaceType requested_type); - bool canExpandedIfaceComboSupportIfaceCombo( - const std::map<IfaceType, size_t>& expanded_combo, - const std::map<IfaceType, size_t>& req_combo); - bool canCurrentModeSupportIfaceCombo( - const std::map<IfaceType, size_t>& req_combo); - bool canCurrentModeSupportIfaceOfType(IfaceType requested_type); - bool isValidModeId(ChipModeId mode_id); - bool isStaApConcurrencyAllowedInCurrentMode(); - bool isDualStaConcurrencyAllowedInCurrentMode(); - uint32_t startIdxOfApIface(); - std::string getFirstActiveWlanIfaceName(); - std::string allocateApOrStaIfaceName(IfaceType type, uint32_t start_idx); - std::string allocateApIfaceName(); - std::vector<std::string> allocateBridgedApInstanceNames(); - std::string allocateStaIfaceName(); - bool writeRingbufferFilesInternal(); - std::string getWlanIfaceNameWithType(IfaceType type, unsigned idx); - void invalidateAndClearBridgedApAll(); - void invalidateAndClearBridgedAp(const std::string& br_name); - bool findUsingNameFromBridgedApInstances(const std::string& name); - WifiStatus triggerSubsystemRestartInternal(); - void QcRemoveAndClearDynamicIfaces(); - - ChipId chip_id_; - std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal_; - std::weak_ptr<mode_controller::WifiModeController> mode_controller_; - std::shared_ptr<iface_util::WifiIfaceUtil> iface_util_; - std::vector<sp<WifiApIface>> ap_ifaces_; - std::vector<sp<WifiNanIface>> nan_ifaces_; - std::vector<sp<WifiP2pIface>> p2p_ifaces_; - std::vector<sp<WifiStaIface>> sta_ifaces_; - std::vector<sp<WifiRttController>> rtt_controllers_; - std::map<std::string, Ringbuffer> ringbuffer_map_; - bool is_valid_; - // Members pertaining to chip configuration. - uint32_t current_mode_id_; - std::mutex lock_t; - std::vector<V1_4::IWifiChip::ChipMode> modes_; - // The legacy ring buffer callback API has only a global callback - // registration mechanism. Use this to check if we have already - // registered a callback. - bool debug_ring_buffer_cb_registered_; - hidl_callback_util::HidlCallbackHandler<V1_4::IWifiChipEventCallback> - event_cb_handler_; - - const std::function<void(const std::string&)> subsystemCallbackHandler_; - std::map<std::string, std::vector<std::string>> br_ifaces_ap_instances_; - - std::vector<sp<WifiApIface>> created_ap_ifaces_; - std::vector<sp<WifiStaIface>> created_sta_ifaces_; - - DISALLOW_COPY_AND_ASSIGN(WifiChip); -}; - -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android - -#endif // WIFI_CHIP_H_ diff --git a/wifi/1.5/default/wifi_feature_flags.cpp b/wifi/1.5/default/wifi_feature_flags.cpp deleted file mode 100644 index 293563e3ac..0000000000 --- a/wifi/1.5/default/wifi_feature_flags.cpp +++ /dev/null @@ -1,284 +0,0 @@ -/* - * Copyright (C) 2016 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include <string> - -#include <android-base/logging.h> -#include <cutils/properties.h> - -#include "wifi_feature_flags.h" - -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { -namespace feature_flags { - -using V1_0::ChipModeId; -using V1_0::IfaceType; -using V1_0::IWifiChip; - -/* The chip may either have a single mode supporting any number of combinations, - * or a fixed dual-mode (so it involves firmware loading to switch between - * modes) setting. If there is a need to support more modes, it needs to be - * implemented manually in WiFi HAL (see changeFirmwareMode in - * WifiChip::handleChipConfiguration). - * - * Supported combinations are defined in device's makefile, for example: - * WIFI_HAL_INTERFACE_COMBINATIONS := {{{STA, AP}, 1}, {{P2P, NAN}, 1}}, - * WIFI_HAL_INTERFACE_COMBINATIONS += {{{STA}, 1}, {{AP}, 2}} - * What means: - * Interface combination 1: 1 STA or AP and 1 P2P or NAN concurrent iface - * operations. - * Interface combination 2: 1 STA and 2 AP concurrent iface operations. - * - * For backward compatibility, the following makefile flags can be used to - * generate combinations list: - * - WIFI_HIDL_FEATURE_DUAL_INTERFACE - * - WIFI_HIDL_FEATURE_DISABLE_AP - * - WIFI_HIDL_FEATURE_AWARE - * However, they are ignored if WIFI_HAL_INTERFACE_COMBINATIONS was provided. - * With WIFI_HIDL_FEATURE_DUAL_INTERFACE flag set, there is a single mode with - * two interface combinations: - * Interface Combination 1: Will support 1 STA and 1 P2P or NAN (optional) - * concurrent iface operations. - * Interface Combination 2: Will support 1 STA and 1 AP concurrent - * iface operations. - * - * The only dual-mode configuration supported is for alternating STA and AP - * mode, that may involve firmware reloading. In such case, there are 2 separate - * modes of operation with 1 interface combination each: - * Mode 1 (STA mode): Will support 1 STA and 1 P2P or NAN (optional) - * concurrent iface operations. - * Mode 2 (AP mode): Will support 1 AP iface operation. - * - * If Aware is enabled, the iface combination will be modified to support either - * P2P or NAN in place of just P2P. - */ -// clang-format off -#ifdef WIFI_HAL_INTERFACE_COMBINATIONS -constexpr ChipModeId kMainModeId = chip_mode_ids::kV3; -#elif defined(WIFI_HIDL_FEATURE_DUAL_INTERFACE) -// former V2 (fixed dual interface) setup expressed as V3 -constexpr ChipModeId kMainModeId = chip_mode_ids::kV3; -# ifdef WIFI_HIDL_FEATURE_DISABLE_AP -# ifdef WIFI_HIDL_FEATURE_AWARE -// 1 STA + 1 of (P2P or NAN) -# define WIFI_HAL_INTERFACE_COMBINATIONS {{{STA}, 1}, {{P2P, NAN}, 1}} -# else -// 1 STA + 1 P2P -# define WIFI_HAL_INTERFACE_COMBINATIONS {{{STA}, 1}, {{P2P}, 1}} -# endif -# else -# if defined(QC_WIFI_HIDL_FEATURE_DUAL_AP) && defined(QC_WIFI_HIDL_FEATURE_DUAL_STA) -# ifdef WIFI_HIDL_FEATURE_AWARE -// (1 STA + 1 AP) or (1 STA + 1 of (P2P or NAN)) or (2 AP) or (2 STA) -# define WIFI_HAL_INTERFACE_COMBINATIONS {{{STA}, 1}, {{AP}, 1}},\ - {{{STA}, 1}, {{P2P, NAN}, 1}},\ - {{{AP}, 2}},\ - {{{STA}, 2}} -# else -// (1 STA + 1 AP) or (1 STA + 1 P2P) or (2 AP) or (2 STA) -# define WIFI_HAL_INTERFACE_COMBINATIONS {{{STA}, 1}, {{AP}, 1}},\ - {{{STA}, 1}, {{P2P}, 1}},\ - {{{AP}, 2}},\ - {{{STA}, 2}} -# endif -# elif defined(QC_WIFI_HIDL_FEATURE_DUAL_AP) -# ifdef WIFI_HIDL_FEATURE_AWARE -// (1 STA + 1 AP) or (1 STA + 1 of (P2P or NAN)) or (2 AP) -# define WIFI_HAL_INTERFACE_COMBINATIONS {{{STA}, 1}, {{AP}, 1}},\ - {{{STA}, 1}, {{P2P, NAN}, 1}},\ - {{{AP}, 2}} -# else -// (1 STA + 1 AP) or (1 STA + 1 P2P) or (2 AP) -# define WIFI_HAL_INTERFACE_COMBINATIONS {{{STA}, 1}, {{AP}, 1}},\ - {{{STA}, 1}, {{P2P}, 1}},\ - {{{AP}, 2}} -# endif -# elif defined(QC_WIFI_HIDL_FEATURE_DUAL_STA) -# ifdef WIFI_HIDL_FEATURE_AWARE -// (1 STA + 1 AP) or (1 STA + 1 of (P2P or NAN)) or (2 STA) -# define WIFI_HAL_INTERFACE_COMBINATIONS {{{STA}, 1}, {{AP}, 1}},\ - {{{STA}, 1}, {{P2P, NAN}, 1}},\ - {{{STA}, 2}} -# else -// (1 STA + 1 AP) or (1 STA + 1 P2P) or (2 STA) -# define WIFI_HAL_INTERFACE_COMBINATIONS {{{STA}, 1}, {{AP}, 1}},\ - {{{STA}, 1}, {{P2P}, 1}},\ - {{{STA}, 2}} -# endif -# else -# ifdef WIFI_HIDL_FEATURE_AWARE -// (1 STA + 1 AP) or (1 STA + 1 of (P2P or NAN)) -# define WIFI_HAL_INTERFACE_COMBINATIONS {{{STA}, 1}, {{AP}, 1}},\ - {{{STA}, 1}, {{P2P, NAN}, 1}} -# else -// (1 STA + 1 AP) or (1 STA + 1 P2P) -# define WIFI_HAL_INTERFACE_COMBINATIONS {{{STA}, 1}, {{AP}, 1}},\ - {{{STA}, 1}, {{P2P}, 1}} -# endif -# endif -# endif -#else -// V1 (fixed single interface, dual-mode chip) -constexpr ChipModeId kMainModeId = chip_mode_ids::kV1Sta; -# ifdef WIFI_HIDL_FEATURE_AWARE -// 1 STA + 1 of (P2P or NAN) -# define WIFI_HAL_INTERFACE_COMBINATIONS {{{STA}, 1}, {{P2P, NAN}, 1}} -# else -// 1 STA + 1 P2P -# define WIFI_HAL_INTERFACE_COMBINATIONS {{{STA}, 1}, {{P2P}, 1}} -# endif - -# ifndef WIFI_HIDL_FEATURE_DISABLE_AP -# define WIFI_HAL_INTERFACE_COMBINATIONS_AP {{{AP}, 1}} -# endif -#endif -// clang-format on - -/** - * Helper class to convert a collection of combination limits to a combination. - * - * The main point here is to simplify the syntax required by - * WIFI_HAL_INTERFACE_COMBINATIONS. - */ -struct ChipIfaceCombination - : public hidl_vec<IWifiChip::ChipIfaceCombinationLimit> { - ChipIfaceCombination( - const std::initializer_list<IWifiChip::ChipIfaceCombinationLimit> list) - : hidl_vec(list) {} - - operator IWifiChip::ChipIfaceCombination() const { return {*this}; } - - static hidl_vec<IWifiChip::ChipIfaceCombination> make_vec( - const std::initializer_list<ChipIfaceCombination> list) { - return hidl_vec<IWifiChip::ChipIfaceCombination>( // - std::begin(list), std::end(list)); - } -}; - -#define STA IfaceType::STA -#define AP IfaceType::AP -#define P2P IfaceType::P2P -#define NAN IfaceType::NAN -static const std::vector<IWifiChip::ChipMode> kChipModesPrimary{ - {kMainModeId, - ChipIfaceCombination::make_vec({WIFI_HAL_INTERFACE_COMBINATIONS})}, -#ifdef WIFI_HAL_INTERFACE_COMBINATIONS_AP - {chip_mode_ids::kV1Ap, - ChipIfaceCombination::make_vec({WIFI_HAL_INTERFACE_COMBINATIONS_AP})}, -#endif -}; - -static const std::vector<IWifiChip::ChipMode> kChipModesSecondary{ -#ifdef WIFI_HAL_INTERFACE_COMBINATIONS_SECONDARY_CHIP - {chip_mode_ids::kV3, ChipIfaceCombination::make_vec( - {WIFI_HAL_INTERFACE_COMBINATIONS_SECONDARY_CHIP})}, -#endif -}; - -constexpr char kDebugPresetInterfaceCombinationIdxProperty[] = - "persist.vendor.debug.wifi.hal.preset_interface_combination_idx"; -// List of pre-defined interface combinations that can be enabled at runtime via -// setting the property: "kDebugPresetInterfaceCombinationIdxProperty" to the -// corresponding index value. -static const std::vector<std::pair<std::string, std::vector<IWifiChip::ChipMode>>> kDebugChipModes{ - // Legacy combination - No STA/AP concurrencies. - // 0 - (1 AP) or (1 STA + 1 of (P2P or NAN)) - {"No STA/AP Concurrency", - {{kMainModeId, - ChipIfaceCombination::make_vec({{{{AP}, 1}}, {{{STA}, 1}, {{P2P, NAN}, 1}}})}}}, - - // STA + AP concurrency - // 1 - (1 STA + 1 AP) or (1 STA + 1 of (P2P or NAN)) - {"STA + AP Concurrency", - {{kMainModeId, ChipIfaceCombination::make_vec( - {{{{STA}, 1}, {{AP}, 1}}, {{{STA}, 1}, {{P2P, NAN}, 1}}})}}}, - - // STA + STA concurrency - // 2 - (1 STA + 1 AP) or (2 STA + 1 of (P2P or NAN)) - {"Dual STA Concurrency", - {{kMainModeId, ChipIfaceCombination::make_vec( - {{{{STA}, 1}, {{AP}, 1}}, {{{STA}, 2}, {{P2P, NAN}, 1}}})}}}, - - // AP + AP + STA concurrency - // 3 - (1 STA + 2 AP) or (1 STA + 1 of (P2P or NAN)) - {"Dual AP Concurrency", - {{kMainModeId, ChipIfaceCombination::make_vec( - {{{{STA}, 1}, {{AP}, 2}}, {{{STA}, 1}, {{P2P, NAN}, 1}}})}}}, - - // STA + STA concurrency and AP + AP + STA concurrency - // 4 - (1 STA + 2 AP) or (2 STA + 1 of (P2P or NAN)) - {"Dual STA & Dual AP Concurrency", - {{kMainModeId, ChipIfaceCombination::make_vec( - {{{{STA}, 1}, {{AP}, 2}}, {{{STA}, 2}, {{P2P, NAN}, 1}}})}}}, - - // STA + STA concurrency - // 5 - (1 STA + 1 AP (bridged or single) | P2P | NAN), or (2 STA)) - {"Dual STA or STA plus single other interface", - {{kMainModeId, - ChipIfaceCombination::make_vec({{{{STA}, 1}, {{P2P, NAN, AP}, 1}}, {{{STA}, 2}}})}}}}; - -#undef STA -#undef AP -#undef P2P -#undef NAN - -#ifdef WIFI_HIDL_FEATURE_DISABLE_AP_MAC_RANDOMIZATION -#pragma message \ - "WIFI_HIDL_FEATURE_DISABLE_AP_MAC_RANDOMIZATION is deprecated; override " \ - "'config_wifi_ap_randomization_supported' in " \ - "frameworks/base/core/res/res/values/config.xml in the device overlay " \ - "instead" -#endif // WIFI_HIDL_FEATURE_DISABLE_AP_MAC_RANDOMIZATION - -WifiFeatureFlags::WifiFeatureFlags() {} - -std::vector<IWifiChip::ChipMode> WifiFeatureFlags::getChipModesForPrimary() { - std::array<char, PROPERTY_VALUE_MAX> buffer; - auto res = property_get(kDebugPresetInterfaceCombinationIdxProperty, - buffer.data(), nullptr); - // Debug propety not set, use the device preset interface combination. - if (res <= 0) return kChipModesPrimary; - - // Debug propety set, use one of the debug preset interface combination. - unsigned long idx = std::stoul(buffer.data()); - if (idx >= kDebugChipModes.size()) { - LOG(ERROR) << "Invalid index set in property: " - << kDebugPresetInterfaceCombinationIdxProperty; - return kChipModesPrimary; - } - std::string name; - std::vector<IWifiChip::ChipMode> chip_modes; - std::tie(name, chip_modes) = kDebugChipModes[idx]; - LOG(INFO) << "Using debug chip mode: <" << name << "> set via property: " - << kDebugPresetInterfaceCombinationIdxProperty; - return chip_modes; -} - -std::vector<IWifiChip::ChipMode> WifiFeatureFlags::getChipModes( - bool is_primary) { - return (is_primary) ? getChipModesForPrimary() : kChipModesSecondary; -} - -} // namespace feature_flags -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android diff --git a/wifi/1.5/default/wifi_feature_flags.h b/wifi/1.5/default/wifi_feature_flags.h deleted file mode 100644 index 7d561fc949..0000000000 --- a/wifi/1.5/default/wifi_feature_flags.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (C) 2016 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef WIFI_FEATURE_FLAGS_H_ -#define WIFI_FEATURE_FLAGS_H_ - -#include <android/hardware/wifi/1.2/IWifiChip.h> - -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { -namespace feature_flags { - -namespace chip_mode_ids { -// These mode ID's should be unique (even across combo versions). Refer to -// handleChipConfiguration() for it's usage. -constexpr V1_0::ChipModeId kInvalid = UINT32_MAX; -// Mode ID's for V1 -constexpr V1_0::ChipModeId kV1Sta = 0; -constexpr V1_0::ChipModeId kV1Ap = 1; -// Mode ID for V3 -constexpr V1_0::ChipModeId kV3 = 3; -} // namespace chip_mode_ids - -class WifiFeatureFlags { - public: - WifiFeatureFlags(); - virtual ~WifiFeatureFlags() = default; - - virtual std::vector<V1_0::IWifiChip::ChipMode> getChipModes( - bool is_primary); - - private: - std::vector<V1_0::IWifiChip::ChipMode> getChipModesForPrimary(); -}; - -} // namespace feature_flags -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android - -#endif // WIFI_FEATURE_FLAGS_H_ diff --git a/wifi/1.5/default/wifi_iface_util.cpp b/wifi/1.5/default/wifi_iface_util.cpp deleted file mode 100644 index f1c182fc7d..0000000000 --- a/wifi/1.5/default/wifi_iface_util.cpp +++ /dev/null @@ -1,196 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include <net/if.h> -#include <cstddef> -#include <iostream> -#include <limits> -#include <random> - -#include <android-base/logging.h> -#include <android-base/macros.h> -#include <private/android_filesystem_config.h> - -#undef NAN -#include "wifi_iface_util.h" - -namespace { -// Constants to set the local bit & clear the multicast bit. -constexpr uint8_t kMacAddressMulticastMask = 0x01; -constexpr uint8_t kMacAddressLocallyAssignedMask = 0x02; -} // namespace - -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { -namespace iface_util { - -WifiIfaceUtil::WifiIfaceUtil( - const std::weak_ptr<wifi_system::InterfaceTool> iface_tool, - const std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal) - : iface_tool_(iface_tool), - legacy_hal_(legacy_hal), - random_mac_address_index_(0), - event_handlers_map_() { - for (int i=0; i < MAX_RANDOM_MAC_ADDR_INDEX; i++) - random_mac_address_[i] = nullptr; -} - -std::array<uint8_t, 6> WifiIfaceUtil::getFactoryMacAddress( - const std::string& iface_name) { - return iface_tool_.lock()->GetFactoryMacAddress(iface_name.c_str()); -} - -bool WifiIfaceUtil::setMacAddress(const std::string& iface_name, - const std::array<uint8_t, 6>& mac) { -#ifndef WIFI_AVOID_IFACE_RESET_MAC_CHANGE - legacy_hal::wifi_error legacy_status; - uint64_t legacy_feature_set; - std::tie(legacy_status, legacy_feature_set) = - legacy_hal_.lock()->getSupportedFeatureSet(iface_name); - - if (!(legacy_feature_set & WIFI_FEATURE_DYNAMIC_SET_MAC) && - !iface_tool_.lock()->SetUpState(iface_name.c_str(), false)) { - LOG(ERROR) << "SetUpState(false) failed."; - return false; - } -#endif - bool success = iface_tool_.lock()->SetMacAddress(iface_name.c_str(), mac); -#ifndef WIFI_AVOID_IFACE_RESET_MAC_CHANGE - if (!(legacy_feature_set & WIFI_FEATURE_DYNAMIC_SET_MAC) && - !iface_tool_.lock()->SetUpState(iface_name.c_str(), true)) { - LOG(ERROR) << "SetUpState(true) failed. Wait for driver ready."; - // Wait for driver ready and try to set iface UP again - if (legacy_hal_.lock()->waitForDriverReady() != - legacy_hal::WIFI_SUCCESS) { - LOG(ERROR) << "SetUpState(true) wait for driver ready failed."; - return false; - } - if (!iface_tool_.lock()->SetUpState(iface_name.c_str(), true)) { - LOG(ERROR) << "SetUpState(true) failed after retry."; - return false; - } - } -#endif - IfaceEventHandlers event_handlers = {}; - const auto it = event_handlers_map_.find(iface_name); - if (it != event_handlers_map_.end()) { - event_handlers = it->second; - } - if (event_handlers.on_state_toggle_off_on != nullptr) { - event_handlers.on_state_toggle_off_on(iface_name); - } - if (!success) { - LOG(ERROR) << "SetMacAddress failed on " << iface_name; - } else { - LOG(DEBUG) << "SetMacAddress succeeded on " << iface_name; - } - return success; -} - -void WifiIfaceUtil::setRandomMacAddressIndex(int idx) { - if (idx >= MAX_RANDOM_MAC_ADDR_INDEX) { - LOG(ERROR) << "Requested random mac address index crossed max limit!!"; - return; - } - - random_mac_address_index_ = idx; -} - -std::array<uint8_t, 6> WifiIfaceUtil::getOrCreateRandomMacAddress() { - if (random_mac_address_[random_mac_address_index_]) { - return *random_mac_address_[random_mac_address_index_].get(); - } - random_mac_address_[random_mac_address_index_] = - std::make_unique<std::array<uint8_t, 6>>(createRandomMacAddress()); - return *random_mac_address_[random_mac_address_index_].get(); -} - -void WifiIfaceUtil::registerIfaceEventHandlers(const std::string& iface_name, - IfaceEventHandlers handlers) { - event_handlers_map_[iface_name] = handlers; -} - -void WifiIfaceUtil::unregisterIfaceEventHandlers( - const std::string& iface_name) { - event_handlers_map_.erase(iface_name); -} - -std::array<uint8_t, 6> WifiIfaceUtil::createRandomMacAddress() { - std::array<uint8_t, 6> address = {}; - std::random_device rd; - std::default_random_engine engine(rd()); - std::uniform_int_distribution<uint8_t> dist( - std::numeric_limits<uint8_t>::min(), - std::numeric_limits<uint8_t>::max()); - for (size_t i = 0; i < address.size(); i++) { - address[i] = dist(engine); - } - // Set the local bit and clear the multicast bit. - address[0] |= kMacAddressLocallyAssignedMask; - address[0] &= ~kMacAddressMulticastMask; - return address; -} - -bool WifiIfaceUtil::setUpState(const std::string& iface_name, bool request_up) { - if (!iface_tool_.lock()->SetUpState(iface_name.c_str(), request_up)) { - LOG(ERROR) << "SetUpState to " << request_up << " failed"; - return false; - } - return true; -} - -unsigned WifiIfaceUtil::ifNameToIndex(const std::string& iface_name) { - return if_nametoindex(iface_name.c_str()); -} - -bool WifiIfaceUtil::createBridge(const std::string& br_name) { - if (!iface_tool_.lock()->createBridge(br_name)) { - return false; - } - - if (!iface_tool_.lock()->SetUpState(br_name.c_str(), true)) { - LOG(ERROR) << "bridge SetUpState(true) failed."; - } - return true; -} - -bool WifiIfaceUtil::deleteBridge(const std::string& br_name) { - if (!iface_tool_.lock()->SetUpState(br_name.c_str(), false)) { - LOG(INFO) << "SetUpState(false) failed for bridge=" << br_name.c_str(); - } - - return iface_tool_.lock()->deleteBridge(br_name); -} - -bool WifiIfaceUtil::addIfaceToBridge(const std::string& br_name, - const std::string& if_name) { - return iface_tool_.lock()->addIfaceToBridge(br_name, if_name); -} - -bool WifiIfaceUtil::removeIfaceFromBridge(const std::string& br_name, - const std::string& if_name) { - return iface_tool_.lock()->removeIfaceFromBridge(br_name, if_name); -} - -} // namespace iface_util -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android diff --git a/wifi/1.5/default/wifi_iface_util.h b/wifi/1.5/default/wifi_iface_util.h deleted file mode 100644 index cb30ca8f9e..0000000000 --- a/wifi/1.5/default/wifi_iface_util.h +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef WIFI_IFACE_UTIL_H_ -#define WIFI_IFACE_UTIL_H_ - -#define MAX_RANDOM_MAC_ADDR_INDEX 5 - -#include <wifi_system/interface_tool.h> - -#include <android/hardware/wifi/1.0/IWifi.h> - -#include "wifi_legacy_hal.h" - -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { -namespace iface_util { - -// Iface event handlers. -struct IfaceEventHandlers { - // Callback to be invoked when the iface is set down & up for MAC address - // change. - std::function<void(const std::string& iface_name)> on_state_toggle_off_on; -}; - -/** - * Util class for common iface operations. - */ -class WifiIfaceUtil { - public: - WifiIfaceUtil(const std::weak_ptr<wifi_system::InterfaceTool> iface_tool, - const std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal); - virtual ~WifiIfaceUtil() = default; - - virtual std::array<uint8_t, 6> getFactoryMacAddress( - const std::string& iface_name); - virtual bool setMacAddress(const std::string& iface_name, - const std::array<uint8_t, 6>& mac); - // Get or create a random MAC address. The MAC address returned from - // this method will remain the same throughout the lifetime of the HAL - // daemon. (So, changes on every reboot) - virtual std::array<uint8_t, 6> getOrCreateRandomMacAddress(); - - virtual void setRandomMacAddressIndex(int idx); - // Register for any iface event callbacks for the provided interface. - virtual void registerIfaceEventHandlers(const std::string& iface_name, - IfaceEventHandlers handlers); - virtual void unregisterIfaceEventHandlers(const std::string& iface_name); - virtual bool setUpState(const std::string& iface_name, bool request_up); - virtual unsigned ifNameToIndex(const std::string& iface_name); - - virtual bool createBridge(const std::string& br_name); - - virtual bool deleteBridge(const std::string& br_name); - - virtual bool addIfaceToBridge(const std::string& br_name, - const std::string& if_name); - - virtual bool removeIfaceFromBridge(const std::string& br_name, - const std::string& if_name); - // Get a random MAC address. - virtual std::array<uint8_t, 6> createRandomMacAddress(); - - private: - std::weak_ptr<wifi_system::InterfaceTool> iface_tool_; - std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal_; - std::unique_ptr<std::array<uint8_t, 6>> random_mac_address_[MAX_RANDOM_MAC_ADDR_INDEX]; - - int random_mac_address_index_; - std::map<std::string, IfaceEventHandlers> event_handlers_map_; -}; - -} // namespace iface_util -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android - -#endif // WIFI_IFACE_UTIL_H_ diff --git a/wifi/1.5/default/wifi_legacy_hal.cpp b/wifi/1.5/default/wifi_legacy_hal.cpp deleted file mode 100644 index 5074252d3d..0000000000 --- a/wifi/1.5/default/wifi_legacy_hal.cpp +++ /dev/null @@ -1,1725 +0,0 @@ -/* - * Copyright (C) 2016 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include <array> -#include <chrono> - -#include <android-base/logging.h> -#include <cutils/properties.h> -#include <net/if.h> - -#include "hidl_sync_util.h" -#include "wifi_legacy_hal.h" -#include "wifi_legacy_hal_stubs.h" - -namespace { -// Constants ported over from the legacy HAL calling code -// (com_android_server_wifi_WifiNative.cpp). This will all be thrown -// away when this shim layer is replaced by the real vendor -// implementation. -static constexpr uint32_t kMaxVersionStringLength = 256; -static constexpr uint32_t kMaxCachedGscanResults = 64; -static constexpr uint32_t kMaxGscanFrequenciesForBand = 64; -static constexpr uint32_t kLinkLayerStatsDataMpduSizeThreshold = 128; -static constexpr uint32_t kMaxWakeReasonStatsArraySize = 32; -static constexpr uint32_t kMaxRingBuffers = 10; -static constexpr uint32_t kMaxWifiUsableChannels = 256; -// need a long timeout (1000ms) for chips that unload their driver. -static constexpr uint32_t kMaxStopCompleteWaitMs = 1000; -static constexpr char kDriverPropName[] = "wlan.driver.status"; - -// Helper function to create a non-const char* for legacy Hal API's. -std::vector<char> makeCharVec(const std::string& str) { - std::vector<char> vec(str.size() + 1); - vec.assign(str.begin(), str.end()); - vec.push_back('\0'); - return vec; -} -} // namespace - -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { -namespace legacy_hal { - -// Legacy HAL functions accept "C" style function pointers, so use global -// functions to pass to the legacy HAL function and store the corresponding -// std::function methods to be invoked. -// -// Callback to be invoked once |stop| is complete -std::function<void(wifi_handle handle)> on_stop_complete_internal_callback; -void onAsyncStopComplete(wifi_handle handle) { - const auto lock = hidl_sync_util::acquireGlobalLock(); - if (on_stop_complete_internal_callback) { - on_stop_complete_internal_callback(handle); - // Invalidate this callback since we don't want this firing again. - on_stop_complete_internal_callback = nullptr; - } -} - -// Callback to be invoked for driver dump. -std::function<void(char*, int)> on_driver_memory_dump_internal_callback; -void onSyncDriverMemoryDump(char* buffer, int buffer_size) { - if (on_driver_memory_dump_internal_callback) { - on_driver_memory_dump_internal_callback(buffer, buffer_size); - } -} - -// Callback to be invoked for firmware dump. -std::function<void(char*, int)> on_firmware_memory_dump_internal_callback; -void onSyncFirmwareMemoryDump(char* buffer, int buffer_size) { - if (on_firmware_memory_dump_internal_callback) { - on_firmware_memory_dump_internal_callback(buffer, buffer_size); - } -} - -// Callback to be invoked for Gscan events. -std::function<void(wifi_request_id, wifi_scan_event)> - on_gscan_event_internal_callback; -void onAsyncGscanEvent(wifi_request_id id, wifi_scan_event event) { - const auto lock = hidl_sync_util::acquireGlobalLock(); - if (on_gscan_event_internal_callback) { - on_gscan_event_internal_callback(id, event); - } -} - -// Callback to be invoked for Gscan full results. -std::function<void(wifi_request_id, wifi_scan_result*, uint32_t)> - on_gscan_full_result_internal_callback; -void onAsyncGscanFullResult(wifi_request_id id, wifi_scan_result* result, - uint32_t buckets_scanned) { - const auto lock = hidl_sync_util::acquireGlobalLock(); - if (on_gscan_full_result_internal_callback) { - on_gscan_full_result_internal_callback(id, result, buckets_scanned); - } -} - -// Callback to be invoked for link layer stats results. -std::function<void((wifi_request_id, wifi_iface_stat*, int, wifi_radio_stat*))> - on_link_layer_stats_result_internal_callback; -void onSyncLinkLayerStatsResult(wifi_request_id id, wifi_iface_stat* iface_stat, - int num_radios, wifi_radio_stat* radio_stat) { - if (on_link_layer_stats_result_internal_callback) { - on_link_layer_stats_result_internal_callback(id, iface_stat, num_radios, - radio_stat); - } -} - -// Callback to be invoked for rssi threshold breach. -std::function<void((wifi_request_id, uint8_t*, int8_t))> - on_rssi_threshold_breached_internal_callback; -void onAsyncRssiThresholdBreached(wifi_request_id id, uint8_t* bssid, - int8_t rssi) { - const auto lock = hidl_sync_util::acquireGlobalLock(); - if (on_rssi_threshold_breached_internal_callback) { - on_rssi_threshold_breached_internal_callback(id, bssid, rssi); - } -} - -// Callback to be invoked for ring buffer data indication. -std::function<void(char*, char*, int, wifi_ring_buffer_status*)> - on_ring_buffer_data_internal_callback; -void onAsyncRingBufferData(char* ring_name, char* buffer, int buffer_size, - wifi_ring_buffer_status* status) { - const auto lock = hidl_sync_util::acquireGlobalLock(); - if (on_ring_buffer_data_internal_callback) { - on_ring_buffer_data_internal_callback(ring_name, buffer, buffer_size, - status); - } -} - -// Callback to be invoked for error alert indication. -std::function<void(wifi_request_id, char*, int, int)> - on_error_alert_internal_callback; -void onAsyncErrorAlert(wifi_request_id id, char* buffer, int buffer_size, - int err_code) { - const auto lock = hidl_sync_util::acquireGlobalLock(); - if (on_error_alert_internal_callback) { - on_error_alert_internal_callback(id, buffer, buffer_size, err_code); - } -} - -// Callback to be invoked for radio mode change indication. -std::function<void(wifi_request_id, uint32_t, wifi_mac_info*)> - on_radio_mode_change_internal_callback; -void onAsyncRadioModeChange(wifi_request_id id, uint32_t num_macs, - wifi_mac_info* mac_infos) { - const auto lock = hidl_sync_util::acquireGlobalLock(); - if (on_radio_mode_change_internal_callback) { - on_radio_mode_change_internal_callback(id, num_macs, mac_infos); - } -} - -// Callback to be invoked to report subsystem restart -std::function<void(const char*)> on_subsystem_restart_internal_callback; -void onAsyncSubsystemRestart(const char* error) { - const auto lock = hidl_sync_util::acquireGlobalLock(); - if (on_subsystem_restart_internal_callback) { - on_subsystem_restart_internal_callback(error); - } -} - -// Callback to be invoked for rtt results results. -std::function<void(wifi_request_id, unsigned num_results, - wifi_rtt_result* rtt_results[])> - on_rtt_results_internal_callback; -void onAsyncRttResults(wifi_request_id id, unsigned num_results, - wifi_rtt_result* rtt_results[]) { - const auto lock = hidl_sync_util::acquireGlobalLock(); - if (on_rtt_results_internal_callback) { - on_rtt_results_internal_callback(id, num_results, rtt_results); - on_rtt_results_internal_callback = nullptr; - } -} - -// Callbacks for the various NAN operations. -// NOTE: These have very little conversions to perform before invoking the user -// callbacks. -// So, handle all of them here directly to avoid adding an unnecessary layer. -std::function<void(transaction_id, const NanResponseMsg&)> - on_nan_notify_response_user_callback; -void onAysncNanNotifyResponse(transaction_id id, NanResponseMsg* msg) { - const auto lock = hidl_sync_util::acquireGlobalLock(); - if (on_nan_notify_response_user_callback && msg) { - on_nan_notify_response_user_callback(id, *msg); - } -} - -std::function<void(const NanPublishRepliedInd&)> - on_nan_event_publish_replied_user_callback; -void onAysncNanEventPublishReplied(NanPublishRepliedInd* /* event */) { - LOG(ERROR) << "onAysncNanEventPublishReplied triggered"; -} - -std::function<void(const NanPublishTerminatedInd&)> - on_nan_event_publish_terminated_user_callback; -void onAysncNanEventPublishTerminated(NanPublishTerminatedInd* event) { - const auto lock = hidl_sync_util::acquireGlobalLock(); - if (on_nan_event_publish_terminated_user_callback && event) { - on_nan_event_publish_terminated_user_callback(*event); - } -} - -std::function<void(const NanMatchInd&)> on_nan_event_match_user_callback; -void onAysncNanEventMatch(NanMatchInd* event) { - const auto lock = hidl_sync_util::acquireGlobalLock(); - if (on_nan_event_match_user_callback && event) { - on_nan_event_match_user_callback(*event); - } -} - -std::function<void(const NanMatchExpiredInd&)> - on_nan_event_match_expired_user_callback; -void onAysncNanEventMatchExpired(NanMatchExpiredInd* event) { - const auto lock = hidl_sync_util::acquireGlobalLock(); - if (on_nan_event_match_expired_user_callback && event) { - on_nan_event_match_expired_user_callback(*event); - } -} - -std::function<void(const NanSubscribeTerminatedInd&)> - on_nan_event_subscribe_terminated_user_callback; -void onAysncNanEventSubscribeTerminated(NanSubscribeTerminatedInd* event) { - const auto lock = hidl_sync_util::acquireGlobalLock(); - if (on_nan_event_subscribe_terminated_user_callback && event) { - on_nan_event_subscribe_terminated_user_callback(*event); - } -} - -std::function<void(const NanFollowupInd&)> on_nan_event_followup_user_callback; -void onAysncNanEventFollowup(NanFollowupInd* event) { - const auto lock = hidl_sync_util::acquireGlobalLock(); - if (on_nan_event_followup_user_callback && event) { - on_nan_event_followup_user_callback(*event); - } -} - -std::function<void(const NanDiscEngEventInd&)> - on_nan_event_disc_eng_event_user_callback; -void onAysncNanEventDiscEngEvent(NanDiscEngEventInd* event) { - const auto lock = hidl_sync_util::acquireGlobalLock(); - if (on_nan_event_disc_eng_event_user_callback && event) { - on_nan_event_disc_eng_event_user_callback(*event); - } -} - -std::function<void(const NanDisabledInd&)> on_nan_event_disabled_user_callback; -void onAysncNanEventDisabled(NanDisabledInd* event) { - const auto lock = hidl_sync_util::acquireGlobalLock(); - if (on_nan_event_disabled_user_callback && event) { - on_nan_event_disabled_user_callback(*event); - } -} - -std::function<void(const NanTCAInd&)> on_nan_event_tca_user_callback; -void onAysncNanEventTca(NanTCAInd* event) { - const auto lock = hidl_sync_util::acquireGlobalLock(); - if (on_nan_event_tca_user_callback && event) { - on_nan_event_tca_user_callback(*event); - } -} - -std::function<void(const NanBeaconSdfPayloadInd&)> - on_nan_event_beacon_sdf_payload_user_callback; -void onAysncNanEventBeaconSdfPayload(NanBeaconSdfPayloadInd* event) { - const auto lock = hidl_sync_util::acquireGlobalLock(); - if (on_nan_event_beacon_sdf_payload_user_callback && event) { - on_nan_event_beacon_sdf_payload_user_callback(*event); - } -} - -std::function<void(const NanDataPathRequestInd&)> - on_nan_event_data_path_request_user_callback; -void onAysncNanEventDataPathRequest(NanDataPathRequestInd* event) { - const auto lock = hidl_sync_util::acquireGlobalLock(); - if (on_nan_event_data_path_request_user_callback && event) { - on_nan_event_data_path_request_user_callback(*event); - } -} -std::function<void(const NanDataPathConfirmInd&)> - on_nan_event_data_path_confirm_user_callback; -void onAysncNanEventDataPathConfirm(NanDataPathConfirmInd* event) { - const auto lock = hidl_sync_util::acquireGlobalLock(); - if (on_nan_event_data_path_confirm_user_callback && event) { - on_nan_event_data_path_confirm_user_callback(*event); - } -} - -std::function<void(const NanDataPathEndInd&)> - on_nan_event_data_path_end_user_callback; -void onAysncNanEventDataPathEnd(NanDataPathEndInd* event) { - const auto lock = hidl_sync_util::acquireGlobalLock(); - if (on_nan_event_data_path_end_user_callback && event) { - on_nan_event_data_path_end_user_callback(*event); - } -} - -std::function<void(const NanTransmitFollowupInd&)> - on_nan_event_transmit_follow_up_user_callback; -void onAysncNanEventTransmitFollowUp(NanTransmitFollowupInd* event) { - const auto lock = hidl_sync_util::acquireGlobalLock(); - if (on_nan_event_transmit_follow_up_user_callback && event) { - on_nan_event_transmit_follow_up_user_callback(*event); - } -} - -std::function<void(const NanRangeRequestInd&)> - on_nan_event_range_request_user_callback; -void onAysncNanEventRangeRequest(NanRangeRequestInd* event) { - const auto lock = hidl_sync_util::acquireGlobalLock(); - if (on_nan_event_range_request_user_callback && event) { - on_nan_event_range_request_user_callback(*event); - } -} - -std::function<void(const NanRangeReportInd&)> - on_nan_event_range_report_user_callback; -void onAysncNanEventRangeReport(NanRangeReportInd* event) { - const auto lock = hidl_sync_util::acquireGlobalLock(); - if (on_nan_event_range_report_user_callback && event) { - on_nan_event_range_report_user_callback(*event); - } -} - -std::function<void(const NanDataPathScheduleUpdateInd&)> - on_nan_event_schedule_update_user_callback; -void onAsyncNanEventScheduleUpdate(NanDataPathScheduleUpdateInd* event) { - const auto lock = hidl_sync_util::acquireGlobalLock(); - if (on_nan_event_schedule_update_user_callback && event) { - on_nan_event_schedule_update_user_callback(*event); - } -} - -// Callbacks for the various TWT operations. -std::function<void(const TwtSetupResponse&)> - on_twt_event_setup_response_callback; -void onAsyncTwtEventSetupResponse(TwtSetupResponse* event) { - const auto lock = hidl_sync_util::acquireGlobalLock(); - if (on_twt_event_setup_response_callback && event) { - on_twt_event_setup_response_callback(*event); - } -} - -std::function<void(const TwtTeardownCompletion&)> - on_twt_event_teardown_completion_callback; -void onAsyncTwtEventTeardownCompletion(TwtTeardownCompletion* event) { - const auto lock = hidl_sync_util::acquireGlobalLock(); - if (on_twt_event_teardown_completion_callback && event) { - on_twt_event_teardown_completion_callback(*event); - } -} - -std::function<void(const TwtInfoFrameReceived&)> - on_twt_event_info_frame_received_callback; -void onAsyncTwtEventInfoFrameReceived(TwtInfoFrameReceived* event) { - const auto lock = hidl_sync_util::acquireGlobalLock(); - if (on_twt_event_info_frame_received_callback && event) { - on_twt_event_info_frame_received_callback(*event); - } -} - -std::function<void(const TwtDeviceNotify&)> on_twt_event_device_notify_callback; -void onAsyncTwtEventDeviceNotify(TwtDeviceNotify* event) { - const auto lock = hidl_sync_util::acquireGlobalLock(); - if (on_twt_event_device_notify_callback && event) { - on_twt_event_device_notify_callback(*event); - } -} - -// End of the free-standing "C" style callbacks. - -WifiLegacyHal::WifiLegacyHal( - const std::weak_ptr<wifi_system::InterfaceTool> iface_tool, - const wifi_hal_fn& fn, bool is_primary) - : global_func_table_(fn), - global_handle_(nullptr), - awaiting_event_loop_termination_(false), - is_started_(false), - iface_tool_(iface_tool), - is_primary_(is_primary) {} - -wifi_error WifiLegacyHal::initialize() { - LOG(DEBUG) << "Initialize legacy HAL"; - // this now does nothing, since HAL function table is provided - // to the constructor - return WIFI_SUCCESS; -} - -wifi_error WifiLegacyHal::start() { - // Ensure that we're starting in a good state. - CHECK(global_func_table_.wifi_initialize && !global_handle_ && - iface_name_to_handle_.empty() && !awaiting_event_loop_termination_); - if (is_started_) { - LOG(DEBUG) << "Legacy HAL already started"; - return WIFI_SUCCESS; - } - LOG(DEBUG) << "Waiting for the driver ready"; - wifi_error status = global_func_table_.wifi_wait_for_driver_ready(); - if (status == WIFI_ERROR_TIMED_OUT || status == WIFI_ERROR_UNKNOWN) { - LOG(ERROR) << "Failed or timed out awaiting driver ready"; - return status; - } - - if (is_primary_) { - property_set(kDriverPropName, "ok"); - - if (!iface_tool_.lock()->SetWifiUpState(true)) { - LOG(ERROR) << "Failed to set WiFi interface up"; - return WIFI_ERROR_UNKNOWN; - } - } - - LOG(DEBUG) << "Starting legacy HAL"; - status = global_func_table_.wifi_initialize(&global_handle_); - if (status != WIFI_SUCCESS || !global_handle_) { - LOG(ERROR) << "Failed to retrieve global handle"; - return status; - } - std::thread(&WifiLegacyHal::runEventLoop, this).detach(); - status = retrieveIfaceHandles(); - if (status != WIFI_SUCCESS || iface_name_to_handle_.empty()) { - LOG(ERROR) << "Failed to retrieve wlan interface handle"; - return status; - } - LOG(DEBUG) << "Legacy HAL start complete"; - is_started_ = true; - return WIFI_SUCCESS; -} - -wifi_error WifiLegacyHal::stop( - /* NONNULL */ std::unique_lock<std::recursive_mutex>* lock, - const std::function<void()>& on_stop_complete_user_callback) { - if (!is_started_) { - LOG(DEBUG) << "Legacy HAL already stopped"; - on_stop_complete_user_callback(); - return WIFI_SUCCESS; - } - LOG(DEBUG) << "Stopping legacy HAL"; - on_stop_complete_internal_callback = [on_stop_complete_user_callback, - this](wifi_handle handle) { - CHECK_EQ(global_handle_, handle) << "Handle mismatch"; - LOG(INFO) << "Legacy HAL stop complete callback received"; - // Invalidate all the internal pointers now that the HAL is - // stopped. - invalidate(); - if (is_primary_) iface_tool_.lock()->SetWifiUpState(false); - on_stop_complete_user_callback(); - is_started_ = false; - }; - awaiting_event_loop_termination_ = true; - global_func_table_.wifi_cleanup(global_handle_, onAsyncStopComplete); - const auto status = stop_wait_cv_.wait_for( - *lock, std::chrono::milliseconds(kMaxStopCompleteWaitMs), - [this] { return !awaiting_event_loop_termination_; }); - if (!status) { - LOG(ERROR) << "Legacy HAL stop failed or timed out"; - return WIFI_ERROR_UNKNOWN; - } - LOG(DEBUG) << "Legacy HAL stop complete"; - return WIFI_SUCCESS; -} - -bool WifiLegacyHal::isStarted() { return is_started_; } - -wifi_error WifiLegacyHal::waitForDriverReady() { - return global_func_table_.wifi_wait_for_driver_ready(); -} - -std::pair<wifi_error, std::string> WifiLegacyHal::getDriverVersion( - const std::string& iface_name) { - std::array<char, kMaxVersionStringLength> buffer; - buffer.fill(0); - wifi_error status = global_func_table_.wifi_get_driver_version( - getIfaceHandle(iface_name), buffer.data(), buffer.size()); - return {status, buffer.data()}; -} - -std::pair<wifi_error, std::string> WifiLegacyHal::getFirmwareVersion( - const std::string& iface_name) { - std::array<char, kMaxVersionStringLength> buffer; - buffer.fill(0); - wifi_error status = global_func_table_.wifi_get_firmware_version( - getIfaceHandle(iface_name), buffer.data(), buffer.size()); - return {status, buffer.data()}; -} - -std::pair<wifi_error, std::vector<uint8_t>> -WifiLegacyHal::requestDriverMemoryDump(const std::string& iface_name) { - std::vector<uint8_t> driver_dump; - on_driver_memory_dump_internal_callback = [&driver_dump](char* buffer, - int buffer_size) { - driver_dump.insert(driver_dump.end(), - reinterpret_cast<uint8_t*>(buffer), - reinterpret_cast<uint8_t*>(buffer) + buffer_size); - }; - wifi_error status = global_func_table_.wifi_get_driver_memory_dump( - getIfaceHandle(iface_name), {onSyncDriverMemoryDump}); - on_driver_memory_dump_internal_callback = nullptr; - return {status, std::move(driver_dump)}; -} - -std::pair<wifi_error, std::vector<uint8_t>> -WifiLegacyHal::requestFirmwareMemoryDump(const std::string& iface_name) { - std::vector<uint8_t> firmware_dump; - on_firmware_memory_dump_internal_callback = - [&firmware_dump](char* buffer, int buffer_size) { - firmware_dump.insert( - firmware_dump.end(), reinterpret_cast<uint8_t*>(buffer), - reinterpret_cast<uint8_t*>(buffer) + buffer_size); - }; - wifi_error status = global_func_table_.wifi_get_firmware_memory_dump( - getIfaceHandle(iface_name), {onSyncFirmwareMemoryDump}); - on_firmware_memory_dump_internal_callback = nullptr; - return {status, std::move(firmware_dump)}; -} - -std::pair<wifi_error, uint64_t> WifiLegacyHal::getSupportedFeatureSet( - const std::string& iface_name) { - feature_set set = 0, chip_set = 0; - wifi_error status = WIFI_SUCCESS; - - static_assert(sizeof(set) == sizeof(uint64_t), - "Some feature_flags can not be represented in output"); - wifi_interface_handle iface_handle = getIfaceHandle(iface_name); - - global_func_table_.wifi_get_chip_feature_set( - global_handle_, &chip_set); /* ignore error, chip_set will stay 0 */ - - if (iface_handle) { - status = global_func_table_.wifi_get_supported_feature_set(iface_handle, - &set); - } - return {status, static_cast<uint64_t>(set | chip_set)}; -} - -std::pair<wifi_error, PacketFilterCapabilities> -WifiLegacyHal::getPacketFilterCapabilities(const std::string& iface_name) { - PacketFilterCapabilities caps; - wifi_error status = global_func_table_.wifi_get_packet_filter_capabilities( - getIfaceHandle(iface_name), &caps.version, &caps.max_len); - return {status, caps}; -} - -wifi_error WifiLegacyHal::setPacketFilter(const std::string& iface_name, - const std::vector<uint8_t>& program) { - return global_func_table_.wifi_set_packet_filter( - getIfaceHandle(iface_name), program.data(), program.size()); -} - -std::pair<wifi_error, std::vector<uint8_t>> -WifiLegacyHal::readApfPacketFilterData(const std::string& iface_name) { - PacketFilterCapabilities caps; - wifi_error status = global_func_table_.wifi_get_packet_filter_capabilities( - getIfaceHandle(iface_name), &caps.version, &caps.max_len); - if (status != WIFI_SUCCESS) { - return {status, {}}; - } - - // Size the buffer to read the entire program & work memory. - std::vector<uint8_t> buffer(caps.max_len); - - status = global_func_table_.wifi_read_packet_filter( - getIfaceHandle(iface_name), /*src_offset=*/0, buffer.data(), - buffer.size()); - return {status, move(buffer)}; -} - -std::pair<wifi_error, wifi_gscan_capabilities> -WifiLegacyHal::getGscanCapabilities(const std::string& iface_name) { - wifi_gscan_capabilities caps; - wifi_error status = global_func_table_.wifi_get_gscan_capabilities( - getIfaceHandle(iface_name), &caps); - return {status, caps}; -} - -wifi_error WifiLegacyHal::startGscan( - const std::string& iface_name, wifi_request_id id, - const wifi_scan_cmd_params& params, - const std::function<void(wifi_request_id)>& on_failure_user_callback, - const on_gscan_results_callback& on_results_user_callback, - const on_gscan_full_result_callback& on_full_result_user_callback) { - // If there is already an ongoing background scan, reject new scan requests. - if (on_gscan_event_internal_callback || - on_gscan_full_result_internal_callback) { - return WIFI_ERROR_NOT_AVAILABLE; - } - - // This callback will be used to either trigger |on_results_user_callback| - // or |on_failure_user_callback|. - on_gscan_event_internal_callback = - [iface_name, on_failure_user_callback, on_results_user_callback, this]( - wifi_request_id id, wifi_scan_event event) { - switch (event) { - case WIFI_SCAN_RESULTS_AVAILABLE: - case WIFI_SCAN_THRESHOLD_NUM_SCANS: - case WIFI_SCAN_THRESHOLD_PERCENT: { - wifi_error status; - std::vector<wifi_cached_scan_results> cached_scan_results; - std::tie(status, cached_scan_results) = - getGscanCachedResults(iface_name); - if (status == WIFI_SUCCESS) { - on_results_user_callback(id, cached_scan_results); - return; - } - FALLTHROUGH_INTENDED; - } - // Fall through if failed. Failure to retrieve cached scan - // results should trigger a background scan failure. - case WIFI_SCAN_FAILED: - on_failure_user_callback(id); - on_gscan_event_internal_callback = nullptr; - on_gscan_full_result_internal_callback = nullptr; - return; - } - LOG(FATAL) << "Unexpected gscan event received: " << event; - }; - - on_gscan_full_result_internal_callback = [on_full_result_user_callback]( - wifi_request_id id, - wifi_scan_result* result, - uint32_t buckets_scanned) { - if (result) { - on_full_result_user_callback(id, result, buckets_scanned); - } - }; - - wifi_scan_result_handler handler = {onAsyncGscanFullResult, - onAsyncGscanEvent}; - wifi_error status = global_func_table_.wifi_start_gscan( - id, getIfaceHandle(iface_name), params, handler); - if (status != WIFI_SUCCESS) { - on_gscan_event_internal_callback = nullptr; - on_gscan_full_result_internal_callback = nullptr; - } - return status; -} - -wifi_error WifiLegacyHal::stopGscan(const std::string& iface_name, - wifi_request_id id) { - // If there is no an ongoing background scan, reject stop requests. - // TODO(b/32337212): This needs to be handled by the HIDL object because we - // need to return the NOT_STARTED error code. - if (!on_gscan_event_internal_callback && - !on_gscan_full_result_internal_callback) { - return WIFI_ERROR_NOT_AVAILABLE; - } - wifi_error status = - global_func_table_.wifi_stop_gscan(id, getIfaceHandle(iface_name)); - // If the request Id is wrong, don't stop the ongoing background scan. Any - // other error should be treated as the end of background scan. - if (status != WIFI_ERROR_INVALID_REQUEST_ID) { - on_gscan_event_internal_callback = nullptr; - on_gscan_full_result_internal_callback = nullptr; - } - return status; -} - -std::pair<wifi_error, std::vector<uint32_t>> -WifiLegacyHal::getValidFrequenciesForBand(const std::string& iface_name, - wifi_band band) { - static_assert(sizeof(uint32_t) >= sizeof(wifi_channel), - "Wifi Channel cannot be represented in output"); - std::vector<uint32_t> freqs; - freqs.resize(kMaxGscanFrequenciesForBand); - int32_t num_freqs = 0; - wifi_error status = global_func_table_.wifi_get_valid_channels( - getIfaceHandle(iface_name), band, freqs.size(), - reinterpret_cast<wifi_channel*>(freqs.data()), &num_freqs); - CHECK(num_freqs >= 0 && - static_cast<uint32_t>(num_freqs) <= kMaxGscanFrequenciesForBand); - freqs.resize(num_freqs); - return {status, std::move(freqs)}; -} - -wifi_error WifiLegacyHal::setDfsFlag(const std::string& iface_name, - bool dfs_on) { - return global_func_table_.wifi_set_nodfs_flag(getIfaceHandle(iface_name), - dfs_on ? 0 : 1); -} - -wifi_error WifiLegacyHal::enableLinkLayerStats(const std::string& iface_name, - bool debug) { - wifi_link_layer_params params; - params.mpdu_size_threshold = kLinkLayerStatsDataMpduSizeThreshold; - params.aggressive_statistics_gathering = debug; - return global_func_table_.wifi_set_link_stats(getIfaceHandle(iface_name), - params); -} - -wifi_error WifiLegacyHal::disableLinkLayerStats(const std::string& iface_name) { - // TODO: Do we care about these responses? - uint32_t clear_mask_rsp; - uint8_t stop_rsp; - return global_func_table_.wifi_clear_link_stats( - getIfaceHandle(iface_name), 0xFFFFFFFF, &clear_mask_rsp, 1, &stop_rsp); -} - -std::pair<wifi_error, LinkLayerStats> WifiLegacyHal::getLinkLayerStats( - const std::string& iface_name) { - LinkLayerStats link_stats{}; - LinkLayerStats* link_stats_ptr = &link_stats; - - on_link_layer_stats_result_internal_callback = - [&link_stats_ptr](wifi_request_id /* id */, - wifi_iface_stat* iface_stats_ptr, int num_radios, - wifi_radio_stat* radio_stats_ptr) { - wifi_radio_stat* l_radio_stats_ptr; - wifi_peer_info* l_peer_info_stats_ptr; - - if (iface_stats_ptr != nullptr) { - link_stats_ptr->iface = *iface_stats_ptr; - l_peer_info_stats_ptr = iface_stats_ptr->peer_info; - for (uint32_t i = 0; i < iface_stats_ptr->num_peers; i++) { - WifiPeerInfo peer; - peer.peer_info = *l_peer_info_stats_ptr; - if (l_peer_info_stats_ptr->num_rate > 0) { - /* Copy the rate stats */ - peer.rate_stats.assign( - l_peer_info_stats_ptr->rate_stats, - l_peer_info_stats_ptr->rate_stats + - l_peer_info_stats_ptr->num_rate); - } - peer.peer_info.num_rate = 0; - link_stats_ptr->peers.push_back(peer); - l_peer_info_stats_ptr = - (wifi_peer_info*)((u8*)l_peer_info_stats_ptr + - sizeof(wifi_peer_info) + - (sizeof(wifi_rate_stat) * - l_peer_info_stats_ptr->num_rate)); - } - link_stats_ptr->iface.num_peers = 0; - } else { - LOG(ERROR) << "Invalid iface stats in link layer stats"; - } - if (num_radios <= 0 || radio_stats_ptr == nullptr) { - LOG(ERROR) << "Invalid radio stats in link layer stats"; - return; - } - l_radio_stats_ptr = radio_stats_ptr; - for (int i = 0; i < num_radios; i++) { - LinkLayerRadioStats radio; - - radio.stats = *l_radio_stats_ptr; - // Copy over the tx level array to the separate vector. - if (l_radio_stats_ptr->num_tx_levels > 0 && - l_radio_stats_ptr->tx_time_per_levels != nullptr) { - radio.tx_time_per_levels.assign( - l_radio_stats_ptr->tx_time_per_levels, - l_radio_stats_ptr->tx_time_per_levels + - l_radio_stats_ptr->num_tx_levels); - } - radio.stats.num_tx_levels = 0; - radio.stats.tx_time_per_levels = nullptr; - /* Copy over the channel stat to separate vector */ - if (l_radio_stats_ptr->num_channels > 0) { - /* Copy the channel stats */ - radio.channel_stats.assign( - l_radio_stats_ptr->channels, - l_radio_stats_ptr->channels + - l_radio_stats_ptr->num_channels); - } - link_stats_ptr->radios.push_back(radio); - l_radio_stats_ptr = - (wifi_radio_stat*)((u8*)l_radio_stats_ptr + - sizeof(wifi_radio_stat) + - (sizeof(wifi_channel_stat) * - l_radio_stats_ptr->num_channels)); - } - }; - - wifi_error status = global_func_table_.wifi_get_link_stats( - 0, getIfaceHandle(iface_name), {onSyncLinkLayerStatsResult}); - on_link_layer_stats_result_internal_callback = nullptr; - return {status, link_stats}; -} - -wifi_error WifiLegacyHal::startRssiMonitoring( - const std::string& iface_name, wifi_request_id id, int8_t max_rssi, - int8_t min_rssi, - const on_rssi_threshold_breached_callback& - on_threshold_breached_user_callback) { - if (on_rssi_threshold_breached_internal_callback) { - return WIFI_ERROR_NOT_AVAILABLE; - } - on_rssi_threshold_breached_internal_callback = - [on_threshold_breached_user_callback](wifi_request_id id, - uint8_t* bssid_ptr, int8_t rssi) { - if (!bssid_ptr) { - return; - } - std::array<uint8_t, 6> bssid_arr; - // |bssid_ptr| pointer is assumed to have 6 bytes for the mac - // address. - std::copy(bssid_ptr, bssid_ptr + 6, std::begin(bssid_arr)); - on_threshold_breached_user_callback(id, bssid_arr, rssi); - }; - wifi_error status = global_func_table_.wifi_start_rssi_monitoring( - id, getIfaceHandle(iface_name), max_rssi, min_rssi, - {onAsyncRssiThresholdBreached}); - if (status != WIFI_SUCCESS) { - on_rssi_threshold_breached_internal_callback = nullptr; - } - return status; -} - -wifi_error WifiLegacyHal::stopRssiMonitoring(const std::string& iface_name, - wifi_request_id id) { - if (!on_rssi_threshold_breached_internal_callback) { - return WIFI_ERROR_NOT_AVAILABLE; - } - wifi_error status = global_func_table_.wifi_stop_rssi_monitoring( - id, getIfaceHandle(iface_name)); - // If the request Id is wrong, don't stop the ongoing rssi monitoring. Any - // other error should be treated as the end of background scan. - if (status != WIFI_ERROR_INVALID_REQUEST_ID) { - on_rssi_threshold_breached_internal_callback = nullptr; - } - return status; -} - -std::pair<wifi_error, wifi_roaming_capabilities> -WifiLegacyHal::getRoamingCapabilities(const std::string& iface_name) { - wifi_roaming_capabilities caps; - wifi_error status = global_func_table_.wifi_get_roaming_capabilities( - getIfaceHandle(iface_name), &caps); - return {status, caps}; -} - -wifi_error WifiLegacyHal::configureRoaming(const std::string& iface_name, - const wifi_roaming_config& config) { - wifi_roaming_config config_internal = config; - return global_func_table_.wifi_configure_roaming(getIfaceHandle(iface_name), - &config_internal); -} - -wifi_error WifiLegacyHal::enableFirmwareRoaming(const std::string& iface_name, - fw_roaming_state_t state) { - return global_func_table_.wifi_enable_firmware_roaming( - getIfaceHandle(iface_name), state); -} - -wifi_error WifiLegacyHal::configureNdOffload(const std::string& iface_name, - bool enable) { - return global_func_table_.wifi_configure_nd_offload( - getIfaceHandle(iface_name), enable); -} - -wifi_error WifiLegacyHal::startSendingOffloadedPacket( - const std::string& iface_name, uint32_t cmd_id, uint16_t ether_type, - const std::vector<uint8_t>& ip_packet_data, - const std::array<uint8_t, 6>& src_address, - const std::array<uint8_t, 6>& dst_address, uint32_t period_in_ms) { - std::vector<uint8_t> ip_packet_data_internal(ip_packet_data); - std::vector<uint8_t> src_address_internal( - src_address.data(), src_address.data() + src_address.size()); - std::vector<uint8_t> dst_address_internal( - dst_address.data(), dst_address.data() + dst_address.size()); - return global_func_table_.wifi_start_sending_offloaded_packet( - cmd_id, getIfaceHandle(iface_name), ether_type, - ip_packet_data_internal.data(), ip_packet_data_internal.size(), - src_address_internal.data(), dst_address_internal.data(), period_in_ms); -} - -wifi_error WifiLegacyHal::stopSendingOffloadedPacket( - const std::string& iface_name, uint32_t cmd_id) { - return global_func_table_.wifi_stop_sending_offloaded_packet( - cmd_id, getIfaceHandle(iface_name)); -} - -wifi_error WifiLegacyHal::selectTxPowerScenario(const std::string& iface_name, - wifi_power_scenario scenario) { - return global_func_table_.wifi_select_tx_power_scenario( - getIfaceHandle(iface_name), scenario); -} - -wifi_error WifiLegacyHal::resetTxPowerScenario(const std::string& iface_name) { - return global_func_table_.wifi_reset_tx_power_scenario( - getIfaceHandle(iface_name)); -} - -wifi_error WifiLegacyHal::setLatencyMode(const std::string& iface_name, - wifi_latency_mode mode) { - return global_func_table_.wifi_set_latency_mode(getIfaceHandle(iface_name), - mode); -} - -wifi_error WifiLegacyHal::setThermalMitigationMode(wifi_thermal_mode mode, - uint32_t completion_window) { - return global_func_table_.wifi_set_thermal_mitigation_mode( - global_handle_, mode, completion_window); -} - -wifi_error WifiLegacyHal::setDscpToAccessCategoryMapping( - uint32_t start, uint32_t end, uint32_t access_category) { - return global_func_table_.wifi_map_dscp_access_category( - global_handle_, start, end, access_category); -} - -wifi_error WifiLegacyHal::resetDscpToAccessCategoryMapping() { - return global_func_table_.wifi_reset_dscp_mapping(global_handle_); -} - -std::pair<wifi_error, uint32_t> WifiLegacyHal::getLoggerSupportedFeatureSet( - const std::string& iface_name) { - uint32_t supported_feature_flags = 0; - wifi_error status = WIFI_SUCCESS; - - wifi_interface_handle iface_handle = getIfaceHandle(iface_name); - - if (iface_handle) { - status = global_func_table_.wifi_get_logger_supported_feature_set( - iface_handle, &supported_feature_flags); - } - return {status, supported_feature_flags}; -} - -wifi_error WifiLegacyHal::startPktFateMonitoring( - const std::string& iface_name) { - return global_func_table_.wifi_start_pkt_fate_monitoring( - getIfaceHandle(iface_name)); -} - -std::pair<wifi_error, std::vector<wifi_tx_report>> WifiLegacyHal::getTxPktFates( - const std::string& iface_name) { - std::vector<wifi_tx_report> tx_pkt_fates; - tx_pkt_fates.resize(MAX_FATE_LOG_LEN); - size_t num_fates = 0; - wifi_error status = global_func_table_.wifi_get_tx_pkt_fates( - getIfaceHandle(iface_name), tx_pkt_fates.data(), tx_pkt_fates.size(), - &num_fates); - CHECK(num_fates <= MAX_FATE_LOG_LEN); - tx_pkt_fates.resize(num_fates); - return {status, std::move(tx_pkt_fates)}; -} - -std::pair<wifi_error, std::vector<wifi_rx_report>> WifiLegacyHal::getRxPktFates( - const std::string& iface_name) { - std::vector<wifi_rx_report> rx_pkt_fates; - rx_pkt_fates.resize(MAX_FATE_LOG_LEN); - size_t num_fates = 0; - wifi_error status = global_func_table_.wifi_get_rx_pkt_fates( - getIfaceHandle(iface_name), rx_pkt_fates.data(), rx_pkt_fates.size(), - &num_fates); - CHECK(num_fates <= MAX_FATE_LOG_LEN); - rx_pkt_fates.resize(num_fates); - return {status, std::move(rx_pkt_fates)}; -} - -std::pair<wifi_error, WakeReasonStats> WifiLegacyHal::getWakeReasonStats( - const std::string& iface_name) { - WakeReasonStats stats; - stats.cmd_event_wake_cnt.resize(kMaxWakeReasonStatsArraySize); - stats.driver_fw_local_wake_cnt.resize(kMaxWakeReasonStatsArraySize); - - // This legacy struct needs separate memory to store the variable sized wake - // reason types. - stats.wake_reason_cnt.cmd_event_wake_cnt = - reinterpret_cast<int32_t*>(stats.cmd_event_wake_cnt.data()); - stats.wake_reason_cnt.cmd_event_wake_cnt_sz = - stats.cmd_event_wake_cnt.size(); - stats.wake_reason_cnt.cmd_event_wake_cnt_used = 0; - stats.wake_reason_cnt.driver_fw_local_wake_cnt = - reinterpret_cast<int32_t*>(stats.driver_fw_local_wake_cnt.data()); - stats.wake_reason_cnt.driver_fw_local_wake_cnt_sz = - stats.driver_fw_local_wake_cnt.size(); - stats.wake_reason_cnt.driver_fw_local_wake_cnt_used = 0; - - wifi_error status = global_func_table_.wifi_get_wake_reason_stats( - getIfaceHandle(iface_name), &stats.wake_reason_cnt); - - CHECK( - stats.wake_reason_cnt.cmd_event_wake_cnt_used >= 0 && - static_cast<uint32_t>(stats.wake_reason_cnt.cmd_event_wake_cnt_used) <= - kMaxWakeReasonStatsArraySize); - stats.cmd_event_wake_cnt.resize( - stats.wake_reason_cnt.cmd_event_wake_cnt_used); - stats.wake_reason_cnt.cmd_event_wake_cnt = nullptr; - - CHECK(stats.wake_reason_cnt.driver_fw_local_wake_cnt_used >= 0 && - static_cast<uint32_t>( - stats.wake_reason_cnt.driver_fw_local_wake_cnt_used) <= - kMaxWakeReasonStatsArraySize); - stats.driver_fw_local_wake_cnt.resize( - stats.wake_reason_cnt.driver_fw_local_wake_cnt_used); - stats.wake_reason_cnt.driver_fw_local_wake_cnt = nullptr; - - return {status, stats}; -} - -wifi_error WifiLegacyHal::registerRingBufferCallbackHandler( - const std::string& iface_name, - const on_ring_buffer_data_callback& on_user_data_callback) { - if (on_ring_buffer_data_internal_callback) { - return WIFI_ERROR_NOT_AVAILABLE; - } - on_ring_buffer_data_internal_callback = - [on_user_data_callback](char* ring_name, char* buffer, int buffer_size, - wifi_ring_buffer_status* status) { - if (status && buffer) { - std::vector<uint8_t> buffer_vector( - reinterpret_cast<uint8_t*>(buffer), - reinterpret_cast<uint8_t*>(buffer) + buffer_size); - on_user_data_callback(ring_name, buffer_vector, *status); - } - }; - wifi_error status = global_func_table_.wifi_set_log_handler( - 0, getIfaceHandle(iface_name), {onAsyncRingBufferData}); - if (status != WIFI_SUCCESS) { - on_ring_buffer_data_internal_callback = nullptr; - } - return status; -} - -wifi_error WifiLegacyHal::deregisterRingBufferCallbackHandler( - const std::string& iface_name) { - if (!on_ring_buffer_data_internal_callback) { - return WIFI_ERROR_NOT_AVAILABLE; - } - on_ring_buffer_data_internal_callback = nullptr; - return global_func_table_.wifi_reset_log_handler( - 0, getIfaceHandle(iface_name)); -} - -std::pair<wifi_error, std::vector<wifi_ring_buffer_status>> -WifiLegacyHal::getRingBuffersStatus(const std::string& iface_name) { - std::vector<wifi_ring_buffer_status> ring_buffers_status; - ring_buffers_status.resize(kMaxRingBuffers); - uint32_t num_rings = kMaxRingBuffers; - wifi_error status = global_func_table_.wifi_get_ring_buffers_status( - getIfaceHandle(iface_name), &num_rings, ring_buffers_status.data()); - CHECK(num_rings <= kMaxRingBuffers); - ring_buffers_status.resize(num_rings); - return {status, std::move(ring_buffers_status)}; -} - -wifi_error WifiLegacyHal::startRingBufferLogging(const std::string& iface_name, - const std::string& ring_name, - uint32_t verbose_level, - uint32_t max_interval_sec, - uint32_t min_data_size) { - return global_func_table_.wifi_start_logging( - getIfaceHandle(iface_name), verbose_level, 0, max_interval_sec, - min_data_size, makeCharVec(ring_name).data()); -} - -wifi_error WifiLegacyHal::getRingBufferData(const std::string& iface_name, - const std::string& ring_name) { - return global_func_table_.wifi_get_ring_data(getIfaceHandle(iface_name), - makeCharVec(ring_name).data()); -} - -wifi_error WifiLegacyHal::registerErrorAlertCallbackHandler( - const std::string& iface_name, - const on_error_alert_callback& on_user_alert_callback) { - if (on_error_alert_internal_callback) { - return WIFI_ERROR_NOT_AVAILABLE; - } - on_error_alert_internal_callback = [on_user_alert_callback]( - wifi_request_id id, char* buffer, - int buffer_size, int err_code) { - if (buffer) { - CHECK(id == 0); - on_user_alert_callback( - err_code, - std::vector<uint8_t>( - reinterpret_cast<uint8_t*>(buffer), - reinterpret_cast<uint8_t*>(buffer) + buffer_size)); - } - }; - wifi_error status = global_func_table_.wifi_set_alert_handler( - 0, getIfaceHandle(iface_name), {onAsyncErrorAlert}); - if (status != WIFI_SUCCESS) { - on_error_alert_internal_callback = nullptr; - } - return status; -} - -wifi_error WifiLegacyHal::deregisterErrorAlertCallbackHandler( - const std::string& iface_name) { - if (!on_error_alert_internal_callback) { - return WIFI_ERROR_NOT_AVAILABLE; - } - on_error_alert_internal_callback = nullptr; - return global_func_table_.wifi_reset_alert_handler( - 0, getIfaceHandle(iface_name)); -} - -wifi_error WifiLegacyHal::registerRadioModeChangeCallbackHandler( - const std::string& iface_name, - const on_radio_mode_change_callback& on_user_change_callback) { - if (on_radio_mode_change_internal_callback) { - return WIFI_ERROR_NOT_AVAILABLE; - } - on_radio_mode_change_internal_callback = [on_user_change_callback]( - wifi_request_id /* id */, - uint32_t num_macs, - wifi_mac_info* mac_infos_arr) { - if (num_macs > 0 && mac_infos_arr) { - std::vector<WifiMacInfo> mac_infos_vec; - for (uint32_t i = 0; i < num_macs; i++) { - WifiMacInfo mac_info; - mac_info.wlan_mac_id = mac_infos_arr[i].wlan_mac_id; - mac_info.mac_band = mac_infos_arr[i].mac_band; - for (int32_t j = 0; j < mac_infos_arr[i].num_iface; j++) { - WifiIfaceInfo iface_info; - iface_info.name = mac_infos_arr[i].iface_info[j].iface_name; - iface_info.channel = mac_infos_arr[i].iface_info[j].channel; - mac_info.iface_infos.push_back(iface_info); - } - mac_infos_vec.push_back(mac_info); - } - on_user_change_callback(mac_infos_vec); - } - }; - wifi_error status = global_func_table_.wifi_set_radio_mode_change_handler( - 0, getIfaceHandle(iface_name), {onAsyncRadioModeChange}); - if (status != WIFI_SUCCESS) { - on_radio_mode_change_internal_callback = nullptr; - } - return status; -} - -wifi_error WifiLegacyHal::registerSubsystemRestartCallbackHandler( - const on_subsystem_restart_callback& on_restart_callback) { - if (on_subsystem_restart_internal_callback) { - return WIFI_ERROR_NOT_AVAILABLE; - } - on_subsystem_restart_internal_callback = - [on_restart_callback](const char* error) { - on_restart_callback(error); - }; - wifi_error status = global_func_table_.wifi_set_subsystem_restart_handler( - global_handle_, {onAsyncSubsystemRestart}); - if (status != WIFI_SUCCESS) { - on_subsystem_restart_internal_callback = nullptr; - } - return status; -} - -wifi_error WifiLegacyHal::startRttRangeRequest( - const std::string& iface_name, wifi_request_id id, - const std::vector<wifi_rtt_config>& rtt_configs, - const on_rtt_results_callback& on_results_user_callback) { - if (on_rtt_results_internal_callback) { - return WIFI_ERROR_NOT_AVAILABLE; - } - - on_rtt_results_internal_callback = - [on_results_user_callback](wifi_request_id id, unsigned num_results, - wifi_rtt_result* rtt_results[]) { - if (num_results > 0 && !rtt_results) { - LOG(ERROR) << "Unexpected nullptr in RTT results"; - return; - } - std::vector<const wifi_rtt_result*> rtt_results_vec; - std::copy_if(rtt_results, rtt_results + num_results, - back_inserter(rtt_results_vec), - [](wifi_rtt_result* rtt_result) { - return rtt_result != nullptr; - }); - on_results_user_callback(id, rtt_results_vec); - }; - - std::vector<wifi_rtt_config> rtt_configs_internal(rtt_configs); - wifi_error status = global_func_table_.wifi_rtt_range_request( - id, getIfaceHandle(iface_name), rtt_configs.size(), - rtt_configs_internal.data(), {onAsyncRttResults}); - if (status != WIFI_SUCCESS) { - on_rtt_results_internal_callback = nullptr; - } - return status; -} - -wifi_error WifiLegacyHal::cancelRttRangeRequest( - const std::string& iface_name, wifi_request_id id, - const std::vector<std::array<uint8_t, 6>>& mac_addrs) { - if (!on_rtt_results_internal_callback) { - return WIFI_ERROR_NOT_AVAILABLE; - } - static_assert(sizeof(mac_addr) == sizeof(std::array<uint8_t, 6>), - "MAC address size mismatch"); - // TODO: How do we handle partial cancels (i.e only a subset of enabled mac - // addressed are cancelled). - std::vector<std::array<uint8_t, 6>> mac_addrs_internal(mac_addrs); - wifi_error status = global_func_table_.wifi_rtt_range_cancel( - id, getIfaceHandle(iface_name), mac_addrs.size(), - reinterpret_cast<mac_addr*>(mac_addrs_internal.data())); - // If the request Id is wrong, don't stop the ongoing range request. Any - // other error should be treated as the end of rtt ranging. - if (status != WIFI_ERROR_INVALID_REQUEST_ID) { - on_rtt_results_internal_callback = nullptr; - } - return status; -} - -std::pair<wifi_error, wifi_rtt_capabilities> WifiLegacyHal::getRttCapabilities( - const std::string& iface_name) { - wifi_rtt_capabilities rtt_caps; - wifi_error status = global_func_table_.wifi_get_rtt_capabilities( - getIfaceHandle(iface_name), &rtt_caps); - return {status, rtt_caps}; -} - -std::pair<wifi_error, wifi_rtt_responder> WifiLegacyHal::getRttResponderInfo( - const std::string& iface_name) { - wifi_rtt_responder rtt_responder; - wifi_error status = global_func_table_.wifi_rtt_get_responder_info( - getIfaceHandle(iface_name), &rtt_responder); - return {status, rtt_responder}; -} - -wifi_error WifiLegacyHal::enableRttResponder( - const std::string& iface_name, wifi_request_id id, - const wifi_channel_info& channel_hint, uint32_t max_duration_secs, - const wifi_rtt_responder& info) { - wifi_rtt_responder info_internal(info); - return global_func_table_.wifi_enable_responder( - id, getIfaceHandle(iface_name), channel_hint, max_duration_secs, - &info_internal); -} - -wifi_error WifiLegacyHal::disableRttResponder(const std::string& iface_name, - wifi_request_id id) { - return global_func_table_.wifi_disable_responder( - id, getIfaceHandle(iface_name)); -} - -wifi_error WifiLegacyHal::setRttLci(const std::string& iface_name, - wifi_request_id id, - const wifi_lci_information& info) { - wifi_lci_information info_internal(info); - return global_func_table_.wifi_set_lci(id, getIfaceHandle(iface_name), - &info_internal); -} - -wifi_error WifiLegacyHal::setRttLcr(const std::string& iface_name, - wifi_request_id id, - const wifi_lcr_information& info) { - wifi_lcr_information info_internal(info); - return global_func_table_.wifi_set_lcr(id, getIfaceHandle(iface_name), - &info_internal); -} - -wifi_error WifiLegacyHal::nanRegisterCallbackHandlers( - const std::string& iface_name, const NanCallbackHandlers& user_callbacks) { - on_nan_notify_response_user_callback = user_callbacks.on_notify_response; - on_nan_event_publish_terminated_user_callback = - user_callbacks.on_event_publish_terminated; - on_nan_event_match_user_callback = user_callbacks.on_event_match; - on_nan_event_match_expired_user_callback = - user_callbacks.on_event_match_expired; - on_nan_event_subscribe_terminated_user_callback = - user_callbacks.on_event_subscribe_terminated; - on_nan_event_followup_user_callback = user_callbacks.on_event_followup; - on_nan_event_disc_eng_event_user_callback = - user_callbacks.on_event_disc_eng_event; - on_nan_event_disabled_user_callback = user_callbacks.on_event_disabled; - on_nan_event_tca_user_callback = user_callbacks.on_event_tca; - on_nan_event_beacon_sdf_payload_user_callback = - user_callbacks.on_event_beacon_sdf_payload; - on_nan_event_data_path_request_user_callback = - user_callbacks.on_event_data_path_request; - on_nan_event_data_path_confirm_user_callback = - user_callbacks.on_event_data_path_confirm; - on_nan_event_data_path_end_user_callback = - user_callbacks.on_event_data_path_end; - on_nan_event_transmit_follow_up_user_callback = - user_callbacks.on_event_transmit_follow_up; - on_nan_event_range_request_user_callback = - user_callbacks.on_event_range_request; - on_nan_event_range_report_user_callback = - user_callbacks.on_event_range_report; - on_nan_event_schedule_update_user_callback = - user_callbacks.on_event_schedule_update; - - return global_func_table_.wifi_nan_register_handler( - getIfaceHandle(iface_name), - {onAysncNanNotifyResponse, onAysncNanEventPublishReplied, - onAysncNanEventPublishTerminated, onAysncNanEventMatch, - onAysncNanEventMatchExpired, onAysncNanEventSubscribeTerminated, - onAysncNanEventFollowup, onAysncNanEventDiscEngEvent, - onAysncNanEventDisabled, onAysncNanEventTca, - onAysncNanEventBeaconSdfPayload, onAysncNanEventDataPathRequest, - onAysncNanEventDataPathConfirm, onAysncNanEventDataPathEnd, - onAysncNanEventTransmitFollowUp, onAysncNanEventRangeRequest, - onAysncNanEventRangeReport, onAsyncNanEventScheduleUpdate}); -} - -wifi_error WifiLegacyHal::nanEnableRequest(const std::string& iface_name, - transaction_id id, - const NanEnableRequest& msg) { - NanEnableRequest msg_internal(msg); - return global_func_table_.wifi_nan_enable_request( - id, getIfaceHandle(iface_name), &msg_internal); -} - -wifi_error WifiLegacyHal::nanDisableRequest(const std::string& iface_name, - transaction_id id) { - return global_func_table_.wifi_nan_disable_request( - id, getIfaceHandle(iface_name)); -} - -wifi_error WifiLegacyHal::nanPublishRequest(const std::string& iface_name, - transaction_id id, - const NanPublishRequest& msg) { - NanPublishRequest msg_internal(msg); - return global_func_table_.wifi_nan_publish_request( - id, getIfaceHandle(iface_name), &msg_internal); -} - -wifi_error WifiLegacyHal::nanPublishCancelRequest( - const std::string& iface_name, transaction_id id, - const NanPublishCancelRequest& msg) { - NanPublishCancelRequest msg_internal(msg); - return global_func_table_.wifi_nan_publish_cancel_request( - id, getIfaceHandle(iface_name), &msg_internal); -} - -wifi_error WifiLegacyHal::nanSubscribeRequest(const std::string& iface_name, - transaction_id id, - const NanSubscribeRequest& msg) { - NanSubscribeRequest msg_internal(msg); - return global_func_table_.wifi_nan_subscribe_request( - id, getIfaceHandle(iface_name), &msg_internal); -} - -wifi_error WifiLegacyHal::nanSubscribeCancelRequest( - const std::string& iface_name, transaction_id id, - const NanSubscribeCancelRequest& msg) { - NanSubscribeCancelRequest msg_internal(msg); - return global_func_table_.wifi_nan_subscribe_cancel_request( - id, getIfaceHandle(iface_name), &msg_internal); -} - -wifi_error WifiLegacyHal::nanTransmitFollowupRequest( - const std::string& iface_name, transaction_id id, - const NanTransmitFollowupRequest& msg) { - NanTransmitFollowupRequest msg_internal(msg); - return global_func_table_.wifi_nan_transmit_followup_request( - id, getIfaceHandle(iface_name), &msg_internal); -} - -wifi_error WifiLegacyHal::nanStatsRequest(const std::string& iface_name, - transaction_id id, - const NanStatsRequest& msg) { - NanStatsRequest msg_internal(msg); - return global_func_table_.wifi_nan_stats_request( - id, getIfaceHandle(iface_name), &msg_internal); -} - -wifi_error WifiLegacyHal::nanConfigRequest(const std::string& iface_name, - transaction_id id, - const NanConfigRequest& msg) { - NanConfigRequest msg_internal(msg); - return global_func_table_.wifi_nan_config_request( - id, getIfaceHandle(iface_name), &msg_internal); -} - -wifi_error WifiLegacyHal::nanTcaRequest(const std::string& iface_name, - transaction_id id, - const NanTCARequest& msg) { - NanTCARequest msg_internal(msg); - return global_func_table_.wifi_nan_tca_request( - id, getIfaceHandle(iface_name), &msg_internal); -} - -wifi_error WifiLegacyHal::nanBeaconSdfPayloadRequest( - const std::string& iface_name, transaction_id id, - const NanBeaconSdfPayloadRequest& msg) { - NanBeaconSdfPayloadRequest msg_internal(msg); - return global_func_table_.wifi_nan_beacon_sdf_payload_request( - id, getIfaceHandle(iface_name), &msg_internal); -} - -std::pair<wifi_error, NanVersion> WifiLegacyHal::nanGetVersion() { - NanVersion version; - wifi_error status = - global_func_table_.wifi_nan_get_version(global_handle_, &version); - return {status, version}; -} - -wifi_error WifiLegacyHal::nanGetCapabilities(const std::string& iface_name, - transaction_id id) { - return global_func_table_.wifi_nan_get_capabilities( - id, getIfaceHandle(iface_name)); -} - -wifi_error WifiLegacyHal::nanDataInterfaceCreate( - const std::string& iface_name, transaction_id id, - const std::string& data_iface_name) { - return global_func_table_.wifi_nan_data_interface_create( - id, getIfaceHandle(iface_name), makeCharVec(data_iface_name).data()); -} - -wifi_error WifiLegacyHal::nanDataInterfaceDelete( - const std::string& iface_name, transaction_id id, - const std::string& data_iface_name) { - return global_func_table_.wifi_nan_data_interface_delete( - id, getIfaceHandle(iface_name), makeCharVec(data_iface_name).data()); -} - -wifi_error WifiLegacyHal::nanDataRequestInitiator( - const std::string& iface_name, transaction_id id, - const NanDataPathInitiatorRequest& msg) { - NanDataPathInitiatorRequest msg_internal(msg); - return global_func_table_.wifi_nan_data_request_initiator( - id, getIfaceHandle(iface_name), &msg_internal); -} - -wifi_error WifiLegacyHal::nanDataIndicationResponse( - const std::string& iface_name, transaction_id id, - const NanDataPathIndicationResponse& msg) { - NanDataPathIndicationResponse msg_internal(msg); - return global_func_table_.wifi_nan_data_indication_response( - id, getIfaceHandle(iface_name), &msg_internal); -} - -typedef struct { - u8 num_ndp_instances; - NanDataPathId ndp_instance_id; -} NanDataPathEndSingleNdpIdRequest; - -wifi_error WifiLegacyHal::nanDataEnd(const std::string& iface_name, - transaction_id id, - uint32_t ndpInstanceId) { - NanDataPathEndSingleNdpIdRequest msg; - msg.num_ndp_instances = 1; - msg.ndp_instance_id = ndpInstanceId; - wifi_error status = global_func_table_.wifi_nan_data_end( - id, getIfaceHandle(iface_name), (NanDataPathEndRequest*)&msg); - return status; -} - -wifi_error WifiLegacyHal::setCountryCode(const std::string& iface_name, - std::array<int8_t, 2> code) { - std::string code_str(code.data(), code.data() + code.size()); - return global_func_table_.wifi_set_country_code(getIfaceHandle(iface_name), - code_str.c_str()); -} - -wifi_error WifiLegacyHal::retrieveIfaceHandles() { - wifi_interface_handle* iface_handles = nullptr; - int num_iface_handles = 0; - wifi_error status = global_func_table_.wifi_get_ifaces( - global_handle_, &num_iface_handles, &iface_handles); - if (status != WIFI_SUCCESS) { - LOG(ERROR) << "Failed to enumerate interface handles"; - return status; - } - iface_name_to_handle_.clear(); - for (int i = 0; i < num_iface_handles; ++i) { - std::array<char, IFNAMSIZ> iface_name_arr = {}; - status = global_func_table_.wifi_get_iface_name( - iface_handles[i], iface_name_arr.data(), iface_name_arr.size()); - if (status != WIFI_SUCCESS) { - LOG(WARNING) << "Failed to get interface handle name"; - continue; - } - // Assuming the interface name is null terminated since the legacy HAL - // API does not return a size. - std::string iface_name(iface_name_arr.data()); - LOG(INFO) << "Adding interface handle for " << iface_name; - iface_name_to_handle_[iface_name] = iface_handles[i]; - } - return WIFI_SUCCESS; -} - -wifi_interface_handle WifiLegacyHal::getIfaceHandle( - const std::string& iface_name) { - const auto iface_handle_iter = iface_name_to_handle_.find(iface_name); - if (iface_handle_iter == iface_name_to_handle_.end()) { - LOG(ERROR) << "Unknown iface name: " << iface_name; - return nullptr; - } - return iface_handle_iter->second; -} - -void WifiLegacyHal::runEventLoop() { - LOG(DEBUG) << "Starting legacy HAL event loop"; - global_func_table_.wifi_event_loop(global_handle_); - const auto lock = hidl_sync_util::acquireGlobalLock(); - if (!awaiting_event_loop_termination_) { - LOG(FATAL) - << "Legacy HAL event loop terminated, but HAL was not stopping"; - } - LOG(DEBUG) << "Legacy HAL event loop terminated"; - awaiting_event_loop_termination_ = false; - stop_wait_cv_.notify_one(); -} - -std::pair<wifi_error, std::vector<wifi_cached_scan_results>> -WifiLegacyHal::getGscanCachedResults(const std::string& iface_name) { - std::vector<wifi_cached_scan_results> cached_scan_results; - cached_scan_results.resize(kMaxCachedGscanResults); - int32_t num_results = 0; - wifi_error status = global_func_table_.wifi_get_cached_gscan_results( - getIfaceHandle(iface_name), true /* always flush */, - cached_scan_results.size(), cached_scan_results.data(), &num_results); - CHECK(num_results >= 0 && - static_cast<uint32_t>(num_results) <= kMaxCachedGscanResults); - cached_scan_results.resize(num_results); - // Check for invalid IE lengths in these cached scan results and correct it. - for (auto& cached_scan_result : cached_scan_results) { - int num_scan_results = cached_scan_result.num_results; - for (int i = 0; i < num_scan_results; i++) { - auto& scan_result = cached_scan_result.results[i]; - if (scan_result.ie_length > 0) { - LOG(DEBUG) << "Cached scan result has non-zero IE length " - << scan_result.ie_length; - scan_result.ie_length = 0; - } - } - } - return {status, std::move(cached_scan_results)}; -} - -wifi_error WifiLegacyHal::createVirtualInterface(const std::string& ifname, - wifi_interface_type iftype) { - // Create the interface if it doesn't exist. If interface already exist, - // Vendor Hal should return WIFI_SUCCESS. - wifi_error status = global_func_table_.wifi_virtual_interface_create( - global_handle_, ifname.c_str(), iftype); - return handleVirtualInterfaceCreateOrDeleteStatus(ifname, status); -} - -wifi_error WifiLegacyHal::deleteVirtualInterface(const std::string& ifname) { - // Delete the interface if it was created dynamically. - wifi_error status = global_func_table_.wifi_virtual_interface_delete( - global_handle_, ifname.c_str()); - return handleVirtualInterfaceCreateOrDeleteStatus(ifname, status); -} - -wifi_error WifiLegacyHal::handleVirtualInterfaceCreateOrDeleteStatus( - const std::string& ifname, wifi_error status) { - if (status == WIFI_SUCCESS) { - // refresh list of handlers now. - status = retrieveIfaceHandles(); - } else if (status == WIFI_ERROR_NOT_SUPPORTED) { - // Vendor hal does not implement this API. Such vendor implementations - // are expected to create / delete interface by other means. - - // check if interface exists. - if (if_nametoindex(ifname.c_str())) { - status = retrieveIfaceHandles(); - } - } - return status; -} - -wifi_error WifiLegacyHal::getSupportedIfaceName(uint32_t iface_type, - std::string& ifname) { - std::array<char, IFNAMSIZ> buffer; - - wifi_error res = global_func_table_.wifi_get_supported_iface_name( - global_handle_, (uint32_t)iface_type, buffer.data(), buffer.size()); - if (res == WIFI_SUCCESS) ifname = buffer.data(); - - return res; -} - -wifi_error WifiLegacyHal::multiStaSetPrimaryConnection( - const std::string& ifname) { - return global_func_table_.wifi_multi_sta_set_primary_connection( - global_handle_, getIfaceHandle(ifname)); -} - -wifi_error WifiLegacyHal::multiStaSetUseCase(wifi_multi_sta_use_case use_case) { - return global_func_table_.wifi_multi_sta_set_use_case(global_handle_, - use_case); -} - -wifi_error WifiLegacyHal::setCoexUnsafeChannels( - std::vector<wifi_coex_unsafe_channel> unsafe_channels, - uint32_t restrictions) { - return global_func_table_.wifi_set_coex_unsafe_channels( - global_handle_, unsafe_channels.size(), unsafe_channels.data(), - restrictions); -} - -wifi_error WifiLegacyHal::setVoipMode(const std::string& iface_name, - wifi_voip_mode mode) { - return global_func_table_.wifi_set_voip_mode(getIfaceHandle(iface_name), - mode); -} - -wifi_error WifiLegacyHal::twtRegisterHandler( - const std::string& iface_name, const TwtCallbackHandlers& user_callbacks) { - on_twt_event_setup_response_callback = user_callbacks.on_setup_response; - on_twt_event_teardown_completion_callback = - user_callbacks.on_teardown_completion; - on_twt_event_info_frame_received_callback = - user_callbacks.on_info_frame_received; - on_twt_event_device_notify_callback = user_callbacks.on_device_notify; - - return global_func_table_.wifi_twt_register_handler( - getIfaceHandle(iface_name), - {onAsyncTwtEventSetupResponse, onAsyncTwtEventTeardownCompletion, - onAsyncTwtEventInfoFrameReceived, onAsyncTwtEventDeviceNotify}); -} - -std::pair<wifi_error, TwtCapabilitySet> WifiLegacyHal::twtGetCapability( - const std::string& iface_name) { - TwtCapabilitySet capSet; - wifi_error status = global_func_table_.wifi_twt_get_capability( - getIfaceHandle(iface_name), &capSet); - return {status, capSet}; -} - -wifi_error WifiLegacyHal::twtSetupRequest(const std::string& iface_name, - const TwtSetupRequest& msg) { - TwtSetupRequest msgInternal(msg); - return global_func_table_.wifi_twt_setup_request(getIfaceHandle(iface_name), - &msgInternal); -} - -wifi_error WifiLegacyHal::twtTearDownRequest(const std::string& iface_name, - const TwtTeardownRequest& msg) { - TwtTeardownRequest msgInternal(msg); - return global_func_table_.wifi_twt_teardown_request( - getIfaceHandle(iface_name), &msgInternal); -} - -wifi_error WifiLegacyHal::twtInfoFrameRequest(const std::string& iface_name, - const TwtInfoFrameRequest& msg) { - TwtInfoFrameRequest msgInternal(msg); - return global_func_table_.wifi_twt_info_frame_request( - getIfaceHandle(iface_name), &msgInternal); -} - -std::pair<wifi_error, TwtStats> WifiLegacyHal::twtGetStats( - const std::string& iface_name, uint8_t configId) { - TwtStats stats; - wifi_error status = global_func_table_.wifi_twt_get_stats( - getIfaceHandle(iface_name), configId, &stats); - return {status, stats}; -} - -wifi_error WifiLegacyHal::twtClearStats(const std::string& iface_name, - uint8_t configId) { - return global_func_table_.wifi_twt_clear_stats(getIfaceHandle(iface_name), - configId); -} - -wifi_error WifiLegacyHal::setDtimConfig(const std::string& iface_name, - uint32_t multiplier) { - return global_func_table_.wifi_set_dtim_config(getIfaceHandle(iface_name), - multiplier); -} - -std::pair<wifi_error, std::vector<wifi_usable_channel>> -WifiLegacyHal::getUsableChannels(uint32_t band_mask, uint32_t iface_mode_mask, - uint32_t filter_mask) { - std::vector<wifi_usable_channel> channels; - channels.resize(kMaxWifiUsableChannels); - uint32_t size = 0; - wifi_error status = global_func_table_.wifi_get_usable_channels( - global_handle_, band_mask, iface_mode_mask, filter_mask, - channels.size(), &size, - reinterpret_cast<wifi_usable_channel*>(channels.data())); - CHECK(size >= 0 && size <= kMaxWifiUsableChannels); - channels.resize(size); - return {status, std::move(channels)}; -} - -wifi_error WifiLegacyHal::triggerSubsystemRestart() { - return global_func_table_.wifi_trigger_subsystem_restart(global_handle_); -} - -void WifiLegacyHal::invalidate() { - global_handle_ = nullptr; - iface_name_to_handle_.clear(); - on_driver_memory_dump_internal_callback = nullptr; - on_firmware_memory_dump_internal_callback = nullptr; - on_gscan_event_internal_callback = nullptr; - on_gscan_full_result_internal_callback = nullptr; - on_link_layer_stats_result_internal_callback = nullptr; - on_rssi_threshold_breached_internal_callback = nullptr; - on_ring_buffer_data_internal_callback = nullptr; - on_error_alert_internal_callback = nullptr; - on_radio_mode_change_internal_callback = nullptr; - on_subsystem_restart_internal_callback = nullptr; - on_rtt_results_internal_callback = nullptr; - on_nan_notify_response_user_callback = nullptr; - on_nan_event_publish_terminated_user_callback = nullptr; - on_nan_event_match_user_callback = nullptr; - on_nan_event_match_expired_user_callback = nullptr; - on_nan_event_subscribe_terminated_user_callback = nullptr; - on_nan_event_followup_user_callback = nullptr; - on_nan_event_disc_eng_event_user_callback = nullptr; - on_nan_event_disabled_user_callback = nullptr; - on_nan_event_tca_user_callback = nullptr; - on_nan_event_beacon_sdf_payload_user_callback = nullptr; - on_nan_event_data_path_request_user_callback = nullptr; - on_nan_event_data_path_confirm_user_callback = nullptr; - on_nan_event_data_path_end_user_callback = nullptr; - on_nan_event_transmit_follow_up_user_callback = nullptr; - on_nan_event_range_request_user_callback = nullptr; - on_nan_event_range_report_user_callback = nullptr; - on_nan_event_schedule_update_user_callback = nullptr; - on_twt_event_setup_response_callback = nullptr; - on_twt_event_teardown_completion_callback = nullptr; - on_twt_event_info_frame_received_callback = nullptr; - on_twt_event_device_notify_callback = nullptr; -} - -} // namespace legacy_hal -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android diff --git a/wifi/1.5/default/wifi_legacy_hal.h b/wifi/1.5/default/wifi_legacy_hal.h deleted file mode 100644 index 2bb7631efa..0000000000 --- a/wifi/1.5/default/wifi_legacy_hal.h +++ /dev/null @@ -1,763 +0,0 @@ -/* - * Copyright (C) 2016 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef WIFI_LEGACY_HAL_H_ -#define WIFI_LEGACY_HAL_H_ - -#include <condition_variable> -#include <functional> -#include <map> -#include <thread> -#include <vector> - -#include <hardware_legacy/wifi_hal.h> -#include <wifi_system/interface_tool.h> - -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { -// This is in a separate namespace to prevent typename conflicts between -// the legacy HAL types and the HIDL interface types. -namespace legacy_hal { -// Import all the types defined inside the legacy HAL header files into this -// namespace. -using ::frame_info; -using ::frame_type; -using ::FRAME_TYPE_80211_MGMT; -using ::FRAME_TYPE_ETHERNET_II; -using ::FRAME_TYPE_UNKNOWN; -using ::fw_roaming_state_t; -using ::mac_addr; -using ::NAN_CHANNEL_24G_BAND; -using ::NAN_CHANNEL_5G_BAND_HIGH; -using ::NAN_CHANNEL_5G_BAND_LOW; -using ::NAN_DISABLE_RANGE_REPORT; -using ::NAN_DO_NOT_USE_SRF; -using ::NAN_DP_CHANNEL_NOT_REQUESTED; -using ::NAN_DP_CONFIG_NO_SECURITY; -using ::NAN_DP_CONFIG_SECURITY; -using ::NAN_DP_END; -using ::NAN_DP_FORCE_CHANNEL_SETUP; -using ::NAN_DP_INITIATOR_RESPONSE; -using ::NAN_DP_INTERFACE_CREATE; -using ::NAN_DP_INTERFACE_DELETE; -using ::NAN_DP_REQUEST_ACCEPT; -using ::NAN_DP_REQUEST_CHANNEL_SETUP; -using ::NAN_DP_REQUEST_REJECT; -using ::NAN_DP_RESPONDER_RESPONSE; -using ::NAN_GET_CAPABILITIES; -using ::NAN_MATCH_ALG_MATCH_CONTINUOUS; -using ::NAN_MATCH_ALG_MATCH_NEVER; -using ::NAN_MATCH_ALG_MATCH_ONCE; -using ::NAN_PUBLISH_TYPE_SOLICITED; -using ::NAN_PUBLISH_TYPE_UNSOLICITED; -using ::NAN_PUBLISH_TYPE_UNSOLICITED_SOLICITED; -using ::NAN_RANGING_AUTO_RESPONSE_DISABLE; -using ::NAN_RANGING_AUTO_RESPONSE_ENABLE; -using ::NAN_RANGING_DISABLE; -using ::NAN_RANGING_ENABLE; -using ::NAN_RESPONSE_BEACON_SDF_PAYLOAD; -using ::NAN_RESPONSE_CONFIG; -using ::NAN_RESPONSE_DISABLED; -using ::NAN_RESPONSE_ENABLED; -using ::NAN_RESPONSE_ERROR; -using ::NAN_RESPONSE_PUBLISH; -using ::NAN_RESPONSE_PUBLISH_CANCEL; -using ::NAN_RESPONSE_STATS; -using ::NAN_RESPONSE_SUBSCRIBE; -using ::NAN_RESPONSE_SUBSCRIBE_CANCEL; -using ::NAN_RESPONSE_TCA; -using ::NAN_RESPONSE_TRANSMIT_FOLLOWUP; -using ::NAN_SECURITY_KEY_INPUT_PASSPHRASE; -using ::NAN_SECURITY_KEY_INPUT_PMK; -using ::NAN_SERVICE_ACCEPT_POLICY_ALL; -using ::NAN_SERVICE_ACCEPT_POLICY_NONE; -using ::NAN_SRF_ATTR_BLOOM_FILTER; -using ::NAN_SRF_ATTR_PARTIAL_MAC_ADDR; -using ::NAN_SRF_INCLUDE_DO_NOT_RESPOND; -using ::NAN_SRF_INCLUDE_RESPOND; -using ::NAN_SSI_NOT_REQUIRED_IN_MATCH_IND; -using ::NAN_SSI_REQUIRED_IN_MATCH_IND; -using ::NAN_STATUS_ALREADY_ENABLED; -using ::NAN_STATUS_FOLLOWUP_QUEUE_FULL; -using ::NAN_STATUS_INTERNAL_FAILURE; -using ::NAN_STATUS_INVALID_NDP_ID; -using ::NAN_STATUS_INVALID_PARAM; -using ::NAN_STATUS_INVALID_PUBLISH_SUBSCRIBE_ID; -using ::NAN_STATUS_INVALID_REQUESTOR_INSTANCE_ID; -using ::NAN_STATUS_NAN_NOT_ALLOWED; -using ::NAN_STATUS_NO_OTA_ACK; -using ::NAN_STATUS_NO_RESOURCE_AVAILABLE; -using ::NAN_STATUS_PROTOCOL_FAILURE; -using ::NAN_STATUS_SUCCESS; -using ::NAN_STATUS_UNSUPPORTED_CONCURRENCY_NAN_DISABLED; -using ::NAN_SUBSCRIBE_TYPE_ACTIVE; -using ::NAN_SUBSCRIBE_TYPE_PASSIVE; -using ::NAN_TRANSMIT_IN_DW; -using ::NAN_TRANSMIT_IN_FAW; -using ::NAN_TX_PRIORITY_HIGH; -using ::NAN_TX_PRIORITY_NORMAL; -using ::NAN_TX_TYPE_BROADCAST; -using ::NAN_TX_TYPE_UNICAST; -using ::NAN_USE_SRF; -using ::NanBeaconSdfPayloadInd; -using ::NanCapabilities; -using ::NanChannelInfo; -using ::NanConfigRequest; -using ::NanDataPathChannelCfg; -using ::NanDataPathConfirmInd; -using ::NanDataPathEndInd; -using ::NanDataPathIndicationResponse; -using ::NanDataPathInitiatorRequest; -using ::NanDataPathRequestInd; -using ::NanDataPathScheduleUpdateInd; -using ::NanDisabledInd; -using ::NanDiscEngEventInd; -using ::NanEnableRequest; -using ::NanFollowupInd; -using ::NanMatchAlg; -using ::NanMatchExpiredInd; -using ::NanMatchInd; -using ::NanPublishCancelRequest; -using ::NanPublishRequest; -using ::NanPublishTerminatedInd; -using ::NanPublishType; -using ::NanRangeReportInd; -using ::NanRangeRequestInd; -using ::NanResponseMsg; -using ::NanSRFType; -using ::NanStatusType; -using ::NanSubscribeCancelRequest; -using ::NanSubscribeRequest; -using ::NanSubscribeTerminatedInd; -using ::NanSubscribeType; -using ::NanTransmitFollowupInd; -using ::NanTransmitFollowupRequest; -using ::NanTxType; -using ::ROAMING_DISABLE; -using ::ROAMING_ENABLE; -using ::RTT_PEER_AP; -using ::RTT_PEER_NAN; -using ::RTT_PEER_P2P_CLIENT; -using ::RTT_PEER_P2P_GO; -using ::RTT_PEER_STA; -using ::rtt_peer_type; -using ::RTT_STATUS_ABORTED; -using ::RTT_STATUS_FAIL_AP_ON_DIFF_CHANNEL; -using ::RTT_STATUS_FAIL_BUSY_TRY_LATER; -using ::RTT_STATUS_FAIL_FTM_PARAM_OVERRIDE; -using ::RTT_STATUS_FAIL_INVALID_TS; -using ::RTT_STATUS_FAIL_NO_CAPABILITY; -using ::RTT_STATUS_FAIL_NO_RSP; -using ::RTT_STATUS_FAIL_NOT_SCHEDULED_YET; -using ::RTT_STATUS_FAIL_PROTOCOL; -using ::RTT_STATUS_FAIL_REJECTED; -using ::RTT_STATUS_FAIL_SCHEDULE; -using ::RTT_STATUS_FAIL_TM_TIMEOUT; -using ::RTT_STATUS_FAILURE; -using ::RTT_STATUS_INVALID_REQ; -using ::RTT_STATUS_NAN_RANGING_CONCURRENCY_NOT_SUPPORTED; -using ::RTT_STATUS_NAN_RANGING_PROTOCOL_FAILURE; -using ::RTT_STATUS_NO_WIFI; -using ::RTT_STATUS_SUCCESS; -using ::RTT_TYPE_1_SIDED; -using ::RTT_TYPE_2_SIDED; -using ::RX_PKT_FATE_DRV_DROP_FILTER; -using ::RX_PKT_FATE_DRV_DROP_INVALID; -using ::RX_PKT_FATE_DRV_DROP_NOBUFS; -using ::RX_PKT_FATE_DRV_DROP_OTHER; -using ::RX_PKT_FATE_DRV_QUEUED; -using ::RX_PKT_FATE_FW_DROP_FILTER; -using ::RX_PKT_FATE_FW_DROP_INVALID; -using ::RX_PKT_FATE_FW_DROP_NOBUFS; -using ::RX_PKT_FATE_FW_DROP_OTHER; -using ::RX_PKT_FATE_FW_QUEUED; -using ::RX_PKT_FATE_SUCCESS; -using ::ssid_t; -using ::transaction_id; -using ::TX_PKT_FATE_ACKED; -using ::TX_PKT_FATE_DRV_DROP_INVALID; -using ::TX_PKT_FATE_DRV_DROP_NOBUFS; -using ::TX_PKT_FATE_DRV_DROP_OTHER; -using ::TX_PKT_FATE_DRV_QUEUED; -using ::TX_PKT_FATE_FW_DROP_INVALID; -using ::TX_PKT_FATE_FW_DROP_NOBUFS; -using ::TX_PKT_FATE_FW_DROP_OTHER; -using ::TX_PKT_FATE_FW_QUEUED; -using ::TX_PKT_FATE_SENT; -using ::WIFI_AC_BE; -using ::WIFI_AC_BK; -using ::WIFI_AC_VI; -using ::WIFI_AC_VO; -using ::wifi_band; -using ::WIFI_BAND_A; -using ::WIFI_BAND_A_DFS; -using ::WIFI_BAND_A_WITH_DFS; -using ::WIFI_BAND_ABG; -using ::WIFI_BAND_ABG_WITH_DFS; -using ::WIFI_BAND_BG; -using ::WIFI_BAND_UNSPECIFIED; -using ::wifi_cached_scan_results; -using ::WIFI_CHAN_WIDTH_10; -using ::WIFI_CHAN_WIDTH_160; -using ::WIFI_CHAN_WIDTH_20; -using ::WIFI_CHAN_WIDTH_40; -using ::WIFI_CHAN_WIDTH_5; -using ::WIFI_CHAN_WIDTH_80; -using ::WIFI_CHAN_WIDTH_80P80; -using ::WIFI_CHAN_WIDTH_INVALID; -using ::wifi_channel_info; -using ::wifi_channel_stat; -using ::wifi_channel_width; -using ::wifi_coex_restriction; -using ::wifi_coex_unsafe_channel; -using ::WIFI_DUAL_STA_NON_TRANSIENT_UNBIASED; -using ::WIFI_DUAL_STA_TRANSIENT_PREFER_PRIMARY; -using ::wifi_error; -using ::WIFI_ERROR_BUSY; -using ::WIFI_ERROR_INVALID_ARGS; -using ::WIFI_ERROR_INVALID_REQUEST_ID; -using ::WIFI_ERROR_NONE; -using ::WIFI_ERROR_NOT_AVAILABLE; -using ::WIFI_ERROR_NOT_SUPPORTED; -using ::WIFI_ERROR_OUT_OF_MEMORY; -using ::WIFI_ERROR_TIMED_OUT; -using ::WIFI_ERROR_TOO_MANY_REQUESTS; -using ::WIFI_ERROR_UNINITIALIZED; -using ::WIFI_ERROR_UNKNOWN; -using ::wifi_gscan_capabilities; -using ::wifi_hal_fn; -using ::wifi_information_element; -using ::WIFI_INTERFACE_IBSS; -using ::WIFI_INTERFACE_MESH; -using ::wifi_interface_mode; -using ::WIFI_INTERFACE_NAN; -using ::WIFI_INTERFACE_P2P_CLIENT; -using ::WIFI_INTERFACE_P2P_GO; -using ::WIFI_INTERFACE_SOFTAP; -using ::WIFI_INTERFACE_STA; -using ::WIFI_INTERFACE_TDLS; -using ::wifi_interface_type; -using ::WIFI_INTERFACE_TYPE_AP; -using ::WIFI_INTERFACE_TYPE_NAN; -using ::WIFI_INTERFACE_TYPE_P2P; -using ::WIFI_INTERFACE_TYPE_STA; -using ::WIFI_INTERFACE_UNKNOWN; -using ::wifi_latency_mode; -using ::WIFI_LATENCY_MODE_LOW; -using ::WIFI_LATENCY_MODE_NORMAL; -using ::wifi_lci_information; -using ::wifi_lcr_information; -using ::WIFI_LOGGER_CONNECT_EVENT_SUPPORTED; -using ::WIFI_LOGGER_DRIVER_DUMP_SUPPORTED; -using ::WIFI_LOGGER_MEMORY_DUMP_SUPPORTED; -using ::WIFI_LOGGER_PACKET_FATE_SUPPORTED; -using ::WIFI_LOGGER_POWER_EVENT_SUPPORTED; -using ::WIFI_LOGGER_WAKE_LOCK_SUPPORTED; -using ::WIFI_MOTION_EXPECTED; -using ::WIFI_MOTION_NOT_EXPECTED; -using ::wifi_motion_pattern; -using ::WIFI_MOTION_UNKNOWN; -using ::wifi_multi_sta_use_case; -using ::wifi_power_scenario; -using ::WIFI_POWER_SCENARIO_ON_BODY_CELL_OFF; -using ::WIFI_POWER_SCENARIO_ON_BODY_CELL_ON; -using ::WIFI_POWER_SCENARIO_ON_HEAD_CELL_OFF; -using ::WIFI_POWER_SCENARIO_ON_HEAD_CELL_ON; -using ::WIFI_POWER_SCENARIO_VOICE_CALL; -using ::wifi_rate; -using ::wifi_request_id; -using ::wifi_ring_buffer_status; -using ::wifi_roaming_capabilities; -using ::wifi_roaming_config; -using ::wifi_rtt_bw; -using ::WIFI_RTT_BW_10; -using ::WIFI_RTT_BW_160; -using ::WIFI_RTT_BW_20; -using ::WIFI_RTT_BW_40; -using ::WIFI_RTT_BW_5; -using ::WIFI_RTT_BW_80; -using ::wifi_rtt_capabilities; -using ::wifi_rtt_config; -using ::wifi_rtt_preamble; -using ::WIFI_RTT_PREAMBLE_HE; -using ::WIFI_RTT_PREAMBLE_HT; -using ::WIFI_RTT_PREAMBLE_LEGACY; -using ::WIFI_RTT_PREAMBLE_VHT; -using ::wifi_rtt_responder; -using ::wifi_rtt_result; -using ::wifi_rtt_status; -using ::wifi_rtt_type; -using ::wifi_rx_packet_fate; -using ::wifi_rx_report; -using ::wifi_scan_bucket_spec; -using ::wifi_scan_cmd_params; -using ::WIFI_SCAN_FLAG_INTERRUPTED; -using ::wifi_scan_result; -using ::WIFI_SUCCESS; -using ::wifi_tx_packet_fate; -using ::wifi_tx_report; -using ::wifi_usable_channel; -using ::WIFI_USABLE_CHANNEL_FILTER_CELLULAR_COEXISTENCE; -using ::WIFI_USABLE_CHANNEL_FILTER_CONCURRENCY; -using ::WLAN_MAC_2_4_BAND; -using ::WLAN_MAC_5_0_BAND; -using ::WLAN_MAC_60_0_BAND; -using ::WLAN_MAC_6_0_BAND; - -// APF capabilities supported by the iface. -struct PacketFilterCapabilities { - uint32_t version; - uint32_t max_len; -}; - -// WARNING: We don't care about the variable sized members of either -// |wifi_iface_stat|, |wifi_radio_stat| structures. So, using the pragma -// to escape the compiler warnings regarding this. -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wgnu-variable-sized-type-not-at-end" -// The |wifi_radio_stat.tx_time_per_levels| stats is provided as a pointer in -// |wifi_radio_stat| structure in the legacy HAL API. Separate that out -// into a separate return element to avoid passing pointers around. -struct LinkLayerRadioStats { - wifi_radio_stat stats; - std::vector<uint32_t> tx_time_per_levels; - std::vector<wifi_channel_stat> channel_stats; -}; - -struct WifiPeerInfo { - wifi_peer_info peer_info; - std::vector<wifi_rate_stat> rate_stats; -}; - -struct LinkLayerStats { - wifi_iface_stat iface; - std::vector<LinkLayerRadioStats> radios; - std::vector<WifiPeerInfo> peers; -}; -#pragma GCC diagnostic pop - -// The |WLAN_DRIVER_WAKE_REASON_CNT.cmd_event_wake_cnt| and -// |WLAN_DRIVER_WAKE_REASON_CNT.driver_fw_local_wake_cnt| stats is provided -// as a pointer in |WLAN_DRIVER_WAKE_REASON_CNT| structure in the legacy HAL -// API. Separate that out into a separate return elements to avoid passing -// pointers around. -struct WakeReasonStats { - WLAN_DRIVER_WAKE_REASON_CNT wake_reason_cnt; - std::vector<uint32_t> cmd_event_wake_cnt; - std::vector<uint32_t> driver_fw_local_wake_cnt; -}; - -// NAN response and event callbacks struct. -struct NanCallbackHandlers { - // NotifyResponse invoked to notify the status of the Request. - std::function<void(transaction_id, const NanResponseMsg&)> - on_notify_response; - // Various event callbacks. - std::function<void(const NanPublishTerminatedInd&)> - on_event_publish_terminated; - std::function<void(const NanMatchInd&)> on_event_match; - std::function<void(const NanMatchExpiredInd&)> on_event_match_expired; - std::function<void(const NanSubscribeTerminatedInd&)> - on_event_subscribe_terminated; - std::function<void(const NanFollowupInd&)> on_event_followup; - std::function<void(const NanDiscEngEventInd&)> on_event_disc_eng_event; - std::function<void(const NanDisabledInd&)> on_event_disabled; - std::function<void(const NanTCAInd&)> on_event_tca; - std::function<void(const NanBeaconSdfPayloadInd&)> - on_event_beacon_sdf_payload; - std::function<void(const NanDataPathRequestInd&)> - on_event_data_path_request; - std::function<void(const NanDataPathConfirmInd&)> - on_event_data_path_confirm; - std::function<void(const NanDataPathEndInd&)> on_event_data_path_end; - std::function<void(const NanTransmitFollowupInd&)> - on_event_transmit_follow_up; - std::function<void(const NanRangeRequestInd&)> on_event_range_request; - std::function<void(const NanRangeReportInd&)> on_event_range_report; - std::function<void(const NanDataPathScheduleUpdateInd&)> - on_event_schedule_update; -}; - -// Full scan results contain IE info and are hence passed by reference, to -// preserve the variable length array member |ie_data|. Callee must not retain -// the pointer. -using on_gscan_full_result_callback = - std::function<void(wifi_request_id, const wifi_scan_result*, uint32_t)>; -// These scan results don't contain any IE info, so no need to pass by -// reference. -using on_gscan_results_callback = std::function<void( - wifi_request_id, const std::vector<wifi_cached_scan_results>&)>; - -// Invoked when the rssi value breaches the thresholds set. -using on_rssi_threshold_breached_callback = - std::function<void(wifi_request_id, std::array<uint8_t, 6>, int8_t)>; - -// Callback for RTT range request results. -// Rtt results contain IE info and are hence passed by reference, to -// preserve the |LCI| and |LCR| pointers. Callee must not retain -// the pointer. -using on_rtt_results_callback = std::function<void( - wifi_request_id, const std::vector<const wifi_rtt_result*>&)>; - -// Callback for ring buffer data. -using on_ring_buffer_data_callback = - std::function<void(const std::string&, const std::vector<uint8_t>&, - const wifi_ring_buffer_status&)>; - -// Callback for alerts. -using on_error_alert_callback = - std::function<void(int32_t, const std::vector<uint8_t>&)>; - -// Callback for subsystem restart -using on_subsystem_restart_callback = std::function<void(const std::string&)>; - -// Struct for the mac info from the legacy HAL. This is a cleaner version -// of the |wifi_mac_info| & |wifi_iface_info|. -typedef struct { - std::string name; - wifi_channel channel; -} WifiIfaceInfo; - -typedef struct { - uint32_t wlan_mac_id; - /* BIT MASK of BIT(WLAN_MAC*) as represented by wlan_mac_band */ - uint32_t mac_band; - /* Represents the connected Wi-Fi interfaces associated with each MAC */ - std::vector<WifiIfaceInfo> iface_infos; -} WifiMacInfo; - -// Callback for radio mode change -using on_radio_mode_change_callback = - std::function<void(const std::vector<WifiMacInfo>&)>; - -// TWT response and event callbacks struct. -struct TwtCallbackHandlers { - // Callback for TWT setup response - std::function<void(const TwtSetupResponse&)> on_setup_response; - // Callback for TWT teardown completion - std::function<void(const TwtTeardownCompletion&)> on_teardown_completion; - // Callback for TWT info frame received event - std::function<void(const TwtInfoFrameReceived&)> on_info_frame_received; - // Callback for TWT notification from the device - std::function<void(const TwtDeviceNotify&)> on_device_notify; -}; - -/** - * Class that encapsulates all legacy HAL interactions. - * This class manages the lifetime of the event loop thread used by legacy HAL. - * - * Note: There will only be a single instance of this class created in the Wifi - * object and will be valid for the lifetime of the process. - */ -class WifiLegacyHal { - public: - WifiLegacyHal(const std::weak_ptr<wifi_system::InterfaceTool> iface_tool, - const wifi_hal_fn& fn, bool is_primary); - virtual ~WifiLegacyHal() = default; - - // Initialize the legacy HAL function table. - virtual wifi_error initialize(); - // Start the legacy HAL and the event looper thread. - virtual wifi_error start(); - // Deinitialize the legacy HAL and wait for the event loop thread to exit - // using a predefined timeout. - virtual wifi_error stop(std::unique_lock<std::recursive_mutex>* lock, - const std::function<void()>& on_complete_callback); - virtual wifi_error waitForDriverReady(); - // Checks if legacy HAL has successfully started - bool isStarted(); - // Wrappers for all the functions in the legacy HAL function table. - virtual std::pair<wifi_error, std::string> getDriverVersion( - const std::string& iface_name); - virtual std::pair<wifi_error, std::string> getFirmwareVersion( - const std::string& iface_name); - std::pair<wifi_error, std::vector<uint8_t>> requestDriverMemoryDump( - const std::string& iface_name); - std::pair<wifi_error, std::vector<uint8_t>> requestFirmwareMemoryDump( - const std::string& iface_name); - std::pair<wifi_error, uint64_t> getSupportedFeatureSet( - const std::string& iface_name); - // APF functions. - std::pair<wifi_error, PacketFilterCapabilities> getPacketFilterCapabilities( - const std::string& iface_name); - wifi_error setPacketFilter(const std::string& iface_name, - const std::vector<uint8_t>& program); - std::pair<wifi_error, std::vector<uint8_t>> readApfPacketFilterData( - const std::string& iface_name); - // Gscan functions. - std::pair<wifi_error, wifi_gscan_capabilities> getGscanCapabilities( - const std::string& iface_name); - // These API's provides a simplified interface over the legacy Gscan API's: - // a) All scan events from the legacy HAL API other than the - // |WIFI_SCAN_FAILED| are treated as notification of results. - // This method then retrieves the cached scan results from the legacy - // HAL API and triggers the externally provided - // |on_results_user_callback| on success. - // b) |WIFI_SCAN_FAILED| scan event or failure to retrieve cached scan - // results - // triggers the externally provided |on_failure_user_callback|. - // c) Full scan result event triggers the externally provided - // |on_full_result_user_callback|. - wifi_error startGscan( - const std::string& iface_name, wifi_request_id id, - const wifi_scan_cmd_params& params, - const std::function<void(wifi_request_id)>& on_failure_callback, - const on_gscan_results_callback& on_results_callback, - const on_gscan_full_result_callback& on_full_result_callback); - wifi_error stopGscan(const std::string& iface_name, wifi_request_id id); - std::pair<wifi_error, std::vector<uint32_t>> getValidFrequenciesForBand( - const std::string& iface_name, wifi_band band); - virtual wifi_error setDfsFlag(const std::string& iface_name, bool dfs_on); - // Link layer stats functions. - wifi_error enableLinkLayerStats(const std::string& iface_name, bool debug); - wifi_error disableLinkLayerStats(const std::string& iface_name); - std::pair<wifi_error, LinkLayerStats> getLinkLayerStats( - const std::string& iface_name); - // RSSI monitor functions. - wifi_error startRssiMonitoring(const std::string& iface_name, - wifi_request_id id, int8_t max_rssi, - int8_t min_rssi, - const on_rssi_threshold_breached_callback& - on_threshold_breached_callback); - wifi_error stopRssiMonitoring(const std::string& iface_name, - wifi_request_id id); - std::pair<wifi_error, wifi_roaming_capabilities> getRoamingCapabilities( - const std::string& iface_name); - wifi_error configureRoaming(const std::string& iface_name, - const wifi_roaming_config& config); - wifi_error enableFirmwareRoaming(const std::string& iface_name, - fw_roaming_state_t state); - wifi_error configureNdOffload(const std::string& iface_name, bool enable); - wifi_error startSendingOffloadedPacket( - const std::string& iface_name, uint32_t cmd_id, uint16_t ether_type, - const std::vector<uint8_t>& ip_packet_data, - const std::array<uint8_t, 6>& src_address, - const std::array<uint8_t, 6>& dst_address, uint32_t period_in_ms); - wifi_error stopSendingOffloadedPacket(const std::string& iface_name, - uint32_t cmd_id); - virtual wifi_error selectTxPowerScenario(const std::string& iface_name, - wifi_power_scenario scenario); - virtual wifi_error resetTxPowerScenario(const std::string& iface_name); - wifi_error setLatencyMode(const std::string& iface_name, - wifi_latency_mode mode); - wifi_error setThermalMitigationMode(wifi_thermal_mode mode, - uint32_t completion_window); - wifi_error setDscpToAccessCategoryMapping(uint32_t start, uint32_t end, - uint32_t access_category); - wifi_error resetDscpToAccessCategoryMapping(); - // Logger/debug functions. - std::pair<wifi_error, uint32_t> getLoggerSupportedFeatureSet( - const std::string& iface_name); - wifi_error startPktFateMonitoring(const std::string& iface_name); - std::pair<wifi_error, std::vector<wifi_tx_report>> getTxPktFates( - const std::string& iface_name); - std::pair<wifi_error, std::vector<wifi_rx_report>> getRxPktFates( - const std::string& iface_name); - std::pair<wifi_error, WakeReasonStats> getWakeReasonStats( - const std::string& iface_name); - wifi_error registerRingBufferCallbackHandler( - const std::string& iface_name, - const on_ring_buffer_data_callback& on_data_callback); - wifi_error deregisterRingBufferCallbackHandler( - const std::string& iface_name); - wifi_error registerSubsystemRestartCallbackHandler( - const on_subsystem_restart_callback& on_restart_callback); - std::pair<wifi_error, std::vector<wifi_ring_buffer_status>> - getRingBuffersStatus(const std::string& iface_name); - wifi_error startRingBufferLogging(const std::string& iface_name, - const std::string& ring_name, - uint32_t verbose_level, - uint32_t max_interval_sec, - uint32_t min_data_size); - wifi_error getRingBufferData(const std::string& iface_name, - const std::string& ring_name); - wifi_error registerErrorAlertCallbackHandler( - const std::string& iface_name, - const on_error_alert_callback& on_alert_callback); - wifi_error deregisterErrorAlertCallbackHandler( - const std::string& iface_name); - // Radio mode functions. - virtual wifi_error registerRadioModeChangeCallbackHandler( - const std::string& iface_name, - const on_radio_mode_change_callback& on_user_change_callback); - // RTT functions. - wifi_error startRttRangeRequest( - const std::string& iface_name, wifi_request_id id, - const std::vector<wifi_rtt_config>& rtt_configs, - const on_rtt_results_callback& on_results_callback); - wifi_error cancelRttRangeRequest( - const std::string& iface_name, wifi_request_id id, - const std::vector<std::array<uint8_t, 6>>& mac_addrs); - std::pair<wifi_error, wifi_rtt_capabilities> getRttCapabilities( - const std::string& iface_name); - std::pair<wifi_error, wifi_rtt_responder> getRttResponderInfo( - const std::string& iface_name); - wifi_error enableRttResponder(const std::string& iface_name, - wifi_request_id id, - const wifi_channel_info& channel_hint, - uint32_t max_duration_secs, - const wifi_rtt_responder& info); - wifi_error disableRttResponder(const std::string& iface_name, - wifi_request_id id); - wifi_error setRttLci(const std::string& iface_name, wifi_request_id id, - const wifi_lci_information& info); - wifi_error setRttLcr(const std::string& iface_name, wifi_request_id id, - const wifi_lcr_information& info); - // NAN functions. - virtual wifi_error nanRegisterCallbackHandlers( - const std::string& iface_name, const NanCallbackHandlers& callbacks); - wifi_error nanEnableRequest(const std::string& iface_name, - transaction_id id, const NanEnableRequest& msg); - virtual wifi_error nanDisableRequest(const std::string& iface_name, - transaction_id id); - wifi_error nanPublishRequest(const std::string& iface_name, - transaction_id id, - const NanPublishRequest& msg); - wifi_error nanPublishCancelRequest(const std::string& iface_name, - transaction_id id, - const NanPublishCancelRequest& msg); - wifi_error nanSubscribeRequest(const std::string& iface_name, - transaction_id id, - const NanSubscribeRequest& msg); - wifi_error nanSubscribeCancelRequest(const std::string& iface_name, - transaction_id id, - const NanSubscribeCancelRequest& msg); - wifi_error nanTransmitFollowupRequest( - const std::string& iface_name, transaction_id id, - const NanTransmitFollowupRequest& msg); - wifi_error nanStatsRequest(const std::string& iface_name, transaction_id id, - const NanStatsRequest& msg); - wifi_error nanConfigRequest(const std::string& iface_name, - transaction_id id, const NanConfigRequest& msg); - wifi_error nanTcaRequest(const std::string& iface_name, transaction_id id, - const NanTCARequest& msg); - wifi_error nanBeaconSdfPayloadRequest( - const std::string& iface_name, transaction_id id, - const NanBeaconSdfPayloadRequest& msg); - std::pair<wifi_error, NanVersion> nanGetVersion(); - wifi_error nanGetCapabilities(const std::string& iface_name, - transaction_id id); - wifi_error nanDataInterfaceCreate(const std::string& iface_name, - transaction_id id, - const std::string& data_iface_name); - virtual wifi_error nanDataInterfaceDelete( - const std::string& iface_name, transaction_id id, - const std::string& data_iface_name); - wifi_error nanDataRequestInitiator(const std::string& iface_name, - transaction_id id, - const NanDataPathInitiatorRequest& msg); - wifi_error nanDataIndicationResponse( - const std::string& iface_name, transaction_id id, - const NanDataPathIndicationResponse& msg); - wifi_error nanDataEnd(const std::string& iface_name, transaction_id id, - uint32_t ndpInstanceId); - // AP functions. - wifi_error setCountryCode(const std::string& iface_name, - std::array<int8_t, 2> code); - - // interface functions. - virtual wifi_error createVirtualInterface(const std::string& ifname, - wifi_interface_type iftype); - virtual wifi_error deleteVirtualInterface(const std::string& ifname); - wifi_error getSupportedIfaceName(uint32_t iface_type, std::string& ifname); - - // STA + STA functions - virtual wifi_error multiStaSetPrimaryConnection(const std::string& ifname); - virtual wifi_error multiStaSetUseCase(wifi_multi_sta_use_case use_case); - - // Coex functions. - virtual wifi_error setCoexUnsafeChannels( - std::vector<wifi_coex_unsafe_channel> unsafe_channels, - uint32_t restrictions); - - wifi_error setVoipMode(const std::string& iface_name, wifi_voip_mode mode); - - wifi_error twtRegisterHandler(const std::string& iface_name, - const TwtCallbackHandlers& handler); - - std::pair<wifi_error, TwtCapabilitySet> twtGetCapability( - const std::string& iface_name); - - wifi_error twtSetupRequest(const std::string& iface_name, - const TwtSetupRequest& msg); - - wifi_error twtTearDownRequest(const std::string& iface_name, - const TwtTeardownRequest& msg); - - wifi_error twtInfoFrameRequest(const std::string& iface_name, - const TwtInfoFrameRequest& msg); - - std::pair<wifi_error, TwtStats> twtGetStats(const std::string& iface_name, - uint8_t configId); - - wifi_error twtClearStats(const std::string& iface_name, uint8_t configId); - - wifi_error setDtimConfig(const std::string& iface_name, - uint32_t multiplier); - - // Retrieve the list of usable channels in the requested bands - // for the requested modes - std::pair<wifi_error, std::vector<wifi_usable_channel>> getUsableChannels( - uint32_t band_mask, uint32_t iface_mode_mask, uint32_t filter_mask); - - wifi_error triggerSubsystemRestart(); - - private: - // Retrieve interface handles for all the available interfaces. - wifi_error retrieveIfaceHandles(); - wifi_interface_handle getIfaceHandle(const std::string& iface_name); - // Run the legacy HAL event loop thread. - void runEventLoop(); - // Retrieve the cached gscan results to pass the results back to the - // external callbacks. - std::pair<wifi_error, std::vector<wifi_cached_scan_results>> - getGscanCachedResults(const std::string& iface_name); - void invalidate(); - // Handles wifi (error) status of Virtual interface create/delete - wifi_error handleVirtualInterfaceCreateOrDeleteStatus( - const std::string& ifname, wifi_error status); - - // Global function table of legacy HAL. - wifi_hal_fn global_func_table_; - // Opaque handle to be used for all global operations. - wifi_handle global_handle_; - // Map of interface name to handle that is to be used for all interface - // specific operations. - std::map<std::string, wifi_interface_handle> iface_name_to_handle_; - // Flag to indicate if we have initiated the cleanup of legacy HAL. - std::atomic<bool> awaiting_event_loop_termination_; - std::condition_variable_any stop_wait_cv_; - // Flag to indicate if the legacy HAL has been started. - bool is_started_; - std::weak_ptr<wifi_system::InterfaceTool> iface_tool_; - // flag to indicate if this HAL is for the primary chip. This is used - // in order to avoid some hard-coded behavior used with older HALs, - // such as bring wlan0 interface up/down on start/stop HAL. - // it may be removed once vendor HALs are updated. - bool is_primary_; -}; - -} // namespace legacy_hal -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android - -#endif // WIFI_LEGACY_HAL_H_ diff --git a/wifi/1.5/default/wifi_legacy_hal_factory.cpp b/wifi/1.5/default/wifi_legacy_hal_factory.cpp deleted file mode 100644 index fbaa284f56..0000000000 --- a/wifi/1.5/default/wifi_legacy_hal_factory.cpp +++ /dev/null @@ -1,263 +0,0 @@ -/* - * Copyright (C) 2020 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include <dirent.h> -#include <sys/stat.h> -#include <sys/types.h> - -#include <android-base/logging.h> -#include <dlfcn.h> -#include <libxml/parser.h> -#include <libxml/tree.h> -#include <libxml/xmlmemory.h> - -#include "wifi_legacy_hal_factory.h" -#include "wifi_legacy_hal_stubs.h" - -namespace { -static constexpr char kVendorHalsDescPath[] = "/vendor/etc/wifi/vendor_hals"; -static constexpr char kVendorHalsDescExt[] = ".xml"; -static constexpr uint32_t kVendorHalsDescVersion = 1; - -bool isDirectory(struct dirent* entryPtr) { - bool isDir = false; - if (entryPtr->d_type != DT_UNKNOWN && entryPtr->d_type != DT_LNK) { - isDir = (entryPtr->d_type == DT_DIR); - } else { - struct stat entryStat; - stat(entryPtr->d_name, &entryStat); - isDir = S_ISDIR(entryStat.st_mode); - } - return isDir; -} - -bool isFileExtension(const char* name, const char* ext) { - if (name == NULL) return false; - if (ext == NULL) return false; - - size_t extLen = strlen(ext); - size_t nameLen = strlen(name); - - if (extLen > nameLen) return false; - - if (strncmp(name + nameLen - extLen, ext, extLen) != 0) return false; - - return true; -} -}; // namespace - -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { -namespace legacy_hal { - -WifiLegacyHalFactory::WifiLegacyHalFactory( - const std::weak_ptr<wifi_system::InterfaceTool> iface_tool) - : iface_tool_(iface_tool) {} - -std::vector<std::shared_ptr<WifiLegacyHal>> WifiLegacyHalFactory::getHals() { - if (legacy_hals_.empty()) { - if (!initVendorHalDescriptorFromLinked()) - initVendorHalsDescriptorList(); - for (auto& desc : descs_) { - std::shared_ptr<WifiLegacyHal> hal = - std::make_shared<WifiLegacyHal>(iface_tool_, desc.fn, - desc.primary); - legacy_hals_.push_back(hal); - } - } - - return legacy_hals_; -} - -bool WifiLegacyHalFactory::initVendorHalDescriptorFromLinked() { - wifi_hal_lib_desc desc; - - if (!initLinkedHalFunctionTable(&desc.fn)) return false; - - desc.primary = true; - desc.handle = NULL; - descs_.push_back(desc); - return true; -} - -bool WifiLegacyHalFactory::initLinkedHalFunctionTable(wifi_hal_fn* hal_fn) { - init_wifi_vendor_hal_func_table_t initfn; - - initfn = (init_wifi_vendor_hal_func_table_t)dlsym( - RTLD_DEFAULT, "init_wifi_vendor_hal_func_table"); - if (!initfn) { - LOG(INFO) << "no vendor HAL library linked, will try dynamic load"; - return false; - } - - if (!initHalFuncTableWithStubs(hal_fn)) { - LOG(ERROR) << "Can not initialize the basic function pointer table"; - return false; - } - - if (initfn(hal_fn) != WIFI_SUCCESS) { - LOG(ERROR) << "Can not initialize the vendor function pointer table"; - return false; - } - - return true; -} - -/* - * Overall structure of the HAL descriptor XML schema - * - * <?xml version="1.0" encoding="UTF-8"?> - * <WifiVendorHal version="1"> - * <path>/vendor/lib64/libwifi-hal-qcom.so</path> - * <primary>1</primary> - * </WifiVendorHal> - */ -void WifiLegacyHalFactory::initVendorHalsDescriptorList() { - xmlDocPtr xml; - xmlNodePtr node, cnode; - char* version; - std::string path; - xmlChar* value; - wifi_hal_lib_desc desc; - - LOG(INFO) << "processing vendor HALs descriptions in " - << kVendorHalsDescPath; - DIR* dirPtr = ::opendir(kVendorHalsDescPath); - if (dirPtr == NULL) { - LOG(ERROR) << "failed to open " << kVendorHalsDescPath; - return; - } - for (struct dirent* entryPtr = ::readdir(dirPtr); entryPtr != NULL; - entryPtr = ::readdir(dirPtr)) { - if (isDirectory(entryPtr)) continue; - - if (!isFileExtension(entryPtr->d_name, kVendorHalsDescExt)) - continue; // only process .xml files - - LOG(INFO) << "processing config file: " << entryPtr->d_name; - - std::string fullPath(kVendorHalsDescPath); - fullPath.append("/"); - fullPath.append(entryPtr->d_name); - xml = xmlReadFile(fullPath.c_str(), "UTF-8", XML_PARSE_RECOVER); - if (!xml) { - LOG(ERROR) << "failed to parse: " << entryPtr->d_name - << " skipping..."; - continue; - } - node = xmlDocGetRootElement(xml); - if (!node) { - LOG(ERROR) << "empty config file: " << entryPtr->d_name - << " skipping..."; - goto skip; - } - if (xmlStrcmp(node->name, BAD_CAST "WifiVendorHal")) { - LOG(ERROR) << "bad config, root element not WifiVendorHal: " - << entryPtr->d_name << " skipping..."; - goto skip; - } - version = (char*)xmlGetProp(node, BAD_CAST "version"); - if (!version || strtoul(version, NULL, 0) != kVendorHalsDescVersion) { - LOG(ERROR) << "conf file: " << entryPtr->d_name - << "must have version: " << kVendorHalsDescVersion - << ", skipping..."; - goto skip; - } - cnode = node->children; - path.clear(); - desc.primary = false; - while (cnode) { - if (!xmlStrcmp(cnode->name, BAD_CAST "path")) { - value = xmlNodeListGetString(xml, cnode->children, 1); - if (value) path = (char*)value; - xmlFree(value); - } else if (!xmlStrcmp(cnode->name, BAD_CAST "primary")) { - value = xmlNodeListGetString(xml, cnode->children, 1); - desc.primary = !xmlStrcmp(value, BAD_CAST "1"); - xmlFree(value); - } - cnode = cnode->next; - } - if (path.empty()) { - LOG(ERROR) << "hal library path not provided in: " - << entryPtr->d_name << ", skipping..."; - goto skip; - } - if (loadVendorHalLib(path, desc)) { - if (desc.primary) - descs_.insert(descs_.begin(), desc); - else - descs_.push_back(desc); - } - skip: - xmlFreeDoc(xml); - } - ::closedir(dirPtr); -} - -bool WifiLegacyHalFactory::loadVendorHalLib(const std::string& path, - wifi_hal_lib_desc& desc) { - void* h = dlopen(path.c_str(), RTLD_NOW | RTLD_LOCAL); - init_wifi_vendor_hal_func_table_t initfn; - wifi_error res; - - if (!h) { - LOG(ERROR) << "failed to open vendor hal library: " << path; - return false; - } - initfn = (init_wifi_vendor_hal_func_table_t)dlsym( - h, "init_wifi_vendor_hal_func_table"); - if (!initfn) { - LOG(ERROR) << "init_wifi_vendor_hal_func_table not found in: " << path; - goto out_err; - } - - if (!initHalFuncTableWithStubs(&desc.fn)) { - LOG(ERROR) << "Can not initialize the basic function pointer table"; - goto out_err; - } - res = initfn(&desc.fn); - if (res != WIFI_SUCCESS) { - LOG(ERROR) << "failed to initialize the vendor func table in: " << path - << " error: " << res; - goto out_err; - } - - res = desc.fn.wifi_early_initialize(); - // vendor HALs which do not implement early_initialize will return - // WIFI_ERROR_NOT_SUPPORTED, treat this as success. - if (res != WIFI_SUCCESS && res != WIFI_ERROR_NOT_SUPPORTED) { - LOG(ERROR) << "early initialization failed in: " << path - << " error: " << res; - goto out_err; - } - - desc.handle = h; - return true; -out_err: - dlclose(h); - return false; -} - -} // namespace legacy_hal -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android diff --git a/wifi/1.5/default/wifi_legacy_hal_factory.h b/wifi/1.5/default/wifi_legacy_hal_factory.h deleted file mode 100644 index e3440faff2..0000000000 --- a/wifi/1.5/default/wifi_legacy_hal_factory.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (C) 2020 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef WIFI_LEGACY_HAL_FACTORY_H_ -#define WIFI_LEGACY_HAL_FACTORY_H_ - -#include <wifi_system/interface_tool.h> - -#include "wifi_legacy_hal.h" - -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { -// This is in a separate namespace to prevent typename conflicts between -// the legacy HAL types and the HIDL interface types. -namespace legacy_hal { -/** - * Class that creates WifiLegacyHal objects for vendor HALs in the system. - */ -class WifiLegacyHalFactory { - public: - WifiLegacyHalFactory( - const std::weak_ptr<wifi_system::InterfaceTool> iface_tool); - virtual ~WifiLegacyHalFactory() = default; - - std::vector<std::shared_ptr<WifiLegacyHal>> getHals(); - - private: - typedef struct { - wifi_hal_fn fn; - bool primary; - void* handle; - } wifi_hal_lib_desc; - - bool initVendorHalDescriptorFromLinked(); - void initVendorHalsDescriptorList(); - bool initLinkedHalFunctionTable(wifi_hal_fn* hal_fn); - bool loadVendorHalLib(const std::string& path, wifi_hal_lib_desc& desc); - - std::weak_ptr<wifi_system::InterfaceTool> iface_tool_; - std::vector<wifi_hal_lib_desc> descs_; - std::vector<std::shared_ptr<WifiLegacyHal>> legacy_hals_; -}; - -} // namespace legacy_hal -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android - -#endif // WIFI_LEGACY_HAL_FACTORY_H_ diff --git a/wifi/1.5/default/wifi_legacy_hal_stubs.cpp b/wifi/1.5/default/wifi_legacy_hal_stubs.cpp deleted file mode 100644 index dd860d6920..0000000000 --- a/wifi/1.5/default/wifi_legacy_hal_stubs.cpp +++ /dev/null @@ -1,171 +0,0 @@ -/* - * Copyright (C) 2016 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "wifi_legacy_hal_stubs.h" - -// TODO: Remove these stubs from HalTool in libwifi-system. -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { -namespace legacy_hal { -template <typename> -struct stubFunction; - -template <typename R, typename... Args> -struct stubFunction<R (*)(Args...)> { - static constexpr R invoke(Args...) { return WIFI_ERROR_NOT_SUPPORTED; } -}; -template <typename... Args> -struct stubFunction<void (*)(Args...)> { - static constexpr void invoke(Args...) {} -}; - -template <typename T> -void populateStubFor(T* val) { - *val = &stubFunction<T>::invoke; -} - -bool initHalFuncTableWithStubs(wifi_hal_fn* hal_fn) { - if (hal_fn == nullptr) { - return false; - } - populateStubFor(&hal_fn->wifi_initialize); - populateStubFor(&hal_fn->wifi_wait_for_driver_ready); - populateStubFor(&hal_fn->wifi_cleanup); - populateStubFor(&hal_fn->wifi_event_loop); - populateStubFor(&hal_fn->wifi_get_error_info); - populateStubFor(&hal_fn->wifi_get_supported_feature_set); - populateStubFor(&hal_fn->wifi_get_concurrency_matrix); - populateStubFor(&hal_fn->wifi_set_scanning_mac_oui); - populateStubFor(&hal_fn->wifi_get_supported_channels); - populateStubFor(&hal_fn->wifi_is_epr_supported); - populateStubFor(&hal_fn->wifi_get_ifaces); - populateStubFor(&hal_fn->wifi_get_iface_name); - populateStubFor(&hal_fn->wifi_set_iface_event_handler); - populateStubFor(&hal_fn->wifi_reset_iface_event_handler); - populateStubFor(&hal_fn->wifi_start_gscan); - populateStubFor(&hal_fn->wifi_stop_gscan); - populateStubFor(&hal_fn->wifi_get_cached_gscan_results); - populateStubFor(&hal_fn->wifi_set_bssid_hotlist); - populateStubFor(&hal_fn->wifi_reset_bssid_hotlist); - populateStubFor(&hal_fn->wifi_set_significant_change_handler); - populateStubFor(&hal_fn->wifi_reset_significant_change_handler); - populateStubFor(&hal_fn->wifi_get_gscan_capabilities); - populateStubFor(&hal_fn->wifi_set_link_stats); - populateStubFor(&hal_fn->wifi_get_link_stats); - populateStubFor(&hal_fn->wifi_clear_link_stats); - populateStubFor(&hal_fn->wifi_get_valid_channels); - populateStubFor(&hal_fn->wifi_rtt_range_request); - populateStubFor(&hal_fn->wifi_rtt_range_cancel); - populateStubFor(&hal_fn->wifi_get_rtt_capabilities); - populateStubFor(&hal_fn->wifi_rtt_get_responder_info); - populateStubFor(&hal_fn->wifi_enable_responder); - populateStubFor(&hal_fn->wifi_disable_responder); - populateStubFor(&hal_fn->wifi_set_nodfs_flag); - populateStubFor(&hal_fn->wifi_start_logging); - populateStubFor(&hal_fn->wifi_set_epno_list); - populateStubFor(&hal_fn->wifi_reset_epno_list); - populateStubFor(&hal_fn->wifi_set_country_code); - populateStubFor(&hal_fn->wifi_get_firmware_memory_dump); - populateStubFor(&hal_fn->wifi_set_log_handler); - populateStubFor(&hal_fn->wifi_reset_log_handler); - populateStubFor(&hal_fn->wifi_set_alert_handler); - populateStubFor(&hal_fn->wifi_reset_alert_handler); - populateStubFor(&hal_fn->wifi_get_firmware_version); - populateStubFor(&hal_fn->wifi_get_ring_buffers_status); - populateStubFor(&hal_fn->wifi_get_logger_supported_feature_set); - populateStubFor(&hal_fn->wifi_get_ring_data); - populateStubFor(&hal_fn->wifi_enable_tdls); - populateStubFor(&hal_fn->wifi_disable_tdls); - populateStubFor(&hal_fn->wifi_get_tdls_status); - populateStubFor(&hal_fn->wifi_get_tdls_capabilities); - populateStubFor(&hal_fn->wifi_get_driver_version); - populateStubFor(&hal_fn->wifi_set_passpoint_list); - populateStubFor(&hal_fn->wifi_reset_passpoint_list); - populateStubFor(&hal_fn->wifi_set_lci); - populateStubFor(&hal_fn->wifi_set_lcr); - populateStubFor(&hal_fn->wifi_start_sending_offloaded_packet); - populateStubFor(&hal_fn->wifi_stop_sending_offloaded_packet); - populateStubFor(&hal_fn->wifi_start_rssi_monitoring); - populateStubFor(&hal_fn->wifi_stop_rssi_monitoring); - populateStubFor(&hal_fn->wifi_get_wake_reason_stats); - populateStubFor(&hal_fn->wifi_configure_nd_offload); - populateStubFor(&hal_fn->wifi_get_driver_memory_dump); - populateStubFor(&hal_fn->wifi_start_pkt_fate_monitoring); - populateStubFor(&hal_fn->wifi_get_tx_pkt_fates); - populateStubFor(&hal_fn->wifi_get_rx_pkt_fates); - populateStubFor(&hal_fn->wifi_nan_enable_request); - populateStubFor(&hal_fn->wifi_nan_disable_request); - populateStubFor(&hal_fn->wifi_nan_publish_request); - populateStubFor(&hal_fn->wifi_nan_publish_cancel_request); - populateStubFor(&hal_fn->wifi_nan_subscribe_request); - populateStubFor(&hal_fn->wifi_nan_subscribe_cancel_request); - populateStubFor(&hal_fn->wifi_nan_transmit_followup_request); - populateStubFor(&hal_fn->wifi_nan_stats_request); - populateStubFor(&hal_fn->wifi_nan_config_request); - populateStubFor(&hal_fn->wifi_nan_tca_request); - populateStubFor(&hal_fn->wifi_nan_beacon_sdf_payload_request); - populateStubFor(&hal_fn->wifi_nan_register_handler); - populateStubFor(&hal_fn->wifi_nan_get_version); - populateStubFor(&hal_fn->wifi_nan_get_capabilities); - populateStubFor(&hal_fn->wifi_nan_data_interface_create); - populateStubFor(&hal_fn->wifi_nan_data_interface_delete); - populateStubFor(&hal_fn->wifi_nan_data_request_initiator); - populateStubFor(&hal_fn->wifi_nan_data_indication_response); - populateStubFor(&hal_fn->wifi_nan_data_end); - populateStubFor(&hal_fn->wifi_get_packet_filter_capabilities); - populateStubFor(&hal_fn->wifi_set_packet_filter); - populateStubFor(&hal_fn->wifi_read_packet_filter); - populateStubFor(&hal_fn->wifi_get_roaming_capabilities); - populateStubFor(&hal_fn->wifi_enable_firmware_roaming); - populateStubFor(&hal_fn->wifi_configure_roaming); - populateStubFor(&hal_fn->wifi_select_tx_power_scenario); - populateStubFor(&hal_fn->wifi_reset_tx_power_scenario); - populateStubFor(&hal_fn->wifi_set_radio_mode_change_handler); - populateStubFor(&hal_fn->wifi_set_latency_mode); - populateStubFor(&hal_fn->wifi_set_thermal_mitigation_mode); - populateStubFor(&hal_fn->wifi_virtual_interface_create); - populateStubFor(&hal_fn->wifi_virtual_interface_delete); - populateStubFor(&hal_fn->wifi_map_dscp_access_category); - populateStubFor(&hal_fn->wifi_reset_dscp_mapping); - populateStubFor(&hal_fn->wifi_set_subsystem_restart_handler); - populateStubFor(&hal_fn->wifi_get_supported_iface_name); - populateStubFor(&hal_fn->wifi_early_initialize); - populateStubFor(&hal_fn->wifi_get_chip_feature_set); - populateStubFor(&hal_fn->wifi_multi_sta_set_primary_connection); - populateStubFor(&hal_fn->wifi_multi_sta_set_use_case); - populateStubFor(&hal_fn->wifi_set_coex_unsafe_channels); - populateStubFor(&hal_fn->wifi_set_voip_mode); - populateStubFor(&hal_fn->wifi_twt_register_handler); - populateStubFor(&hal_fn->wifi_twt_get_capability); - populateStubFor(&hal_fn->wifi_twt_setup_request); - populateStubFor(&hal_fn->wifi_twt_teardown_request); - populateStubFor(&hal_fn->wifi_twt_info_frame_request); - populateStubFor(&hal_fn->wifi_twt_get_stats); - populateStubFor(&hal_fn->wifi_twt_clear_stats); - populateStubFor(&hal_fn->wifi_set_dtim_config); - populateStubFor(&hal_fn->wifi_get_usable_channels); - populateStubFor(&hal_fn->wifi_trigger_subsystem_restart); - return true; -} -} // namespace legacy_hal -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android diff --git a/wifi/1.5/default/wifi_legacy_hal_stubs.h b/wifi/1.5/default/wifi_legacy_hal_stubs.h deleted file mode 100644 index 480389b0ce..0000000000 --- a/wifi/1.5/default/wifi_legacy_hal_stubs.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2016 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef WIFI_LEGACY_HAL_STUBS_H_ -#define WIFI_LEGACY_HAL_STUBS_H_ - -#include <hardware_legacy/wifi_hal.h> - -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { -namespace legacy_hal { - -bool initHalFuncTableWithStubs(wifi_hal_fn* hal_fn); -} // namespace legacy_hal -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android - -#endif // WIFI_LEGACY_HAL_STUBS_H_ diff --git a/wifi/1.5/default/wifi_mode_controller.cpp b/wifi/1.5/default/wifi_mode_controller.cpp deleted file mode 100644 index b1db8b3725..0000000000 --- a/wifi/1.5/default/wifi_mode_controller.cpp +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (C) 2016 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include <android-base/logging.h> -#include <android-base/macros.h> -#include <private/android_filesystem_config.h> - -#include "wifi_mode_controller.h" - -using android::hardware::wifi::V1_0::IfaceType; -using android::wifi_hal::DriverTool; - -namespace { -int convertIfaceTypeToFirmwareMode(IfaceType type) { - int mode; - switch (type) { - case IfaceType::AP: - mode = DriverTool::kFirmwareModeAp; - break; - case IfaceType::P2P: - mode = DriverTool::kFirmwareModeP2p; - break; - case IfaceType::NAN: - // NAN is exposed in STA mode currently. - mode = DriverTool::kFirmwareModeSta; - break; - case IfaceType::STA: - mode = DriverTool::kFirmwareModeSta; - break; - } - return mode; -} -} // namespace - -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { -namespace mode_controller { - -WifiModeController::WifiModeController() : driver_tool_(new DriverTool) {} - -bool WifiModeController::isFirmwareModeChangeNeeded(IfaceType type) { - return driver_tool_->IsFirmwareModeChangeNeeded( - convertIfaceTypeToFirmwareMode(type)); -} - -bool WifiModeController::initialize() { - if (!driver_tool_->LoadDriver()) { - LOG(ERROR) << "Failed to load WiFi driver"; - return false; - } - return true; -} - -bool WifiModeController::changeFirmwareMode(IfaceType type) { - if (!driver_tool_->ChangeFirmwareMode( - convertIfaceTypeToFirmwareMode(type))) { - LOG(ERROR) << "Failed to change firmware mode"; - return false; - } - return true; -} - -bool WifiModeController::deinitialize() { - if (!driver_tool_->UnloadDriver()) { - LOG(ERROR) << "Failed to unload WiFi driver"; - return false; - } - return true; -} -} // namespace mode_controller -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android diff --git a/wifi/1.5/default/wifi_mode_controller.h b/wifi/1.5/default/wifi_mode_controller.h deleted file mode 100644 index 2eeca78c8b..0000000000 --- a/wifi/1.5/default/wifi_mode_controller.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (C) 2016 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef WIFI_MODE_CONTROLLER_H_ -#define WIFI_MODE_CONTROLLER_H_ - -#include <wifi_hal/driver_tool.h> - -#include <android/hardware/wifi/1.0/IWifi.h> - -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { -namespace mode_controller { -using namespace android::hardware::wifi::V1_0; - -/** - * Class that encapsulates all firmware mode configuration. - * This class will perform the necessary firmware reloads to put the chip in the - * required state (essentially a wrapper over DriverTool). - */ -class WifiModeController { - public: - WifiModeController(); - virtual ~WifiModeController() = default; - - // Checks if a firmware mode change is necessary to support the specified - // iface type operations. - virtual bool isFirmwareModeChangeNeeded(IfaceType type); - virtual bool initialize(); - // Change the firmware mode to support the specified iface type operations. - virtual bool changeFirmwareMode(IfaceType type); - // Unload the driver. This should be invoked whenever |IWifi.stop()| is - // invoked. - virtual bool deinitialize(); - - private: - std::unique_ptr<wifi_hal::DriverTool> driver_tool_; -}; - -} // namespace mode_controller -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android - -#endif // WIFI_MODE_CONTROLLER_H_ diff --git a/wifi/1.5/default/wifi_nan_iface.cpp b/wifi/1.5/default/wifi_nan_iface.cpp deleted file mode 100644 index 0cc6cd5fce..0000000000 --- a/wifi/1.5/default/wifi_nan_iface.cpp +++ /dev/null @@ -1,1003 +0,0 @@ -/* - * Copyright (C) 2016 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include <android-base/logging.h> - -#include "hidl_return_util.h" -#include "hidl_struct_util.h" -#include "wifi_nan_iface.h" -#include "wifi_status_util.h" - -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { -using hidl_return_util::validateAndCall; - -WifiNanIface::WifiNanIface( - const std::string& ifname, bool is_dedicated_iface, - const std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal, - const std::weak_ptr<iface_util::WifiIfaceUtil> iface_util) - : ifname_(ifname), - is_dedicated_iface_(is_dedicated_iface), - legacy_hal_(legacy_hal), - iface_util_(iface_util), - is_valid_(true) { - if (is_dedicated_iface_) { - // If using a dedicated iface, set the iface up first. - if (!iface_util_.lock()->setUpState(ifname_, true)) { - // Fatal failure, invalidate the iface object. - invalidate(); - return; - } - } - // Register all the callbacks here. these should be valid for the lifetime - // of the object. Whenever the mode changes legacy HAL will remove - // all of these callbacks. - legacy_hal::NanCallbackHandlers callback_handlers; - android::wp<WifiNanIface> weak_ptr_this(this); - - // Callback for response. - callback_handlers - .on_notify_response = [weak_ptr_this]( - legacy_hal::transaction_id id, - const legacy_hal::NanResponseMsg& msg) { - const auto shared_ptr_this = weak_ptr_this.promote(); - if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { - LOG(ERROR) << "Callback invoked on an invalid object"; - return; - } - WifiNanStatus wifiNanStatus; - if (!hidl_struct_util::convertLegacyNanResponseHeaderToHidl( - msg, &wifiNanStatus)) { - LOG(ERROR) << "Failed to convert nan response header"; - return; - } - - switch (msg.response_type) { - case legacy_hal::NAN_RESPONSE_ENABLED: { - for (const auto& callback : - shared_ptr_this->getEventCallbacks()) { - if (!callback->notifyEnableResponse(id, wifiNanStatus) - .isOk()) { - LOG(ERROR) << "Failed to invoke the callback"; - } - } - break; - } - case legacy_hal::NAN_RESPONSE_DISABLED: { - for (const auto& callback : - shared_ptr_this->getEventCallbacks()) { - if (!callback->notifyDisableResponse(id, wifiNanStatus) - .isOk()) { - LOG(ERROR) << "Failed to invoke the callback"; - } - } - break; - } - case legacy_hal::NAN_RESPONSE_PUBLISH: { - for (const auto& callback : - shared_ptr_this->getEventCallbacks()) { - if (!callback - ->notifyStartPublishResponse( - id, wifiNanStatus, - msg.body.publish_response.publish_id) - .isOk()) { - LOG(ERROR) << "Failed to invoke the callback"; - } - } - break; - } - case legacy_hal::NAN_RESPONSE_PUBLISH_CANCEL: { - for (const auto& callback : - shared_ptr_this->getEventCallbacks()) { - if (!callback->notifyStopPublishResponse(id, wifiNanStatus) - .isOk()) { - LOG(ERROR) << "Failed to invoke the callback"; - } - } - break; - } - case legacy_hal::NAN_RESPONSE_TRANSMIT_FOLLOWUP: { - for (const auto& callback : - shared_ptr_this->getEventCallbacks()) { - if (!callback - ->notifyTransmitFollowupResponse(id, wifiNanStatus) - .isOk()) { - LOG(ERROR) << "Failed to invoke the callback"; - } - } - break; - } - case legacy_hal::NAN_RESPONSE_SUBSCRIBE: { - for (const auto& callback : - shared_ptr_this->getEventCallbacks()) { - if (!callback - ->notifyStartSubscribeResponse( - id, wifiNanStatus, - msg.body.subscribe_response.subscribe_id) - .isOk()) { - LOG(ERROR) << "Failed to invoke the callback"; - } - } - break; - } - case legacy_hal::NAN_RESPONSE_SUBSCRIBE_CANCEL: { - for (const auto& callback : - shared_ptr_this->getEventCallbacks()) { - if (!callback - ->notifyStopSubscribeResponse(id, wifiNanStatus) - .isOk()) { - LOG(ERROR) << "Failed to invoke the callback"; - } - } - break; - } - case legacy_hal::NAN_RESPONSE_CONFIG: { - for (const auto& callback : - shared_ptr_this->getEventCallbacks()) { - if (!callback->notifyConfigResponse(id, wifiNanStatus) - .isOk()) { - LOG(ERROR) << "Failed to invoke the callback"; - } - } - break; - } - case legacy_hal::NAN_GET_CAPABILITIES: { - NanCapabilities hidl_struct; - if (!hidl_struct_util:: - convertLegacyNanCapabilitiesResponseToHidl( - msg.body.nan_capabilities, &hidl_struct)) { - LOG(ERROR) << "Failed to convert nan capabilities response"; - return; - } - for (const auto& callback : - shared_ptr_this->getEventCallbacks_1_5()) { - if (!callback - ->notifyCapabilitiesResponse_1_5(id, wifiNanStatus, - hidl_struct) - .isOk()) { - LOG(ERROR) << "Failed to invoke the callback"; - } - } - break; - } - case legacy_hal::NAN_DP_INTERFACE_CREATE: { - for (const auto& callback : - shared_ptr_this->getEventCallbacks()) { - if (!callback - ->notifyCreateDataInterfaceResponse(id, - wifiNanStatus) - .isOk()) { - LOG(ERROR) << "Failed to invoke the callback"; - } - } - break; - } - case legacy_hal::NAN_DP_INTERFACE_DELETE: { - for (const auto& callback : - shared_ptr_this->getEventCallbacks()) { - if (!callback - ->notifyDeleteDataInterfaceResponse(id, - wifiNanStatus) - .isOk()) { - LOG(ERROR) << "Failed to invoke the callback"; - } - } - break; - } - case legacy_hal::NAN_DP_INITIATOR_RESPONSE: { - for (const auto& callback : - shared_ptr_this->getEventCallbacks()) { - if (!callback - ->notifyInitiateDataPathResponse( - id, wifiNanStatus, - msg.body.data_request_response.ndp_instance_id) - .isOk()) { - LOG(ERROR) << "Failed to invoke the callback"; - } - } - break; - } - case legacy_hal::NAN_DP_RESPONDER_RESPONSE: { - for (const auto& callback : - shared_ptr_this->getEventCallbacks()) { - if (!callback - ->notifyRespondToDataPathIndicationResponse( - id, wifiNanStatus) - .isOk()) { - LOG(ERROR) << "Failed to invoke the callback"; - } - } - break; - } - case legacy_hal::NAN_DP_END: { - for (const auto& callback : - shared_ptr_this->getEventCallbacks()) { - if (!callback - ->notifyTerminateDataPathResponse(id, - wifiNanStatus) - .isOk()) { - LOG(ERROR) << "Failed to invoke the callback"; - } - } - break; - } - case legacy_hal::NAN_RESPONSE_BEACON_SDF_PAYLOAD: - /* fall through */ - case legacy_hal::NAN_RESPONSE_TCA: - /* fall through */ - case legacy_hal::NAN_RESPONSE_STATS: - /* fall through */ - case legacy_hal::NAN_RESPONSE_ERROR: - /* fall through */ - default: - LOG(ERROR) << "Unknown or unhandled response type: " - << msg.response_type; - return; - } - }; - - callback_handlers.on_event_disc_eng_event = - [weak_ptr_this](const legacy_hal::NanDiscEngEventInd& msg) { - const auto shared_ptr_this = weak_ptr_this.promote(); - if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { - LOG(ERROR) << "Callback invoked on an invalid object"; - return; - } - NanClusterEventInd hidl_struct; - // event types defined identically - hence can be cast - hidl_struct.eventType = (NanClusterEventType)msg.event_type; - hidl_struct.addr = msg.data.mac_addr.addr; - - for (const auto& callback : shared_ptr_this->getEventCallbacks()) { - if (!callback->eventClusterEvent(hidl_struct).isOk()) { - LOG(ERROR) << "Failed to invoke the callback"; - } - } - }; - - callback_handlers.on_event_disabled = - [weak_ptr_this](const legacy_hal::NanDisabledInd& msg) { - const auto shared_ptr_this = weak_ptr_this.promote(); - if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { - LOG(ERROR) << "Callback invoked on an invalid object"; - return; - } - WifiNanStatus status; - hidl_struct_util::convertToWifiNanStatus( - msg.reason, msg.nan_reason, sizeof(msg.nan_reason), &status); - - for (const auto& callback : shared_ptr_this->getEventCallbacks()) { - if (!callback->eventDisabled(status).isOk()) { - LOG(ERROR) << "Failed to invoke the callback"; - } - } - }; - - callback_handlers.on_event_publish_terminated = - [weak_ptr_this](const legacy_hal::NanPublishTerminatedInd& msg) { - const auto shared_ptr_this = weak_ptr_this.promote(); - if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { - LOG(ERROR) << "Callback invoked on an invalid object"; - return; - } - WifiNanStatus status; - hidl_struct_util::convertToWifiNanStatus( - msg.reason, msg.nan_reason, sizeof(msg.nan_reason), &status); - - for (const auto& callback : shared_ptr_this->getEventCallbacks()) { - if (!callback->eventPublishTerminated(msg.publish_id, status) - .isOk()) { - LOG(ERROR) << "Failed to invoke the callback"; - } - } - }; - - callback_handlers.on_event_subscribe_terminated = - [weak_ptr_this](const legacy_hal::NanSubscribeTerminatedInd& msg) { - const auto shared_ptr_this = weak_ptr_this.promote(); - if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { - LOG(ERROR) << "Callback invoked on an invalid object"; - return; - } - WifiNanStatus status; - hidl_struct_util::convertToWifiNanStatus( - msg.reason, msg.nan_reason, sizeof(msg.nan_reason), &status); - - for (const auto& callback : shared_ptr_this->getEventCallbacks()) { - if (!callback - ->eventSubscribeTerminated(msg.subscribe_id, status) - .isOk()) { - LOG(ERROR) << "Failed to invoke the callback"; - } - } - }; - - callback_handlers.on_event_match = - [weak_ptr_this](const legacy_hal::NanMatchInd& msg) { - const auto shared_ptr_this = weak_ptr_this.promote(); - if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { - LOG(ERROR) << "Callback invoked on an invalid object"; - return; - } - NanMatchInd hidl_struct; - if (!hidl_struct_util::convertLegacyNanMatchIndToHidl( - msg, &hidl_struct)) { - LOG(ERROR) << "Failed to convert nan capabilities response"; - return; - } - - for (const auto& callback : shared_ptr_this->getEventCallbacks()) { - if (!callback->eventMatch(hidl_struct).isOk()) { - LOG(ERROR) << "Failed to invoke the callback"; - } - } - }; - - callback_handlers.on_event_match_expired = - [weak_ptr_this](const legacy_hal::NanMatchExpiredInd& msg) { - const auto shared_ptr_this = weak_ptr_this.promote(); - if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { - LOG(ERROR) << "Callback invoked on an invalid object"; - return; - } - for (const auto& callback : shared_ptr_this->getEventCallbacks()) { - if (!callback - ->eventMatchExpired(msg.publish_subscribe_id, - msg.requestor_instance_id) - .isOk()) { - LOG(ERROR) << "Failed to invoke the callback"; - } - } - }; - - callback_handlers.on_event_followup = - [weak_ptr_this](const legacy_hal::NanFollowupInd& msg) { - const auto shared_ptr_this = weak_ptr_this.promote(); - if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { - LOG(ERROR) << "Callback invoked on an invalid object"; - return; - } - NanFollowupReceivedInd hidl_struct; - if (!hidl_struct_util::convertLegacyNanFollowupIndToHidl( - msg, &hidl_struct)) { - LOG(ERROR) << "Failed to convert nan capabilities response"; - return; - } - - for (const auto& callback : shared_ptr_this->getEventCallbacks()) { - if (!callback->eventFollowupReceived(hidl_struct).isOk()) { - LOG(ERROR) << "Failed to invoke the callback"; - } - } - }; - - callback_handlers.on_event_transmit_follow_up = - [weak_ptr_this](const legacy_hal::NanTransmitFollowupInd& msg) { - const auto shared_ptr_this = weak_ptr_this.promote(); - if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { - LOG(ERROR) << "Callback invoked on an invalid object"; - return; - } - WifiNanStatus status; - hidl_struct_util::convertToWifiNanStatus( - msg.reason, msg.nan_reason, sizeof(msg.nan_reason), &status); - - for (const auto& callback : shared_ptr_this->getEventCallbacks()) { - if (!callback->eventTransmitFollowup(msg.id, status).isOk()) { - LOG(ERROR) << "Failed to invoke the callback"; - } - } - }; - - callback_handlers.on_event_data_path_request = - [weak_ptr_this](const legacy_hal::NanDataPathRequestInd& msg) { - const auto shared_ptr_this = weak_ptr_this.promote(); - if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { - LOG(ERROR) << "Callback invoked on an invalid object"; - return; - } - NanDataPathRequestInd hidl_struct; - if (!hidl_struct_util::convertLegacyNanDataPathRequestIndToHidl( - msg, &hidl_struct)) { - LOG(ERROR) << "Failed to convert nan capabilities response"; - return; - } - - for (const auto& callback : shared_ptr_this->getEventCallbacks()) { - if (!callback->eventDataPathRequest(hidl_struct).isOk()) { - LOG(ERROR) << "Failed to invoke the callback"; - } - } - }; - - callback_handlers.on_event_data_path_confirm = - [weak_ptr_this](const legacy_hal::NanDataPathConfirmInd& msg) { - const auto shared_ptr_this = weak_ptr_this.promote(); - if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { - LOG(ERROR) << "Callback invoked on an invalid object"; - return; - } - V1_2::NanDataPathConfirmInd hidl_struct; - if (!hidl_struct_util::convertLegacyNanDataPathConfirmIndToHidl( - msg, &hidl_struct)) { - LOG(ERROR) << "Failed to convert nan capabilities response"; - return; - } - - for (const auto& callback : - shared_ptr_this->getEventCallbacks_1_2()) { - if (!callback->eventDataPathConfirm_1_2(hidl_struct).isOk()) { - LOG(ERROR) << "Failed to invoke the callback"; - } - } - }; - - callback_handlers.on_event_data_path_end = - [weak_ptr_this](const legacy_hal::NanDataPathEndInd& msg) { - const auto shared_ptr_this = weak_ptr_this.promote(); - if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { - LOG(ERROR) << "Callback invoked on an invalid object"; - return; - } - for (const auto& callback : shared_ptr_this->getEventCallbacks()) { - for (int i = 0; i < msg.num_ndp_instances; ++i) { - if (!callback - ->eventDataPathTerminated(msg.ndp_instance_id[i]) - .isOk()) { - LOG(ERROR) << "Failed to invoke the callback"; - } - } - } - }; - - callback_handlers.on_event_beacon_sdf_payload = - [weak_ptr_this](const legacy_hal::NanBeaconSdfPayloadInd& /* msg */) { - LOG(ERROR) << "on_event_beacon_sdf_payload - should not be called"; - }; - - callback_handlers.on_event_range_request = - [weak_ptr_this](const legacy_hal::NanRangeRequestInd& /* msg */) { - LOG(ERROR) << "on_event_range_request - should not be called"; - }; - - callback_handlers.on_event_range_report = - [weak_ptr_this](const legacy_hal::NanRangeReportInd& /* msg */) { - LOG(ERROR) << "on_event_range_report - should not be called"; - }; - - callback_handlers - .on_event_schedule_update = [weak_ptr_this]( - const legacy_hal:: - NanDataPathScheduleUpdateInd& msg) { - const auto shared_ptr_this = weak_ptr_this.promote(); - if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { - LOG(ERROR) << "Callback invoked on an invalid object"; - return; - } - V1_2::NanDataPathScheduleUpdateInd hidl_struct; - if (!hidl_struct_util::convertLegacyNanDataPathScheduleUpdateIndToHidl( - msg, &hidl_struct)) { - LOG(ERROR) << "Failed to convert nan capabilities response"; - return; - } - - for (const auto& callback : shared_ptr_this->getEventCallbacks_1_2()) { - if (!callback->eventDataPathScheduleUpdate(hidl_struct).isOk()) { - LOG(ERROR) << "Failed to invoke the callback"; - } - } - }; - - legacy_hal::wifi_error legacy_status = - legacy_hal_.lock()->nanRegisterCallbackHandlers(ifname_, - callback_handlers); - if (legacy_status != legacy_hal::WIFI_SUCCESS) { - LOG(ERROR) << "Failed to register nan callbacks. Invalidating object"; - invalidate(); - } - - // Register for iface state toggle events. - iface_util::IfaceEventHandlers event_handlers = {}; - event_handlers.on_state_toggle_off_on = - [weak_ptr_this](const std::string& /* iface_name */) { - const auto shared_ptr_this = weak_ptr_this.promote(); - if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { - LOG(ERROR) << "Callback invoked on an invalid object"; - return; - } - // Tell framework that NAN has been disabled. - WifiNanStatus status = { - NanStatusType::UNSUPPORTED_CONCURRENCY_NAN_DISABLED, ""}; - for (const auto& callback : shared_ptr_this->getEventCallbacks()) { - if (!callback->eventDisabled(status).isOk()) { - LOG(ERROR) << "Failed to invoke the callback"; - } - } - }; - iface_util_.lock()->registerIfaceEventHandlers(ifname_, event_handlers); -} - -void WifiNanIface::invalidate() { - if (!isValid()) { - return; - } - // send commands to HAL to actually disable and destroy interfaces - legacy_hal_.lock()->nanDisableRequest(ifname_, 0xFFFF); - legacy_hal_.lock()->nanDataInterfaceDelete(ifname_, 0xFFFE, "aware_data0"); - legacy_hal_.lock()->nanDataInterfaceDelete(ifname_, 0xFFFD, "aware_data1"); - iface_util_.lock()->unregisterIfaceEventHandlers(ifname_); - legacy_hal_.reset(); - event_cb_handler_.invalidate(); - event_cb_handler_1_2_.invalidate(); - event_cb_handler_1_5_.invalidate(); - is_valid_ = false; - if (is_dedicated_iface_) { - // If using a dedicated iface, set the iface down. - iface_util_.lock()->setUpState(ifname_, false); - } -} - -bool WifiNanIface::isValid() { return is_valid_; } - -std::string WifiNanIface::getName() { return ifname_; } - -std::set<sp<V1_0::IWifiNanIfaceEventCallback>> -WifiNanIface::getEventCallbacks() { - return event_cb_handler_.getCallbacks(); -} - -std::set<sp<V1_2::IWifiNanIfaceEventCallback>> -WifiNanIface::getEventCallbacks_1_2() { - return event_cb_handler_1_2_.getCallbacks(); -} - -std::set<sp<IWifiNanIfaceEventCallback>> WifiNanIface::getEventCallbacks_1_5() { - return event_cb_handler_1_5_.getCallbacks(); -} - -Return<void> WifiNanIface::getName(getName_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiNanIface::getNameInternal, hidl_status_cb); -} - -Return<void> WifiNanIface::getType(getType_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiNanIface::getTypeInternal, hidl_status_cb); -} - -Return<void> WifiNanIface::registerEventCallback( - const sp<V1_0::IWifiNanIfaceEventCallback>& callback, - registerEventCallback_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiNanIface::registerEventCallbackInternal, - hidl_status_cb, callback); -} - -Return<void> WifiNanIface::getCapabilitiesRequest( - uint16_t cmd_id, getCapabilitiesRequest_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiNanIface::getCapabilitiesRequestInternal, - hidl_status_cb, cmd_id); -} - -Return<void> WifiNanIface::enableRequest(uint16_t cmd_id, - const V1_0::NanEnableRequest& msg, - enableRequest_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiNanIface::enableRequestInternal, hidl_status_cb, - cmd_id, msg); -} - -Return<void> WifiNanIface::configRequest(uint16_t cmd_id, - const V1_0::NanConfigRequest& msg, - configRequest_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiNanIface::configRequestInternal, hidl_status_cb, - cmd_id, msg); -} - -Return<void> WifiNanIface::disableRequest(uint16_t cmd_id, - disableRequest_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiNanIface::disableRequestInternal, - hidl_status_cb, cmd_id); -} - -Return<void> WifiNanIface::startPublishRequest( - uint16_t cmd_id, const NanPublishRequest& msg, - startPublishRequest_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiNanIface::startPublishRequestInternal, - hidl_status_cb, cmd_id, msg); -} - -Return<void> WifiNanIface::stopPublishRequest( - uint16_t cmd_id, uint8_t sessionId, stopPublishRequest_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiNanIface::stopPublishRequestInternal, - hidl_status_cb, cmd_id, sessionId); -} - -Return<void> WifiNanIface::startSubscribeRequest( - uint16_t cmd_id, const NanSubscribeRequest& msg, - startSubscribeRequest_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiNanIface::startSubscribeRequestInternal, - hidl_status_cb, cmd_id, msg); -} - -Return<void> WifiNanIface::stopSubscribeRequest( - uint16_t cmd_id, uint8_t sessionId, - stopSubscribeRequest_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiNanIface::stopSubscribeRequestInternal, - hidl_status_cb, cmd_id, sessionId); -} - -Return<void> WifiNanIface::transmitFollowupRequest( - uint16_t cmd_id, const NanTransmitFollowupRequest& msg, - transmitFollowupRequest_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiNanIface::transmitFollowupRequestInternal, - hidl_status_cb, cmd_id, msg); -} - -Return<void> WifiNanIface::createDataInterfaceRequest( - uint16_t cmd_id, const hidl_string& iface_name, - createDataInterfaceRequest_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiNanIface::createDataInterfaceRequestInternal, - hidl_status_cb, cmd_id, iface_name); -} - -Return<void> WifiNanIface::deleteDataInterfaceRequest( - uint16_t cmd_id, const hidl_string& iface_name, - deleteDataInterfaceRequest_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiNanIface::deleteDataInterfaceRequestInternal, - hidl_status_cb, cmd_id, iface_name); -} - -Return<void> WifiNanIface::initiateDataPathRequest( - uint16_t cmd_id, const NanInitiateDataPathRequest& msg, - initiateDataPathRequest_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiNanIface::initiateDataPathRequestInternal, - hidl_status_cb, cmd_id, msg); -} - -Return<void> WifiNanIface::respondToDataPathIndicationRequest( - uint16_t cmd_id, const NanRespondToDataPathIndicationRequest& msg, - respondToDataPathIndicationRequest_cb hidl_status_cb) { - return validateAndCall( - this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiNanIface::respondToDataPathIndicationRequestInternal, - hidl_status_cb, cmd_id, msg); -} - -Return<void> WifiNanIface::terminateDataPathRequest( - uint16_t cmd_id, uint32_t ndpInstanceId, - terminateDataPathRequest_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiNanIface::terminateDataPathRequestInternal, - hidl_status_cb, cmd_id, ndpInstanceId); -} - -Return<void> WifiNanIface::registerEventCallback_1_2( - const sp<V1_2::IWifiNanIfaceEventCallback>& callback, - registerEventCallback_1_2_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiNanIface::registerEventCallback_1_2Internal, - hidl_status_cb, callback); -} - -Return<void> WifiNanIface::enableRequest_1_2( - uint16_t cmd_id, const V1_0::NanEnableRequest& msg1, - const V1_2::NanConfigRequestSupplemental& msg2, - enableRequest_1_2_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiNanIface::enableRequest_1_2Internal, - hidl_status_cb, cmd_id, msg1, msg2); -} - -Return<void> WifiNanIface::configRequest_1_2( - uint16_t cmd_id, const V1_0::NanConfigRequest& msg1, - const V1_2::NanConfigRequestSupplemental& msg2, - configRequest_1_2_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiNanIface::configRequest_1_2Internal, - hidl_status_cb, cmd_id, msg1, msg2); -} - -Return<void> WifiNanIface::enableRequest_1_4( - uint16_t cmd_id, const V1_4::NanEnableRequest& msg1, - const V1_2::NanConfigRequestSupplemental& msg2, - enableRequest_1_4_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiNanIface::enableRequest_1_4Internal, - hidl_status_cb, cmd_id, msg1, msg2); -} - -Return<void> WifiNanIface::configRequest_1_4( - uint16_t cmd_id, const V1_4::NanConfigRequest& msg1, - const V1_2::NanConfigRequestSupplemental& msg2, - configRequest_1_4_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiNanIface::configRequest_1_4Internal, - hidl_status_cb, cmd_id, msg1, msg2); -} - -Return<void> WifiNanIface::registerEventCallback_1_5( - const sp<IWifiNanIfaceEventCallback>& callback, - registerEventCallback_1_5_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiNanIface::registerEventCallback_1_5Internal, - hidl_status_cb, callback); -} - -Return<void> WifiNanIface::enableRequest_1_5( - uint16_t cmd_id, const V1_4::NanEnableRequest& msg1, - const NanConfigRequestSupplemental& msg2, - enableRequest_1_5_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiNanIface::enableRequest_1_5Internal, - hidl_status_cb, cmd_id, msg1, msg2); -} - -Return<void> WifiNanIface::configRequest_1_5( - uint16_t cmd_id, const V1_4::NanConfigRequest& msg1, - const NanConfigRequestSupplemental& msg2, - configRequest_1_5_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiNanIface::configRequest_1_5Internal, - hidl_status_cb, cmd_id, msg1, msg2); -} - -Return<void> WifiNanIface::getCapabilitiesRequest_1_5( - uint16_t cmd_id, getCapabilitiesRequest_1_5_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiNanIface::getCapabilitiesRequest_1_5Internal, - hidl_status_cb, cmd_id); -} - -std::pair<WifiStatus, std::string> WifiNanIface::getNameInternal() { - return {createWifiStatus(WifiStatusCode::SUCCESS), ifname_}; -} - -std::pair<WifiStatus, IfaceType> WifiNanIface::getTypeInternal() { - return {createWifiStatus(WifiStatusCode::SUCCESS), IfaceType::NAN}; -} - -WifiStatus WifiNanIface::registerEventCallbackInternal( - const sp<V1_0::IWifiNanIfaceEventCallback>& callback) { - if (!event_cb_handler_.addCallback(callback)) { - return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN); - } - return createWifiStatus(WifiStatusCode::SUCCESS); -} - -WifiStatus WifiNanIface::getCapabilitiesRequestInternal(uint16_t /* cmd_id */) { - return createWifiStatus(WifiStatusCode::ERROR_NOT_SUPPORTED); -} - -WifiStatus WifiNanIface::enableRequestInternal( - uint16_t /* cmd_id */, const V1_0::NanEnableRequest& /* msg */) { - return createWifiStatus(WifiStatusCode::ERROR_NOT_SUPPORTED); -} - -WifiStatus WifiNanIface::configRequestInternal( - uint16_t /* cmd_id */, const V1_0::NanConfigRequest& /* msg */) { - return createWifiStatus(WifiStatusCode::ERROR_NOT_SUPPORTED); -} - -WifiStatus WifiNanIface::disableRequestInternal(uint16_t cmd_id) { - legacy_hal::wifi_error legacy_status = - legacy_hal_.lock()->nanDisableRequest(ifname_, cmd_id); - return createWifiStatusFromLegacyError(legacy_status); -} - -WifiStatus WifiNanIface::startPublishRequestInternal( - uint16_t cmd_id, const NanPublishRequest& msg) { - legacy_hal::NanPublishRequest legacy_msg; - if (!hidl_struct_util::convertHidlNanPublishRequestToLegacy(msg, - &legacy_msg)) { - return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS); - } - legacy_hal::wifi_error legacy_status = - legacy_hal_.lock()->nanPublishRequest(ifname_, cmd_id, legacy_msg); - return createWifiStatusFromLegacyError(legacy_status); -} - -WifiStatus WifiNanIface::stopPublishRequestInternal(uint16_t cmd_id, - uint8_t sessionId) { - legacy_hal::NanPublishCancelRequest legacy_msg; - legacy_msg.publish_id = sessionId; - legacy_hal::wifi_error legacy_status = - legacy_hal_.lock()->nanPublishCancelRequest(ifname_, cmd_id, - legacy_msg); - return createWifiStatusFromLegacyError(legacy_status); -} - -WifiStatus WifiNanIface::startSubscribeRequestInternal( - uint16_t cmd_id, const NanSubscribeRequest& msg) { - legacy_hal::NanSubscribeRequest legacy_msg; - if (!hidl_struct_util::convertHidlNanSubscribeRequestToLegacy( - msg, &legacy_msg)) { - return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS); - } - legacy_hal::wifi_error legacy_status = - legacy_hal_.lock()->nanSubscribeRequest(ifname_, cmd_id, legacy_msg); - return createWifiStatusFromLegacyError(legacy_status); -} - -WifiStatus WifiNanIface::stopSubscribeRequestInternal(uint16_t cmd_id, - uint8_t sessionId) { - legacy_hal::NanSubscribeCancelRequest legacy_msg; - legacy_msg.subscribe_id = sessionId; - legacy_hal::wifi_error legacy_status = - legacy_hal_.lock()->nanSubscribeCancelRequest(ifname_, cmd_id, - legacy_msg); - return createWifiStatusFromLegacyError(legacy_status); -} - -WifiStatus WifiNanIface::transmitFollowupRequestInternal( - uint16_t cmd_id, const NanTransmitFollowupRequest& msg) { - legacy_hal::NanTransmitFollowupRequest legacy_msg; - if (!hidl_struct_util::convertHidlNanTransmitFollowupRequestToLegacy( - msg, &legacy_msg)) { - return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS); - } - legacy_hal::wifi_error legacy_status = - legacy_hal_.lock()->nanTransmitFollowupRequest(ifname_, cmd_id, - legacy_msg); - return createWifiStatusFromLegacyError(legacy_status); -} - -WifiStatus WifiNanIface::createDataInterfaceRequestInternal( - uint16_t cmd_id, const std::string& iface_name) { - legacy_hal::wifi_error legacy_status = - legacy_hal_.lock()->nanDataInterfaceCreate(ifname_, cmd_id, iface_name); - return createWifiStatusFromLegacyError(legacy_status); -} -WifiStatus WifiNanIface::deleteDataInterfaceRequestInternal( - uint16_t cmd_id, const std::string& iface_name) { - legacy_hal::wifi_error legacy_status = - legacy_hal_.lock()->nanDataInterfaceDelete(ifname_, cmd_id, iface_name); - return createWifiStatusFromLegacyError(legacy_status); -} -WifiStatus WifiNanIface::initiateDataPathRequestInternal( - uint16_t cmd_id, const NanInitiateDataPathRequest& msg) { - legacy_hal::NanDataPathInitiatorRequest legacy_msg; - if (!hidl_struct_util::convertHidlNanDataPathInitiatorRequestToLegacy( - msg, &legacy_msg)) { - return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS); - } - legacy_hal::wifi_error legacy_status = - legacy_hal_.lock()->nanDataRequestInitiator(ifname_, cmd_id, - legacy_msg); - return createWifiStatusFromLegacyError(legacy_status); -} -WifiStatus WifiNanIface::respondToDataPathIndicationRequestInternal( - uint16_t cmd_id, const NanRespondToDataPathIndicationRequest& msg) { - legacy_hal::NanDataPathIndicationResponse legacy_msg; - if (!hidl_struct_util::convertHidlNanDataPathIndicationResponseToLegacy( - msg, &legacy_msg)) { - return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS); - } - legacy_hal::wifi_error legacy_status = - legacy_hal_.lock()->nanDataIndicationResponse(ifname_, cmd_id, - legacy_msg); - return createWifiStatusFromLegacyError(legacy_status); -} -WifiStatus WifiNanIface::terminateDataPathRequestInternal( - uint16_t cmd_id, uint32_t ndpInstanceId) { - legacy_hal::wifi_error legacy_status = - legacy_hal_.lock()->nanDataEnd(ifname_, cmd_id, ndpInstanceId); - return createWifiStatusFromLegacyError(legacy_status); -} - -WifiStatus WifiNanIface::registerEventCallback_1_2Internal( - const sp<V1_2::IWifiNanIfaceEventCallback>& callback) { - sp<V1_0::IWifiNanIfaceEventCallback> callback_1_0 = callback; - if (!event_cb_handler_.addCallback(callback_1_0)) { - return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN); - } - if (!event_cb_handler_1_2_.addCallback(callback)) { - return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN); - } - return createWifiStatus(WifiStatusCode::SUCCESS); -} - -WifiStatus WifiNanIface::enableRequest_1_2Internal( - uint16_t /* cmd_id */, const V1_0::NanEnableRequest& /* msg1 */, - const V1_2::NanConfigRequestSupplemental& /* msg2 */) { - return createWifiStatus(WifiStatusCode::ERROR_NOT_SUPPORTED); -} - -WifiStatus WifiNanIface::configRequest_1_2Internal( - uint16_t /* cmd_id */, const V1_0::NanConfigRequest& /* msg1 */, - const V1_2::NanConfigRequestSupplemental& /* msg2 */) { - return createWifiStatus(WifiStatusCode::ERROR_NOT_SUPPORTED); -} - -WifiStatus WifiNanIface::enableRequest_1_4Internal( - uint16_t /* cmd_id */, const V1_4::NanEnableRequest& /* msg1 */, - const V1_2::NanConfigRequestSupplemental& /* msg2 */) { - return createWifiStatus(WifiStatusCode::ERROR_NOT_SUPPORTED); -} - -WifiStatus WifiNanIface::configRequest_1_4Internal( - uint16_t /* cmd_id */, const V1_4::NanConfigRequest& /* msg1 */, - const V1_2::NanConfigRequestSupplemental& /* msg2 */) { - return createWifiStatus(WifiStatusCode::ERROR_NOT_SUPPORTED); -} - -WifiStatus WifiNanIface::registerEventCallback_1_5Internal( - const sp<IWifiNanIfaceEventCallback>& callback) { - sp<V1_0::IWifiNanIfaceEventCallback> callback_1_0 = callback; - if (!event_cb_handler_.addCallback(callback_1_0)) { - return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN); - } - sp<V1_2::IWifiNanIfaceEventCallback> callback_1_2 = callback; - if (!event_cb_handler_1_2_.addCallback(callback_1_2)) { - return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN); - } - if (!event_cb_handler_1_5_.addCallback(callback)) { - return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN); - } - return createWifiStatus(WifiStatusCode::SUCCESS); -} - -WifiStatus WifiNanIface::getCapabilitiesRequest_1_5Internal(uint16_t cmd_id) { - legacy_hal::wifi_error legacy_status = - legacy_hal_.lock()->nanGetCapabilities(ifname_, cmd_id); - return createWifiStatusFromLegacyError(legacy_status); -} - -WifiStatus WifiNanIface::enableRequest_1_5Internal( - uint16_t cmd_id, const V1_4::NanEnableRequest& msg1, - const NanConfigRequestSupplemental& msg2) { - legacy_hal::NanEnableRequest legacy_msg; - if (!hidl_struct_util::convertHidlNanEnableRequest_1_5ToLegacy( - msg1, msg2, &legacy_msg)) { - return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS); - } - legacy_hal::wifi_error legacy_status = - legacy_hal_.lock()->nanEnableRequest(ifname_, cmd_id, legacy_msg); - return createWifiStatusFromLegacyError(legacy_status); -} - -WifiStatus WifiNanIface::configRequest_1_5Internal( - uint16_t cmd_id, const V1_4::NanConfigRequest& msg1, - const NanConfigRequestSupplemental& msg2) { - legacy_hal::NanConfigRequest legacy_msg; - if (!hidl_struct_util::convertHidlNanConfigRequest_1_5ToLegacy( - msg1, msg2, &legacy_msg)) { - return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS); - } - legacy_hal::wifi_error legacy_status = - legacy_hal_.lock()->nanConfigRequest(ifname_, cmd_id, legacy_msg); - return createWifiStatusFromLegacyError(legacy_status); -} - -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android diff --git a/wifi/1.5/default/wifi_nan_iface.h b/wifi/1.5/default/wifi_nan_iface.h deleted file mode 100644 index fb9c047ff6..0000000000 --- a/wifi/1.5/default/wifi_nan_iface.h +++ /dev/null @@ -1,212 +0,0 @@ -/* - * Copyright (C) 2016 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef WIFI_NAN_IFACE_H_ -#define WIFI_NAN_IFACE_H_ - -#include <android-base/macros.h> -#include <android/hardware/wifi/1.5/IWifiNanIface.h> -#include <android/hardware/wifi/1.5/IWifiNanIfaceEventCallback.h> - -#include "hidl_callback_util.h" -#include "wifi_iface_util.h" -#include "wifi_legacy_hal.h" - -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { -using namespace android::hardware::wifi::V1_0; -using namespace android::hardware::wifi::V1_2; - -/** - * HIDL interface object used to control a NAN Iface instance. - */ -class WifiNanIface : public V1_5::IWifiNanIface { - public: - WifiNanIface(const std::string& ifname, bool is_dedicated_iface, - const std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal, - const std::weak_ptr<iface_util::WifiIfaceUtil> iface_util); - // Refer to |WifiChip::invalidate()|. - void invalidate(); - bool isValid(); - std::string getName(); - - // HIDL methods exposed. - Return<void> getName(getName_cb hidl_status_cb) override; - Return<void> getType(getType_cb hidl_status_cb) override; - Return<void> registerEventCallback( - const sp<V1_0::IWifiNanIfaceEventCallback>& callback, - registerEventCallback_cb hidl_status_cb) override; - Return<void> getCapabilitiesRequest( - uint16_t cmd_id, getCapabilitiesRequest_cb hidl_status_cb) override; - Return<void> enableRequest(uint16_t cmd_id, - const V1_0::NanEnableRequest& msg, - enableRequest_cb hidl_status_cb) override; - Return<void> configRequest(uint16_t cmd_id, - const V1_0::NanConfigRequest& msg, - configRequest_cb hidl_status_cb) override; - Return<void> disableRequest(uint16_t cmd_id, - disableRequest_cb hidl_status_cb) override; - Return<void> startPublishRequest( - uint16_t cmd_id, const NanPublishRequest& msg, - startPublishRequest_cb hidl_status_cb) override; - Return<void> stopPublishRequest( - uint16_t cmd_id, uint8_t sessionId, - stopPublishRequest_cb hidl_status_cb) override; - Return<void> startSubscribeRequest( - uint16_t cmd_id, const NanSubscribeRequest& msg, - startSubscribeRequest_cb hidl_status_cb) override; - Return<void> stopSubscribeRequest( - uint16_t cmd_id, uint8_t sessionId, - stopSubscribeRequest_cb hidl_status_cb) override; - Return<void> transmitFollowupRequest( - uint16_t cmd_id, const NanTransmitFollowupRequest& msg, - transmitFollowupRequest_cb hidl_status_cb) override; - Return<void> createDataInterfaceRequest( - uint16_t cmd_id, const hidl_string& iface_name, - createDataInterfaceRequest_cb hidl_status_cb) override; - Return<void> deleteDataInterfaceRequest( - uint16_t cmd_id, const hidl_string& iface_name, - deleteDataInterfaceRequest_cb hidl_status_cb) override; - Return<void> initiateDataPathRequest( - uint16_t cmd_id, const NanInitiateDataPathRequest& msg, - initiateDataPathRequest_cb hidl_status_cb) override; - Return<void> respondToDataPathIndicationRequest( - uint16_t cmd_id, const NanRespondToDataPathIndicationRequest& msg, - respondToDataPathIndicationRequest_cb hidl_status_cb) override; - Return<void> terminateDataPathRequest( - uint16_t cmd_id, uint32_t ndpInstanceId, - terminateDataPathRequest_cb hidl_status_cb) override; - - Return<void> registerEventCallback_1_2( - const sp<V1_2::IWifiNanIfaceEventCallback>& callback, - registerEventCallback_1_2_cb hidl_status_cb) override; - Return<void> enableRequest_1_2( - uint16_t cmd_id, const V1_0::NanEnableRequest& msg1, - const V1_2::NanConfigRequestSupplemental& msg2, - enableRequest_1_2_cb hidl_status_cb) override; - Return<void> configRequest_1_2( - uint16_t cmd_id, const V1_0::NanConfigRequest& msg1, - const V1_2::NanConfigRequestSupplemental& msg2, - configRequest_1_2_cb hidl_status_cb) override; - Return<void> enableRequest_1_4( - uint16_t cmd_id, const V1_4::NanEnableRequest& msg1, - const V1_2::NanConfigRequestSupplemental& msg2, - enableRequest_1_4_cb hidl_status_cb) override; - Return<void> configRequest_1_4( - uint16_t cmd_id, const V1_4::NanConfigRequest& msg1, - const V1_2::NanConfigRequestSupplemental& msg2, - configRequest_1_4_cb hidl_status_cb) override; - Return<void> registerEventCallback_1_5( - const sp<IWifiNanIfaceEventCallback>& callback, - registerEventCallback_1_5_cb hidl_status_cb) override; - Return<void> enableRequest_1_5( - uint16_t cmd_id, const V1_4::NanEnableRequest& msg1, - const NanConfigRequestSupplemental& msg2, - enableRequest_1_4_cb hidl_status_cb) override; - Return<void> configRequest_1_5( - uint16_t cmd_id, const V1_4::NanConfigRequest& msg1, - const NanConfigRequestSupplemental& msg2, - configRequest_1_4_cb hidl_status_cb) override; - Return<void> getCapabilitiesRequest_1_5( - uint16_t cmd_id, getCapabilitiesRequest_cb hidl_status_cb) override; - - private: - // Corresponding worker functions for the HIDL methods. - std::pair<WifiStatus, std::string> getNameInternal(); - std::pair<WifiStatus, IfaceType> getTypeInternal(); - WifiStatus registerEventCallbackInternal( - const sp<V1_0::IWifiNanIfaceEventCallback>& callback); - WifiStatus getCapabilitiesRequestInternal(uint16_t cmd_id); - WifiStatus enableRequestInternal(uint16_t cmd_id, - const V1_0::NanEnableRequest& msg); - WifiStatus configRequestInternal(uint16_t cmd_id, - const V1_0::NanConfigRequest& msg); - WifiStatus disableRequestInternal(uint16_t cmd_id); - WifiStatus startPublishRequestInternal(uint16_t cmd_id, - const NanPublishRequest& msg); - WifiStatus stopPublishRequestInternal(uint16_t cmd_id, uint8_t sessionId); - WifiStatus startSubscribeRequestInternal(uint16_t cmd_id, - const NanSubscribeRequest& msg); - WifiStatus stopSubscribeRequestInternal(uint16_t cmd_id, uint8_t sessionId); - WifiStatus transmitFollowupRequestInternal( - uint16_t cmd_id, const NanTransmitFollowupRequest& msg); - WifiStatus createDataInterfaceRequestInternal( - uint16_t cmd_id, const std::string& iface_name); - WifiStatus deleteDataInterfaceRequestInternal( - uint16_t cmd_id, const std::string& iface_name); - WifiStatus initiateDataPathRequestInternal( - uint16_t cmd_id, const NanInitiateDataPathRequest& msg); - WifiStatus respondToDataPathIndicationRequestInternal( - uint16_t cmd_id, const NanRespondToDataPathIndicationRequest& msg); - WifiStatus terminateDataPathRequestInternal(uint16_t cmd_id, - uint32_t ndpInstanceId); - - WifiStatus registerEventCallback_1_2Internal( - const sp<V1_2::IWifiNanIfaceEventCallback>& callback); - WifiStatus enableRequest_1_2Internal( - uint16_t cmd_id, const V1_0::NanEnableRequest& msg1, - const V1_2::NanConfigRequestSupplemental& msg2); - WifiStatus configRequest_1_2Internal( - uint16_t cmd_id, const V1_0::NanConfigRequest& msg, - const V1_2::NanConfigRequestSupplemental& msg2); - WifiStatus enableRequest_1_4Internal( - uint16_t cmd_id, const V1_4::NanEnableRequest& msg1, - const V1_2::NanConfigRequestSupplemental& msg2); - WifiStatus configRequest_1_4Internal( - uint16_t cmd_id, const V1_4::NanConfigRequest& msg, - const V1_2::NanConfigRequestSupplemental& msg2); - WifiStatus registerEventCallback_1_5Internal( - const sp<IWifiNanIfaceEventCallback>& callback); - WifiStatus enableRequest_1_5Internal( - uint16_t cmd_id, const V1_4::NanEnableRequest& msg1, - const NanConfigRequestSupplemental& msg2); - WifiStatus configRequest_1_5Internal( - uint16_t cmd_id, const V1_4::NanConfigRequest& msg, - const NanConfigRequestSupplemental& msg2); - WifiStatus getCapabilitiesRequest_1_5Internal(uint16_t cmd_id); - - // all 1_0 and descendant callbacks - std::set<sp<V1_0::IWifiNanIfaceEventCallback>> getEventCallbacks(); - // all 1_2 and descendant callbacks - std::set<sp<V1_2::IWifiNanIfaceEventCallback>> getEventCallbacks_1_2(); - // all 1_5 and descendant callbacks - std::set<sp<IWifiNanIfaceEventCallback>> getEventCallbacks_1_5(); - - std::string ifname_; - bool is_dedicated_iface_; - std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal_; - std::weak_ptr<iface_util::WifiIfaceUtil> iface_util_; - bool is_valid_; - hidl_callback_util::HidlCallbackHandler<V1_0::IWifiNanIfaceEventCallback> - event_cb_handler_; - hidl_callback_util::HidlCallbackHandler<V1_2::IWifiNanIfaceEventCallback> - event_cb_handler_1_2_; - hidl_callback_util::HidlCallbackHandler<IWifiNanIfaceEventCallback> - event_cb_handler_1_5_; - - DISALLOW_COPY_AND_ASSIGN(WifiNanIface); -}; - -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android - -#endif // WIFI_NAN_IFACE_H_ diff --git a/wifi/1.5/default/wifi_p2p_iface.cpp b/wifi/1.5/default/wifi_p2p_iface.cpp deleted file mode 100644 index b8893da153..0000000000 --- a/wifi/1.5/default/wifi_p2p_iface.cpp +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (C) 2016 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include <android-base/logging.h> - -#include "hidl_return_util.h" -#include "wifi_p2p_iface.h" -#include "wifi_status_util.h" - -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { -using hidl_return_util::validateAndCall; - -WifiP2pIface::WifiP2pIface( - const std::string& ifname, - const std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal) - : ifname_(ifname), legacy_hal_(legacy_hal), is_valid_(true) {} - -void WifiP2pIface::invalidate() { - legacy_hal_.reset(); - is_valid_ = false; -} - -bool WifiP2pIface::isValid() { return is_valid_; } - -std::string WifiP2pIface::getName() { return ifname_; } - -Return<void> WifiP2pIface::getName(getName_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiP2pIface::getNameInternal, hidl_status_cb); -} - -Return<void> WifiP2pIface::getType(getType_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiP2pIface::getTypeInternal, hidl_status_cb); -} - -std::pair<WifiStatus, std::string> WifiP2pIface::getNameInternal() { - return {createWifiStatus(WifiStatusCode::SUCCESS), ifname_}; -} - -std::pair<WifiStatus, IfaceType> WifiP2pIface::getTypeInternal() { - return {createWifiStatus(WifiStatusCode::SUCCESS), IfaceType::P2P}; -} - -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android diff --git a/wifi/1.5/default/wifi_p2p_iface.h b/wifi/1.5/default/wifi_p2p_iface.h deleted file mode 100644 index c1adc50278..0000000000 --- a/wifi/1.5/default/wifi_p2p_iface.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (C) 2016 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef WIFI_P2P_IFACE_H_ -#define WIFI_P2P_IFACE_H_ - -#include <android-base/macros.h> -#include <android/hardware/wifi/1.0/IWifiP2pIface.h> - -#include "wifi_legacy_hal.h" - -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { -using namespace android::hardware::wifi::V1_0; - -/** - * HIDL interface object used to control a P2P Iface instance. - */ -class WifiP2pIface : public V1_0::IWifiP2pIface { - public: - WifiP2pIface(const std::string& ifname, - const std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal); - // Refer to |WifiChip::invalidate()|. - void invalidate(); - bool isValid(); - std::string getName(); - - // HIDL methods exposed. - Return<void> getName(getName_cb hidl_status_cb) override; - Return<void> getType(getType_cb hidl_status_cb) override; - - private: - // Corresponding worker functions for the HIDL methods. - std::pair<WifiStatus, std::string> getNameInternal(); - std::pair<WifiStatus, IfaceType> getTypeInternal(); - - std::string ifname_; - std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal_; - bool is_valid_; - - DISALLOW_COPY_AND_ASSIGN(WifiP2pIface); -}; - -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android - -#endif // WIFI_P2P_IFACE_H_ diff --git a/wifi/1.5/default/wifi_rtt_controller.cpp b/wifi/1.5/default/wifi_rtt_controller.cpp deleted file mode 100644 index a0f9969033..0000000000 --- a/wifi/1.5/default/wifi_rtt_controller.cpp +++ /dev/null @@ -1,351 +0,0 @@ -/* - * Copyright (C) 2016 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include <android-base/logging.h> - -#include "hidl_return_util.h" -#include "hidl_struct_util.h" -#include "wifi_rtt_controller.h" -#include "wifi_status_util.h" - -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { -using hidl_return_util::validateAndCall; - -WifiRttController::WifiRttController( - const std::string& iface_name, const sp<IWifiIface>& bound_iface, - const std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal) - : ifname_(iface_name), - bound_iface_(bound_iface), - legacy_hal_(legacy_hal), - is_valid_(true) {} - -void WifiRttController::invalidate() { - legacy_hal_.reset(); - event_callbacks_.clear(); - is_valid_ = false; -} - -bool WifiRttController::isValid() { return is_valid_; } - -std::vector<sp<V1_4::IWifiRttControllerEventCallback>> -WifiRttController::getEventCallbacks() { - return event_callbacks_; -} - -std::string WifiRttController::getIfaceName() { return ifname_; } - -Return<void> WifiRttController::getBoundIface(getBoundIface_cb hidl_status_cb) { - return validateAndCall( - this, WifiStatusCode::ERROR_WIFI_RTT_CONTROLLER_INVALID, - &WifiRttController::getBoundIfaceInternal, hidl_status_cb); -} - -Return<void> WifiRttController::registerEventCallback( - const sp<V1_0::IWifiRttControllerEventCallback>& callback, - registerEventCallback_cb hidl_status_cb) { - return validateAndCall(this, - WifiStatusCode::ERROR_WIFI_RTT_CONTROLLER_INVALID, - &WifiRttController::registerEventCallbackInternal, - hidl_status_cb, callback); -} - -Return<void> WifiRttController::rangeRequest( - uint32_t cmd_id, const hidl_vec<V1_0::RttConfig>& rtt_configs, - rangeRequest_cb hidl_status_cb) { - return validateAndCall(this, - WifiStatusCode::ERROR_WIFI_RTT_CONTROLLER_INVALID, - &WifiRttController::rangeRequestInternal, - hidl_status_cb, cmd_id, rtt_configs); -} - -Return<void> WifiRttController::rangeCancel( - uint32_t cmd_id, const hidl_vec<hidl_array<uint8_t, 6>>& addrs, - rangeCancel_cb hidl_status_cb) { - return validateAndCall( - this, WifiStatusCode::ERROR_WIFI_RTT_CONTROLLER_INVALID, - &WifiRttController::rangeCancelInternal, hidl_status_cb, cmd_id, addrs); -} - -Return<void> WifiRttController::getCapabilities( - getCapabilities_cb hidl_status_cb) { - return validateAndCall( - this, WifiStatusCode::ERROR_WIFI_RTT_CONTROLLER_INVALID, - &WifiRttController::getCapabilitiesInternal, hidl_status_cb); -} - -Return<void> WifiRttController::setLci(uint32_t cmd_id, - const RttLciInformation& lci, - setLci_cb hidl_status_cb) { - return validateAndCall( - this, WifiStatusCode::ERROR_WIFI_RTT_CONTROLLER_INVALID, - &WifiRttController::setLciInternal, hidl_status_cb, cmd_id, lci); -} - -Return<void> WifiRttController::setLcr(uint32_t cmd_id, - const RttLcrInformation& lcr, - setLcr_cb hidl_status_cb) { - return validateAndCall( - this, WifiStatusCode::ERROR_WIFI_RTT_CONTROLLER_INVALID, - &WifiRttController::setLcrInternal, hidl_status_cb, cmd_id, lcr); -} - -Return<void> WifiRttController::getResponderInfo( - getResponderInfo_cb hidl_status_cb) { - return validateAndCall( - this, WifiStatusCode::ERROR_WIFI_RTT_CONTROLLER_INVALID, - &WifiRttController::getResponderInfoInternal, hidl_status_cb); -} - -Return<void> WifiRttController::enableResponder( - uint32_t cmd_id, const WifiChannelInfo& channel_hint, - uint32_t max_duration_seconds, const V1_0::RttResponder& info, - enableResponder_cb hidl_status_cb) { - return validateAndCall( - this, WifiStatusCode::ERROR_WIFI_RTT_CONTROLLER_INVALID, - &WifiRttController::enableResponderInternal, hidl_status_cb, cmd_id, - channel_hint, max_duration_seconds, info); -} - -Return<void> WifiRttController::disableResponder( - uint32_t cmd_id, disableResponder_cb hidl_status_cb) { - return validateAndCall( - this, WifiStatusCode::ERROR_WIFI_RTT_CONTROLLER_INVALID, - &WifiRttController::disableResponderInternal, hidl_status_cb, cmd_id); -} - -Return<void> WifiRttController::registerEventCallback_1_4( - const sp<V1_4::IWifiRttControllerEventCallback>& callback, - registerEventCallback_1_4_cb hidl_status_cb) { - return validateAndCall( - this, WifiStatusCode::ERROR_WIFI_RTT_CONTROLLER_INVALID, - &WifiRttController::registerEventCallbackInternal_1_4, hidl_status_cb, - callback); -} - -Return<void> WifiRttController::rangeRequest_1_4( - uint32_t cmd_id, const hidl_vec<V1_4::RttConfig>& rtt_configs, - rangeRequest_1_4_cb hidl_status_cb) { - return validateAndCall(this, - WifiStatusCode::ERROR_WIFI_RTT_CONTROLLER_INVALID, - &WifiRttController::rangeRequestInternal_1_4, - hidl_status_cb, cmd_id, rtt_configs); -} - -Return<void> WifiRttController::getCapabilities_1_4( - getCapabilities_1_4_cb hidl_status_cb) { - return validateAndCall( - this, WifiStatusCode::ERROR_WIFI_RTT_CONTROLLER_INVALID, - &WifiRttController::getCapabilitiesInternal_1_4, hidl_status_cb); -} - -Return<void> WifiRttController::getResponderInfo_1_4( - getResponderInfo_1_4_cb hidl_status_cb) { - return validateAndCall( - this, WifiStatusCode::ERROR_WIFI_RTT_CONTROLLER_INVALID, - &WifiRttController::getResponderInfoInternal_1_4, hidl_status_cb); -} - -Return<void> WifiRttController::enableResponder_1_4( - uint32_t cmd_id, const WifiChannelInfo& channel_hint, - uint32_t max_duration_seconds, const V1_4::RttResponder& info, - enableResponder_1_4_cb hidl_status_cb) { - return validateAndCall( - this, WifiStatusCode::ERROR_WIFI_RTT_CONTROLLER_INVALID, - &WifiRttController::enableResponderInternal_1_4, hidl_status_cb, cmd_id, - channel_hint, max_duration_seconds, info); -} - -std::pair<WifiStatus, sp<IWifiIface>> -WifiRttController::getBoundIfaceInternal() { - return {createWifiStatus(WifiStatusCode::SUCCESS), bound_iface_}; -} - -WifiStatus WifiRttController::registerEventCallbackInternal( - const sp<V1_0::IWifiRttControllerEventCallback>& /* callback */) { - // Deprecated support for this api - return createWifiStatus(WifiStatusCode::ERROR_NOT_SUPPORTED); -} - -WifiStatus WifiRttController::rangeRequestInternal( - uint32_t /* cmd_id */, - const std::vector<V1_0::RttConfig>& /* rtt_configs */) { - // Deprecated support for this api - return createWifiStatus(WifiStatusCode::ERROR_NOT_SUPPORTED); -} - -WifiStatus WifiRttController::rangeCancelInternal( - uint32_t cmd_id, const std::vector<hidl_array<uint8_t, 6>>& addrs) { - std::vector<std::array<uint8_t, 6>> legacy_addrs; - for (const auto& addr : addrs) { - legacy_addrs.push_back(addr); - } - legacy_hal::wifi_error legacy_status = - legacy_hal_.lock()->cancelRttRangeRequest(ifname_, cmd_id, - legacy_addrs); - return createWifiStatusFromLegacyError(legacy_status); -} - -std::pair<WifiStatus, V1_0::RttCapabilities> -WifiRttController::getCapabilitiesInternal() { - // Deprecated support for this api - return {createWifiStatus(WifiStatusCode::ERROR_NOT_SUPPORTED), {}}; -} - -WifiStatus WifiRttController::setLciInternal(uint32_t cmd_id, - const RttLciInformation& lci) { - legacy_hal::wifi_lci_information legacy_lci; - if (!hidl_struct_util::convertHidlRttLciInformationToLegacy(lci, - &legacy_lci)) { - return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS); - } - legacy_hal::wifi_error legacy_status = - legacy_hal_.lock()->setRttLci(ifname_, cmd_id, legacy_lci); - return createWifiStatusFromLegacyError(legacy_status); -} - -WifiStatus WifiRttController::setLcrInternal(uint32_t cmd_id, - const RttLcrInformation& lcr) { - legacy_hal::wifi_lcr_information legacy_lcr; - if (!hidl_struct_util::convertHidlRttLcrInformationToLegacy(lcr, - &legacy_lcr)) { - return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS); - } - legacy_hal::wifi_error legacy_status = - legacy_hal_.lock()->setRttLcr(ifname_, cmd_id, legacy_lcr); - return createWifiStatusFromLegacyError(legacy_status); -} - -std::pair<WifiStatus, V1_0::RttResponder> -WifiRttController::getResponderInfoInternal() { - // Deprecated support for this api - return {createWifiStatus(WifiStatusCode::ERROR_NOT_SUPPORTED), {}}; -} - -WifiStatus WifiRttController::enableResponderInternal( - uint32_t /* cmd_id */, const WifiChannelInfo& /* channel_hint */, - uint32_t /* max_duration_seconds */, const V1_0::RttResponder& /* info */) { - // Deprecated support for this api - return {createWifiStatus(WifiStatusCode::ERROR_NOT_SUPPORTED)}; -} - -WifiStatus WifiRttController::disableResponderInternal(uint32_t cmd_id) { - legacy_hal::wifi_error legacy_status = - legacy_hal_.lock()->disableRttResponder(ifname_, cmd_id); - return createWifiStatusFromLegacyError(legacy_status); -} - -WifiStatus WifiRttController::registerEventCallbackInternal_1_4( - const sp<V1_4::IWifiRttControllerEventCallback>& callback) { - // TODO(b/31632518): remove the callback when the client is destroyed - event_callbacks_.emplace_back(callback); - return createWifiStatus(WifiStatusCode::SUCCESS); -} - -WifiStatus WifiRttController::rangeRequestInternal_1_4( - uint32_t cmd_id, const std::vector<V1_4::RttConfig>& rtt_configs) { - std::vector<legacy_hal::wifi_rtt_config> legacy_configs; - if (!hidl_struct_util::convertHidlVectorOfRttConfigToLegacy( - rtt_configs, &legacy_configs)) { - return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS); - } - android::wp<WifiRttController> weak_ptr_this(this); - const auto& on_results_callback = - [weak_ptr_this]( - legacy_hal::wifi_request_id id, - const std::vector<const legacy_hal::wifi_rtt_result*>& results) { - const auto shared_ptr_this = weak_ptr_this.promote(); - if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { - LOG(ERROR) << "Callback invoked on an invalid object"; - return; - } - std::vector<V1_4::RttResult> hidl_results; - if (!hidl_struct_util::convertLegacyVectorOfRttResultToHidl( - results, &hidl_results)) { - LOG(ERROR) << "Failed to convert rtt results to HIDL structs"; - return; - } - for (const auto& callback : shared_ptr_this->getEventCallbacks()) { - callback->onResults_1_4(id, hidl_results); - } - }; - legacy_hal::wifi_error legacy_status = - legacy_hal_.lock()->startRttRangeRequest( - ifname_, cmd_id, legacy_configs, on_results_callback); - return createWifiStatusFromLegacyError(legacy_status); -} - -std::pair<WifiStatus, V1_4::RttCapabilities> -WifiRttController::getCapabilitiesInternal_1_4() { - legacy_hal::wifi_error legacy_status; - legacy_hal::wifi_rtt_capabilities legacy_caps; - std::tie(legacy_status, legacy_caps) = - legacy_hal_.lock()->getRttCapabilities(ifname_); - if (legacy_status != legacy_hal::WIFI_SUCCESS) { - return {createWifiStatusFromLegacyError(legacy_status), {}}; - } - V1_4::RttCapabilities hidl_caps; - if (!hidl_struct_util::convertLegacyRttCapabilitiesToHidl(legacy_caps, - &hidl_caps)) { - return {createWifiStatus(WifiStatusCode::ERROR_UNKNOWN), {}}; - } - return {createWifiStatus(WifiStatusCode::SUCCESS), hidl_caps}; -} - -std::pair<WifiStatus, V1_4::RttResponder> -WifiRttController::getResponderInfoInternal_1_4() { - legacy_hal::wifi_error legacy_status; - legacy_hal::wifi_rtt_responder legacy_responder; - std::tie(legacy_status, legacy_responder) = - legacy_hal_.lock()->getRttResponderInfo(ifname_); - if (legacy_status != legacy_hal::WIFI_SUCCESS) { - return {createWifiStatusFromLegacyError(legacy_status), {}}; - } - V1_4::RttResponder hidl_responder; - if (!hidl_struct_util::convertLegacyRttResponderToHidl(legacy_responder, - &hidl_responder)) { - return {createWifiStatus(WifiStatusCode::ERROR_UNKNOWN), {}}; - } - return {createWifiStatus(WifiStatusCode::SUCCESS), hidl_responder}; -} - -WifiStatus WifiRttController::enableResponderInternal_1_4( - uint32_t cmd_id, const WifiChannelInfo& channel_hint, - uint32_t max_duration_seconds, const V1_4::RttResponder& info) { - legacy_hal::wifi_channel_info legacy_channel_info; - if (!hidl_struct_util::convertHidlWifiChannelInfoToLegacy( - channel_hint, &legacy_channel_info)) { - return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS); - } - legacy_hal::wifi_rtt_responder legacy_responder; - if (!hidl_struct_util::convertHidlRttResponderToLegacy(info, - &legacy_responder)) { - return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS); - } - legacy_hal::wifi_error legacy_status = - legacy_hal_.lock()->enableRttResponder( - ifname_, cmd_id, legacy_channel_info, max_duration_seconds, - legacy_responder); - return createWifiStatusFromLegacyError(legacy_status); -} -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android diff --git a/wifi/1.5/default/wifi_rtt_controller.h b/wifi/1.5/default/wifi_rtt_controller.h deleted file mode 100644 index 9ac3e06fcc..0000000000 --- a/wifi/1.5/default/wifi_rtt_controller.h +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright (C) 2016 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef WIFI_RTT_CONTROLLER_H_ -#define WIFI_RTT_CONTROLLER_H_ - -#include <android-base/macros.h> -#include <android/hardware/wifi/1.0/IWifiIface.h> -#include <android/hardware/wifi/1.4/IWifiRttController.h> -#include <android/hardware/wifi/1.4/IWifiRttControllerEventCallback.h> - -#include "wifi_legacy_hal.h" - -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { - -/** - * HIDL interface object used to control all RTT operations. - */ -class WifiRttController : public V1_4::IWifiRttController { - public: - WifiRttController( - const std::string& iface_name, const sp<IWifiIface>& bound_iface, - const std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal); - // Refer to |WifiChip::invalidate()|. - void invalidate(); - bool isValid(); - std::vector<sp<V1_4::IWifiRttControllerEventCallback>> getEventCallbacks(); - std::string getIfaceName(); - - // HIDL methods exposed. - Return<void> getBoundIface(getBoundIface_cb hidl_status_cb) override; - Return<void> registerEventCallback( - const sp<V1_0::IWifiRttControllerEventCallback>& callback, - registerEventCallback_cb hidl_status_cb) override; - Return<void> rangeRequest(uint32_t cmd_id, - const hidl_vec<V1_0::RttConfig>& rtt_configs, - rangeRequest_cb hidl_status_cb) override; - Return<void> rangeCancel(uint32_t cmd_id, - const hidl_vec<hidl_array<uint8_t, 6>>& addrs, - rangeCancel_cb hidl_status_cb) override; - Return<void> getCapabilities(getCapabilities_cb hidl_status_cb) override; - Return<void> setLci(uint32_t cmd_id, const RttLciInformation& lci, - setLci_cb hidl_status_cb) override; - Return<void> setLcr(uint32_t cmd_id, const RttLcrInformation& lcr, - setLcr_cb hidl_status_cb) override; - Return<void> getResponderInfo(getResponderInfo_cb hidl_status_cb) override; - Return<void> enableResponder(uint32_t cmd_id, - const WifiChannelInfo& channel_hint, - uint32_t max_duration_seconds, - const V1_0::RttResponder& info, - enableResponder_cb hidl_status_cb) override; - Return<void> disableResponder(uint32_t cmd_id, - disableResponder_cb hidl_status_cb) override; - Return<void> registerEventCallback_1_4( - const sp<V1_4::IWifiRttControllerEventCallback>& callback, - registerEventCallback_1_4_cb hidl_status_cb) override; - Return<void> rangeRequest_1_4(uint32_t cmd_id, - const hidl_vec<V1_4::RttConfig>& rtt_configs, - rangeRequest_1_4_cb hidl_status_cb) override; - Return<void> getCapabilities_1_4( - getCapabilities_1_4_cb hidl_status_cb) override; - Return<void> getResponderInfo_1_4( - getResponderInfo_1_4_cb hidl_status_cb) override; - Return<void> enableResponder_1_4( - uint32_t cmd_id, const WifiChannelInfo& channel_hint, - uint32_t max_duration_seconds, const V1_4::RttResponder& info, - enableResponder_1_4_cb hidl_status_cb) override; - - private: - // Corresponding worker functions for the HIDL methods. - std::pair<WifiStatus, sp<IWifiIface>> getBoundIfaceInternal(); - WifiStatus registerEventCallbackInternal( - const sp<V1_0::IWifiRttControllerEventCallback>& callback); - WifiStatus rangeRequestInternal( - uint32_t cmd_id, const std::vector<V1_0::RttConfig>& rtt_configs); - WifiStatus rangeCancelInternal( - uint32_t cmd_id, const std::vector<hidl_array<uint8_t, 6>>& addrs); - std::pair<WifiStatus, V1_0::RttCapabilities> getCapabilitiesInternal(); - WifiStatus setLciInternal(uint32_t cmd_id, const RttLciInformation& lci); - WifiStatus setLcrInternal(uint32_t cmd_id, const RttLcrInformation& lcr); - std::pair<WifiStatus, V1_0::RttResponder> getResponderInfoInternal(); - WifiStatus enableResponderInternal(uint32_t cmd_id, - const WifiChannelInfo& channel_hint, - uint32_t max_duration_seconds, - const V1_0::RttResponder& info); - WifiStatus disableResponderInternal(uint32_t cmd_id); - WifiStatus registerEventCallbackInternal_1_4( - const sp<V1_4::IWifiRttControllerEventCallback>& callback); - WifiStatus rangeRequestInternal_1_4( - uint32_t cmd_id, const std::vector<V1_4::RttConfig>& rtt_configs); - std::pair<WifiStatus, V1_4::RttCapabilities> getCapabilitiesInternal_1_4(); - std::pair<WifiStatus, V1_4::RttResponder> getResponderInfoInternal_1_4(); - WifiStatus enableResponderInternal_1_4(uint32_t cmd_id, - const WifiChannelInfo& channel_hint, - uint32_t max_duration_seconds, - const V1_4::RttResponder& info); - - std::string ifname_; - sp<IWifiIface> bound_iface_; - std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal_; - std::vector<sp<V1_4::IWifiRttControllerEventCallback>> event_callbacks_; - bool is_valid_; - - DISALLOW_COPY_AND_ASSIGN(WifiRttController); -}; - -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android - -#endif // WIFI_RTT_CONTROLLER_H_ diff --git a/wifi/1.5/default/wifi_sta_iface.cpp b/wifi/1.5/default/wifi_sta_iface.cpp deleted file mode 100644 index 92c9fe4392..0000000000 --- a/wifi/1.5/default/wifi_sta_iface.cpp +++ /dev/null @@ -1,675 +0,0 @@ -/* - * Copyright (C) 2016 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include <android-base/logging.h> - -#include "hidl_return_util.h" -#include "hidl_struct_util.h" -#include "wifi_sta_iface.h" -#include "wifi_status_util.h" - -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { -using hidl_return_util::validateAndCall; - -WifiStaIface::WifiStaIface( - const std::string& ifname, - const std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal, - const std::weak_ptr<iface_util::WifiIfaceUtil> iface_util) - : ifname_(ifname), - legacy_hal_(legacy_hal), - iface_util_(iface_util), - is_valid_(true) { - // Turn on DFS channel usage for STA iface. - legacy_hal::wifi_error legacy_status = - legacy_hal_.lock()->setDfsFlag(ifname_, true); - if (legacy_status != legacy_hal::WIFI_SUCCESS) { - LOG(ERROR) - << "Failed to set DFS flag; DFS channels may be unavailable."; - } -} - -void WifiStaIface::invalidate() { - legacy_hal_.reset(); - event_cb_handler_.invalidate(); - is_valid_ = false; -} - -bool WifiStaIface::isValid() { return is_valid_; } - -std::string WifiStaIface::getName() { return ifname_; } - -std::set<sp<IWifiStaIfaceEventCallback>> WifiStaIface::getEventCallbacks() { - return event_cb_handler_.getCallbacks(); -} - -Return<void> WifiStaIface::getName(getName_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiStaIface::getNameInternal, hidl_status_cb); -} - -Return<void> WifiStaIface::getType(getType_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiStaIface::getTypeInternal, hidl_status_cb); -} - -Return<void> WifiStaIface::registerEventCallback( - const sp<IWifiStaIfaceEventCallback>& callback, - registerEventCallback_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiStaIface::registerEventCallbackInternal, - hidl_status_cb, callback); -} - -Return<void> WifiStaIface::getCapabilities(getCapabilities_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiStaIface::getCapabilitiesInternal, - hidl_status_cb); -} - -Return<void> WifiStaIface::getApfPacketFilterCapabilities( - getApfPacketFilterCapabilities_cb hidl_status_cb) { - return validateAndCall( - this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiStaIface::getApfPacketFilterCapabilitiesInternal, hidl_status_cb); -} - -Return<void> WifiStaIface::installApfPacketFilter( - uint32_t cmd_id, const hidl_vec<uint8_t>& program, - installApfPacketFilter_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiStaIface::installApfPacketFilterInternal, - hidl_status_cb, cmd_id, program); -} - -Return<void> WifiStaIface::readApfPacketFilterData( - readApfPacketFilterData_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiStaIface::readApfPacketFilterDataInternal, - hidl_status_cb); -} - -Return<void> WifiStaIface::getBackgroundScanCapabilities( - getBackgroundScanCapabilities_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiStaIface::getBackgroundScanCapabilitiesInternal, - hidl_status_cb); -} - -Return<void> WifiStaIface::getValidFrequenciesForBand( - V1_0::WifiBand band, getValidFrequenciesForBand_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiStaIface::getValidFrequenciesForBandInternal, - hidl_status_cb, band); -} - -Return<void> WifiStaIface::startBackgroundScan( - uint32_t cmd_id, const StaBackgroundScanParameters& params, - startBackgroundScan_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiStaIface::startBackgroundScanInternal, - hidl_status_cb, cmd_id, params); -} - -Return<void> WifiStaIface::stopBackgroundScan( - uint32_t cmd_id, stopBackgroundScan_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiStaIface::stopBackgroundScanInternal, - hidl_status_cb, cmd_id); -} - -Return<void> WifiStaIface::enableLinkLayerStatsCollection( - bool debug, enableLinkLayerStatsCollection_cb hidl_status_cb) { - return validateAndCall( - this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiStaIface::enableLinkLayerStatsCollectionInternal, hidl_status_cb, - debug); -} - -Return<void> WifiStaIface::disableLinkLayerStatsCollection( - disableLinkLayerStatsCollection_cb hidl_status_cb) { - return validateAndCall( - this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiStaIface::disableLinkLayerStatsCollectionInternal, hidl_status_cb); -} - -Return<void> WifiStaIface::getLinkLayerStats( - getLinkLayerStats_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiStaIface::getLinkLayerStatsInternal, - hidl_status_cb); -} - -Return<void> WifiStaIface::getLinkLayerStats_1_3( - getLinkLayerStats_1_3_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiStaIface::getLinkLayerStatsInternal_1_3, - hidl_status_cb); -} - -Return<void> WifiStaIface::getLinkLayerStats_1_5( - getLinkLayerStats_1_5_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiStaIface::getLinkLayerStatsInternal_1_5, - hidl_status_cb); -} - -Return<void> WifiStaIface::startRssiMonitoring( - uint32_t cmd_id, int32_t max_rssi, int32_t min_rssi, - startRssiMonitoring_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiStaIface::startRssiMonitoringInternal, - hidl_status_cb, cmd_id, max_rssi, min_rssi); -} - -Return<void> WifiStaIface::stopRssiMonitoring( - uint32_t cmd_id, stopRssiMonitoring_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiStaIface::stopRssiMonitoringInternal, - hidl_status_cb, cmd_id); -} - -Return<void> WifiStaIface::getRoamingCapabilities( - getRoamingCapabilities_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiStaIface::getRoamingCapabilitiesInternal, - hidl_status_cb); -} - -Return<void> WifiStaIface::configureRoaming( - const StaRoamingConfig& config, configureRoaming_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiStaIface::configureRoamingInternal, - hidl_status_cb, config); -} - -Return<void> WifiStaIface::setRoamingState(StaRoamingState state, - setRoamingState_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiStaIface::setRoamingStateInternal, - hidl_status_cb, state); -} - -Return<void> WifiStaIface::enableNdOffload(bool enable, - enableNdOffload_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiStaIface::enableNdOffloadInternal, - hidl_status_cb, enable); -} - -Return<void> WifiStaIface::startSendingKeepAlivePackets( - uint32_t cmd_id, const hidl_vec<uint8_t>& ip_packet_data, - uint16_t ether_type, const hidl_array<uint8_t, 6>& src_address, - const hidl_array<uint8_t, 6>& dst_address, uint32_t period_in_ms, - startSendingKeepAlivePackets_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiStaIface::startSendingKeepAlivePacketsInternal, - hidl_status_cb, cmd_id, ip_packet_data, ether_type, - src_address, dst_address, period_in_ms); -} - -Return<void> WifiStaIface::stopSendingKeepAlivePackets( - uint32_t cmd_id, stopSendingKeepAlivePackets_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiStaIface::stopSendingKeepAlivePacketsInternal, - hidl_status_cb, cmd_id); -} - -Return<void> WifiStaIface::setScanningMacOui( - const hidl_array<uint8_t, 3>& oui, setScanningMacOui_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiStaIface::setScanningMacOuiInternal, - hidl_status_cb, oui); -} - -Return<void> WifiStaIface::startDebugPacketFateMonitoring( - startDebugPacketFateMonitoring_cb hidl_status_cb) { - return validateAndCall( - this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiStaIface::startDebugPacketFateMonitoringInternal, hidl_status_cb); -} - -Return<void> WifiStaIface::getDebugTxPacketFates( - getDebugTxPacketFates_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiStaIface::getDebugTxPacketFatesInternal, - hidl_status_cb); -} - -Return<void> WifiStaIface::getDebugRxPacketFates( - getDebugRxPacketFates_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiStaIface::getDebugRxPacketFatesInternal, - hidl_status_cb); -} - -Return<void> WifiStaIface::setMacAddress(const hidl_array<uint8_t, 6>& mac, - setMacAddress_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiStaIface::setMacAddressInternal, hidl_status_cb, - mac); -} - -Return<void> WifiStaIface::getFactoryMacAddress( - getFactoryMacAddress_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiStaIface::getFactoryMacAddressInternal, - hidl_status_cb); -} - -Return<void> WifiStaIface::setScanMode(bool enable, - setScanMode_cb hidl_status_cb) { - return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID, - &WifiStaIface::setScanModeInternal, hidl_status_cb, - enable); -} - -std::pair<WifiStatus, std::string> WifiStaIface::getNameInternal() { - return {createWifiStatus(WifiStatusCode::SUCCESS), ifname_}; -} - -std::pair<WifiStatus, IfaceType> WifiStaIface::getTypeInternal() { - return {createWifiStatus(WifiStatusCode::SUCCESS), IfaceType::STA}; -} - -WifiStatus WifiStaIface::registerEventCallbackInternal( - const sp<IWifiStaIfaceEventCallback>& callback) { - if (!event_cb_handler_.addCallback(callback)) { - return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN); - } - return createWifiStatus(WifiStatusCode::SUCCESS); -} - -std::pair<WifiStatus, uint32_t> WifiStaIface::getCapabilitiesInternal() { - legacy_hal::wifi_error legacy_status; - uint64_t legacy_feature_set; - std::tie(legacy_status, legacy_feature_set) = - legacy_hal_.lock()->getSupportedFeatureSet(ifname_); - if (legacy_status != legacy_hal::WIFI_SUCCESS) { - return {createWifiStatusFromLegacyError(legacy_status), 0}; - } - uint32_t legacy_logger_feature_set; - std::tie(legacy_status, legacy_logger_feature_set) = - legacy_hal_.lock()->getLoggerSupportedFeatureSet(ifname_); - if (legacy_status != legacy_hal::WIFI_SUCCESS) { - // some devices don't support querying logger feature set - legacy_logger_feature_set = 0; - } - uint32_t hidl_caps; - if (!hidl_struct_util::convertLegacyFeaturesToHidlStaCapabilities( - legacy_feature_set, legacy_logger_feature_set, &hidl_caps)) { - return {createWifiStatus(WifiStatusCode::ERROR_UNKNOWN), 0}; - } - return {createWifiStatus(WifiStatusCode::SUCCESS), hidl_caps}; -} - -std::pair<WifiStatus, StaApfPacketFilterCapabilities> -WifiStaIface::getApfPacketFilterCapabilitiesInternal() { - legacy_hal::wifi_error legacy_status; - legacy_hal::PacketFilterCapabilities legacy_caps; - std::tie(legacy_status, legacy_caps) = - legacy_hal_.lock()->getPacketFilterCapabilities(ifname_); - if (legacy_status != legacy_hal::WIFI_SUCCESS) { - return {createWifiStatusFromLegacyError(legacy_status), {}}; - } - StaApfPacketFilterCapabilities hidl_caps; - if (!hidl_struct_util::convertLegacyApfCapabilitiesToHidl(legacy_caps, - &hidl_caps)) { - return {createWifiStatus(WifiStatusCode::ERROR_UNKNOWN), {}}; - } - return {createWifiStatus(WifiStatusCode::SUCCESS), hidl_caps}; -} - -WifiStatus WifiStaIface::installApfPacketFilterInternal( - uint32_t /* cmd_id */, const std::vector<uint8_t>& program) { - legacy_hal::wifi_error legacy_status = - legacy_hal_.lock()->setPacketFilter(ifname_, program); - return createWifiStatusFromLegacyError(legacy_status); -} - -std::pair<WifiStatus, std::vector<uint8_t>> -WifiStaIface::readApfPacketFilterDataInternal() { - const std::pair<legacy_hal::wifi_error, std::vector<uint8_t>> - legacy_status_and_data = - legacy_hal_.lock()->readApfPacketFilterData(ifname_); - return {createWifiStatusFromLegacyError(legacy_status_and_data.first), - std::move(legacy_status_and_data.second)}; -} - -std::pair<WifiStatus, StaBackgroundScanCapabilities> -WifiStaIface::getBackgroundScanCapabilitiesInternal() { - legacy_hal::wifi_error legacy_status; - legacy_hal::wifi_gscan_capabilities legacy_caps; - std::tie(legacy_status, legacy_caps) = - legacy_hal_.lock()->getGscanCapabilities(ifname_); - if (legacy_status != legacy_hal::WIFI_SUCCESS) { - return {createWifiStatusFromLegacyError(legacy_status), {}}; - } - StaBackgroundScanCapabilities hidl_caps; - if (!hidl_struct_util::convertLegacyGscanCapabilitiesToHidl(legacy_caps, - &hidl_caps)) { - return {createWifiStatus(WifiStatusCode::ERROR_UNKNOWN), {}}; - } - return {createWifiStatus(WifiStatusCode::SUCCESS), hidl_caps}; -} - -std::pair<WifiStatus, std::vector<WifiChannelInMhz>> -WifiStaIface::getValidFrequenciesForBandInternal(V1_0::WifiBand band) { - static_assert(sizeof(WifiChannelInMhz) == sizeof(uint32_t), - "Size mismatch"); - legacy_hal::wifi_error legacy_status; - std::vector<uint32_t> valid_frequencies; - std::tie(legacy_status, valid_frequencies) = - legacy_hal_.lock()->getValidFrequenciesForBand( - ifname_, hidl_struct_util::convertHidlWifiBandToLegacy(band)); - return {createWifiStatusFromLegacyError(legacy_status), valid_frequencies}; -} - -WifiStatus WifiStaIface::startBackgroundScanInternal( - uint32_t cmd_id, const StaBackgroundScanParameters& params) { - legacy_hal::wifi_scan_cmd_params legacy_params; - if (!hidl_struct_util::convertHidlGscanParamsToLegacy(params, - &legacy_params)) { - return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS); - } - android::wp<WifiStaIface> weak_ptr_this(this); - const auto& on_failure_callback = - [weak_ptr_this](legacy_hal::wifi_request_id id) { - const auto shared_ptr_this = weak_ptr_this.promote(); - if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { - LOG(ERROR) << "Callback invoked on an invalid object"; - return; - } - for (const auto& callback : shared_ptr_this->getEventCallbacks()) { - if (!callback->onBackgroundScanFailure(id).isOk()) { - LOG(ERROR) - << "Failed to invoke onBackgroundScanFailure callback"; - } - } - }; - const auto& on_results_callback = - [weak_ptr_this]( - legacy_hal::wifi_request_id id, - const std::vector<legacy_hal::wifi_cached_scan_results>& results) { - const auto shared_ptr_this = weak_ptr_this.promote(); - if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { - LOG(ERROR) << "Callback invoked on an invalid object"; - return; - } - std::vector<StaScanData> hidl_scan_datas; - if (!hidl_struct_util:: - convertLegacyVectorOfCachedGscanResultsToHidl( - results, &hidl_scan_datas)) { - LOG(ERROR) << "Failed to convert scan results to HIDL structs"; - return; - } - for (const auto& callback : shared_ptr_this->getEventCallbacks()) { - if (!callback->onBackgroundScanResults(id, hidl_scan_datas) - .isOk()) { - LOG(ERROR) - << "Failed to invoke onBackgroundScanResults callback"; - } - } - }; - const auto& on_full_result_callback = [weak_ptr_this]( - legacy_hal::wifi_request_id id, - const legacy_hal:: - wifi_scan_result* result, - uint32_t buckets_scanned) { - const auto shared_ptr_this = weak_ptr_this.promote(); - if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { - LOG(ERROR) << "Callback invoked on an invalid object"; - return; - } - StaScanResult hidl_scan_result; - if (!hidl_struct_util::convertLegacyGscanResultToHidl( - *result, true, &hidl_scan_result)) { - LOG(ERROR) << "Failed to convert full scan results to HIDL structs"; - return; - } - for (const auto& callback : shared_ptr_this->getEventCallbacks()) { - if (!callback - ->onBackgroundFullScanResult(id, buckets_scanned, - hidl_scan_result) - .isOk()) { - LOG(ERROR) - << "Failed to invoke onBackgroundFullScanResult callback"; - } - } - }; - legacy_hal::wifi_error legacy_status = legacy_hal_.lock()->startGscan( - ifname_, cmd_id, legacy_params, on_failure_callback, - on_results_callback, on_full_result_callback); - return createWifiStatusFromLegacyError(legacy_status); -} - -WifiStatus WifiStaIface::stopBackgroundScanInternal(uint32_t cmd_id) { - legacy_hal::wifi_error legacy_status = - legacy_hal_.lock()->stopGscan(ifname_, cmd_id); - return createWifiStatusFromLegacyError(legacy_status); -} - -WifiStatus WifiStaIface::enableLinkLayerStatsCollectionInternal(bool debug) { - legacy_hal::wifi_error legacy_status = - legacy_hal_.lock()->enableLinkLayerStats(ifname_, debug); - return createWifiStatusFromLegacyError(legacy_status); -} - -WifiStatus WifiStaIface::disableLinkLayerStatsCollectionInternal() { - legacy_hal::wifi_error legacy_status = - legacy_hal_.lock()->disableLinkLayerStats(ifname_); - return createWifiStatusFromLegacyError(legacy_status); -} - -std::pair<WifiStatus, V1_0::StaLinkLayerStats> -WifiStaIface::getLinkLayerStatsInternal() { - return {createWifiStatus(WifiStatusCode::ERROR_NOT_SUPPORTED), {}}; -} - -std::pair<WifiStatus, V1_3::StaLinkLayerStats> -WifiStaIface::getLinkLayerStatsInternal_1_3() { - return {createWifiStatus(WifiStatusCode::ERROR_NOT_SUPPORTED), {}}; -} - -std::pair<WifiStatus, V1_5::StaLinkLayerStats> -WifiStaIface::getLinkLayerStatsInternal_1_5() { - legacy_hal::wifi_error legacy_status; - legacy_hal::LinkLayerStats legacy_stats; - std::tie(legacy_status, legacy_stats) = - legacy_hal_.lock()->getLinkLayerStats(ifname_); - if (legacy_status != legacy_hal::WIFI_SUCCESS) { - return {createWifiStatusFromLegacyError(legacy_status), {}}; - } - V1_5::StaLinkLayerStats hidl_stats; - if (!hidl_struct_util::convertLegacyLinkLayerStatsToHidl(legacy_stats, - &hidl_stats)) { - return {createWifiStatus(WifiStatusCode::ERROR_UNKNOWN), {}}; - } - return {createWifiStatus(WifiStatusCode::SUCCESS), hidl_stats}; -} - -WifiStatus WifiStaIface::startRssiMonitoringInternal(uint32_t cmd_id, - int32_t max_rssi, - int32_t min_rssi) { - android::wp<WifiStaIface> weak_ptr_this(this); - const auto& on_threshold_breached_callback = - [weak_ptr_this](legacy_hal::wifi_request_id id, - std::array<uint8_t, 6> bssid, int8_t rssi) { - const auto shared_ptr_this = weak_ptr_this.promote(); - if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { - LOG(ERROR) << "Callback invoked on an invalid object"; - return; - } - for (const auto& callback : shared_ptr_this->getEventCallbacks()) { - if (!callback->onRssiThresholdBreached(id, bssid, rssi) - .isOk()) { - LOG(ERROR) - << "Failed to invoke onRssiThresholdBreached callback"; - } - } - }; - legacy_hal::wifi_error legacy_status = - legacy_hal_.lock()->startRssiMonitoring(ifname_, cmd_id, max_rssi, - min_rssi, - on_threshold_breached_callback); - return createWifiStatusFromLegacyError(legacy_status); -} - -WifiStatus WifiStaIface::stopRssiMonitoringInternal(uint32_t cmd_id) { - legacy_hal::wifi_error legacy_status = - legacy_hal_.lock()->stopRssiMonitoring(ifname_, cmd_id); - return createWifiStatusFromLegacyError(legacy_status); -} - -std::pair<WifiStatus, StaRoamingCapabilities> -WifiStaIface::getRoamingCapabilitiesInternal() { - legacy_hal::wifi_error legacy_status; - legacy_hal::wifi_roaming_capabilities legacy_caps; - std::tie(legacy_status, legacy_caps) = - legacy_hal_.lock()->getRoamingCapabilities(ifname_); - if (legacy_status != legacy_hal::WIFI_SUCCESS) { - return {createWifiStatusFromLegacyError(legacy_status), {}}; - } - StaRoamingCapabilities hidl_caps; - if (!hidl_struct_util::convertLegacyRoamingCapabilitiesToHidl(legacy_caps, - &hidl_caps)) { - return {createWifiStatus(WifiStatusCode::ERROR_UNKNOWN), {}}; - } - return {createWifiStatus(WifiStatusCode::SUCCESS), hidl_caps}; -} - -WifiStatus WifiStaIface::configureRoamingInternal( - const StaRoamingConfig& config) { - legacy_hal::wifi_roaming_config legacy_config; - if (!hidl_struct_util::convertHidlRoamingConfigToLegacy(config, - &legacy_config)) { - return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS); - } - legacy_hal::wifi_error legacy_status = - legacy_hal_.lock()->configureRoaming(ifname_, legacy_config); - return createWifiStatusFromLegacyError(legacy_status); -} - -WifiStatus WifiStaIface::setRoamingStateInternal(StaRoamingState state) { - legacy_hal::wifi_error legacy_status = - legacy_hal_.lock()->enableFirmwareRoaming( - ifname_, hidl_struct_util::convertHidlRoamingStateToLegacy(state)); - return createWifiStatusFromLegacyError(legacy_status); -} - -WifiStatus WifiStaIface::enableNdOffloadInternal(bool enable) { - legacy_hal::wifi_error legacy_status = - legacy_hal_.lock()->configureNdOffload(ifname_, enable); - return createWifiStatusFromLegacyError(legacy_status); -} - -WifiStatus WifiStaIface::startSendingKeepAlivePacketsInternal( - uint32_t cmd_id, const std::vector<uint8_t>& ip_packet_data, - uint16_t ether_type, const std::array<uint8_t, 6>& src_address, - const std::array<uint8_t, 6>& dst_address, uint32_t period_in_ms) { - legacy_hal::wifi_error legacy_status = - legacy_hal_.lock()->startSendingOffloadedPacket( - ifname_, cmd_id, ether_type, ip_packet_data, src_address, - dst_address, period_in_ms); - return createWifiStatusFromLegacyError(legacy_status); -} - -WifiStatus WifiStaIface::stopSendingKeepAlivePacketsInternal(uint32_t cmd_id) { - legacy_hal::wifi_error legacy_status = - legacy_hal_.lock()->stopSendingOffloadedPacket(ifname_, cmd_id); - return createWifiStatusFromLegacyError(legacy_status); -} - -WifiStatus WifiStaIface::setScanningMacOuiInternal( - const std::array<uint8_t, 3>& /* oui */) { - // deprecated. - return createWifiStatus(WifiStatusCode::ERROR_NOT_SUPPORTED); -} - -WifiStatus WifiStaIface::startDebugPacketFateMonitoringInternal() { - legacy_hal::wifi_error legacy_status = - legacy_hal_.lock()->startPktFateMonitoring(ifname_); - return createWifiStatusFromLegacyError(legacy_status); -} - -std::pair<WifiStatus, std::vector<WifiDebugTxPacketFateReport>> -WifiStaIface::getDebugTxPacketFatesInternal() { - legacy_hal::wifi_error legacy_status; - std::vector<legacy_hal::wifi_tx_report> legacy_fates; - std::tie(legacy_status, legacy_fates) = - legacy_hal_.lock()->getTxPktFates(ifname_); - if (legacy_status != legacy_hal::WIFI_SUCCESS) { - return {createWifiStatusFromLegacyError(legacy_status), {}}; - } - std::vector<WifiDebugTxPacketFateReport> hidl_fates; - if (!hidl_struct_util::convertLegacyVectorOfDebugTxPacketFateToHidl( - legacy_fates, &hidl_fates)) { - return {createWifiStatus(WifiStatusCode::ERROR_UNKNOWN), {}}; - } - return {createWifiStatus(WifiStatusCode::SUCCESS), hidl_fates}; -} - -std::pair<WifiStatus, std::vector<WifiDebugRxPacketFateReport>> -WifiStaIface::getDebugRxPacketFatesInternal() { - legacy_hal::wifi_error legacy_status; - std::vector<legacy_hal::wifi_rx_report> legacy_fates; - std::tie(legacy_status, legacy_fates) = - legacy_hal_.lock()->getRxPktFates(ifname_); - if (legacy_status != legacy_hal::WIFI_SUCCESS) { - return {createWifiStatusFromLegacyError(legacy_status), {}}; - } - std::vector<WifiDebugRxPacketFateReport> hidl_fates; - if (!hidl_struct_util::convertLegacyVectorOfDebugRxPacketFateToHidl( - legacy_fates, &hidl_fates)) { - return {createWifiStatus(WifiStatusCode::ERROR_UNKNOWN), {}}; - } - return {createWifiStatus(WifiStatusCode::SUCCESS), hidl_fates}; -} - -WifiStatus WifiStaIface::setMacAddressInternal( - const std::array<uint8_t, 6>& mac) { - bool status = iface_util_.lock()->setMacAddress(ifname_, mac); - if (!status) { - return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN); - } - return createWifiStatus(WifiStatusCode::SUCCESS); -} - -std::pair<WifiStatus, std::array<uint8_t, 6>> -WifiStaIface::getFactoryMacAddressInternal() { - std::array<uint8_t, 6> mac = - iface_util_.lock()->getFactoryMacAddress(ifname_); - if (mac[0] == 0 && mac[1] == 0 && mac[2] == 0 && mac[3] == 0 && - mac[4] == 0 && mac[5] == 0) { - return {createWifiStatus(WifiStatusCode::ERROR_UNKNOWN), mac}; - } - return {createWifiStatus(WifiStatusCode::SUCCESS), mac}; -} - -WifiStatus WifiStaIface::setScanModeInternal(bool enable) { - // OEM's need to implement this on their devices if needed. - LOG(WARNING) << "setScanModeInternal(" << enable << ") not supported"; - return createWifiStatus(WifiStatusCode::ERROR_NOT_SUPPORTED); -} - -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android diff --git a/wifi/1.5/default/wifi_sta_iface.h b/wifi/1.5/default/wifi_sta_iface.h deleted file mode 100644 index f9058b8af1..0000000000 --- a/wifi/1.5/default/wifi_sta_iface.h +++ /dev/null @@ -1,187 +0,0 @@ -/* - * Copyright (C) 2016 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef WIFI_STA_IFACE_H_ -#define WIFI_STA_IFACE_H_ - -#include <android-base/macros.h> -#include <android/hardware/wifi/1.0/IWifiStaIfaceEventCallback.h> -#include <android/hardware/wifi/1.5/IWifiStaIface.h> - -#include "hidl_callback_util.h" -#include "wifi_iface_util.h" -#include "wifi_legacy_hal.h" - -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { -using namespace android::hardware::wifi::V1_0; - -/** - * HIDL interface object used to control a STA Iface instance. - */ -class WifiStaIface : public V1_5::IWifiStaIface { - public: - WifiStaIface(const std::string& ifname, - const std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal, - const std::weak_ptr<iface_util::WifiIfaceUtil> iface_util); - // Refer to |WifiChip::invalidate()|. - void invalidate(); - bool isValid(); - std::set<sp<IWifiStaIfaceEventCallback>> getEventCallbacks(); - std::string getName(); - - // HIDL methods exposed. - Return<void> getName(getName_cb hidl_status_cb) override; - Return<void> getType(getType_cb hidl_status_cb) override; - Return<void> registerEventCallback( - const sp<IWifiStaIfaceEventCallback>& callback, - registerEventCallback_cb hidl_status_cb) override; - Return<void> getCapabilities(getCapabilities_cb hidl_status_cb) override; - Return<void> getApfPacketFilterCapabilities( - getApfPacketFilterCapabilities_cb hidl_status_cb) override; - Return<void> installApfPacketFilter( - uint32_t cmd_id, const hidl_vec<uint8_t>& program, - installApfPacketFilter_cb hidl_status_cb) override; - Return<void> readApfPacketFilterData( - readApfPacketFilterData_cb hidl_status_cb) override; - Return<void> getBackgroundScanCapabilities( - getBackgroundScanCapabilities_cb hidl_status_cb) override; - Return<void> getValidFrequenciesForBand( - V1_0::WifiBand band, - getValidFrequenciesForBand_cb hidl_status_cb) override; - Return<void> startBackgroundScan( - uint32_t cmd_id, const StaBackgroundScanParameters& params, - startBackgroundScan_cb hidl_status_cb) override; - Return<void> stopBackgroundScan( - uint32_t cmd_id, stopBackgroundScan_cb hidl_status_cb) override; - Return<void> enableLinkLayerStatsCollection( - bool debug, enableLinkLayerStatsCollection_cb hidl_status_cb) override; - Return<void> disableLinkLayerStatsCollection( - disableLinkLayerStatsCollection_cb hidl_status_cb) override; - Return<void> getLinkLayerStats( - getLinkLayerStats_cb hidl_status_cb) override; - Return<void> getLinkLayerStats_1_3( - getLinkLayerStats_1_3_cb hidl_status_cb) override; - Return<void> getLinkLayerStats_1_5( - getLinkLayerStats_1_5_cb hidl_status_cb) override; - Return<void> startRssiMonitoring( - uint32_t cmd_id, int32_t max_rssi, int32_t min_rssi, - startRssiMonitoring_cb hidl_status_cb) override; - Return<void> stopRssiMonitoring( - uint32_t cmd_id, stopRssiMonitoring_cb hidl_status_cb) override; - Return<void> getRoamingCapabilities( - getRoamingCapabilities_cb hidl_status_cb) override; - Return<void> configureRoaming(const StaRoamingConfig& config, - configureRoaming_cb hidl_status_cb) override; - Return<void> setRoamingState(StaRoamingState state, - setRoamingState_cb hidl_status_cb) override; - Return<void> enableNdOffload(bool enable, - enableNdOffload_cb hidl_status_cb) override; - Return<void> startSendingKeepAlivePackets( - uint32_t cmd_id, const hidl_vec<uint8_t>& ip_packet_data, - uint16_t ether_type, const hidl_array<uint8_t, 6>& src_address, - const hidl_array<uint8_t, 6>& dst_address, uint32_t period_in_ms, - startSendingKeepAlivePackets_cb hidl_status_cb) override; - Return<void> stopSendingKeepAlivePackets( - uint32_t cmd_id, - stopSendingKeepAlivePackets_cb hidl_status_cb) override; - Return<void> setScanningMacOui( - const hidl_array<uint8_t, 3>& oui, - setScanningMacOui_cb hidl_status_cb) override; - Return<void> startDebugPacketFateMonitoring( - startDebugPacketFateMonitoring_cb hidl_status_cb) override; - Return<void> getDebugTxPacketFates( - getDebugTxPacketFates_cb hidl_status_cb) override; - Return<void> getDebugRxPacketFates( - getDebugRxPacketFates_cb hidl_status_cb) override; - Return<void> setMacAddress(const hidl_array<uint8_t, 6>& mac, - setMacAddress_cb hidl_status_cb) override; - Return<void> getFactoryMacAddress( - getFactoryMacAddress_cb hidl_status_cb) override; - Return<void> setScanMode(bool enable, - setScanMode_cb hidl_status_cb) override; - - private: - // Corresponding worker functions for the HIDL methods. - std::pair<WifiStatus, std::string> getNameInternal(); - std::pair<WifiStatus, IfaceType> getTypeInternal(); - WifiStatus registerEventCallbackInternal( - const sp<IWifiStaIfaceEventCallback>& callback); - std::pair<WifiStatus, uint32_t> getCapabilitiesInternal(); - std::pair<WifiStatus, StaApfPacketFilterCapabilities> - getApfPacketFilterCapabilitiesInternal(); - WifiStatus installApfPacketFilterInternal( - uint32_t cmd_id, const std::vector<uint8_t>& program); - std::pair<WifiStatus, std::vector<uint8_t>> - readApfPacketFilterDataInternal(); - std::pair<WifiStatus, StaBackgroundScanCapabilities> - getBackgroundScanCapabilitiesInternal(); - std::pair<WifiStatus, std::vector<WifiChannelInMhz>> - getValidFrequenciesForBandInternal(V1_0::WifiBand band); - WifiStatus startBackgroundScanInternal( - uint32_t cmd_id, const StaBackgroundScanParameters& params); - WifiStatus stopBackgroundScanInternal(uint32_t cmd_id); - WifiStatus enableLinkLayerStatsCollectionInternal(bool debug); - WifiStatus disableLinkLayerStatsCollectionInternal(); - std::pair<WifiStatus, V1_0::StaLinkLayerStats> getLinkLayerStatsInternal(); - std::pair<WifiStatus, V1_3::StaLinkLayerStats> - getLinkLayerStatsInternal_1_3(); - std::pair<WifiStatus, V1_5::StaLinkLayerStats> - getLinkLayerStatsInternal_1_5(); - WifiStatus startRssiMonitoringInternal(uint32_t cmd_id, int32_t max_rssi, - int32_t min_rssi); - WifiStatus stopRssiMonitoringInternal(uint32_t cmd_id); - std::pair<WifiStatus, StaRoamingCapabilities> - getRoamingCapabilitiesInternal(); - WifiStatus configureRoamingInternal(const StaRoamingConfig& config); - WifiStatus setRoamingStateInternal(StaRoamingState state); - WifiStatus enableNdOffloadInternal(bool enable); - WifiStatus startSendingKeepAlivePacketsInternal( - uint32_t cmd_id, const std::vector<uint8_t>& ip_packet_data, - uint16_t ether_type, const std::array<uint8_t, 6>& src_address, - const std::array<uint8_t, 6>& dst_address, uint32_t period_in_ms); - WifiStatus stopSendingKeepAlivePacketsInternal(uint32_t cmd_id); - WifiStatus setScanningMacOuiInternal(const std::array<uint8_t, 3>& oui); - WifiStatus startDebugPacketFateMonitoringInternal(); - std::pair<WifiStatus, std::vector<WifiDebugTxPacketFateReport>> - getDebugTxPacketFatesInternal(); - std::pair<WifiStatus, std::vector<WifiDebugRxPacketFateReport>> - getDebugRxPacketFatesInternal(); - WifiStatus setMacAddressInternal(const std::array<uint8_t, 6>& mac); - std::pair<WifiStatus, std::array<uint8_t, 6>> - getFactoryMacAddressInternal(); - WifiStatus setScanModeInternal(bool enable); - - std::string ifname_; - std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal_; - std::weak_ptr<iface_util::WifiIfaceUtil> iface_util_; - bool is_valid_; - hidl_callback_util::HidlCallbackHandler<IWifiStaIfaceEventCallback> - event_cb_handler_; - - DISALLOW_COPY_AND_ASSIGN(WifiStaIface); -}; - -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android - -#endif // WIFI_STA_IFACE_H_ diff --git a/wifi/1.5/default/wifi_status_util.cpp b/wifi/1.5/default/wifi_status_util.cpp deleted file mode 100644 index eb8c8694db..0000000000 --- a/wifi/1.5/default/wifi_status_util.cpp +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright (C) 2016 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "wifi_status_util.h" - -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { - -std::string legacyErrorToString(legacy_hal::wifi_error error) { - switch (error) { - case legacy_hal::WIFI_SUCCESS: - return "SUCCESS"; - case legacy_hal::WIFI_ERROR_UNINITIALIZED: - return "UNINITIALIZED"; - case legacy_hal::WIFI_ERROR_NOT_AVAILABLE: - return "NOT_AVAILABLE"; - case legacy_hal::WIFI_ERROR_NOT_SUPPORTED: - return "NOT_SUPPORTED"; - case legacy_hal::WIFI_ERROR_INVALID_ARGS: - return "INVALID_ARGS"; - case legacy_hal::WIFI_ERROR_INVALID_REQUEST_ID: - return "INVALID_REQUEST_ID"; - case legacy_hal::WIFI_ERROR_TIMED_OUT: - return "TIMED_OUT"; - case legacy_hal::WIFI_ERROR_TOO_MANY_REQUESTS: - return "TOO_MANY_REQUESTS"; - case legacy_hal::WIFI_ERROR_OUT_OF_MEMORY: - return "OUT_OF_MEMORY"; - case legacy_hal::WIFI_ERROR_BUSY: - return "BUSY"; - case legacy_hal::WIFI_ERROR_UNKNOWN: - return "UNKNOWN"; - default: - return "UNKNOWN ERROR"; - } -} - -WifiStatus createWifiStatus(WifiStatusCode code, - const std::string& description) { - return {code, description}; -} - -WifiStatus createWifiStatus(WifiStatusCode code) { - return createWifiStatus(code, ""); -} - -WifiStatus createWifiStatusFromLegacyError(legacy_hal::wifi_error error, - const std::string& desc) { - switch (error) { - case legacy_hal::WIFI_ERROR_UNINITIALIZED: - case legacy_hal::WIFI_ERROR_NOT_AVAILABLE: - return createWifiStatus(WifiStatusCode::ERROR_NOT_AVAILABLE, desc); - - case legacy_hal::WIFI_ERROR_NOT_SUPPORTED: - return createWifiStatus(WifiStatusCode::ERROR_NOT_SUPPORTED, desc); - - case legacy_hal::WIFI_ERROR_INVALID_ARGS: - case legacy_hal::WIFI_ERROR_INVALID_REQUEST_ID: - return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS, desc); - - case legacy_hal::WIFI_ERROR_TIMED_OUT: - return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN, - desc + ", timed out"); - - case legacy_hal::WIFI_ERROR_TOO_MANY_REQUESTS: - return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN, - desc + ", too many requests"); - - case legacy_hal::WIFI_ERROR_OUT_OF_MEMORY: - return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN, - desc + ", out of memory"); - - case legacy_hal::WIFI_ERROR_BUSY: - return createWifiStatus(WifiStatusCode::ERROR_BUSY); - - case legacy_hal::WIFI_ERROR_NONE: - return createWifiStatus(WifiStatusCode::SUCCESS, desc); - - case legacy_hal::WIFI_ERROR_UNKNOWN: - return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN, "unknown"); - - default: - return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN, - "unknown error"); - } -} - -WifiStatus createWifiStatusFromLegacyError(legacy_hal::wifi_error error) { - return createWifiStatusFromLegacyError(error, ""); -} - -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android diff --git a/wifi/1.5/default/wifi_status_util.h b/wifi/1.5/default/wifi_status_util.h deleted file mode 100644 index 68f21689c5..0000000000 --- a/wifi/1.5/default/wifi_status_util.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) 2016 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef WIFI_STATUS_UTIL_H_ -#define WIFI_STATUS_UTIL_H_ - -#include <android/hardware/wifi/1.4/IWifi.h> - -#include "wifi_legacy_hal.h" - -namespace android { -namespace hardware { -namespace wifi { -namespace V1_5 { -namespace implementation { -using namespace android::hardware::wifi::V1_0; - -std::string legacyErrorToString(legacy_hal::wifi_error error); -WifiStatus createWifiStatus(WifiStatusCode code, - const std::string& description); -WifiStatus createWifiStatus(WifiStatusCode code); -WifiStatus createWifiStatusFromLegacyError(legacy_hal::wifi_error error, - const std::string& description); -WifiStatus createWifiStatusFromLegacyError(legacy_hal::wifi_error error); - -} // namespace implementation -} // namespace V1_5 -} // namespace wifi -} // namespace hardware -} // namespace android - -#endif // WIFI_STATUS_UTIL_H_ |