• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #include "wifi_p2p_impl.h"
16 #include "iservice_registry.h"
17 #include "if_config.h"
18 #include "mac_address.h"
19 #include "wifi_logger.h"
20 #include "wifi_sa_manager.h"
21 
22 DEFINE_WIFILOG_P2P_LABEL("WifiP2pImpl");
23 namespace OHOS {
24 namespace Wifi {
25 
26 #define RETURN_IF_FAIL(cond)                          \
27     do {                                              \
28         if (!(cond)) {                                \
29             WIFI_LOGI("'%{public}s' failed.", #cond); \
30             return WIFI_OPT_FAILED;                   \
31         }                                             \
32     } while (0)
33 
WifiP2pImpl()34 WifiP2pImpl::WifiP2pImpl() : systemAbilityId_(0), client_(nullptr)
35 {}
36 
~WifiP2pImpl()37 WifiP2pImpl::~WifiP2pImpl()
38 {}
39 
Init(int systemAbilityId)40 bool WifiP2pImpl::Init(int systemAbilityId)
41 {
42     systemAbilityId_ = systemAbilityId;
43     return true;
44 }
45 
46 
GetWifiP2pProxy()47 bool WifiP2pImpl::GetWifiP2pProxy()
48 {
49     WifiSaLoadManager::GetInstance().LoadWifiSa(systemAbilityId_);
50     if (IsRemoteDied() == false) {
51         return true;
52     }
53     sptr<ISystemAbilityManager> sa_mgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
54     if (sa_mgr == nullptr) {
55         WIFI_LOGE("failed to get SystemAbilityManager");
56         return false;
57     }
58     sptr<IRemoteObject> object = sa_mgr->GetSystemAbility(systemAbilityId_);
59     if (object == nullptr) {
60         WIFI_LOGE("failed to get P2P_SERVICE");
61         return false;
62     }
63 
64     client_ = iface_cast<IWifiP2p>(object);
65     if (client_ == nullptr) {
66         client_ = new (std::nothrow) WifiP2pProxy(object);
67     }
68 
69     if (client_ == nullptr) {
70         WIFI_LOGE("wifi p2p init failed. %{public}d", systemAbilityId_.load());
71         return false;
72     }
73     return true;
74 }
75 
EnableP2p(void)76 ErrCode WifiP2pImpl::EnableP2p(void)
77 {
78     std::lock_guard<std::mutex> lock(mutex_);
79     RETURN_IF_FAIL(GetWifiP2pProxy());
80     return client_->EnableP2p();
81 }
82 
DisableP2p(void)83 ErrCode WifiP2pImpl::DisableP2p(void)
84 {
85     std::lock_guard<std::mutex> lock(mutex_);
86     RETURN_IF_FAIL(GetWifiP2pProxy());
87     return client_->DisableP2p();
88 }
89 
DiscoverDevices(void)90 ErrCode WifiP2pImpl::DiscoverDevices(void)
91 {
92     std::lock_guard<std::mutex> lock(mutex_);
93     RETURN_IF_FAIL(GetWifiP2pProxy());
94     return client_->DiscoverDevices();
95 }
96 
StopDiscoverDevices(void)97 ErrCode WifiP2pImpl::StopDiscoverDevices(void)
98 {
99     std::lock_guard<std::mutex> lock(mutex_);
100     RETURN_IF_FAIL(GetWifiP2pProxy());
101     return client_->StopDiscoverDevices();
102 }
103 
DiscoverServices(void)104 ErrCode WifiP2pImpl::DiscoverServices(void)
105 {
106     std::lock_guard<std::mutex> lock(mutex_);
107     RETURN_IF_FAIL(GetWifiP2pProxy());
108     return client_->DiscoverServices();
109 }
110 
StopDiscoverServices(void)111 ErrCode WifiP2pImpl::StopDiscoverServices(void)
112 {
113     std::lock_guard<std::mutex> lock(mutex_);
114     RETURN_IF_FAIL(GetWifiP2pProxy());
115     return client_->StopDiscoverServices();
116 }
117 
RequestService(const WifiP2pDevice & device,const WifiP2pServiceRequest & request)118 ErrCode WifiP2pImpl::RequestService(const WifiP2pDevice &device, const WifiP2pServiceRequest &request)
119 {
120     std::lock_guard<std::mutex> lock(mutex_);
121     RETURN_IF_FAIL(GetWifiP2pProxy());
122     return client_->RequestService(device, request);
123 }
124 
PutLocalP2pService(const WifiP2pServiceInfo & srvInfo)125 ErrCode WifiP2pImpl::PutLocalP2pService(const WifiP2pServiceInfo &srvInfo)
126 {
127     std::lock_guard<std::mutex> lock(mutex_);
128     RETURN_IF_FAIL(GetWifiP2pProxy());
129     return client_->PutLocalP2pService(srvInfo);
130 }
131 
DeleteLocalP2pService(const WifiP2pServiceInfo & srvInfo)132 ErrCode WifiP2pImpl::DeleteLocalP2pService(const WifiP2pServiceInfo &srvInfo)
133 {
134     std::lock_guard<std::mutex> lock(mutex_);
135     RETURN_IF_FAIL(GetWifiP2pProxy());
136     return client_->DeleteLocalP2pService(srvInfo);
137 }
138 
StartP2pListen(int period,int interval)139 ErrCode WifiP2pImpl::StartP2pListen(int period, int interval)
140 {
141     std::lock_guard<std::mutex> lock(mutex_);
142     RETURN_IF_FAIL(GetWifiP2pProxy());
143     return client_->StartP2pListen(period, interval);
144 }
145 
StopP2pListen(void)146 ErrCode WifiP2pImpl::StopP2pListen(void)
147 {
148     std::lock_guard<std::mutex> lock(mutex_);
149     RETURN_IF_FAIL(GetWifiP2pProxy());
150     return client_->StopP2pListen();
151 }
152 
CreateGroup(const WifiP2pConfig & config)153 ErrCode WifiP2pImpl::CreateGroup(const WifiP2pConfig &config)
154 {
155     std::lock_guard<std::mutex> lock(mutex_);
156     RETURN_IF_FAIL(GetWifiP2pProxy());
157     return client_->CreateGroup(config);
158 }
159 
RemoveGroup(void)160 ErrCode WifiP2pImpl::RemoveGroup(void)
161 {
162     std::lock_guard<std::mutex> lock(mutex_);
163     RETURN_IF_FAIL(GetWifiP2pProxy());
164     return client_->RemoveGroup();
165 }
166 
RemoveGroupClient(const GcInfo & info)167 ErrCode WifiP2pImpl::RemoveGroupClient(const GcInfo &info)
168 {
169     std::lock_guard<std::mutex> lock(mutex_);
170     RETURN_IF_FAIL(GetWifiP2pProxy());
171     return client_->RemoveGroupClient(info);
172 }
173 
DeleteGroup(const WifiP2pGroupInfo & group)174 ErrCode WifiP2pImpl::DeleteGroup(const WifiP2pGroupInfo &group)
175 {
176     std::lock_guard<std::mutex> lock(mutex_);
177     RETURN_IF_FAIL(GetWifiP2pProxy());
178     return client_->DeleteGroup(group);
179 }
180 
P2pConnect(const WifiP2pConfig & config)181 ErrCode WifiP2pImpl::P2pConnect(const WifiP2pConfig &config)
182 {
183     std::lock_guard<std::mutex> lock(mutex_);
184     RETURN_IF_FAIL(GetWifiP2pProxy());
185     return client_->P2pConnect(config);
186 }
187 
P2pCancelConnect(void)188 ErrCode WifiP2pImpl::P2pCancelConnect(void)
189 {
190     std::lock_guard<std::mutex> lock(mutex_);
191     RETURN_IF_FAIL(GetWifiP2pProxy());
192     return client_->P2pCancelConnect();
193 }
194 
QueryP2pLinkedInfo(WifiP2pLinkedInfo & linkedInfo)195 ErrCode WifiP2pImpl::QueryP2pLinkedInfo(WifiP2pLinkedInfo &linkedInfo)
196 {
197     std::lock_guard<std::mutex> lock(mutex_);
198     RETURN_IF_FAIL(GetWifiP2pProxy());
199     return client_->QueryP2pLinkedInfo(linkedInfo);
200 }
201 
GetCurrentGroup(WifiP2pGroupInfo & group)202 ErrCode WifiP2pImpl::GetCurrentGroup(WifiP2pGroupInfo &group)
203 {
204     std::lock_guard<std::mutex> lock(mutex_);
205     RETURN_IF_FAIL(GetWifiP2pProxy());
206     return client_->GetCurrentGroup(group);
207 }
208 
GetP2pEnableStatus(int & status)209 ErrCode WifiP2pImpl::GetP2pEnableStatus(int &status)
210 {
211     std::lock_guard<std::mutex> lock(mutex_);
212     RETURN_IF_FAIL(GetWifiP2pProxy());
213     return client_->GetP2pEnableStatus(status);
214 }
215 
GetP2pDiscoverStatus(int & status)216 ErrCode WifiP2pImpl::GetP2pDiscoverStatus(int &status)
217 {
218     std::lock_guard<std::mutex> lock(mutex_);
219     RETURN_IF_FAIL(GetWifiP2pProxy());
220     return client_->GetP2pDiscoverStatus(status);
221 }
222 
GetP2pConnectedStatus(int & status)223 ErrCode WifiP2pImpl::GetP2pConnectedStatus(int &status)
224 {
225     std::lock_guard<std::mutex> lock(mutex_);
226     RETURN_IF_FAIL(GetWifiP2pProxy());
227     return client_->GetP2pConnectedStatus(status);
228 }
229 
QueryP2pDevices(std::vector<WifiP2pDevice> & devices)230 ErrCode WifiP2pImpl::QueryP2pDevices(std::vector<WifiP2pDevice> &devices)
231 {
232     std::lock_guard<std::mutex> lock(mutex_);
233     RETURN_IF_FAIL(GetWifiP2pProxy());
234     return client_->QueryP2pDevices(devices);
235 }
236 
QueryP2pLocalDevice(WifiP2pDevice & devices)237 ErrCode WifiP2pImpl::QueryP2pLocalDevice(WifiP2pDevice &devices)
238 {
239     std::lock_guard<std::mutex> lock(mutex_);
240     RETURN_IF_FAIL(GetWifiP2pProxy());
241     return client_->QueryP2pLocalDevice(devices);
242 }
243 
QueryP2pGroups(std::vector<WifiP2pGroupInfo> & groups)244 ErrCode WifiP2pImpl::QueryP2pGroups(std::vector<WifiP2pGroupInfo> &groups)
245 {
246     std::lock_guard<std::mutex> lock(mutex_);
247     RETURN_IF_FAIL(GetWifiP2pProxy());
248     return client_->QueryP2pGroups(groups);
249 }
250 
QueryP2pServices(std::vector<WifiP2pServiceInfo> & services)251 ErrCode WifiP2pImpl::QueryP2pServices(std::vector<WifiP2pServiceInfo> &services)
252 {
253     std::lock_guard<std::mutex> lock(mutex_);
254     RETURN_IF_FAIL(GetWifiP2pProxy());
255     return client_->QueryP2pServices(services);
256 }
257 
RegisterCallBack(const sptr<IWifiP2pCallback> & callback,const std::vector<std::string> & event)258 ErrCode WifiP2pImpl::RegisterCallBack(const sptr<IWifiP2pCallback> &callback, const std::vector<std::string> &event)
259 {
260     std::lock_guard<std::mutex> lock(mutex_);
261     RETURN_IF_FAIL(GetWifiP2pProxy());
262     return client_->RegisterCallBack(callback, event);
263 }
264 
GetSupportedFeatures(long & features)265 ErrCode WifiP2pImpl::GetSupportedFeatures(long &features)
266 {
267     std::lock_guard<std::mutex> lock(mutex_);
268     RETURN_IF_FAIL(GetWifiP2pProxy());
269     return client_->GetSupportedFeatures(features);
270 }
271 
IsFeatureSupported(long feature)272 bool WifiP2pImpl::IsFeatureSupported(long feature)
273 {
274     std::lock_guard<std::mutex> lock(mutex_);
275     RETURN_IF_FAIL(GetWifiP2pProxy());
276     long tmpFeatures = 0;
277     if (client_->GetSupportedFeatures(tmpFeatures) != WIFI_OPT_SUCCESS) {
278         return false;
279     }
280     return ((static_cast<unsigned long>(tmpFeatures) & static_cast<unsigned long>(feature)) ==
281         static_cast<unsigned long>(feature));
282 }
283 
SetP2pDeviceName(const std::string & deviceName)284 ErrCode WifiP2pImpl::SetP2pDeviceName(const std::string &deviceName)
285 {
286     std::lock_guard<std::mutex> lock(mutex_);
287     RETURN_IF_FAIL(GetWifiP2pProxy());
288     return client_->SetP2pDeviceName(deviceName);
289 }
290 
SetP2pWfdInfo(const WifiP2pWfdInfo & wfdInfo)291 ErrCode WifiP2pImpl::SetP2pWfdInfo(const WifiP2pWfdInfo &wfdInfo)
292 {
293     std::lock_guard<std::mutex> lock(mutex_);
294     RETURN_IF_FAIL(GetWifiP2pProxy());
295     return client_->SetP2pWfdInfo(wfdInfo);
296 }
297 
Hid2dRequestGcIp(const std::string & gcMac,std::string & ipAddr)298 ErrCode WifiP2pImpl::Hid2dRequestGcIp(const std::string& gcMac, std::string& ipAddr)
299 {
300     std::lock_guard<std::mutex> lock(mutex_);
301     RETURN_IF_FAIL(GetWifiP2pProxy());
302     return client_->Hid2dRequestGcIp(gcMac, ipAddr);
303 }
304 
Hid2dSharedlinkIncrease()305 ErrCode WifiP2pImpl::Hid2dSharedlinkIncrease()
306 {
307     std::lock_guard<std::mutex> lock(mutex_);
308     RETURN_IF_FAIL(GetWifiP2pProxy());
309     return client_->Hid2dSharedlinkIncrease();
310 }
311 
Hid2dSharedlinkDecrease()312 ErrCode WifiP2pImpl::Hid2dSharedlinkDecrease()
313 {
314     std::lock_guard<std::mutex> lock(mutex_);
315     RETURN_IF_FAIL(GetWifiP2pProxy());
316     return client_->Hid2dSharedlinkDecrease();
317 }
318 
Hid2dCreateGroup(const int frequency,FreqType type)319 ErrCode WifiP2pImpl::Hid2dCreateGroup(const int frequency, FreqType type)
320 {
321     std::lock_guard<std::mutex> lock(mutex_);
322     RETURN_IF_FAIL(GetWifiP2pProxy());
323     return client_->Hid2dCreateGroup(frequency, type);
324 }
325 
Hid2dRemoveGcGroup(const std::string & gcIfName)326 ErrCode WifiP2pImpl::Hid2dRemoveGcGroup(const std::string& gcIfName)
327 {
328     std::lock_guard<std::mutex> lock(mutex_);
329     RETURN_IF_FAIL(GetWifiP2pProxy());
330     return client_->Hid2dRemoveGcGroup(gcIfName);
331 }
332 
Hid2dConnect(const Hid2dConnectConfig & config)333 ErrCode WifiP2pImpl::Hid2dConnect(const Hid2dConnectConfig& config)
334 {
335     std::lock_guard<std::mutex> lock(mutex_);
336     RETURN_IF_FAIL(GetWifiP2pProxy());
337     return client_->Hid2dConnect(config);
338 }
339 
Hid2dConfigIPAddr(const std::string & ifName,const IpAddrInfo & ipInfo)340 ErrCode WifiP2pImpl::Hid2dConfigIPAddr(const std::string& ifName, const IpAddrInfo& ipInfo)
341 {
342     std::lock_guard<std::mutex> lock(mutex_);
343     RETURN_IF_FAIL(GetWifiP2pProxy());
344     return client_->Hid2dConfigIPAddr(ifName, ipInfo);
345 }
346 
Hid2dReleaseIPAddr(const std::string & ifName)347 ErrCode WifiP2pImpl::Hid2dReleaseIPAddr(const std::string& ifName)
348 {
349     std::lock_guard<std::mutex> lock(mutex_);
350     RETURN_IF_FAIL(GetWifiP2pProxy());
351     return client_->Hid2dReleaseIPAddr(ifName);
352 }
353 
Hid2dGetRecommendChannel(const RecommendChannelRequest & request,RecommendChannelResponse & response)354 ErrCode WifiP2pImpl::Hid2dGetRecommendChannel(const RecommendChannelRequest& request,
355     RecommendChannelResponse& response)
356 {
357     std::lock_guard<std::mutex> lock(mutex_);
358     RETURN_IF_FAIL(GetWifiP2pProxy());
359     return client_->Hid2dGetRecommendChannel(request, response);
360 }
361 
Hid2dGetChannelListFor5G(std::vector<int> & vecChannelList)362 ErrCode WifiP2pImpl::Hid2dGetChannelListFor5G(std::vector<int>& vecChannelList)
363 {
364     std::lock_guard<std::mutex> lock(mutex_);
365     RETURN_IF_FAIL(GetWifiP2pProxy());
366     return client_->Hid2dGetChannelListFor5G(vecChannelList);
367 }
368 
Hid2dGetSelfWifiCfgInfo(SelfCfgType cfgType,char cfgData[CFG_DATA_MAX_BYTES],int * getDatValidLen)369 ErrCode WifiP2pImpl::Hid2dGetSelfWifiCfgInfo(SelfCfgType cfgType, char cfgData[CFG_DATA_MAX_BYTES], int* getDatValidLen)
370 {
371     std::lock_guard<std::mutex> lock(mutex_);
372     RETURN_IF_FAIL(GetWifiP2pProxy());
373     return client_->Hid2dGetSelfWifiCfgInfo(cfgType, cfgData, getDatValidLen);
374 }
375 
Hid2dSetPeerWifiCfgInfo(PeerCfgType cfgType,char cfgData[CFG_DATA_MAX_BYTES],int setDataValidLen)376 ErrCode WifiP2pImpl::Hid2dSetPeerWifiCfgInfo(PeerCfgType cfgType, char cfgData[CFG_DATA_MAX_BYTES], int setDataValidLen)
377 {
378     std::lock_guard<std::mutex> lock(mutex_);
379     RETURN_IF_FAIL(GetWifiP2pProxy());
380     return client_->Hid2dSetPeerWifiCfgInfo(cfgType, cfgData, setDataValidLen);
381 }
382 
Hid2dSetUpperScene(const std::string & ifName,const Hid2dUpperScene & scene)383 ErrCode WifiP2pImpl::Hid2dSetUpperScene(const std::string& ifName, const Hid2dUpperScene& scene)
384 {
385     std::lock_guard<std::mutex> lock(mutex_);
386     RETURN_IF_FAIL(GetWifiP2pProxy());
387     return client_->Hid2dSetUpperScene(ifName, scene);
388 }
389 
IsRemoteDied(void)390 bool WifiP2pImpl::IsRemoteDied(void)
391 {
392     return (client_ == nullptr) ? true : client_->IsRemoteDied();
393 }
394 
DiscoverPeers(int32_t channelid)395 ErrCode WifiP2pImpl::DiscoverPeers(int32_t channelid)
396 {
397     std::lock_guard<std::mutex> lock(mutex_);
398     RETURN_IF_FAIL(GetWifiP2pProxy());
399     return client_->DiscoverPeers(channelid);
400 }
401 
DisableRandomMac(int setmode)402 ErrCode WifiP2pImpl::DisableRandomMac(int setmode)
403 {
404     std::lock_guard<std::mutex> lock(mutex_);
405     RETURN_IF_FAIL(GetWifiP2pProxy());
406     return client_->DisableRandomMac(setmode);
407 }
408 
CheckCanUseP2p()409 ErrCode WifiP2pImpl::CheckCanUseP2p()
410 {
411     std::lock_guard<std::mutex> lock(mutex_);
412     RETURN_IF_FAIL(GetWifiP2pProxy());
413     return client_->CheckCanUseP2p();
414 }
415 
Hid2dIsWideBandwidthSupported(bool & isSupport)416 ErrCode WifiP2pImpl::Hid2dIsWideBandwidthSupported(bool &isSupport)
417 {
418     std::lock_guard<std::mutex> lock(mutex_);
419     RETURN_IF_FAIL(GetWifiP2pProxy());
420     return client_->Hid2dIsWideBandwidthSupported(isSupport);
421 }
422 }  // namespace Wifi
423 }  // namespace OHOS