1 /*
2  * Copyright (C) 2024 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 WPA_P2P_HAL_H
17 #define WPA_P2P_HAL_H
18 
19 #include <stdlib.h>
20 #include <string.h>
21 #include <malloc.h>
22 #include <stdint.h>
23 #include <pthread.h>
24 #include <sys/types.h>
25 #include "wpa_hal_p2p_struct.h"
26 #include "wpa_hal_struct.h"
27 #include "v1_1/iwpa_interface.h"
28 
29 #ifdef __cplusplus
30 extern "C" {
31 #endif
32 
33 #define P2P_PIN_KEYPAD 1
34 #define P2P_PIN_DISPLAY 2
35 #define P2P_GROUP_IFACE_MAX_LENGTH 128
36 #define P2P_INTERFACE_CREATED "P2P-INTERFACE-CREATED "
37 #define CTRL_EVENT_DISCONNECTED "CTRL-EVENT-DISCONNECTED"
38 
39 typedef struct StWifiWpaP2pInterface WifiWpaP2pInterface;
40 struct StWifiWpaP2pInterface {
41     char ifName[WIFI_IFACE_NAME_MAXLEN];
42 
43     P2pSupplicantErrCode (*wpaP2pCliCmdSetWpsName)(WifiWpaP2pInterface *p, const char *name);
44     P2pSupplicantErrCode (*wpaP2pCliCmdSetWpsDeviceType)(WifiWpaP2pInterface *p, const char *type);
45     P2pSupplicantErrCode (*wpaP2pCliCmdSetWpsSecDeviceType)(WifiWpaP2pInterface *p, const char *type);
46     P2pSupplicantErrCode (*wpaP2pCliCmdSetWpsConfigMethods)(WifiWpaP2pInterface *p, const char *methods);
47     P2pSupplicantErrCode (*wpaP2pCliCmdSetSsidPostfixName)(WifiWpaP2pInterface *p, const char *name);
48     P2pSupplicantErrCode (*wpaP2pCliCmdGetDeviceAddress)(WifiWpaP2pInterface *p, char *devAddress, int size);
49     P2pSupplicantErrCode (*wpaP2pCliCmdFlush)(WifiWpaP2pInterface *p);
50     P2pSupplicantErrCode (*wpaP2pCliCmdFlushService)(WifiWpaP2pInterface *p);
51     P2pSupplicantErrCode (*wpaP2pCliCmdP2pStopFind)(WifiWpaP2pInterface *p);
52     P2pSupplicantErrCode (*wpaP2pCliCmdP2pRemoveGroup)(WifiWpaP2pInterface *p, const char *groupname);
53     P2pSupplicantErrCode (*wpaP2pCliCmdP2pFound)(WifiWpaP2pInterface *p, int timeout);
54     P2pSupplicantErrCode (*wpaP2pCliCmdRemoveNetwork)(WifiWpaP2pInterface *p, int networkId);
55     P2pSupplicantErrCode (*wpaP2pCliCmdSetWfdEnable)(WifiWpaP2pInterface *p, int enable);
56     P2pSupplicantErrCode (*wpaP2pCliCmdSetWfdDeviceInfo)(WifiWpaP2pInterface *p, const char *conf);
57     P2pSupplicantErrCode (*wpaP2pCliCmdExtListen)(WifiWpaP2pInterface *p, int enable, int period, int interval);
58     P2pSupplicantErrCode (*wpaP2pCliCmdSetListenChannel)(WifiWpaP2pInterface *p, int channel, int regClass);
59     P2pSupplicantErrCode (*wpaP2pCliCmdCancelConnect)(WifiWpaP2pInterface *p);
60     P2pSupplicantErrCode (*wpaP2pCliCmdInvite)(WifiWpaP2pInterface *p, const P2pHalInviteArgv *argv);
61     P2pSupplicantErrCode (*wpaP2pCliCmdReInvite)(WifiWpaP2pInterface *p, const P2pHalReInviteArgv *argv);
62     P2pSupplicantErrCode (*wpaP2pCliCmdServiceAdd)(WifiWpaP2pInterface *p, const struct HdiP2pServiceInfo *argv);
63     P2pSupplicantErrCode (*wpaP2pCliCmdServiceDel)(WifiWpaP2pInterface *p, const struct HdiP2pServiceInfo *argv);
64     P2pSupplicantErrCode (*wpaP2pCliCmdServDiscReq)(
65         WifiWpaP2pInterface *p, const char *peerBssid, const char *tlvs, char *retSeq, unsigned size);
66     P2pSupplicantErrCode (*wpaP2pCliCmdServDiscCancelReq)(WifiWpaP2pInterface *p, const char *val);
67     P2pSupplicantErrCode (*wpaP2pCliCmdProvisionDiscovery)(
68         WifiWpaP2pInterface *p, const P2pProvisionDiscoveryArgv *argv);
69     P2pSupplicantErrCode (*wpaP2pCliCmdGroupAdd)(WifiWpaP2pInterface *p, int isPersistent, int networkId, int freq);
70     P2pSupplicantErrCode (*wpaP2pCliCmdStoreConfig)(WifiWpaP2pInterface *p);
71     P2pSupplicantErrCode (*wpaP2pCliCmdSetPersistentReconnect)(WifiWpaP2pInterface *p, int status);
72     P2pSupplicantErrCode (*wpaP2pCliCmdRespServerDiscovery)(WifiWpaP2pInterface *p,
73         const struct HdiP2pServDiscReqInfo *info);
74     P2pSupplicantErrCode (*wpaP2pCliCmdSetServDiscExternal)(WifiWpaP2pInterface *p, int mode);
75     P2pSupplicantErrCode (*wpaP2pCliCmdSetRandomMac)(WifiWpaP2pInterface *p, int mode);
76     P2pSupplicantErrCode (*wpaP2pCliCmdP2pGetChba0Freq)(WifiWpaP2pInterface *p, int *chba0Freq);
77     P2pSupplicantErrCode (*wpaP2pCliCmdSetGroupConfig)(WifiWpaP2pInterface *p, const P2pWpaGroupConfigArgv *argv);
78     P2pSupplicantErrCode (*wpaP2pCliCmdGetGroupConfig)(WifiWpaP2pInterface *p, P2pWpaGroupConfigArgv *argv);
79     P2pSupplicantErrCode (*wpaP2pCliCmdAddNetwork)(WifiWpaP2pInterface *p, int *networkId);
80     P2pSupplicantErrCode (*wpaP2pCliCmdHid2dConnect)(WifiWpaP2pInterface *p, Hid2dConnectInfo *info);
81 };
82 
83 typedef struct StWifiWpaP2pGroupInterface WifiWpaP2pGroupInterface;
84 struct StWifiWpaP2pGroupInterface {
85     WifiWpaP2pGroupInterface *next;
86     char groupIfname[P2P_GROUP_IFACE_MAX_LENGTH];
87     P2pSupplicantErrCode (*wpaP2pCliCmdWpsPbc)(WifiWpaP2pGroupInterface *p, const char *bssid);
88     P2pSupplicantErrCode (*wpaP2pCliCmdWpsPin)(WifiWpaP2pGroupInterface *p, P2pWpsPinDisplayArgv *argv);
89     P2pSupplicantErrCode (*wpaP2pCliCmdSetPowerSave)(WifiWpaP2pGroupInterface *p, int enable);
90     P2pSupplicantErrCode (*wpaP2pCliCmdSetGroupIdle)(WifiWpaP2pGroupInterface *p, int timeout);
91 };
92 
93 WifiWpaP2pInterface *GetWifiWapP2pInterface(const char *ifName);
94 void RelesaeWpaP2pInterface(void);
95 WifiErrorNo ConvertP2pErrCode(P2pSupplicantErrCode code);
96 WifiWpaP2pGroupInterface *GetWifiWpaP2pGroupInterface(const char *groupIfc);
97 void ReleaseWpaP2pGroupInterface(const char *groupIfc);
98 
99 #ifdef __cplusplus
100 }
101 #endif
102 #endif
103