1094332d3Sopenharmony_ci/* 2094332d3Sopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd. 3094332d3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4094332d3Sopenharmony_ci * you may not use this file except in compliance with the License. 5094332d3Sopenharmony_ci * You may obtain a copy of the License at 6094332d3Sopenharmony_ci * 7094332d3Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8094332d3Sopenharmony_ci * 9094332d3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10094332d3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11094332d3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12094332d3Sopenharmony_ci * See the License for the specific language governing permissions and 13094332d3Sopenharmony_ci * limitations under the License. 14094332d3Sopenharmony_ci */ 15094332d3Sopenharmony_ci 16094332d3Sopenharmony_ci#include "wifi_chip_modes.h" 17094332d3Sopenharmony_ci#include <hdf_log.h> 18094332d3Sopenharmony_ci 19094332d3Sopenharmony_cinamespace OHOS { 20094332d3Sopenharmony_cinamespace HDI { 21094332d3Sopenharmony_cinamespace Wlan { 22094332d3Sopenharmony_cinamespace Chip { 23094332d3Sopenharmony_cinamespace V1_0 { 24094332d3Sopenharmony_ci#define STA IfaceType::STA 25094332d3Sopenharmony_ci#define AP IfaceType::AP 26094332d3Sopenharmony_ci#define P2P IfaceType::P2P 27094332d3Sopenharmony_ciconstexpr int STA_MAX_NUM = 3; 28094332d3Sopenharmony_ci 29094332d3Sopenharmony_ciWifiChipModes::WifiChipModes( 30094332d3Sopenharmony_ci const std::weak_ptr<WifiVendorHal> vendorHal) 31094332d3Sopenharmony_ci : vendorHal_(vendorHal) 32094332d3Sopenharmony_ci{} 33094332d3Sopenharmony_ci 34094332d3Sopenharmony_ciUsableMode WifiChipModes::MakeComModes(int staNum, int apNum, int p2pNum, int modeId) 35094332d3Sopenharmony_ci{ 36094332d3Sopenharmony_ci std::vector<IfaceType> staTypes = {}; 37094332d3Sopenharmony_ci std::vector<IfaceType> apTypes = {}; 38094332d3Sopenharmony_ci std::vector<IfaceType> p2pTypes = {}; 39094332d3Sopenharmony_ci std::vector<ComboIface> chipComb = {}; 40094332d3Sopenharmony_ci IfaceLimit staChipIfaceComb; 41094332d3Sopenharmony_ci IfaceLimit apChipIfaceComb; 42094332d3Sopenharmony_ci IfaceLimit p2pChipIfaceComb; 43094332d3Sopenharmony_ci 44094332d3Sopenharmony_ci staTypes.push_back(STA); 45094332d3Sopenharmony_ci staChipIfaceComb.types = staTypes; 46094332d3Sopenharmony_ci staChipIfaceComb.ifaceNum = staNum; 47094332d3Sopenharmony_ci apTypes.push_back(AP); 48094332d3Sopenharmony_ci apChipIfaceComb.types = apTypes; 49094332d3Sopenharmony_ci apChipIfaceComb.ifaceNum = apNum; 50094332d3Sopenharmony_ci p2pTypes.push_back(P2P); 51094332d3Sopenharmony_ci p2pChipIfaceComb.types = p2pTypes; 52094332d3Sopenharmony_ci p2pChipIfaceComb.ifaceNum = p2pNum; 53094332d3Sopenharmony_ci ComboIface comb; 54094332d3Sopenharmony_ci if (staNum != 0) 55094332d3Sopenharmony_ci comb.limits.push_back(staChipIfaceComb); 56094332d3Sopenharmony_ci if (apNum != 0) 57094332d3Sopenharmony_ci comb.limits.push_back(apChipIfaceComb); 58094332d3Sopenharmony_ci if (p2pNum != 0) 59094332d3Sopenharmony_ci comb.limits.push_back(p2pChipIfaceComb); 60094332d3Sopenharmony_ci chipComb.push_back(comb); 61094332d3Sopenharmony_ci UsableMode chipmode = {}; 62094332d3Sopenharmony_ci chipmode.modeId = modeId; 63094332d3Sopenharmony_ci chipmode.usableCombo = chipComb; 64094332d3Sopenharmony_ci return chipmode; 65094332d3Sopenharmony_ci} 66094332d3Sopenharmony_ci 67094332d3Sopenharmony_cistd::vector<UsableMode> WifiChipModes::GetChipModesForPrimary() 68094332d3Sopenharmony_ci{ 69094332d3Sopenharmony_ci std::vector<UsableMode> modes = {}; 70094332d3Sopenharmony_ci UsableMode mode = MakeComModes(3, 0, 1, 0); 71094332d3Sopenharmony_ci modes.push_back(mode); 72094332d3Sopenharmony_ci UsableMode modeAp = MakeComModes(0, 1, 0, 1); 73094332d3Sopenharmony_ci modes.push_back(modeAp); 74094332d3Sopenharmony_ci return modes; 75094332d3Sopenharmony_ci} 76094332d3Sopenharmony_ci 77094332d3Sopenharmony_cistd::vector<UsableMode> WifiChipModes::GetChipModesForTriple() 78094332d3Sopenharmony_ci{ 79094332d3Sopenharmony_ci std::vector<UsableMode> modes = {}; 80094332d3Sopenharmony_ci UsableMode mode = MakeComModes(STA_MAX_NUM, 1, 1, 0); 81094332d3Sopenharmony_ci modes.push_back(mode); 82094332d3Sopenharmony_ci return modes; 83094332d3Sopenharmony_ci} 84094332d3Sopenharmony_ci 85094332d3Sopenharmony_cistd::vector<UsableMode> WifiChipModes::GetChipModes(bool isPrimary) 86094332d3Sopenharmony_ci{ 87094332d3Sopenharmony_ci bool isCoex; 88094332d3Sopenharmony_ci vendorHal_.lock()->IsSupportCoex(isCoex); 89094332d3Sopenharmony_ci if (isCoex) { 90094332d3Sopenharmony_ci return GetChipModesForTriple(); 91094332d3Sopenharmony_ci } else { 92094332d3Sopenharmony_ci return GetChipModesForPrimary(); 93094332d3Sopenharmony_ci } 94094332d3Sopenharmony_ci} 95094332d3Sopenharmony_ci} 96094332d3Sopenharmony_ci} 97094332d3Sopenharmony_ci} 98094332d3Sopenharmony_ci} 99094332d3Sopenharmony_ci}