From c52e80877458f7c6042c10925fbc9c2cf49ec256 Mon Sep 17 00:00:00 2001 From: Nick Date: Wed, 2 May 2018 13:54:28 -0700 Subject: [PATCH] Add feature flag to disable wifi AP on the watch. Bug: 74074075 Change-Id: I6bd823e63f5cc5292571be4d74ca65bca72709e0 --- wifi/1.2/default/Android.mk | 3 + .../default/tests/mock_wifi_feature_flags.h | 1 + .../default/tests/wifi_chip_unit_tests.cpp | 57 +++++++++++++++++++ wifi/1.2/default/wifi_chip.cpp | 17 +++++- wifi/1.2/default/wifi_feature_flags.cpp | 9 +++ wifi/1.2/default/wifi_feature_flags.h | 1 + 6 files changed, 85 insertions(+), 3 deletions(-) diff --git a/wifi/1.2/default/Android.mk b/wifi/1.2/default/Android.mk index 978cf63f69..391969018c 100644 --- a/wifi/1.2/default/Android.mk +++ b/wifi/1.2/default/Android.mk @@ -27,6 +27,9 @@ 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 LOCAL_SRC_FILES := \ hidl_struct_util.cpp \ hidl_sync_util.cpp \ diff --git a/wifi/1.2/default/tests/mock_wifi_feature_flags.h b/wifi/1.2/default/tests/mock_wifi_feature_flags.h index 8cf1d4b258..2a36dd50f4 100644 --- a/wifi/1.2/default/tests/mock_wifi_feature_flags.h +++ b/wifi/1.2/default/tests/mock_wifi_feature_flags.h @@ -34,6 +34,7 @@ class MockWifiFeatureFlags : public WifiFeatureFlags { MOCK_METHOD0(isAwareSupported, bool()); MOCK_METHOD0(isDualInterfaceSupported, bool()); + MOCK_METHOD0(isApDisabled, bool()); }; } // namespace feature_flags diff --git a/wifi/1.2/default/tests/wifi_chip_unit_tests.cpp b/wifi/1.2/default/tests/wifi_chip_unit_tests.cpp index 3928c9ab0a..8722d0ac4c 100644 --- a/wifi/1.2/default/tests/wifi_chip_unit_tests.cpp +++ b/wifi/1.2/default/tests/wifi_chip_unit_tests.cpp @@ -48,6 +48,8 @@ class WifiChipTest : public Test { .WillRepeatedly(testing::Return(false)); EXPECT_CALL(*feature_flags_, isDualInterfaceSupported()) .WillRepeatedly(testing::Return(false)); + EXPECT_CALL(*feature_flags_, isApDisabled()) + .WillRepeatedly(testing::Return(false)); } void setupV1_AwareIfaceCombination() { @@ -55,6 +57,17 @@ class WifiChipTest : public Test { .WillRepeatedly(testing::Return(true)); EXPECT_CALL(*feature_flags_, isDualInterfaceSupported()) .WillRepeatedly(testing::Return(false)); + EXPECT_CALL(*feature_flags_, isApDisabled()) + .WillRepeatedly(testing::Return(false)); + } + + void setupV1_AwareDisabledApIfaceCombination() { + EXPECT_CALL(*feature_flags_, isAwareSupported()) + .WillRepeatedly(testing::Return(true)); + EXPECT_CALL(*feature_flags_, isDualInterfaceSupported()) + .WillRepeatedly(testing::Return(false)); + EXPECT_CALL(*feature_flags_, isApDisabled()) + .WillRepeatedly(testing::Return(true)); } void setupV2_AwareIfaceCombination() { @@ -62,6 +75,17 @@ class WifiChipTest : public Test { .WillRepeatedly(testing::Return(true)); EXPECT_CALL(*feature_flags_, isDualInterfaceSupported()) .WillRepeatedly(testing::Return(true)); + EXPECT_CALL(*feature_flags_, isApDisabled()) + .WillRepeatedly(testing::Return(false)); + } + + void setupV2_AwareDisabledApIfaceCombination() { + EXPECT_CALL(*feature_flags_, isAwareSupported()) + .WillRepeatedly(testing::Return(true)); + EXPECT_CALL(*feature_flags_, isDualInterfaceSupported()) + .WillRepeatedly(testing::Return(true)); + EXPECT_CALL(*feature_flags_, isApDisabled()) + .WillRepeatedly(testing::Return(true)); } void assertNumberOfModes(uint32_t num_modes) { @@ -515,6 +539,39 @@ TEST_F(WifiChipV2_AwareIfaceCombinationTest, ASSERT_FALSE(ap_iface_name.empty()); ASSERT_NE(sta_iface_name, ap_iface_name); } + +////////// 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()); +} + } // namespace implementation } // namespace V1_2 } // namespace wifi diff --git a/wifi/1.2/default/wifi_chip.cpp b/wifi/1.2/default/wifi_chip.cpp index ab96ef1b79..3bd05570f6 100644 --- a/wifi/1.2/default/wifi_chip.cpp +++ b/wifi/1.2/default/wifi_chip.cpp @@ -1211,10 +1211,17 @@ void WifiChip::populateModes() { {chip_iface_combination_limit_1, chip_iface_combination_limit_2}}; const IWifiChip::ChipIfaceCombination chip_iface_combination_2 = { {chip_iface_combination_limit_1, chip_iface_combination_limit_3}}; - const IWifiChip::ChipMode chip_mode = { + if (feature_flags_.lock()->isApDisabled()) { + const IWifiChip::ChipMode chip_mode = { + kV2ChipModeId, + {chip_iface_combination_2}}; + modes_ = {chip_mode}; + } else { + const IWifiChip::ChipMode chip_mode = { kV2ChipModeId, {chip_iface_combination_1, chip_iface_combination_2}}; - modes_ = {chip_mode}; + modes_ = {chip_mode}; + } } else { // V1 Iface combinations for Mode Id = 0. (STA Mode) const IWifiChip::ChipIfaceCombinationLimit @@ -1238,7 +1245,11 @@ void WifiChip::populateModes() { {ap_chip_iface_combination_limit}}; const IWifiChip::ChipMode ap_chip_mode = {kV1ApChipModeId, {ap_chip_iface_combination}}; - modes_ = {sta_chip_mode, ap_chip_mode}; + if (feature_flags_.lock()->isApDisabled()) { + modes_ = {sta_chip_mode}; + } else { + modes_ = {sta_chip_mode, ap_chip_mode}; + } } } diff --git a/wifi/1.2/default/wifi_feature_flags.cpp b/wifi/1.2/default/wifi_feature_flags.cpp index 554d4d5f6d..778944dd92 100644 --- a/wifi/1.2/default/wifi_feature_flags.cpp +++ b/wifi/1.2/default/wifi_feature_flags.cpp @@ -27,6 +27,12 @@ static const bool wifiHidlFeatureDualInterface = true; #else static const bool wifiHidlFeatureDualInterface = false; #endif // WIFI_HIDL_FEATURE_DUAL_INTERFACE +#ifdef WIFI_HIDL_FEATURE_DISABLE_AP +static const bool wifiHidlFeatureDisableAp = true; +#else +static const bool wifiHidlFeatureDisableAp = false; +#endif // WIFI_HIDL_FEATURE_DISABLE_AP + } // namespace namespace android { @@ -41,6 +47,9 @@ bool WifiFeatureFlags::isAwareSupported() { return wifiHidlFeatureAware; } bool WifiFeatureFlags::isDualInterfaceSupported() { return wifiHidlFeatureDualInterface; } +bool WifiFeatureFlags::isApDisabled() { + return wifiHidlFeatureDisableAp; +} } // namespace feature_flags } // namespace implementation diff --git a/wifi/1.2/default/wifi_feature_flags.h b/wifi/1.2/default/wifi_feature_flags.h index dc0c1ff320..4a7b2d225c 100644 --- a/wifi/1.2/default/wifi_feature_flags.h +++ b/wifi/1.2/default/wifi_feature_flags.h @@ -31,6 +31,7 @@ class WifiFeatureFlags { virtual bool isAwareSupported(); virtual bool isDualInterfaceSupported(); + virtual bool isApDisabled(); }; } // namespace feature_flags