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 #ifndef OHOS_I_WIFI_P2P_H
16 #define OHOS_I_WIFI_P2P_H
17 
18 #include "wifi_errcode.h"
19 #include "iremote_broker.h"
20 #include "message_parcel.h"
21 #include "message_option.h"
22 #include "wifi_p2p_msg.h"
23 #include "i_wifi_p2p_callback.h"
24 #include "wifi_hid2d_msg.h"
25 
26 namespace OHOS {
27 namespace Wifi {
28 class IWifiP2p : public IRemoteBroker {
29 public:
~IWifiP2p()30     virtual ~IWifiP2p()
31     {}
32 
33     /**
34      * @Description Enabling the P2P Mode.
35      *
36      * @return ErrCode - operation result
37      */
38     virtual ErrCode EnableP2p(void) = 0;
39 
40     /**
41      * @Description Disable the P2P mode.
42      *
43      * @return ErrCode - operation result
44      */
45     virtual ErrCode DisableP2p(void) = 0;
46 
47     /**
48      * @Description Start Wi-Fi P2P device search.
49      *
50      * @return ErrCode - operation result
51      */
52     virtual ErrCode DiscoverDevices(void) = 0;
53 
54     /**
55      * @Description Stop Wi-Fi P2P device search.
56      *
57      * @return ErrCode - operation result
58      */
59     virtual ErrCode StopDiscoverDevices(void) = 0;
60 
61     /**
62      * @Description Start the search for the Wi-Fi P2P service.
63      *
64      * @return ErrCode - operation result
65      */
66     virtual ErrCode DiscoverServices(void) = 0;
67 
68     /**
69      * @Description Stop the search for the Wi-Fi P2P service.
70      *
71      * @return ErrCode - operation result
72      */
73     virtual ErrCode StopDiscoverServices(void) = 0;
74 
75     /**
76      * @Description request the P2P service.
77      *
78      * @param device - WifiP2pDevice object
79      * @param request - WifiP2pServiceRequest object
80      * @return ErrCode - operation result
81      */
82     virtual ErrCode RequestService(const WifiP2pDevice &device, const WifiP2pServiceRequest &request) = 0;
83 
84     /**
85      * @Description Register the local P2P service.
86      *
87      * @param srvInfo - WifiP2pServiceInfo object
88      * @return ErrCode - operation result
89      */
90     virtual ErrCode PutLocalP2pService(const WifiP2pServiceInfo &srvInfo) = 0;
91 
92     /**
93      * @Description Delete the local P2P service.
94      *
95      * @param srvInfo - WifiP2pServiceInfo object
96      * @return ErrCode - operation result
97      */
98     virtual ErrCode DeleteLocalP2pService(const WifiP2pServiceInfo &srvInfo) = 0;
99 
100     /**
101      * @Description Enable Wi-Fi P2P listening.
102      *
103      * @param period - period
104      * @param interval - interval
105      * @return ErrCode - operation result
106      */
107     virtual ErrCode StartP2pListen(int period, int interval) = 0;
108 
109     /**
110      * @Description Disable Wi-Fi P2P listening.
111      *
112      * @return ErrCode - operation result
113      */
114     virtual ErrCode StopP2pListen(void) = 0;
115 
116     /**
117      * @Description Creating a P2P Group.
118      *
119      * @param config - WifiP2pGroupInfo object
120      * @return ErrCode - operation result
121      */
122     virtual ErrCode CreateGroup(const WifiP2pConfig &config) = 0;
123 
124     /**
125      * @Description Remove a P2P Group.
126      *
127      * @return ErrCode - operation result
128      */
129     virtual ErrCode RemoveGroup(void) = 0;
130 
131     /**
132      * @Description Remove a P2P client of current group.
133      *
134      * @param deviceMac - client deviceMac address
135      * @return ErrCode - operation result
136      */
137     virtual ErrCode RemoveGroupClient(const GcInfo &info) = 0;
138 
139     /**
140      * @Description Delete a p2p Group.
141      *
142      * @param group - WifiP2pGroupInfo object
143      * @return ErrCode - operation result
144      */
145     virtual ErrCode DeleteGroup(const WifiP2pGroupInfo &group) = 0;
146 
147     /**
148      * @Description P2P connection.
149      *
150      * @param config - WifiP2pConfig object
151      * @return ErrCode - operation result
152      */
153     virtual ErrCode P2pConnect(const WifiP2pConfig &config) = 0;
154 
155     /**
156      * @Description Canceling a P2P connection.
157      *
158      * @return ErrCode - operation result
159      */
160     virtual ErrCode P2pCancelConnect(void) = 0;
161 
162     /**
163      * @Description Querying Wi-Fi P2P Connection Information.
164      *
165      * @param linkedInfo - Get the WifiP2pLinkedInfo msg
166      * @return ErrCode - operation result
167      */
168     virtual ErrCode QueryP2pLinkedInfo(WifiP2pLinkedInfo& linkedInfo) = 0;
169 
170     /**
171      * @Description Get the Current Group object.
172      *
173      * @param group - the WifiP2pGroupInfo object
174      * @return ErrCode - operation result
175      */
176     virtual ErrCode GetCurrentGroup(WifiP2pGroupInfo &group) = 0;
177 
178     /**
179      * @Description Obtains the P2P switch status.
180      *
181      * @param status - the P2P switch status
182      * @return ErrCode - operation result
183      */
184     virtual ErrCode GetP2pEnableStatus(int &status) = 0;
185 
186     /**
187      * @Description Obtains the P2P discovery status.
188      *
189      * @param status - the P2P discovery status
190      * @return ErrCode
191      */
192     virtual ErrCode GetP2pDiscoverStatus(int &status) = 0;
193 
194     /**
195      * @Description Obtains the P2P connection status.
196      *
197      * @param status - the P2P connection status
198      * @return ErrCode - operation result
199      */
200     virtual ErrCode GetP2pConnectedStatus(int &status) = 0;
201 
202     /**
203      * @Description Query the information about the found devices.
204      *
205      * @param devices - Get result vector of WifiP2pDevice
206      * @return ErrCode - operation result
207      */
208     virtual ErrCode QueryP2pDevices(std::vector<WifiP2pDevice> &devices) = 0;
209 
210     /**
211      * @Description - Query the information about own device.
212      * @param  device - own device
213      * @return ErrCode - operation result
214      */
215     virtual ErrCode QueryP2pLocalDevice(WifiP2pDevice &device) = 0;
216 
217     /**
218      * @Description Query the information about the found groups.
219      *
220      * @param groups - Get result vector of WifiP2pGroupInfo
221      * @return ErrCode - operation result
222      */
223     virtual ErrCode QueryP2pGroups(std::vector<WifiP2pGroupInfo> &groups) = 0;
224 
225     /**
226      * @Description Query the service information.
227      *
228      * @param services - Get result vector of Device
229      * @return ErrCode - operation result
230      */
231     virtual ErrCode QueryP2pServices(std::vector<WifiP2pServiceInfo> &services) = 0;
232 
233     /**
234      * @Description Register callback function.
235      *
236      * @param callback - IWifiP2pCallback object
237      * @return ErrCode - operation result
238      */
239     virtual ErrCode RegisterCallBack(const sptr<IWifiP2pCallback> &callback, const std::vector<std::string> &event) = 0;
240 
241     /**
242      * @Description Get supported features
243      *
244      * @param features - return supported features
245      * @return ErrCode - operation result
246      */
247     virtual ErrCode GetSupportedFeatures(long &features) = 0;
248 
249     /**
250      * @Description set the device name
251      *
252      * @param deviceName - device name
253      * @return ErrCode - operation result
254      */
255     virtual ErrCode SetP2pDeviceName(const std::string &deviceName) = 0;
256 
257     /**
258      * @Description set p2p wifi display info
259      *
260      * @param wfdInfo - wifi display info
261      * @return ErrCode - operation result
262      */
263     virtual ErrCode SetP2pWfdInfo(const WifiP2pWfdInfo &wfdInfo) = 0;
264 
265     /**
266      * @Description Request an IP address to the Gc from the IP address pool, used on the GO side.
267      *
268      * @param gcMac - gc mac address
269      * @param ipAddr - applied ip address
270      * @return ErrCode - operation result
271      */
272     virtual ErrCode Hid2dRequestGcIp(const std::string& gcMac, std::string& ipAddr) = 0;
273 
274     /**
275      * @Description Increase(+1) hid2d shared link reference counting
276      *
277      * @return ErrCode - operation result
278      */
279     virtual ErrCode Hid2dSharedlinkIncrease() = 0;
280 
281     /**
282      * @Description Decrease(-1) hid2d shared link reference counting
283      *
284      * @return ErrCode - operation result
285      */
286     virtual ErrCode Hid2dSharedlinkDecrease() = 0;
287 
288     /**
289      * @Description Create hid2d group, used on the GO side.
290      *
291      * @param frequency - frequency
292      * @param type - frequency type
293      * @return ErrCode - operation result
294      */
295     virtual ErrCode Hid2dCreateGroup(const int frequency, FreqType type) = 0;
296 
297     /**
298      * @Description The GC side actively disconnects from the GO, used on the GC side.
299      *
300      * @param gcIfName - network interface name
301      * @return ErrCode - operation result
302      */
303     virtual ErrCode Hid2dRemoveGcGroup(const std::string& gcIfName) = 0;
304 
305     /**
306      * @Description Connect to a specified group using hid2d, used on the GC side.
307      *
308      * @param config - connection parameters
309      * @return ErrCode - operation result
310      */
311     virtual ErrCode Hid2dConnect(const Hid2dConnectConfig& config) = 0;
312 
313     /**
314      * @Description Configuring IP addresses for P2P network interfaces, used on the GC side.
315      *
316      * @param ifName - network interface name
317      * @param ipInfo - IP infos
318      * @return ErrCode - operation result
319      */
320     virtual ErrCode Hid2dConfigIPAddr(const std::string& ifName, const IpAddrInfo& ipInfo) = 0;
321 
322     /**
323      * @Description Clear IP address when the P2P connection is disconnected, used on the GC side.
324      *
325      * @param ifName - network interface name
326      * @return ErrCode - operation result
327      */
328     virtual ErrCode Hid2dReleaseIPAddr(const std::string& ifName) = 0;
329 
330      /**
331      * @Description Obtain the recommended channel and bandwidth for link setup
332      *
333      * @param request - request data
334      * @param response - response result
335      * @return ErrCode - operation result
336      */
337     virtual ErrCode Hid2dGetRecommendChannel(const RecommendChannelRequest& request,
338         RecommendChannelResponse& response) = 0;
339 
340     /**
341      * @Description get 5G channel list
342      *
343      * @param vecChannelList - result for channel list
344      * @return ErrCode - operation result
345      */
346     virtual ErrCode Hid2dGetChannelListFor5G(std::vector<int>& vecChannelList) = 0;
347 
348     /**
349      * @Description get the self wifi configuration information
350      *
351      * @param cfgType - configuration type
352      * @param cfgData - the queried data of wifi configuration
353      * @param getDatValidLen - the valid data length in the array `cfgData`
354      * @return ErrCode - operation result
355      */
356     virtual ErrCode Hid2dGetSelfWifiCfgInfo(SelfCfgType cfgType,
357         char cfgData[CFG_DATA_MAX_BYTES], int* getDatValidLen) = 0;
358 
359     /**
360      * @Description set the peer wifi configuration information
361      *
362      * @param cfgType - configuration type
363      * @param cfgData - the wifi configuration data to be set
364      * @param setDataValidLen - the valid data length in the array `cfgData`
365      * @return ErrCode - operation result
366      */
367     virtual ErrCode Hid2dSetPeerWifiCfgInfo(PeerCfgType cfgType,
368         char cfgData[CFG_DATA_MAX_BYTES], int setDataValidLen) = 0;
369 
370     /**
371      * @Description Set the scene of upper layer
372      *
373      * @param ifName - interface name
374      * @param scene - scene
375      * @return ErrCode - operate result
376      */
377     virtual ErrCode Hid2dSetUpperScene(const std::string& ifName, const Hid2dUpperScene& scene) = 0;
378 
379     /**
380      * @Description Discover p2p device
381      *
382      * @return ErrCode - operate result
383      */
384     virtual ErrCode DiscoverPeers(int32_t channelid) = 0;
385 
386     /**
387      * @Description Disable random mac
388      *
389      * @return bool - true: service is died, false: service is not died.
390      */
391     virtual ErrCode DisableRandomMac(int setmode) = 0;
392 
393     /**
394      * @Description Check can use P2P
395      *
396      * @return ErrCode - operation result
397      */
398     virtual ErrCode CheckCanUseP2p() = 0;
399 
400     /**
401      * @Description Check whether service is died.
402      *
403      * @return bool - true: service is died, false: service is not died.
404      */
405     virtual bool IsRemoteDied(void) = 0;
406 
407     /**
408      * @Description Hid2d Is Wide Bandwidth Supported
409      *
410      * @param isSupport - is support 160M
411      * @return ErrCode - operation result
412      */
413     virtual ErrCode Hid2dIsWideBandwidthSupported(bool &isSupport) = 0;
414 
415 public:
416     DECLARE_INTERFACE_DESCRIPTOR(u"ohos.wifi.IWifiP2pService");
417 };
418 }  // namespace Wifi
419 }  // namespace OHOS
420 #endif