Loading wifi/1.2/default/Android.mk +1 −0 Original line number Diff line number Diff line Loading @@ -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 \ Loading wifi/1.2/default/hidl_struct_util.cpp +51 −0 Original line number Diff line number Diff line Loading @@ -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) { Loading wifi/1.2/default/hidl_struct_util.h +4 −0 Original line number Diff line number Diff line Loading @@ -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" Loading Loading @@ -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( Loading wifi/1.2/default/tests/hidl_struct_util_unit_tests.cpp 0 → 100644 +129 −0 Original line number Diff line number Diff line /* * 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 Loading
wifi/1.2/default/Android.mk +1 −0 Original line number Diff line number Diff line Loading @@ -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 \ Loading
wifi/1.2/default/hidl_struct_util.cpp +51 −0 Original line number Diff line number Diff line Loading @@ -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) { Loading
wifi/1.2/default/hidl_struct_util.h +4 −0 Original line number Diff line number Diff line Loading @@ -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" Loading Loading @@ -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( Loading
wifi/1.2/default/tests/hidl_struct_util_unit_tests.cpp 0 → 100644 +129 −0 Original line number Diff line number Diff line /* * 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