1 /*
2 * Copyright (C) 2021-2022 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_p2p_hal_interface.h"
17 #include "wifi_log.h"
18 #include <mutex>
19
20 #undef LOG_TAG
21 #define LOG_TAG "WifiP2PHalInterface"
22
23 namespace OHOS {
24 namespace Wifi {
GetInstance(void)25 WifiP2PHalInterface &WifiP2PHalInterface::GetInstance(void)
26 {
27 static WifiP2PHalInterface inst;
28 static int initFlag = 0;
29 static std::mutex initMutex;
30 if (initFlag == 0) {
31 std::unique_lock<std::mutex> lock(initMutex);
32 if (initFlag == 0) {
33 if (inst.InitIdlClient()) {
34 initFlag = 1;
35 }
36 }
37 }
38 return inst;
39 }
40
StartP2p(void) const41 WifiErrorNo WifiP2PHalInterface::StartP2p(void) const
42 {
43 return mIdlClient->ReqP2pStart();
44 }
45
StopP2p(void) const46 WifiErrorNo WifiP2PHalInterface::StopP2p(void) const
47 {
48 return mIdlClient->ReqP2pStop();
49 }
50
RegisterP2pCallback(const P2pHalCallback & callbacks)51 WifiErrorNo WifiP2PHalInterface::RegisterP2pCallback(const P2pHalCallback &callbacks)
52 {
53 WifiErrorNo err = mIdlClient->ReqP2pRegisterCallback(callbacks);
54 if (err == WIFI_IDL_OPT_OK || callbacks.onConnectSupplicant == nullptr) {
55 mP2pCallback = callbacks;
56 }
57 return err;
58 }
59
StartWpsPbc(const std::string & groupInterface,const std::string & bssid) const60 WifiErrorNo WifiP2PHalInterface::StartWpsPbc(const std::string &groupInterface, const std::string &bssid) const
61 {
62 return mIdlClient->ReqP2pSetupWpsPbc(groupInterface, bssid);
63 }
64
StartWpsPin(const std::string & groupInterface,const std::string & address,const std::string & pin,std::string & result) const65 WifiErrorNo WifiP2PHalInterface::StartWpsPin(
66 const std::string &groupInterface, const std::string &address, const std::string &pin, std::string &result) const
67 {
68 return mIdlClient->ReqP2pSetupWpsPin(groupInterface, address, pin, result);
69 }
70
RemoveNetwork(int networkId) const71 WifiErrorNo WifiP2PHalInterface::RemoveNetwork(int networkId) const
72 {
73 return mIdlClient->ReqP2pRemoveNetwork(networkId);
74 }
75
ListNetworks(std::map<int,WifiP2pGroupInfo> & mapGroups) const76 WifiErrorNo WifiP2PHalInterface::ListNetworks(std::map<int, WifiP2pGroupInfo> &mapGroups) const
77 {
78 return mIdlClient->ReqP2pListNetworks(mapGroups);
79 }
80
SetP2pDeviceName(const std::string & name) const81 WifiErrorNo WifiP2PHalInterface::SetP2pDeviceName(const std::string &name) const
82 {
83 return mIdlClient->ReqP2pSetDeviceName(name);
84 }
85
SetP2pDeviceType(const std::string & type) const86 WifiErrorNo WifiP2PHalInterface::SetP2pDeviceType(const std::string &type) const
87 {
88 return mIdlClient->ReqP2pSetWpsDeviceType(type);
89 }
90
SetP2pSecondaryDeviceType(const std::string & type)91 WifiErrorNo WifiP2PHalInterface::SetP2pSecondaryDeviceType(const std::string &type)
92 {
93 return mIdlClient->ReqP2pSetWpsSecondaryDeviceType(type);
94 }
95
SetP2pConfigMethods(const std::string & methods) const96 WifiErrorNo WifiP2PHalInterface::SetP2pConfigMethods(const std::string &methods) const
97 {
98 return mIdlClient->ReqP2pSetWpsConfigMethods(methods);
99 }
100
SetP2pSsidPostfix(const std::string & postfixName) const101 WifiErrorNo WifiP2PHalInterface::SetP2pSsidPostfix(const std::string &postfixName) const
102 {
103 return mIdlClient->ReqP2pSetSsidPostfixName(postfixName);
104 }
105
SetP2pGroupIdle(const std::string & groupInterface,size_t time) const106 WifiErrorNo WifiP2PHalInterface::SetP2pGroupIdle(const std::string &groupInterface, size_t time) const
107 {
108 return mIdlClient->ReqP2pSetGroupMaxIdle(groupInterface, time);
109 }
110
SetP2pPowerSave(const std::string & groupInterface,bool enable) const111 WifiErrorNo WifiP2PHalInterface::SetP2pPowerSave(const std::string &groupInterface, bool enable) const
112 {
113 return mIdlClient->ReqP2pSetPowerSave(groupInterface, enable);
114 }
115
SetWfdEnable(bool enable) const116 WifiErrorNo WifiP2PHalInterface::SetWfdEnable(bool enable) const
117 {
118 return mIdlClient->ReqP2pSetWfdEnable(enable);
119 }
120
SetWfdDeviceConfig(const std::string & config) const121 WifiErrorNo WifiP2PHalInterface::SetWfdDeviceConfig(const std::string &config) const
122 {
123 return mIdlClient->ReqP2pSetWfdDeviceConfig(config);
124 }
125
P2pFind(size_t timeout) const126 WifiErrorNo WifiP2PHalInterface::P2pFind(size_t timeout) const
127 {
128 return mIdlClient->ReqP2pStartFind(timeout);
129 }
130
P2pStopFind() const131 WifiErrorNo WifiP2PHalInterface::P2pStopFind() const
132 {
133 return mIdlClient->ReqP2pStopFind();
134 }
135
P2pConfigureListen(bool enable,size_t period,size_t interval) const136 WifiErrorNo WifiP2PHalInterface::P2pConfigureListen(bool enable, size_t period, size_t interval) const
137 {
138 return mIdlClient->ReqP2pSetExtListen(enable, period, interval);
139 }
140
SetListenChannel(size_t channel,unsigned char regClass) const141 WifiErrorNo WifiP2PHalInterface::SetListenChannel(size_t channel, unsigned char regClass) const
142 {
143 return mIdlClient->ReqP2pSetListenChannel(channel, regClass);
144 }
145
P2pFlush() const146 WifiErrorNo WifiP2PHalInterface::P2pFlush() const
147 {
148 return mIdlClient->ReqP2pFlush();
149 }
150
Connect(const WifiP2pConfigInternal & config,bool isJoinExistingGroup,std::string & pin) const151 WifiErrorNo WifiP2PHalInterface::Connect(const WifiP2pConfigInternal &config, bool isJoinExistingGroup,
152 std::string &pin) const
153 {
154 return mIdlClient->ReqP2pConnect(config, isJoinExistingGroup, pin);
155 }
156
CancelConnect() const157 WifiErrorNo WifiP2PHalInterface::CancelConnect() const
158 {
159 return mIdlClient->ReqP2pCancelConnect();
160 }
161
ProvisionDiscovery(const WifiP2pConfigInternal & config) const162 WifiErrorNo WifiP2PHalInterface::ProvisionDiscovery(const WifiP2pConfigInternal &config) const
163 {
164 return mIdlClient->ReqP2pProvisionDiscovery(config);
165 }
166
GroupAdd(bool isPersistent,int networkId,int freq) const167 WifiErrorNo WifiP2PHalInterface::GroupAdd(bool isPersistent, int networkId, int freq) const
168 {
169 return mIdlClient->ReqP2pAddGroup(isPersistent, networkId, freq);
170 }
171
GroupRemove(const std::string & groupInterface) const172 WifiErrorNo WifiP2PHalInterface::GroupRemove(const std::string &groupInterface) const
173 {
174 return mIdlClient->ReqP2pRemoveGroup(groupInterface);
175 }
176
Invite(const WifiP2pGroupInfo & group,const std::string & deviceAddr) const177 WifiErrorNo WifiP2PHalInterface::Invite(const WifiP2pGroupInfo &group, const std::string &deviceAddr) const
178 {
179 return mIdlClient->ReqP2pInvite(group, deviceAddr);
180 }
181
Reinvoke(int networkId,const std::string & deviceAddr) const182 WifiErrorNo WifiP2PHalInterface::Reinvoke(int networkId, const std::string &deviceAddr) const
183 {
184 return mIdlClient->ReqP2pReinvoke(networkId, deviceAddr);
185 }
186
GetDeviceAddress(std::string & deviceAddress) const187 WifiErrorNo WifiP2PHalInterface::GetDeviceAddress(std::string &deviceAddress) const
188 {
189 return mIdlClient->ReqP2pGetDeviceAddress(deviceAddress);
190 }
191
GetGroupCapability(const std::string & deviceAddress,uint32_t & cap) const192 WifiErrorNo WifiP2PHalInterface::GetGroupCapability(const std::string &deviceAddress, uint32_t &cap) const
193 {
194 return mIdlClient->ReqP2pGetGroupCapability(deviceAddress, cap);
195 }
196
P2pServiceAdd(const WifiP2pServiceInfo & info) const197 WifiErrorNo WifiP2PHalInterface::P2pServiceAdd(const WifiP2pServiceInfo &info) const
198 {
199 return mIdlClient->ReqP2pAddService(info);
200 }
201
P2pServiceRemove(const WifiP2pServiceInfo & info) const202 WifiErrorNo WifiP2PHalInterface::P2pServiceRemove(const WifiP2pServiceInfo &info) const
203 {
204 return mIdlClient->ReqP2pRemoveService(info);
205 }
206
FlushService() const207 WifiErrorNo WifiP2PHalInterface::FlushService() const
208 {
209 return mIdlClient->ReqP2pFlushService();
210 }
211
SaveConfig() const212 WifiErrorNo WifiP2PHalInterface::SaveConfig() const
213 {
214 return mIdlClient->ReqP2pSaveConfig();
215 }
216
ReqServiceDiscovery(const std::string & deviceAddress,const std::vector<unsigned char> & tlvs,std::string & reqID) const217 WifiErrorNo WifiP2PHalInterface::ReqServiceDiscovery(
218 const std::string &deviceAddress, const std::vector<unsigned char> &tlvs, std::string &reqID) const
219 {
220 return mIdlClient->ReqP2pReqServiceDiscovery(deviceAddress, tlvs, reqID);
221 }
222
CancelReqServiceDiscovery(const std::string & id) const223 WifiErrorNo WifiP2PHalInterface::CancelReqServiceDiscovery(const std::string &id) const
224 {
225 return mIdlClient->ReqP2pCancelServiceDiscovery(id);
226 }
227
SetRandomMacAddr(bool enable) const228 WifiErrorNo WifiP2PHalInterface::SetRandomMacAddr(bool enable) const
229 {
230 return mIdlClient->ReqP2pSetRandomMac(enable);
231 }
232
SetMiracastMode(int type) const233 WifiErrorNo WifiP2PHalInterface::SetMiracastMode(int type) const
234 {
235 return mIdlClient->ReqP2pSetMiracastType(type);
236 }
237
SetPersistentReconnect(int mode) const238 WifiErrorNo WifiP2PHalInterface::SetPersistentReconnect(int mode) const
239 {
240 return mIdlClient->ReqSetPersistentReconnect(mode);
241 }
242
RespServiceDiscovery(const WifiP2pDevice & device,int frequency,int dialogToken,const std::vector<unsigned char> & tlvs) const243 WifiErrorNo WifiP2PHalInterface::RespServiceDiscovery(
244 const WifiP2pDevice &device, int frequency, int dialogToken, const std::vector<unsigned char> &tlvs) const
245 {
246 return mIdlClient->ReqRespServiceDiscovery(device, frequency, dialogToken, tlvs);
247 }
248
SetServiceDiscoveryExternal(bool isExternalProcess) const249 WifiErrorNo WifiP2PHalInterface::SetServiceDiscoveryExternal(bool isExternalProcess) const
250 {
251 return mIdlClient->ReqSetServiceDiscoveryExternal(isExternalProcess);
252 }
253
GetP2pPeer(const std::string & deviceAddress,WifiP2pDevice & device) const254 WifiErrorNo WifiP2PHalInterface::GetP2pPeer(const std::string &deviceAddress, WifiP2pDevice &device) const
255 {
256 return mIdlClient->ReqGetP2pPeer(deviceAddress, device);
257 }
258
P2pGetSupportFrequenciesByBand(int band,std::vector<int> & frequencies) const259 WifiErrorNo WifiP2PHalInterface::P2pGetSupportFrequenciesByBand(int band, std::vector<int> &frequencies) const
260 {
261 return mIdlClient->ReqP2pGetSupportFrequencies(band, frequencies);
262 }
263
P2pSetGroupConfig(int networkId,const IdlP2pGroupConfig & config) const264 WifiErrorNo WifiP2PHalInterface::P2pSetGroupConfig(int networkId, const IdlP2pGroupConfig &config) const
265 {
266 return mIdlClient->ReqP2pSetGroupConfig(networkId, config);
267 }
268
P2pGetGroupConfig(int networkId,IdlP2pGroupConfig & config) const269 WifiErrorNo WifiP2PHalInterface::P2pGetGroupConfig(int networkId, IdlP2pGroupConfig &config) const
270 {
271 return mIdlClient->ReqP2pGetGroupConfig(networkId, config);
272 }
273
P2pAddNetwork(int & networkId) const274 WifiErrorNo WifiP2PHalInterface::P2pAddNetwork(int &networkId) const
275 {
276 return mIdlClient->ReqP2pAddNetwork(networkId);
277 }
278
GetP2pCallbackInst(void) const279 const P2pHalCallback &WifiP2PHalInterface::GetP2pCallbackInst(void) const
280 {
281 return mP2pCallback;
282 }
283
Hid2dConnect(const Hid2dConnectConfig & config) const284 WifiErrorNo WifiP2PHalInterface::Hid2dConnect(const Hid2dConnectConfig &config) const
285 {
286 return mIdlClient->ReqP2pHid2dConnect(config);
287 }
288 } // namespace Wifi
289 } // namespace OHOS