diff options
author | Quang Luong <qal@google.com> | 2022-02-18 21:13:34 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2022-02-18 21:13:34 +0000 |
commit | 6a72ebc9c523f8f11a3e8a006f4aed322a7168e0 (patch) | |
tree | b5ec439c70b1d9a988474ffa8b438aab7ac110a1 /wifi | |
parent | 832cfea94c90d712448c5015d2d71ede60a444c7 (diff) | |
parent | 6d66167031e397e624b33ae951fb26ff5ca4d90f (diff) |
Merge "Reinstate functionality of IWifiChip.getAvailableModes()" into tm-dev
Diffstat (limited to 'wifi')
-rw-r--r-- | wifi/1.6/default/wifi_chip.cpp | 53 |
1 files changed, 51 insertions, 2 deletions
diff --git a/wifi/1.6/default/wifi_chip.cpp b/wifi/1.6/default/wifi_chip.cpp index 0e2accf510..6cc12358e5 100644 --- a/wifi/1.6/default/wifi_chip.cpp +++ b/wifi/1.6/default/wifi_chip.cpp @@ -791,8 +791,57 @@ std::pair<WifiStatus, uint32_t> WifiChip::getCapabilitiesInternal() { std::pair<WifiStatus, std::vector<V1_0::IWifiChip::ChipMode>> WifiChip::getAvailableModesInternal() { - // Deprecated support -- use getAvailableModes_1_6. - return {createWifiStatus(WifiStatusCode::ERROR_NOT_SUPPORTED), {}}; + // Deprecated support -- use getAvailableModes_1_6 for more granular concurrency combinations. + std::vector<V1_0::IWifiChip::ChipMode> modes_1_0 = {}; + for (const auto& mode_1_6 : modes_) { + std::vector<V1_0::IWifiChip::ChipIfaceCombination> combos_1_0; + for (const auto& combo_1_6 : mode_1_6.availableCombinations) { + std::vector<V1_0::IWifiChip::ChipIfaceCombinationLimit> limits_1_0; + for (const auto& limit_1_6 : combo_1_6.limits) { + std::vector<IfaceType> types_1_0; + for (IfaceConcurrencyType type_1_6 : limit_1_6.types) { + switch (type_1_6) { + case IfaceConcurrencyType::STA: + types_1_0.push_back(IfaceType::STA); + break; + case IfaceConcurrencyType::AP: + types_1_0.push_back(IfaceType::AP); + break; + case IfaceConcurrencyType::AP_BRIDGED: + // Ignore AP_BRIDGED + break; + case IfaceConcurrencyType::P2P: + types_1_0.push_back(IfaceType::P2P); + break; + case IfaceConcurrencyType::NAN: + types_1_0.push_back(IfaceType::NAN); + break; + } + } + if (types_1_0.empty()) { + continue; + } + V1_0::IWifiChip::ChipIfaceCombinationLimit limit_1_0; + limit_1_0.types = hidl_vec(types_1_0); + limit_1_0.maxIfaces = limit_1_6.maxIfaces; + limits_1_0.push_back(limit_1_0); + } + if (limits_1_0.empty()) { + continue; + } + V1_0::IWifiChip::ChipIfaceCombination combo_1_0; + combo_1_0.limits = hidl_vec(limits_1_0); + combos_1_0.push_back(combo_1_0); + } + if (combos_1_0.empty()) { + continue; + } + V1_0::IWifiChip::ChipMode mode_1_0; + mode_1_0.id = mode_1_6.id; + mode_1_0.availableCombinations = hidl_vec(combos_1_0); + modes_1_0.push_back(mode_1_0); + } + return {createWifiStatus(WifiStatusCode::SUCCESS), modes_1_0}; } WifiStatus WifiChip::configureChipInternal( |