1094332d3Sopenharmony_ci/*
2094332d3Sopenharmony_ci * Copyright (c) 2021-2023 Huawei Device Co., Ltd.
3094332d3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4094332d3Sopenharmony_ci * you may not use this file except in compliance with the License.
5094332d3Sopenharmony_ci * You may obtain a copy of the License at
6094332d3Sopenharmony_ci *
7094332d3Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8094332d3Sopenharmony_ci *
9094332d3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10094332d3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11094332d3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12094332d3Sopenharmony_ci * See the License for the specific language governing permissions and
13094332d3Sopenharmony_ci * limitations under the License.
14094332d3Sopenharmony_ci */
15094332d3Sopenharmony_ci
16094332d3Sopenharmony_ci#ifndef WIFI_DRIVER_CLIENT_H
17094332d3Sopenharmony_ci#define WIFI_DRIVER_CLIENT_H
18094332d3Sopenharmony_ci
19094332d3Sopenharmony_ci#include <stdint.h>
20094332d3Sopenharmony_ci#include <stdbool.h>
21094332d3Sopenharmony_ci
22094332d3Sopenharmony_ci#ifdef __cplusplus
23094332d3Sopenharmony_ci#if __cplusplus
24094332d3Sopenharmony_ciextern "C" {
25094332d3Sopenharmony_ci#endif
26094332d3Sopenharmony_ci#endif
27094332d3Sopenharmony_ci
28094332d3Sopenharmony_ci#undef LOG_TAG
29094332d3Sopenharmony_ci#define LOG_TAG "HDF_WIFI_CORE"
30094332d3Sopenharmony_ci#undef LOG_DOMAIN
31094332d3Sopenharmony_ci#define LOG_DOMAIN 0xD001566
32094332d3Sopenharmony_ci
33094332d3Sopenharmony_ci#ifndef IFNAMSIZ
34094332d3Sopenharmony_ci#define IFNAMSIZ 16
35094332d3Sopenharmony_ci#endif
36094332d3Sopenharmony_ci#define ETH_ADDR_LEN 6
37094332d3Sopenharmony_ci#define WIFI_24G_CHANNEL_NUM 14
38094332d3Sopenharmony_ci#define WIFI_MAX_CHANNEL_NUM 24
39094332d3Sopenharmony_ci#define IEEE80211G_RATES_NUM 12
40094332d3Sopenharmony_ci#define IEEE80211B_RATES_NUM 4
41094332d3Sopenharmony_ci#define IEEE80211A_RATES_NUM 8
42094332d3Sopenharmony_ci#define SIGNAL_LEVEL_CONFFICIENT 100
43094332d3Sopenharmony_ci
44094332d3Sopenharmony_ci#define WIFI_POWER_MODE_SLEEPING 0
45094332d3Sopenharmony_ci#define WIFI_POWER_MODE_GENERAL 1
46094332d3Sopenharmony_ci#define WIFI_POWER_MODE_THROUGH_WALL 2
47094332d3Sopenharmony_ci#define WIFI_POWER_MODE_NUM 3
48094332d3Sopenharmony_ci
49094332d3Sopenharmony_ci#define INIT_SCAN_RES_NUM 200
50094332d3Sopenharmony_ci#define MAX_SSID_LEN 33 // 32 + \0
51094332d3Sopenharmony_ci#define MAX_BUF_LEN 32
52094332d3Sopenharmony_ci
53094332d3Sopenharmony_citypedef enum {
54094332d3Sopenharmony_ci    CMD_CLOSE_GO_CAC,
55094332d3Sopenharmony_ci    CMD_SET_GO_CSA_CHANNEL,
56094332d3Sopenharmony_ci    CMD_SET_GO_RADAR_DETECT,
57094332d3Sopenharmony_ci    CMD_ID_MCC_STA_P2P_QUOTA_TIME,
58094332d3Sopenharmony_ci    CMD_ID_CTRL_ROAM_CHANNEL,
59094332d3Sopenharmony_ci    CMD_ID_RX_REMAIN_ON_CHANNEL,
60094332d3Sopenharmony_ci    CMD_ID_INSTALL_WLAN_KEY,
61094332d3Sopenharmony_ci} ProjectionScreenCmd;
62094332d3Sopenharmony_ci
63094332d3Sopenharmony_ci/* common related interface */
64094332d3Sopenharmony_cienum WifiDriverClientResultCode {
65094332d3Sopenharmony_ci    RET_CODE_SUCCESS = 0,
66094332d3Sopenharmony_ci    RET_CODE_FAILURE = -1,
67094332d3Sopenharmony_ci    RET_CODE_NOT_SUPPORT = -2,
68094332d3Sopenharmony_ci    RET_CODE_INVALID_PARAM = -3,
69094332d3Sopenharmony_ci    RET_CODE_MISUSE = -4, /* incorrectly API used */
70094332d3Sopenharmony_ci    RET_CODE_NOT_AVAILABLE = -5,
71094332d3Sopenharmony_ci    RET_CODE_NOMEM = -6,
72094332d3Sopenharmony_ci    RET_CODE_UNKNOW = -7,
73094332d3Sopenharmony_ci    RET_CODE_DEVICE_BUSY = -16,
74094332d3Sopenharmony_ci    RET_CODE_NETDOWN = -211,
75094332d3Sopenharmony_ci};
76094332d3Sopenharmony_ci
77094332d3Sopenharmony_cienum WifiIfType {
78094332d3Sopenharmony_ci    WIFI_IFTYPE_UNSPECIFIED,
79094332d3Sopenharmony_ci    WIFI_IFTYPE_ADHOC,
80094332d3Sopenharmony_ci    WIFI_IFTYPE_STATION,
81094332d3Sopenharmony_ci    WIFI_IFTYPE_AP,
82094332d3Sopenharmony_ci    WIFI_IFTYPE_AP_VLAN,
83094332d3Sopenharmony_ci    WIFI_IFTYPE_WDS,
84094332d3Sopenharmony_ci    WIFI_IFTYPE_MONITOR,
85094332d3Sopenharmony_ci    WIFI_IFTYPE_MESH_POINT,
86094332d3Sopenharmony_ci    WIFI_IFTYPE_P2P_CLIENT,
87094332d3Sopenharmony_ci    WIFI_IFTYPE_P2P_GO,
88094332d3Sopenharmony_ci    WIFI_IFTYPE_P2P_DEVICE,
89094332d3Sopenharmony_ci    WIFI_IFTYPE_CHBA,
90094332d3Sopenharmony_ci    WIFI_IFTYPE_MAX,
91094332d3Sopenharmony_ci};
92094332d3Sopenharmony_ci
93094332d3Sopenharmony_citypedef enum {
94094332d3Sopenharmony_ci    WIFI_EVENT_NEW_STA = 0,
95094332d3Sopenharmony_ci    WIFI_EVENT_DEL_STA,
96094332d3Sopenharmony_ci    WIFI_EVENT_RX_MGMT,
97094332d3Sopenharmony_ci    WIFI_EVENT_TX_STATUS,
98094332d3Sopenharmony_ci    WIFI_EVENT_SCAN_DONE,
99094332d3Sopenharmony_ci    WIFI_EVENT_SCAN_RESULT = 5,
100094332d3Sopenharmony_ci    WIFI_EVENT_CONNECT_RESULT,
101094332d3Sopenharmony_ci    WIFI_EVENT_DISCONNECT,
102094332d3Sopenharmony_ci    WIFI_EVENT_MESH_CLOSE,
103094332d3Sopenharmony_ci    WIFI_EVENT_NEW_PEER_CANDIDATE,
104094332d3Sopenharmony_ci    WIFI_EVENT_REMAIN_ON_CHANNEL = 10,
105094332d3Sopenharmony_ci    WIFI_EVENT_CANCEL_REMAIN_ON_CHANNEL,
106094332d3Sopenharmony_ci    WIFI_EVENT_CHANNEL_SWITCH,
107094332d3Sopenharmony_ci    WIFI_EVENT_EAPOL_RECV,
108094332d3Sopenharmony_ci    WIFI_EVENT_TIMEOUT_DISCONN,
109094332d3Sopenharmony_ci    WIFI_EVENT_RESET_DRIVER = 15,
110094332d3Sopenharmony_ci    WIFI_EVENT_SCAN_RESULTS,
111094332d3Sopenharmony_ci    WIFI_EVENT_SCAN_ABORTED,
112094332d3Sopenharmony_ci    WIFI_EVENT_BUTT,
113094332d3Sopenharmony_ci    WIFI_EVENT_ACTION_RECEIVED,
114094332d3Sopenharmony_ci    WIFI_EVENT_DATA_FRAME_RECEIVED,
115094332d3Sopenharmony_ci} WifiEventType;
116094332d3Sopenharmony_ci
117094332d3Sopenharmony_citypedef enum {
118094332d3Sopenharmony_ci    CMD_HID2D_MODULE_INIT,
119094332d3Sopenharmony_ci    CMD_SET_BATTERY_LEVEL,
120094332d3Sopenharmony_ci    CMD_SET_SUPP_COEX_CHAN_LIST,
121094332d3Sopenharmony_ci    CMD_SET_CHAN_ADJUST
122094332d3Sopenharmony_ci} Hid2dCmdType;
123094332d3Sopenharmony_ci
124094332d3Sopenharmony_citypedef struct {
125094332d3Sopenharmony_ci    int32_t reassoc;
126094332d3Sopenharmony_ci    uint32_t ieLen;
127094332d3Sopenharmony_ci    uint8_t *ie;
128094332d3Sopenharmony_ci    uint8_t *macAddr;
129094332d3Sopenharmony_ci    uint8_t resv[2];
130094332d3Sopenharmony_ci} WifiNewStaInfo;
131094332d3Sopenharmony_ci
132094332d3Sopenharmony_citypedef struct {
133094332d3Sopenharmony_ci    uint8_t *buf;
134094332d3Sopenharmony_ci    uint32_t len;
135094332d3Sopenharmony_ci    int32_t sigMbm;
136094332d3Sopenharmony_ci    int32_t freq;
137094332d3Sopenharmony_ci} WifiRxMgmt;
138094332d3Sopenharmony_ci
139094332d3Sopenharmony_citypedef struct {
140094332d3Sopenharmony_ci    uint8_t *buf;
141094332d3Sopenharmony_ci    uint32_t len;
142094332d3Sopenharmony_ci    uint8_t ack;
143094332d3Sopenharmony_ci    uint8_t resv[3];
144094332d3Sopenharmony_ci} WifiTxStatus;
145094332d3Sopenharmony_ci
146094332d3Sopenharmony_citypedef struct {
147094332d3Sopenharmony_ci    uint32_t flags;
148094332d3Sopenharmony_ci    uint8_t *bssid;
149094332d3Sopenharmony_ci    uint16_t caps;
150094332d3Sopenharmony_ci    uint32_t freq;
151094332d3Sopenharmony_ci    uint16_t beaconInt;
152094332d3Sopenharmony_ci    int32_t qual;
153094332d3Sopenharmony_ci    int32_t level;
154094332d3Sopenharmony_ci    uint32_t age;
155094332d3Sopenharmony_ci    uint64_t tsf;
156094332d3Sopenharmony_ci    uint32_t ieLen;
157094332d3Sopenharmony_ci    uint32_t beaconIeLen;
158094332d3Sopenharmony_ci    uint8_t *variable;
159094332d3Sopenharmony_ci    uint8_t *ie;
160094332d3Sopenharmony_ci    uint8_t *beaconIe;
161094332d3Sopenharmony_ci} WifiScanResult;
162094332d3Sopenharmony_ci
163094332d3Sopenharmony_citypedef struct {
164094332d3Sopenharmony_ci    WifiScanResult *scanResult;
165094332d3Sopenharmony_ci    uint32_t scanResultCapacity;
166094332d3Sopenharmony_ci    uint32_t num;
167094332d3Sopenharmony_ci} WifiScanResults;
168094332d3Sopenharmony_ci
169094332d3Sopenharmony_citypedef struct {
170094332d3Sopenharmony_ci    uint8_t *reqIe;
171094332d3Sopenharmony_ci    uint32_t reqIeLen;
172094332d3Sopenharmony_ci    uint8_t *respIe;
173094332d3Sopenharmony_ci    uint32_t respIeLen;
174094332d3Sopenharmony_ci    uint8_t *bssid;
175094332d3Sopenharmony_ci    uint8_t rsv[2];
176094332d3Sopenharmony_ci    uint16_t status;
177094332d3Sopenharmony_ci    uint16_t freq;
178094332d3Sopenharmony_ci} WifiConnectResult;
179094332d3Sopenharmony_ci
180094332d3Sopenharmony_citypedef struct {
181094332d3Sopenharmony_ci    uint8_t *ie;
182094332d3Sopenharmony_ci    uint16_t reason;
183094332d3Sopenharmony_ci    uint8_t rsv[2];
184094332d3Sopenharmony_ci    uint32_t ieLen;
185094332d3Sopenharmony_ci} WifiDisconnect;
186094332d3Sopenharmony_ci
187094332d3Sopenharmony_citypedef struct {
188094332d3Sopenharmony_ci    uint8_t id;
189094332d3Sopenharmony_ci    int32_t suite;
190094332d3Sopenharmony_ci    uint8_t addr[ETH_ADDR_LEN];
191094332d3Sopenharmony_ci    uint32_t len;
192094332d3Sopenharmony_ci    uint8_t buf[MAX_BUF_LEN];
193094332d3Sopenharmony_ci} InstallWlanParam;
194094332d3Sopenharmony_ci
195094332d3Sopenharmony_cienum WifiClientType {
196094332d3Sopenharmony_ci    /* 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<6 | 1<<7 | 1<<10 | 1<<11 | 1<<13 */
197094332d3Sopenharmony_ci    WIFI_KERNEL_TO_WPA_CLIENT = 11519,
198094332d3Sopenharmony_ci    /* 1<<20 | 1<<19 | 1<<17 | 1<<16 | 1<<15 | 1<<5 | 1<<4 */
199094332d3Sopenharmony_ci    WIFI_KERNEL_TO_HAL_CLIENT = 1802288,
200094332d3Sopenharmony_ci    WIFI_CLIENT_BUTT
201094332d3Sopenharmony_ci};
202094332d3Sopenharmony_ci
203094332d3Sopenharmony_citypedef int32_t (*OnReceiveFunc)(uint32_t event, void *data, const char *ifName);
204094332d3Sopenharmony_citypedef int32_t (*Hid2dCallback)(const uint8_t *recvMsg, uint32_t recvMsgLen);
205094332d3Sopenharmony_ci
206094332d3Sopenharmony_ciint32_t WifiRegisterEventCallback(OnReceiveFunc onRecFunc, uint32_t eventType, const char *ifName);
207094332d3Sopenharmony_civoid WifiUnregisterEventCallback(OnReceiveFunc onRecFunc, uint32_t eventType, const char *ifName);
208094332d3Sopenharmony_ciint32_t WifiRegisterHid2dCallback(Hid2dCallback func, const char *ifName);
209094332d3Sopenharmony_civoid WifiUnregisterHid2dCallback(Hid2dCallback func, const char *ifName);
210094332d3Sopenharmony_ci
211094332d3Sopenharmony_ci/* hal related interface */
212094332d3Sopenharmony_ci#define MAX_WLAN_DEVICE 3
213094332d3Sopenharmony_ci#define MAX_CHANNEL_NUM 14
214094332d3Sopenharmony_ci
215094332d3Sopenharmony_cienum Ieee80211Band {
216094332d3Sopenharmony_ci    IEEE80211_BAND_2GHZ,  /**< 2.4 GHz */
217094332d3Sopenharmony_ci    IEEE80211_BAND_5GHZ,  /**< 5 GHz */
218094332d3Sopenharmony_ci    IEEE80211_NUM_BANDS   /**< Reserved */
219094332d3Sopenharmony_ci};
220094332d3Sopenharmony_ci
221094332d3Sopenharmony_cistruct NetworkInfo {
222094332d3Sopenharmony_ci    char name[IFNAMSIZ];
223094332d3Sopenharmony_ci    uint8_t supportMode[WIFI_IFTYPE_MAX];
224094332d3Sopenharmony_ci};
225094332d3Sopenharmony_ci
226094332d3Sopenharmony_ci#define MAX_IFACE_NUM 20
227094332d3Sopenharmony_ci
228094332d3Sopenharmony_cistruct NetworkInfoResult {
229094332d3Sopenharmony_ci    uint32_t nums;
230094332d3Sopenharmony_ci    struct NetworkInfo infos[MAX_IFACE_NUM];
231094332d3Sopenharmony_ci};
232094332d3Sopenharmony_ci
233094332d3Sopenharmony_cistruct FreqInfoResult {
234094332d3Sopenharmony_ci    int32_t band;
235094332d3Sopenharmony_ci    uint32_t nums;
236094332d3Sopenharmony_ci    uint32_t *freqs;
237094332d3Sopenharmony_ci    uint32_t *txPower;
238094332d3Sopenharmony_ci};
239094332d3Sopenharmony_ci
240094332d3Sopenharmony_ci#define MAX_ASSOC_STA_NUM 8
241094332d3Sopenharmony_ci
242094332d3Sopenharmony_cistruct AssocStaInfo {
243094332d3Sopenharmony_ci    uint8_t mac[ETH_ADDR_LEN];  /**< MAC address of the STA */
244094332d3Sopenharmony_ci};
245094332d3Sopenharmony_ci
246094332d3Sopenharmony_cistruct AssocStaInfoResult {
247094332d3Sopenharmony_ci    uint32_t num;
248094332d3Sopenharmony_ci    struct AssocStaInfo infos[MAX_ASSOC_STA_NUM];
249094332d3Sopenharmony_ci};
250094332d3Sopenharmony_ci
251094332d3Sopenharmony_cistruct NetDeviceInfo {
252094332d3Sopenharmony_ci    uint32_t index;
253094332d3Sopenharmony_ci    char ifName[IFNAMSIZ];
254094332d3Sopenharmony_ci    uint8_t iftype;
255094332d3Sopenharmony_ci    uint8_t mac[ETH_ADDR_LEN];
256094332d3Sopenharmony_ci};
257094332d3Sopenharmony_ci
258094332d3Sopenharmony_ci#define MAX_NETDEVICE_COUNT 20
259094332d3Sopenharmony_ci
260094332d3Sopenharmony_cistruct NetDeviceInfoResult {
261094332d3Sopenharmony_ci    struct NetDeviceInfo deviceInfos[MAX_NETDEVICE_COUNT];
262094332d3Sopenharmony_ci};
263094332d3Sopenharmony_ci
264094332d3Sopenharmony_cistruct MeasParam {
265094332d3Sopenharmony_ci    int32_t channelId;
266094332d3Sopenharmony_ci    int32_t measTime;
267094332d3Sopenharmony_ci};
268094332d3Sopenharmony_ci
269094332d3Sopenharmony_cistruct MeasResult {
270094332d3Sopenharmony_ci    int32_t channelId;
271094332d3Sopenharmony_ci    int32_t chload;
272094332d3Sopenharmony_ci    int32_t noise;
273094332d3Sopenharmony_ci};
274094332d3Sopenharmony_ci
275094332d3Sopenharmony_citypedef struct {
276094332d3Sopenharmony_ci    int32_t cmdId;
277094332d3Sopenharmony_ci    uint32_t bufLen;
278094332d3Sopenharmony_ci    int8_t buf[0];
279094332d3Sopenharmony_ci} ProjectionScreenParam;
280094332d3Sopenharmony_ci
281094332d3Sopenharmony_citypedef struct {
282094332d3Sopenharmony_ci    uint32_t rxRate;
283094332d3Sopenharmony_ci    uint32_t txRate;
284094332d3Sopenharmony_ci    uint32_t flags; /* bitfield of STA_DRV_DATA_* */
285094332d3Sopenharmony_ci    uint8_t rxVhtmcs;
286094332d3Sopenharmony_ci    uint8_t txVhtmcs;
287094332d3Sopenharmony_ci    uint8_t rxMcs;
288094332d3Sopenharmony_ci    uint8_t txMcs;
289094332d3Sopenharmony_ci    uint8_t rxVhtNss;
290094332d3Sopenharmony_ci    uint8_t txVhtNss;
291094332d3Sopenharmony_ci} __attribute__ ((aligned(8))) StationInfo;
292094332d3Sopenharmony_ci
293094332d3Sopenharmony_ci#define BSS_STATUS_ASSOCIATED 1
294094332d3Sopenharmony_citypedef struct {
295094332d3Sopenharmony_ci    uint8_t associatedBssid[ETH_ADDR_LEN];
296094332d3Sopenharmony_ci    uint32_t associatedFreq;
297094332d3Sopenharmony_ci} AssociatedInfo;
298094332d3Sopenharmony_ci
299094332d3Sopenharmony_cistruct SignalResult {
300094332d3Sopenharmony_ci    int32_t currentRssi;
301094332d3Sopenharmony_ci    int32_t associatedFreq;
302094332d3Sopenharmony_ci    int32_t txBitrate;
303094332d3Sopenharmony_ci    int32_t rxBitrate;
304094332d3Sopenharmony_ci    int32_t currentNoise;
305094332d3Sopenharmony_ci    int32_t currentSnr;
306094332d3Sopenharmony_ci    int32_t currentChload;
307094332d3Sopenharmony_ci    int32_t currentUlDelay;
308094332d3Sopenharmony_ci    int32_t currentTxBytes;
309094332d3Sopenharmony_ci    int32_t currentRxBytes;
310094332d3Sopenharmony_ci    int32_t currentTxFailed;
311094332d3Sopenharmony_ci    int32_t currentTxPackets;
312094332d3Sopenharmony_ci    int32_t currentRxPackets;
313094332d3Sopenharmony_ci};
314094332d3Sopenharmony_ci
315094332d3Sopenharmony_citypedef struct {
316094332d3Sopenharmony_ci    uint8_t ssid[MAX_SSID_LEN];
317094332d3Sopenharmony_ci    uint32_t ssidLen;
318094332d3Sopenharmony_ci} WifiDriverScanSsid;
319094332d3Sopenharmony_ci
320094332d3Sopenharmony_citypedef struct {
321094332d3Sopenharmony_ci    bool isHidden;
322094332d3Sopenharmony_ci    int32_t *freqs;
323094332d3Sopenharmony_ci    uint32_t freqsLen;
324094332d3Sopenharmony_ci    WifiDriverScanSsid ssid;
325094332d3Sopenharmony_ci} WifiPnoNetwork;
326094332d3Sopenharmony_ci
327094332d3Sopenharmony_citypedef struct {
328094332d3Sopenharmony_ci    int32_t min2gRssi;
329094332d3Sopenharmony_ci    int32_t min5gRssi;
330094332d3Sopenharmony_ci    int32_t scanIntervalMs;
331094332d3Sopenharmony_ci    int32_t scanIterations;
332094332d3Sopenharmony_ci    WifiPnoNetwork *pnoNetworks;
333094332d3Sopenharmony_ci    uint32_t pnoNetworksLen;
334094332d3Sopenharmony_ci} WifiPnoSettings;
335094332d3Sopenharmony_ci
336094332d3Sopenharmony_ciint32_t WifiDriverClientInit(void);
337094332d3Sopenharmony_civoid WifiDriverClientDeinit(void);
338094332d3Sopenharmony_ci
339094332d3Sopenharmony_ciint32_t GetUsableNetworkInfo(struct NetworkInfoResult *result);
340094332d3Sopenharmony_ciint32_t IsSupportCombo(uint8_t *isSupportCombo);
341094332d3Sopenharmony_ciint32_t GetComboInfo(uint64_t *comboInfo, uint32_t size);
342094332d3Sopenharmony_ciint32_t SetMacAddr(const char *ifName, unsigned char *mac, uint8_t len);
343094332d3Sopenharmony_ciint32_t GetDevMacAddr(const char *ifName, int32_t type, uint8_t *mac, uint8_t len);
344094332d3Sopenharmony_ciint32_t GetValidFreqByBand(const char *ifName, int32_t band,
345094332d3Sopenharmony_ci    struct FreqInfoResult *result, uint32_t size);
346094332d3Sopenharmony_ciint32_t SetTxPower(const char *ifName, int32_t power);
347094332d3Sopenharmony_ciint32_t GetAssociatedStas(const char *ifName, struct AssocStaInfoResult *result);
348094332d3Sopenharmony_ciint32_t WifiSetCountryCode(const char *ifName, const char *code, uint32_t len);
349094332d3Sopenharmony_ciint32_t SetScanMacAddr(const char *ifName, uint8_t *scanMac, uint8_t len);
350094332d3Sopenharmony_ciint32_t AcquireChipId(const char *ifName, uint8_t *chipId);
351094332d3Sopenharmony_ciint32_t GetIfNamesByChipId(const uint8_t chipId, char **ifNames, uint32_t *num);
352094332d3Sopenharmony_ciint32_t SetResetDriver(const uint8_t chipId, const char *ifName);
353094332d3Sopenharmony_ciint32_t GetNetDeviceInfo(struct NetDeviceInfoResult *netDeviceInfoResult);
354094332d3Sopenharmony_ciint32_t GetCurrentPowerMode(const char *ifName, uint8_t *mode);
355094332d3Sopenharmony_ciint32_t SetPowerMode(const char *ifName, uint8_t mode);
356094332d3Sopenharmony_ciint32_t StartChannelMeas(const char *ifName, const struct MeasParam *measParam);
357094332d3Sopenharmony_ciint32_t GetChannelMeasResult(const char *ifName, struct MeasResult *measResult);
358094332d3Sopenharmony_ciint32_t SetProjectionScreenParam(const char *ifName, const ProjectionScreenParam *param);
359094332d3Sopenharmony_ciint32_t SendCmdIoctl(const char *ifName, int32_t cmdId, const int8_t *paramBuf, uint32_t paramBufLen);
360094332d3Sopenharmony_ciint32_t GetStationInfo(const char *ifName, StationInfo *info, const uint8_t *mac, uint32_t macLen);
361094332d3Sopenharmony_ciint32_t WifiStartPnoScan(const char *ifName, const WifiPnoSettings *pnoSettings);
362094332d3Sopenharmony_ciint32_t WifiStopPnoScan(const char *ifName);
363094332d3Sopenharmony_ciint32_t WifiGetSignalPollInfo(const char *ifName, struct SignalResult *signalResult);
364094332d3Sopenharmony_ciint32_t ClientGetApBandwidth(const char *ifName, uint8_t *bandwidth);
365094332d3Sopenharmony_ciint32_t WifiSendActionFrame(const char *ifName, uint32_t txChannel, const uint8_t *frameData, uint32_t frameDataLen);
366094332d3Sopenharmony_ciint32_t WifiRegisterActionFrameReceiver(const char *ifName, const uint8_t *match, uint32_t matchLen);
367094332d3Sopenharmony_ciint32_t WifiSetPowerSaveMode(const char *ifName, int32_t frequency, int32_t mode);
368094332d3Sopenharmony_ciint32_t WifiSetDpiMarkRule(int32_t uid, int32_t protocol, int32_t enable);
369094332d3Sopenharmony_ciint32_t WifiInstallWlanExtParam(const char *ifName, const InstallWlanParam *param);
370094332d3Sopenharmony_ci
371094332d3Sopenharmony_ci/* wpa related interface */
372094332d3Sopenharmony_ci#define MAX_NR_CIPHER_SUITES 5
373094332d3Sopenharmony_ci#define MAX_NR_AKM_SUITES 2
374094332d3Sopenharmony_ci
375094332d3Sopenharmony_citypedef struct {
376094332d3Sopenharmony_ci    int32_t mode;
377094332d3Sopenharmony_ci    int32_t freq;
378094332d3Sopenharmony_ci    int32_t channel;
379094332d3Sopenharmony_ci
380094332d3Sopenharmony_ci    /* for HT */
381094332d3Sopenharmony_ci    int32_t htEnabled;
382094332d3Sopenharmony_ci
383094332d3Sopenharmony_ci    /*
384094332d3Sopenharmony_ci     * 0 = HT40 disabled, -1 = HT40 enabled,
385094332d3Sopenharmony_ci     * secondary channel below primary, 1 = HT40
386094332d3Sopenharmony_ci     * enabled, secondary channel above primary
387094332d3Sopenharmony_ci     */
388094332d3Sopenharmony_ci    int32_t secChannelOffset;
389094332d3Sopenharmony_ci
390094332d3Sopenharmony_ci    /* for VHT */
391094332d3Sopenharmony_ci    int32_t vhtEnabled;
392094332d3Sopenharmony_ci
393094332d3Sopenharmony_ci    /*
394094332d3Sopenharmony_ci     * valid for both HT and VHT, center_freq2 is non-zero
395094332d3Sopenharmony_ci     * only for bandwidth 80 and an 80+80 channel
396094332d3Sopenharmony_ci     */
397094332d3Sopenharmony_ci    int32_t centerFreq1;
398094332d3Sopenharmony_ci    int32_t centerFreq2;
399094332d3Sopenharmony_ci    int32_t bandwidth;
400094332d3Sopenharmony_ci    uint8_t band;
401094332d3Sopenharmony_ci} WifiFreqParams;
402094332d3Sopenharmony_ci
403094332d3Sopenharmony_citypedef struct {
404094332d3Sopenharmony_ci    uint32_t headLen;
405094332d3Sopenharmony_ci    uint32_t tailLen;
406094332d3Sopenharmony_ci    uint8_t *head;
407094332d3Sopenharmony_ci    uint8_t *tail;
408094332d3Sopenharmony_ci} WifiBeaconData;
409094332d3Sopenharmony_ci
410094332d3Sopenharmony_citypedef struct {
411094332d3Sopenharmony_ci    WifiFreqParams freqParams;
412094332d3Sopenharmony_ci    WifiBeaconData beaconData;
413094332d3Sopenharmony_ci    uint32_t ssidLen;
414094332d3Sopenharmony_ci    int32_t beaconInterval;
415094332d3Sopenharmony_ci    int32_t dtimPeriod;
416094332d3Sopenharmony_ci    uint8_t *ssid;
417094332d3Sopenharmony_ci    uint8_t hiddenSsid;
418094332d3Sopenharmony_ci    uint8_t authType;
419094332d3Sopenharmony_ci    uint32_t meshSsidLen;
420094332d3Sopenharmony_ci    uint8_t *meshSsid;
421094332d3Sopenharmony_ci} WifiApSetting;
422094332d3Sopenharmony_ci
423094332d3Sopenharmony_citypedef struct {
424094332d3Sopenharmony_ci    uint8_t *buf;
425094332d3Sopenharmony_ci    uint32_t len;
426094332d3Sopenharmony_ci} WifiRxEapol;
427094332d3Sopenharmony_ci
428094332d3Sopenharmony_citypedef struct {
429094332d3Sopenharmony_ci    uint32_t freq;
430094332d3Sopenharmony_ci    uint32_t dataLen;
431094332d3Sopenharmony_ci    uint8_t *data;
432094332d3Sopenharmony_ci    uint64_t *cookie;
433094332d3Sopenharmony_ci} WifiMlmeData;
434094332d3Sopenharmony_ci
435094332d3Sopenharmony_citypedef struct {
436094332d3Sopenharmony_ci    int32_t type;
437094332d3Sopenharmony_ci    uint32_t keyIdx;
438094332d3Sopenharmony_ci    uint32_t keyLen;
439094332d3Sopenharmony_ci    uint32_t seqLen;
440094332d3Sopenharmony_ci    uint32_t cipher;
441094332d3Sopenharmony_ci    uint8_t *addr;
442094332d3Sopenharmony_ci    uint8_t *key;
443094332d3Sopenharmony_ci    uint8_t *seq;
444094332d3Sopenharmony_ci    uint8_t def;
445094332d3Sopenharmony_ci    uint8_t defMgmt;
446094332d3Sopenharmony_ci    uint8_t defaultTypes;
447094332d3Sopenharmony_ci    uint8_t resv;
448094332d3Sopenharmony_ci} WifiKeyExt;
449094332d3Sopenharmony_ci
450094332d3Sopenharmony_citypedef struct {
451094332d3Sopenharmony_ci    uint8_t bssid[ETH_ADDR_LEN];
452094332d3Sopenharmony_ci    uint8_t iftype;
453094332d3Sopenharmony_ci    uint8_t resv;
454094332d3Sopenharmony_ci} WifiSetMode;
455094332d3Sopenharmony_ci
456094332d3Sopenharmony_citypedef struct {
457094332d3Sopenharmony_ci    uint16_t channel;
458094332d3Sopenharmony_ci    uint32_t freq;
459094332d3Sopenharmony_ci    uint32_t flags;
460094332d3Sopenharmony_ci} WifiIeee80211Channel;
461094332d3Sopenharmony_ci
462094332d3Sopenharmony_citypedef struct {
463094332d3Sopenharmony_ci    int32_t channelNum;          /**< Number of channels */
464094332d3Sopenharmony_ci    WifiIeee80211Channel iee80211Channel[WIFI_MAX_CHANNEL_NUM]; /**< WLAN channel structures */
465094332d3Sopenharmony_ci}WlanBands;
466094332d3Sopenharmony_ci
467094332d3Sopenharmony_citypedef struct {
468094332d3Sopenharmony_ci    int32_t channelNum;
469094332d3Sopenharmony_ci    uint16_t bitrate[12];
470094332d3Sopenharmony_ci    uint16_t htCapab;
471094332d3Sopenharmony_ci    uint8_t resv[2];
472094332d3Sopenharmony_ci    WlanBands bands[IEEE80211_NUM_BANDS];
473094332d3Sopenharmony_ci} WifiHwFeatureData;
474094332d3Sopenharmony_ci
475094332d3Sopenharmony_citypedef struct {
476094332d3Sopenharmony_ci    WifiDriverScanSsid *ssids;
477094332d3Sopenharmony_ci    int32_t *freqs;
478094332d3Sopenharmony_ci    uint8_t *extraIes;
479094332d3Sopenharmony_ci    uint8_t *bssid;
480094332d3Sopenharmony_ci    uint8_t numSsids;
481094332d3Sopenharmony_ci    uint8_t numFreqs;
482094332d3Sopenharmony_ci    uint8_t prefixSsidScanFlag;
483094332d3Sopenharmony_ci    uint8_t fastConnectFlag;
484094332d3Sopenharmony_ci    int32_t extraIesLen;
485094332d3Sopenharmony_ci} WifiScan;
486094332d3Sopenharmony_ci
487094332d3Sopenharmony_citypedef struct {
488094332d3Sopenharmony_ci    uint32_t wpaVersions;
489094332d3Sopenharmony_ci    uint32_t cipherGroup;
490094332d3Sopenharmony_ci    int32_t nCiphersPairwise;
491094332d3Sopenharmony_ci    uint32_t ciphersPairwise[MAX_NR_CIPHER_SUITES];
492094332d3Sopenharmony_ci    int32_t nAkmSuites;
493094332d3Sopenharmony_ci    uint32_t akmSuites[MAX_NR_AKM_SUITES];
494094332d3Sopenharmony_ci} WifiCryptoSetting;
495094332d3Sopenharmony_ci
496094332d3Sopenharmony_citypedef struct {
497094332d3Sopenharmony_ci    uint8_t *bssid;
498094332d3Sopenharmony_ci    uint8_t *ssid;
499094332d3Sopenharmony_ci    uint8_t *ie;
500094332d3Sopenharmony_ci    uint8_t *key;
501094332d3Sopenharmony_ci    uint8_t authType;
502094332d3Sopenharmony_ci    uint8_t privacy;
503094332d3Sopenharmony_ci    uint8_t keyLen;
504094332d3Sopenharmony_ci    uint8_t keyIdx;
505094332d3Sopenharmony_ci    uint8_t mfp;
506094332d3Sopenharmony_ci    uint8_t rsv[3];
507094332d3Sopenharmony_ci    uint32_t freq;
508094332d3Sopenharmony_ci    uint32_t ssidLen;
509094332d3Sopenharmony_ci    uint32_t ieLen;
510094332d3Sopenharmony_ci    WifiCryptoSetting *crypto;
511094332d3Sopenharmony_ci} WifiAssociateParams;
512094332d3Sopenharmony_ci
513094332d3Sopenharmony_citypedef enum {
514094332d3Sopenharmony_ci    WIFI_PHY_MODE_11N = 0,
515094332d3Sopenharmony_ci    WIFI_PHY_MODE_11G = 1,
516094332d3Sopenharmony_ci    WIFI_PHY_MODE_11B = 2,
517094332d3Sopenharmony_ci    WIFI_PHY_MODE_BUTT
518094332d3Sopenharmony_ci} WifiPhyMode;
519094332d3Sopenharmony_ci
520094332d3Sopenharmony_citypedef struct {
521094332d3Sopenharmony_ci    uint8_t status;
522094332d3Sopenharmony_ci    enum WifiIfType ifType;
523094332d3Sopenharmony_ci    WifiPhyMode mode;
524094332d3Sopenharmony_ci} WifiSetNewDev;
525094332d3Sopenharmony_ci
526094332d3Sopenharmony_citypedef struct {
527094332d3Sopenharmony_ci    uint8_t dst[ETH_ADDR_LEN];
528094332d3Sopenharmony_ci    uint8_t src[ETH_ADDR_LEN];
529094332d3Sopenharmony_ci    uint8_t bssid[ETH_ADDR_LEN];
530094332d3Sopenharmony_ci    uint8_t *data;
531094332d3Sopenharmony_ci    uint32_t dataLen;
532094332d3Sopenharmony_ci    uint32_t freq;
533094332d3Sopenharmony_ci    uint32_t wait;
534094332d3Sopenharmony_ci    int32_t noCck;
535094332d3Sopenharmony_ci} WifiActionData;
536094332d3Sopenharmony_ci
537094332d3Sopenharmony_citypedef struct {
538094332d3Sopenharmony_ci    uint8_t *data;
539094332d3Sopenharmony_ci    uint32_t dataLen;
540094332d3Sopenharmony_ci} WifiDataFrame;
541094332d3Sopenharmony_ci
542094332d3Sopenharmony_citypedef struct {
543094332d3Sopenharmony_ci    uint32_t freq;
544094332d3Sopenharmony_ci    uint32_t duration;
545094332d3Sopenharmony_ci} WifiOnChannel;
546094332d3Sopenharmony_ci
547094332d3Sopenharmony_citypedef struct {
548094332d3Sopenharmony_ci    uint8_t ifName[IFNAMSIZ];
549094332d3Sopenharmony_ci    uint8_t type;
550094332d3Sopenharmony_ci} WifiIfAdd;
551094332d3Sopenharmony_ci
552094332d3Sopenharmony_citypedef struct {
553094332d3Sopenharmony_ci    uint8_t ifName[IFNAMSIZ];
554094332d3Sopenharmony_ci} WifiIfRemove;
555094332d3Sopenharmony_ci
556094332d3Sopenharmony_citypedef struct {
557094332d3Sopenharmony_ci    uint32_t ieLen;
558094332d3Sopenharmony_ci    uint8_t appIeType;
559094332d3Sopenharmony_ci    uint8_t rsv[3];
560094332d3Sopenharmony_ci    uint8_t *ie;
561094332d3Sopenharmony_ci} WifiAppIe;
562094332d3Sopenharmony_ci
563094332d3Sopenharmony_citypedef struct {
564094332d3Sopenharmony_ci    uint64_t drvFlags;
565094332d3Sopenharmony_ci} WifiGetDrvFlags;
566094332d3Sopenharmony_ci
567094332d3Sopenharmony_ciint32_t WifiEapolPacketSend(const char *ifName, const uint8_t *srcAddr, const uint8_t *dstAddr, uint8_t *buf,
568094332d3Sopenharmony_ci    uint32_t length);
569094332d3Sopenharmony_ciint32_t WifiEapolPacketReceive(const char *ifName, WifiRxEapol *rxEapol);
570094332d3Sopenharmony_ciint32_t WifiEapolEnable(const char *ifName);
571094332d3Sopenharmony_ciint32_t WifiEapolDisable(const char *ifName);
572094332d3Sopenharmony_ciint32_t WifiCmdSetAp(const char *ifName, WifiApSetting *apsettings);
573094332d3Sopenharmony_ciint32_t WifiCmdChangeBeacon(const char *ifName, WifiApSetting *apsettings);
574094332d3Sopenharmony_ciint32_t WifiCmdSendMlme(const char *ifName, WifiMlmeData *mlme);
575094332d3Sopenharmony_ciint32_t WifiCmdDelKey(const char *ifName, WifiKeyExt *keyExt);
576094332d3Sopenharmony_ciint32_t WifiCmdNewKey(const char *ifName, WifiKeyExt *keyExt);
577094332d3Sopenharmony_ciint32_t WifiCmdSetKey(const char *ifName, WifiKeyExt *keyExt);
578094332d3Sopenharmony_ciint32_t WifiCmdSetMode(const char *ifName, WifiSetMode *setMode);
579094332d3Sopenharmony_ciint32_t WifiCmdGetOwnMac(const char *ifName, char *buf, uint32_t len);
580094332d3Sopenharmony_ciint32_t WifiCmdGetHwFeature(const char *ifName, WifiHwFeatureData *hwFeatureData);
581094332d3Sopenharmony_ciint32_t WifiCmdScan(const char *ifName, WifiScan *scan);
582094332d3Sopenharmony_ciint32_t WifiCmdDisconnet(const char *ifName, int32_t reasonCode);
583094332d3Sopenharmony_ciint32_t WifiCmdAssoc(const char *ifName, WifiAssociateParams *assocParams);
584094332d3Sopenharmony_ciint32_t WifiCmdSetNetdev(const char *ifName, WifiSetNewDev *info);
585094332d3Sopenharmony_ciint32_t WifiCmdStaRemove(const char *ifName, const uint8_t *addr, uint32_t addrLen);
586094332d3Sopenharmony_ciint32_t WifiCmdSendAction(const char *ifName, WifiActionData *actionData);
587094332d3Sopenharmony_ciint32_t WifiCmdSetClient(uint32_t clientNum);
588094332d3Sopenharmony_ciint32_t WifiCmdProbeReqReport(const char *ifName, const int32_t *report);
589094332d3Sopenharmony_ciint32_t WifiCmdRemainOnChannel(const char *ifName, const WifiOnChannel *onChannel);
590094332d3Sopenharmony_ciint32_t WifiCmdCancelRemainOnChannel(const char *ifName);
591094332d3Sopenharmony_ciint32_t WifiCmdAddIf(const char *ifName, const WifiIfAdd *ifAdd);
592094332d3Sopenharmony_ciint32_t WifiCmdRemoveIf(const char *ifName, const WifiIfRemove *ifRemove);
593094332d3Sopenharmony_ciint32_t WifiCmdSetApWpsP2pIe(const char *ifName, const WifiAppIe *appIe);
594094332d3Sopenharmony_ciint32_t WifiCmdGetDrvFlags(const char *ifName, WifiGetDrvFlags *params);
595094332d3Sopenharmony_ci#ifdef __cplusplus
596094332d3Sopenharmony_ci#if __cplusplus
597094332d3Sopenharmony_ci}
598094332d3Sopenharmony_ci#endif
599094332d3Sopenharmony_ci#endif
600094332d3Sopenharmony_ci
601094332d3Sopenharmony_ci#endif /* end of wifi_driver_client.h */
602