1 /*
2  * Copyright (C) 2021 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 #ifndef OHOS_WIFI_STA_HAL_INTERFACE_H
17 #define OHOS_WIFI_STA_HAL_INTERFACE_H
18 
19 #include <string>
20 #include <vector>
21 #include "define.h"
22 #include "wifi_base_hal_interface.h"
23 #include "wifi_event_callback.h"
24 #include "wifi_native_struct.h"
25 
26 namespace OHOS {
27 namespace Wifi {
28 class WifiStaHalInterface : public WifiBaseHalInterface {
29 public:
30     /**
31      * @Description Get the Instance object.
32      *
33      * @return WifiStaHalInterface&
34      */
35     static WifiStaHalInterface &GetInstance(void);
36 
37     /**
38      * @Description Open Wifi.
39      *
40      * @return WifiErrorNo
41      */
42     WifiErrorNo StartWifi(const std::string &ifaceName = "wlan0", int instId = 0);
43 
44     /**
45      * @Description Close Wifi.
46      *
47      * @return WifiErrorNo
48      */
49     WifiErrorNo StopWifi(int instId = 0);
50 
51     /**
52      * @Description Connect Wifi.
53      *
54      * @param networkId
55      * @return WifiErrorNo
56      */
57     WifiErrorNo Connect(int networkId, const std::string &ifaceName);
58 
59     /**
60      * @Description Reconnect Wifi.
61      *
62      * @return WifiErrorNo
63      */
64     WifiErrorNo Reconnect(void);
65 
66     /**
67      * @Description Reassociate Wifi.
68      *
69      * @return WifiErrorNo
70      */
71     WifiErrorNo Reassociate(void);
72 
73     /**
74      * @Description Disconnect Wifi.
75      *
76      * @return WifiErrorNo
77      */
78     WifiErrorNo Disconnect(const std::string &ifaceName);
79 
80     /**
81      * @Description Obtaining the STA Support Capability.
82      *
83      * @param capabilities
84      * @return WifiErrorNo
85      */
86     WifiErrorNo GetStaCapabilities(unsigned int &capabilities);
87 
88     /**
89      * @Description Obtaining the MAC Address of a STA.
90      *
91      * @param mac
92      * @return WifiErrorNo
93      */
94     WifiErrorNo GetStaDeviceMacAddress(std::string &mac, const std::string &ifaceName);
95 
96     /**
97      * @Description Sets the Wi-Fi country code.
98      *
99      * @param code
100      * @return WifiErrorNo
101      */
102     WifiErrorNo SetWifiCountryCode(const std::string &ifaceName, const std::string &code);
103 
104     /**
105      * @Description Obtains the frequencies supported by a specified frequency band.
106      *
107      * @param band
108      * @param frequencies
109      * @return WifiErrorNo
110      */
111     WifiErrorNo GetSupportFrequencies(const std::string &ifaceName, int band, std::vector<int> &frequencies);
112 
113     /**
114      * @Description Sets the MAC address of the Wi-Fi connection.
115      *
116      * @param mac
117      * @return WifiErrorNo
118      */
119     WifiErrorNo SetConnectMacAddr(const std::string &ifaceName, const std::string &mac);
120 
121     /**
122      * @Description Sets the MAC address for Wi-Fi scanning.
123      *
124      * @param mac
125      * @return WifiErrorNo
126      */
127     WifiErrorNo SetScanMacAddress(const std::string &mac);
128 
129     /**
130      * @Description Disconnect the BSSID of the last roaming subscriber.
131      *
132      * @param mac
133      * @return WifiErrorNo
134      */
135     WifiErrorNo DisconnectLastRoamingBssid(const std::string &mac);
136 
137     /**
138      * @Description Get total supported feature, and call user can
139      *              determine whether support a feature.
140      *
141      * @param feature
142      * @return WifiErrorNo
143      */
144     WifiErrorNo GetSupportFeature(long &feature);
145 
146     /**
147      * @Description Set the Wi-Fi transmit power.
148      *
149      * @param power
150      * @return WifiErrorNo
151      */
152     WifiErrorNo SetTxPower(int power);
153 
154     /**
155      * @Description Scan by specified parameter.
156      *
157      * @param scanParam
158      * @return WifiErrorNo
159      */
160     WifiErrorNo Scan(const std::string &ifaceName, const WifiHalScanParam &scanParam);
161 
162     /**
163      * @Description Obtain the scanning result.
164      *
165      * @param scanResults
166      * @return WifiErrorNo
167      */
168     WifiErrorNo QueryScanInfos(const std::string &ifaceName, std::vector<InterScanInfo> &scanInfos);
169 
170     /**
171      * @Description Initiate PNO scanning.
172      *
173      * @param scanParam
174      * @return WifiErrorNo
175      */
176     WifiErrorNo StartPnoScan(const std::string &ifaceName, const WifiHalPnoScanParam &scanParam);
177 
178     /**
179      * @Description Stop PNO Scanning.
180      *
181      * @return WifiErrorNo
182      */
183     WifiErrorNo StopPnoScan(const std::string &ifaceName);
184 
185     /**
186      * @Description Deleting a Network.
187      *
188      * @param networkId
189      * @return WifiErrorNo
190      */
191     WifiErrorNo RemoveDevice(int networkId);
192 
193     /**
194      * @Description Clears the network configuration information saved by wpa_supplicant.
195      *
196      * @return WifiErrorNo
197      */
198     WifiErrorNo ClearDeviceConfig(const std::string &ifaceName) const;
199 
200     /**
201      * @Description Request to obtain the next network ID.
202      *
203      * @param networkId
204      * @return WifiErrorNo
205      */
206     WifiErrorNo GetNextNetworkId(int &networkId, const std::string &ifaceName);
207 
208     /**
209      * @Description Enable a network.
210      *
211      * @param networkId
212      * @return WifiErrorNo
213      */
214     WifiErrorNo EnableNetwork(int networkId, const std::string &ifaceName);
215 
216     /**
217      * @Description Disable a network.
218      *
219      * @param networkId
220      * @return WifiErrorNo
221      */
222     WifiErrorNo DisableNetwork(int networkId, const std::string &ifaceName);
223 
224     /**
225      * @Description Setting the network.
226      *
227      * @param networkId
228      * @param config
229      * @return WifiErrorNo
230      */
231     WifiErrorNo SetDeviceConfig(int networkId, const WifiHalDeviceConfig &config, const std::string &ifaceName);
232 
233     /**
234      * @Description Obtaining Network Configurations.
235      *
236      * @param config
237      * @return WifiErrorNo
238      */
239     WifiErrorNo GetDeviceConfig(WifiHalGetDeviceConfig &config, const std::string &ifaceName);
240 
241     /**
242      * @Description Save network config.
243      *
244      * @return WifiErrorNo
245      */
246     WifiErrorNo SaveDeviceConfig(void);
247 
248     /**
249      * @Description Registering the Sta Event Callback.
250      *
251      * @param callback
252      * @return WifiErrorNo
253      */
254     WifiErrorNo RegisterStaEventCallback(const WifiEventCallback &callback, const std::string &ifaceName);
255 
256     /**
257      * @Description Enabling WPS in PBC Mode.
258      *
259      * @param config
260      * @return WifiErrorNo
261      */
262     WifiErrorNo StartWpsPbcMode(const WifiHalWpsConfig &config);
263 
264     /**
265      * @Description Enable PIN mode WPS.
266      *
267      * @param config
268      * @param pinCode
269      * @return WifiErrorNo
270      */
271     WifiErrorNo StartWpsPinMode(const WifiHalWpsConfig &config, int &pinCode);
272 
273     /**
274      * @Description Close wps.
275      *
276      * @return WifiErrorNo
277      */
278     WifiErrorNo StopWps(void);
279 
280     /**
281      * @Description Obtains the roaming support capability.
282      *
283      * @param capability
284      * @return WifiErrorNo
285      */
286     WifiErrorNo GetRoamingCapabilities(WifiHalRoamCapability &capability);
287 
288     /**
289      * @Description Set bssid to supplicant.
290      *
291      * @param networkId
292      * @param bssid
293      * @return WifiErrorNo
294      */
295     WifiErrorNo SetBssid(int networkId, const std::string &bssid, const std::string &ifaceName);
296 
297     /**
298      * @Description Setting Roaming Configurations.
299      *
300      * @param config
301      * @return WifiErrorNo
302      */
303     WifiErrorNo SetRoamConfig(const WifiHalRoamConfig &config);
304 
305     /**
306      * @Description Wpa_s disable/enable(0/1) automatic reconnection.
307      *
308      * @param enable
309      * @return WifiErrorNo
310      */
311     WifiErrorNo WpaAutoConnect(int enable);
312 
313     /**
314      * @Description Clearing the wpa Blocklist.
315      *
316      * @return WifiErrorNo
317      */
318     WifiErrorNo WpaBlocklistClear();
319 
320     /**
321      * @Description Obtaining the Network List.
322      *
323      * @param networkList
324      * @return WifiErrorNo
325      */
326     WifiErrorNo GetNetworkList(std::vector<WifiHalWpaNetworkInfo> &networkList);
327 
328     /**
329      * @Description Get current connect signal info, rssi, linkspeed, noise ...
330      *
331      * @param endBssid - peer end bssid, i.e. linked ap's bssid
332      * @param info - signal info
333      * @return WifiErrorNo
334      */
335     WifiErrorNo GetConnectSignalInfo(const std::string &ifaceName, const std::string &endBssid,
336         WifiHalWpaSignalInfo &info);
337 
338     /**
339      * @Description set power save mode
340      *
341      * @param frequency - connected ap frequency
342      * @param mode - power save mode
343      */
344     WifiErrorNo SetPmMode(const std::string &ifaceName, int frequency, int mode);
345 
346     /**
347      * @Description set data packet identification mark rule
348      *
349      * @param uid - target app uid
350      * @param protocol - target protocol type
351      * @param enable - enable/disable dpi mark
352      */
353 
354     WifiErrorNo SetDpiMarkRule(const std::string &ifaceName, int uid, int protocol, int enable);
355 
356     /**
357      * @Description Send SIM/AKA/AKA' authentication to wpa
358      *
359      * @param ifName: Interface name
360      * @param cmd: Request message content
361      * @return WifiErrorNo
362      */
363     WifiErrorNo ShellCmd(const std::string &ifName, const std::string &cmd);
364 
365     /**
366      * @Description get psk pass phrase
367      *
368      * @param ifName: Interface name
369      * @param psk: psk
370      * @return WifiErrorNo
371      */
372     WifiErrorNo GetPskPassphrase(const std::string &ifName, std::string &psk);
373 
374     /**
375      * @Description set background limit speed uid&pid list
376      *
377      * @param chipsetCategory - chipset category
378      */
379     WifiErrorNo GetChipsetCategory(const std::string &ifaceName, int& chipsetCategory);
380 
381     /**
382      * @Description set background limit speed uid&pid list
383      *
384      * @param chipsetFeatrureCapability - chipset featrure capability
385      */
386     WifiErrorNo GetChipsetWifiFeatrureCapability(const std::string &ifaceName, int& chipsetFeatrureCapability);
387 
388     /**
389      * @Description Set network interface updown.
390      *
391      * @return WifiErrorNo
392      */
393     WifiErrorNo SetNetworkInterfaceUpDown(const std::string &ifaceName, bool upDown);
394 
395     /**
396      * @Description Get register callback objects
397      *
398      * @return const WifiEventCallback& - register sta callback objects
399      */
400     const WifiEventCallback &GetCallbackInst(const std::string &ifaceName) const;
401 
402     /**
403      * @Description Get register callback objects for death receiver
404      *
405      * @return const std::function<void(int)>& - register death callback objects
406      */
407     const std::function<void(int)> &GetDeathCallbackInst(void) const;
408 
409     /**
410      * @Description Register the native process callback.
411      *
412      * @param callback
413      * @return WifiErrorNo
414      */
415     WifiErrorNo RegisterNativeProcessCallback(const std::function<void(int)> &callback);
416 
417 private:
418     WifiEventCallback mStaCallback[2];
419     std::function<void(int)> mDeathCallback;
420 };
421 }  // namespace Wifi
422 }  // namespace OHOS
423 
424 #endif