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 }