1 /* 2 * Copyright (c) 2024 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #include "wifi_chip_modes.h" 17 #include <hdf_log.h> 18 19 namespace OHOS { 20 namespace HDI { 21 namespace Wlan { 22 namespace Chip { 23 namespace V1_0 { 24 #define STA IfaceType::STA 25 #define AP IfaceType::AP 26 #define P2P IfaceType::P2P 27 constexpr int STA_MAX_NUM = 3; 28 WifiChipModes(const std::weak_ptr<WifiVendorHal> vendorHal)29 WifiChipModes::WifiChipModes( 30 const std::weak_ptr<WifiVendorHal> vendorHal) 31 : vendorHal_(vendorHal) 32 {} 33 MakeComModes(int staNum,int apNum,int p2pNum,int modeId)34 UsableMode WifiChipModes::MakeComModes(int staNum, int apNum, int p2pNum, int modeId) 35 { 36 std::vector<IfaceType> staTypes = {}; 37 std::vector<IfaceType> apTypes = {}; 38 std::vector<IfaceType> p2pTypes = {}; 39 std::vector<ComboIface> chipComb = {}; 40 IfaceLimit staChipIfaceComb; 41 IfaceLimit apChipIfaceComb; 42 IfaceLimit p2pChipIfaceComb; 43 44 staTypes.push_back(STA); 45 staChipIfaceComb.types = staTypes; 46 staChipIfaceComb.ifaceNum = staNum; 47 apTypes.push_back(AP); 48 apChipIfaceComb.types = apTypes; 49 apChipIfaceComb.ifaceNum = apNum; 50 p2pTypes.push_back(P2P); 51 p2pChipIfaceComb.types = p2pTypes; 52 p2pChipIfaceComb.ifaceNum = p2pNum; 53 ComboIface comb; 54 if (staNum != 0) 55 comb.limits.push_back(staChipIfaceComb); 56 if (apNum != 0) 57 comb.limits.push_back(apChipIfaceComb); 58 if (p2pNum != 0) 59 comb.limits.push_back(p2pChipIfaceComb); 60 chipComb.push_back(comb); 61 UsableMode chipmode = {}; 62 chipmode.modeId = modeId; 63 chipmode.usableCombo = chipComb; 64 return chipmode; 65 } 66 GetChipModesForPrimary()67 std::vector<UsableMode> WifiChipModes::GetChipModesForPrimary() 68 { 69 std::vector<UsableMode> modes = {}; 70 UsableMode mode = MakeComModes(3, 0, 1, 0); 71 modes.push_back(mode); 72 UsableMode modeAp = MakeComModes(0, 1, 0, 1); 73 modes.push_back(modeAp); 74 return modes; 75 } 76 GetChipModesForTriple()77 std::vector<UsableMode> WifiChipModes::GetChipModesForTriple() 78 { 79 std::vector<UsableMode> modes = {}; 80 UsableMode mode = MakeComModes(STA_MAX_NUM, 1, 1, 0); 81 modes.push_back(mode); 82 return modes; 83 } 84 GetChipModes(bool isPrimary)85 std::vector<UsableMode> WifiChipModes::GetChipModes(bool isPrimary) 86 { 87 bool isCoex; 88 vendorHal_.lock()->IsSupportCoex(isCoex); 89 if (isCoex) { 90 return GetChipModesForTriple(); 91 } else { 92 return GetChipModesForPrimary(); 93 } 94 } 95 } 96 } 97 } 98 } 99 }