summaryrefslogtreecommitdiff
path: root/wifi
diff options
context:
space:
mode:
authorQuang Luong <qal@google.com>2022-02-18 21:13:34 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2022-02-18 21:13:34 +0000
commit6a72ebc9c523f8f11a3e8a006f4aed322a7168e0 (patch)
treeb5ec439c70b1d9a988474ffa8b438aab7ac110a1 /wifi
parent832cfea94c90d712448c5015d2d71ede60a444c7 (diff)
parent6d66167031e397e624b33ae951fb26ff5ca4d90f (diff)
Merge "Reinstate functionality of IWifiChip.getAvailableModes()" into tm-dev
Diffstat (limited to 'wifi')
-rw-r--r--wifi/1.6/default/wifi_chip.cpp53
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(