diff options
author | Roshan Pius <rpius@google.com> | 2018-01-22 17:57:20 -0800 |
---|---|---|
committer | Roshan Pius <rpius@google.com> | 2018-01-23 19:50:05 -0800 |
commit | 1a7b1db2e8d11222db3d854a093065c51e55cf9a (patch) | |
tree | 20a41aead658eb3c668687703cd96d1ac54415e0 | |
parent | 01f08770d265b93d38b6af3ebb3cbbb39c8d9e47 (diff) |
wifi(implementation): Conversion functions for radio mode change
Bug: 68349158
Test: Unit tests
Change-Id: I608c42971d023637db20e78b0626164884950d70
-rw-r--r-- | wifi/1.2/default/Android.mk | 1 | ||||
-rw-r--r-- | wifi/1.2/default/hidl_struct_util.cpp | 51 | ||||
-rw-r--r-- | wifi/1.2/default/hidl_struct_util.h | 4 | ||||
-rw-r--r-- | wifi/1.2/default/tests/hidl_struct_util_unit_tests.cpp | 129 |
4 files changed, 185 insertions, 0 deletions
diff --git a/wifi/1.2/default/Android.mk b/wifi/1.2/default/Android.mk index 8d0262b758..978cf63f69 100644 --- a/wifi/1.2/default/Android.mk +++ b/wifi/1.2/default/Android.mk @@ -94,6 +94,7 @@ include $(CLEAR_VARS) LOCAL_MODULE := android.hardware.wifi@1.0-service-tests LOCAL_PROPRIETARY_MODULE := true LOCAL_SRC_FILES := \ + tests/hidl_struct_util_unit_tests.cpp \ tests/main.cpp \ tests/mock_wifi_feature_flags.cpp \ tests/mock_wifi_legacy_hal.cpp \ diff --git a/wifi/1.2/default/hidl_struct_util.cpp b/wifi/1.2/default/hidl_struct_util.cpp index f87828c14a..b1c609e5fd 100644 --- a/wifi/1.2/default/hidl_struct_util.cpp +++ b/wifi/1.2/default/hidl_struct_util.cpp @@ -266,6 +266,57 @@ legacy_hal::wifi_power_scenario convertHidlTxPowerScenarioToLegacy( CHECK(false); } +bool convertLegacyWifiMacInfoToHidl( + const legacy_hal::WifiMacInfo& legacy_mac_info, + 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_2_4_BAND && + legacy_mac_info.mac_band & legacy_hal::WLAN_MAC_5_0_BAND) { + hidl_radio_mode_info->bandInfo = WifiBand::BAND_24GHZ_5GHZ; + } else if (legacy_mac_info.mac_band & legacy_hal::WLAN_MAC_2_4_BAND) { + hidl_radio_mode_info->bandInfo = WifiBand::BAND_24GHZ; + } else if (legacy_mac_info.mac_band & legacy_hal::WLAN_MAC_5_0_BAND) { + hidl_radio_mode_info->bandInfo = WifiBand::BAND_5GHZ; + } else { + hidl_radio_mode_info->bandInfo = WifiBand::BAND_UNSPECIFIED; + } + std::vector<IWifiChipEventCallback::IfaceInfo> iface_info_vec; + for (const auto& legacy_iface_info : legacy_mac_info.iface_infos) { + 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; +} + +bool convertLegacyWifiMacInfosToHidl( + const std::vector<legacy_hal::WifiMacInfo>& legacy_mac_infos, + std::vector<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) { + 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( uint32_t legacy_feature_set, uint32_t legacy_logger_feature_set, uint32_t* hidl_caps) { diff --git a/wifi/1.2/default/hidl_struct_util.h b/wifi/1.2/default/hidl_struct_util.h index 1208afd0a8..ce4bb81aad 100644 --- a/wifi/1.2/default/hidl_struct_util.h +++ b/wifi/1.2/default/hidl_struct_util.h @@ -22,6 +22,7 @@ #include <android/hardware/wifi/1.0/IWifiChip.h> #include <android/hardware/wifi/1.0/types.h> #include <android/hardware/wifi/1.1/IWifiChip.h> +#include <android/hardware/wifi/1.2/IWifiChipEventCallback.h> #include <android/hardware/wifi/1.2/types.h> #include "wifi_legacy_hal.h" @@ -55,6 +56,9 @@ bool convertLegacyWakeReasonStatsToHidl( WifiDebugHostWakeReasonStats* hidl_stats); legacy_hal::wifi_power_scenario convertHidlTxPowerScenarioToLegacy( V1_1::IWifiChip::TxPowerScenario hidl_scenario); +bool convertLegacyWifiMacInfosToHidl( + const std::vector<legacy_hal::WifiMacInfo>& legacy_mac_infos, + std::vector<IWifiChipEventCallback::RadioModeInfo>* hidl_radio_mode_infos); // STA iface conversion methods. bool convertLegacyFeaturesToHidlStaCapabilities( diff --git a/wifi/1.2/default/tests/hidl_struct_util_unit_tests.cpp b/wifi/1.2/default/tests/hidl_struct_util_unit_tests.cpp new file mode 100644 index 0000000000..1d6e9e4a14 --- /dev/null +++ b/wifi/1.2/default/tests/hidl_struct_util_unit_tests.cpp @@ -0,0 +1,129 @@ +/* + * 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_2 { +namespace implementation { +using namespace android::hardware::wifi::V1_0; + +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<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(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<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 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(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 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(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); +} +} // namespace implementation +} // namespace V1_2 +} // namespace wifi +} // namespace hardware +} // namespace android |