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 19namespace OHOS { 20namespace HDI { 21namespace Wlan { 22namespace Chip { 23namespace V1_0 { 24#define STA IfaceType::STA 25#define AP IfaceType::AP 26#define P2P IfaceType::P2P 27constexpr int STA_MAX_NUM = 3; 28 29WifiChipModes::WifiChipModes( 30 const std::weak_ptr<WifiVendorHal> vendorHal) 31 : vendorHal_(vendorHal) 32{} 33 34UsableMode 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 67std::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 77std::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 85std::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}