Loading wifi/1.5/IWifiApIface.hal +14 −0 Original line number Diff line number Diff line Loading @@ -37,4 +37,18 @@ interface IWifiApIface extends @1.4::IWifiApIface { * |WifiStatusCode.ERROR_UNKNOWN| */ resetToFactoryMacAddress() generates (WifiStatus status); /** * Get the names of the bridged AP instances. * * @return status WifiStatus of the operation * Possible status codes: * |WifiStatusCode.SUCCESS|, * |WifiStatusCode.ERROR_WIFI_IFACE_INVALID|, * |WifiStatusCode.ERROR_UNKNOWN| * * @return instances A vector which contains the names of the bridged AP * instances. Note: Returns an empty vector for a non-bridged AP. */ getBridgedInstances() generates (WifiStatus status, vec<string> instances); }; wifi/1.5/default/wifi_ap_iface.cpp +22 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,12 @@ 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); Loading Loading @@ -93,6 +99,13 @@ Return<void> WifiApIface::resetToFactoryMacAddress( 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_}; } Loading Loading @@ -178,6 +191,15 @@ WifiStatus WifiApIface::resetToFactoryMacAddressInternal() { } 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 Loading wifi/1.5/default/wifi_ap_iface.h +6 −0 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ class WifiApIface : public V1_5::IWifiApIface { void invalidate(); bool isValid(); std::string getName(); void removeInstance(std::string instance); // HIDL methods exposed. Return<void> getName(getName_cb hidl_status_cb) override; Loading @@ -59,6 +60,9 @@ class WifiApIface : public V1_5::IWifiApIface { 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(); Loading @@ -70,6 +74,8 @@ class WifiApIface : public V1_5::IWifiApIface { 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_; Loading wifi/1.5/default/wifi_chip.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -1074,6 +1074,7 @@ WifiStatus WifiChip::removeIfaceInstanceFromBridgedApIfaceInternal( } } br_ifaces_ap_instances_.erase(ifInstanceName); iface->removeInstance(ifInstanceName); return createWifiStatus(WifiStatusCode::SUCCESS); } Loading wifi/1.5/vts/functional/wifi_ap_iface_hidl_test.cpp +32 −4 Original line number Diff line number Diff line Loading @@ -67,8 +67,8 @@ class WifiApIfaceHidlTest : public ::testing::TestWithParam<std::string> { std::string GetInstanceName() { return GetParam(); } }; /* * resetToFactoryMacAddress /** * resetToFactoryMacAddress in bridged AP mode. */ TEST_P(WifiApIfaceHidlTest, resetToFactoryMacAddressInBridgedModeTest) { if (!isBridgedSupport_) GTEST_SKIP() << "Missing Bridged AP support"; Loading @@ -79,8 +79,8 @@ TEST_P(WifiApIfaceHidlTest, resetToFactoryMacAddressInBridgedModeTest) { EXPECT_EQ(WifiStatusCode::SUCCESS, status.code); } /* * resetToFactoryMacAddress /** * resetToFactoryMacAddress in non-bridged mode */ TEST_P(WifiApIfaceHidlTest, resetToFactoryMacAddressTest) { sp<IWifiApIface> wifi_ap_iface = getWifiApIface_1_5(GetInstanceName()); Loading @@ -89,6 +89,34 @@ TEST_P(WifiApIfaceHidlTest, resetToFactoryMacAddressTest) { EXPECT_EQ(WifiStatusCode::SUCCESS, status.code); } /** * getBridgedInstances in non-bridged mode */ TEST_P(WifiApIfaceHidlTest, getBridgedInstancesTest) { sp<IWifiApIface> wifi_ap_iface = getWifiApIface_1_5(GetInstanceName()); ASSERT_NE(nullptr, wifi_ap_iface.get()); const auto& status_and_instances = HIDL_INVOKE(wifi_ap_iface, getBridgedInstances); EXPECT_EQ(WifiStatusCode::SUCCESS, status_and_instances.first.code); const auto& instances = status_and_instances.second; EXPECT_EQ(0, instances.size()); } /** * getBridgedInstances in bridged AP mode. */ TEST_P(WifiApIfaceHidlTest, getBridgedInstancesInBridgedModeTest) { if (!isBridgedSupport_) GTEST_SKIP() << "Missing Bridged AP support"; sp<IWifiApIface> wifi_ap_iface = getBridgedWifiApIface_1_5(GetInstanceName()); ASSERT_NE(nullptr, wifi_ap_iface.get()); const auto& status_and_instances = HIDL_INVOKE(wifi_ap_iface, getBridgedInstances); EXPECT_EQ(WifiStatusCode::SUCCESS, status_and_instances.first.code); const auto& instances = status_and_instances.second; EXPECT_EQ(2, instances.size()); } GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(WifiApIfaceHidlTest); INSTANTIATE_TEST_SUITE_P( PerInstance, WifiApIfaceHidlTest, Loading Loading
wifi/1.5/IWifiApIface.hal +14 −0 Original line number Diff line number Diff line Loading @@ -37,4 +37,18 @@ interface IWifiApIface extends @1.4::IWifiApIface { * |WifiStatusCode.ERROR_UNKNOWN| */ resetToFactoryMacAddress() generates (WifiStatus status); /** * Get the names of the bridged AP instances. * * @return status WifiStatus of the operation * Possible status codes: * |WifiStatusCode.SUCCESS|, * |WifiStatusCode.ERROR_WIFI_IFACE_INVALID|, * |WifiStatusCode.ERROR_UNKNOWN| * * @return instances A vector which contains the names of the bridged AP * instances. Note: Returns an empty vector for a non-bridged AP. */ getBridgedInstances() generates (WifiStatus status, vec<string> instances); };
wifi/1.5/default/wifi_ap_iface.cpp +22 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,12 @@ 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); Loading Loading @@ -93,6 +99,13 @@ Return<void> WifiApIface::resetToFactoryMacAddress( 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_}; } Loading Loading @@ -178,6 +191,15 @@ WifiStatus WifiApIface::resetToFactoryMacAddressInternal() { } 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 Loading
wifi/1.5/default/wifi_ap_iface.h +6 −0 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ class WifiApIface : public V1_5::IWifiApIface { void invalidate(); bool isValid(); std::string getName(); void removeInstance(std::string instance); // HIDL methods exposed. Return<void> getName(getName_cb hidl_status_cb) override; Loading @@ -59,6 +60,9 @@ class WifiApIface : public V1_5::IWifiApIface { 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(); Loading @@ -70,6 +74,8 @@ class WifiApIface : public V1_5::IWifiApIface { 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_; Loading
wifi/1.5/default/wifi_chip.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -1074,6 +1074,7 @@ WifiStatus WifiChip::removeIfaceInstanceFromBridgedApIfaceInternal( } } br_ifaces_ap_instances_.erase(ifInstanceName); iface->removeInstance(ifInstanceName); return createWifiStatus(WifiStatusCode::SUCCESS); } Loading
wifi/1.5/vts/functional/wifi_ap_iface_hidl_test.cpp +32 −4 Original line number Diff line number Diff line Loading @@ -67,8 +67,8 @@ class WifiApIfaceHidlTest : public ::testing::TestWithParam<std::string> { std::string GetInstanceName() { return GetParam(); } }; /* * resetToFactoryMacAddress /** * resetToFactoryMacAddress in bridged AP mode. */ TEST_P(WifiApIfaceHidlTest, resetToFactoryMacAddressInBridgedModeTest) { if (!isBridgedSupport_) GTEST_SKIP() << "Missing Bridged AP support"; Loading @@ -79,8 +79,8 @@ TEST_P(WifiApIfaceHidlTest, resetToFactoryMacAddressInBridgedModeTest) { EXPECT_EQ(WifiStatusCode::SUCCESS, status.code); } /* * resetToFactoryMacAddress /** * resetToFactoryMacAddress in non-bridged mode */ TEST_P(WifiApIfaceHidlTest, resetToFactoryMacAddressTest) { sp<IWifiApIface> wifi_ap_iface = getWifiApIface_1_5(GetInstanceName()); Loading @@ -89,6 +89,34 @@ TEST_P(WifiApIfaceHidlTest, resetToFactoryMacAddressTest) { EXPECT_EQ(WifiStatusCode::SUCCESS, status.code); } /** * getBridgedInstances in non-bridged mode */ TEST_P(WifiApIfaceHidlTest, getBridgedInstancesTest) { sp<IWifiApIface> wifi_ap_iface = getWifiApIface_1_5(GetInstanceName()); ASSERT_NE(nullptr, wifi_ap_iface.get()); const auto& status_and_instances = HIDL_INVOKE(wifi_ap_iface, getBridgedInstances); EXPECT_EQ(WifiStatusCode::SUCCESS, status_and_instances.first.code); const auto& instances = status_and_instances.second; EXPECT_EQ(0, instances.size()); } /** * getBridgedInstances in bridged AP mode. */ TEST_P(WifiApIfaceHidlTest, getBridgedInstancesInBridgedModeTest) { if (!isBridgedSupport_) GTEST_SKIP() << "Missing Bridged AP support"; sp<IWifiApIface> wifi_ap_iface = getBridgedWifiApIface_1_5(GetInstanceName()); ASSERT_NE(nullptr, wifi_ap_iface.get()); const auto& status_and_instances = HIDL_INVOKE(wifi_ap_iface, getBridgedInstances); EXPECT_EQ(WifiStatusCode::SUCCESS, status_and_instances.first.code); const auto& instances = status_and_instances.second; EXPECT_EQ(2, instances.size()); } GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(WifiApIfaceHidlTest); INSTANTIATE_TEST_SUITE_P( PerInstance, WifiApIfaceHidlTest, Loading