1 /* 2 * Copyright (c) 2023 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_CLIENT_H 17 #define WPA_CLIENT_H 18 19 #include <stdint.h> 20 #include <stdbool.h> 21 22 #ifdef __cplusplus 23 #if __cplusplus 24 extern "C" { 25 #endif 26 #endif 27 28 #define ETH_ADDR_LEN 6 29 #ifndef IFNAMSIZ 30 #define IFNAMSIZ 16 31 #endif 32 #define WIFI_REASON_LENGTH 32 33 #define WIFI_SSID_LENGTH 132 34 35 #define WIFI_P2P_DEVICE_TYPE_LENGTH 64 36 #define WIFI_P2P_DEVICE_NAME_LENGTH 128 37 #define WIFI_P2P_WFD_DEVICE_INFO_LENGTH 128 38 #define WIFI_P2P_PASSWORD_SIZE 128 39 #define WIFI_P2P_GROUP_IFNAME_LENGTH 128 40 #define WIFI_PIN_CODE_LENGTH 8 41 #define WIFI_P2P_TLVS_LENGTH 256 42 #define WIFI_BSSID_LEN 6 43 #define WPA_VENDOR_DATA_LEN 256 44 #define WPA_VENDOR_SSID_LEN 32 45 #define WPA_VENDOR_PSK_LEN 64 46 47 typedef enum { 48 WPA_EVENT_DISCONNECT = 0, 49 WPA_EVENT_CONNECT, 50 WPA_EVENT_BSSID_CHANGE, 51 WPA_EVENT_STATE_CHANGED, 52 WPA_EVENT_TEMP_DISABLE, 53 WPA_EVENT_ASSOCIATE_REJECT, 54 WPA_EVENT_WPS_OVERLAP, 55 WPA_EVENT_WPS_TIMEMOUT, 56 WPA_EVENT_RECV_SCAN_RESULT, 57 WPA_EVENT_DEVICE_FOUND, 58 WPA_EVENT_DEVICE_LOST, 59 WPA_EVENT_GO_NEGOTIATION_REQUEST, 60 WPA_EVENT_GO_NEGOTIATION_COMPLETED, 61 WPA_EVENT_INVITATION_RECEIVED, 62 WPA_EVENT_INVITATION_RESULT, 63 WPA_EVENT_GROUP_FORMATION_SUCCESS, 64 WPA_EVENT_GROUP_FORMATION_FAILURE, 65 WPA_EVENT_GROUP_START, 66 WPA_EVENT_GROUP_REMOVED, 67 WPA_EVENT_PROVISION_DISCOVERY_COMPLETED, 68 WPA_EVENT_FIND_STOPPED, 69 WPA_EVENT_SERV_DISC_REQ, 70 WPA_EVENT_SERV_DISC_RESP, 71 WPA_EVENT_STA_CONNECT_STATE, 72 WPA_EVENT_IFACE_CREATED, 73 WPA_EVENT_STA_AUTH_REJECT, 74 WPA_EVENT_STA_NOTIFY, 75 WPA_EVENT_VENDOR_EXT, 76 WPA_EVENT_AUTH_TIMEOUT, 77 } WpaCallBackEventType; 78 79 enum WpaClientType { 80 /* 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<6 | 1<<7 | 1<<8 | 1<<9 | 1<<10 ... | 1<<29 */ 81 WIFI_WPA_TO_HAL_CLIENT = (1 << 29) - 1, 82 WIFI_WPA_CLIENT_BUTT 83 }; 84 85 struct WpaDisconnectParam { 86 unsigned char bssid[WIFI_BSSID_LEN]; 87 int reasonCode; 88 int locallyGenerated; 89 }; 90 91 struct WpaConnectParam { 92 unsigned char bssid[WIFI_BSSID_LEN]; 93 int networkId; 94 }; 95 96 struct WpaBssidChangedParam { 97 unsigned char bssid[WIFI_BSSID_LEN]; 98 unsigned char reason[WIFI_REASON_LENGTH]; 99 }; 100 101 struct WpaStateChangedParam { 102 int status; 103 unsigned char bssid[WIFI_BSSID_LEN]; 104 int networkId; 105 unsigned char ssid[WIFI_SSID_LENGTH]; 106 }; 107 108 struct WpaTempDisabledParam { 109 int networkId; 110 unsigned char ssid[WIFI_SSID_LENGTH]; 111 int authFailures; 112 int duration; 113 unsigned char reason[WIFI_REASON_LENGTH]; 114 }; 115 116 struct WpaAssociateRejectParam { 117 unsigned char bssid[WIFI_BSSID_LEN]; 118 int statusCode; 119 int timeOut; 120 }; 121 122 struct WpaAuthRejectParam { 123 unsigned char bssid[WIFI_BSSID_LEN]; 124 unsigned short authType; 125 unsigned short authTransaction; 126 unsigned short statusCode; 127 }; 128 129 struct WpaRecvScanResultParam { 130 unsigned int scanId; 131 }; 132 133 struct P2pDeviceInfoParam { 134 unsigned char srcAddress[ETH_ADDR_LEN]; 135 unsigned char p2pDeviceAddress[ETH_ADDR_LEN]; 136 unsigned char primaryDeviceType[WIFI_P2P_DEVICE_TYPE_LENGTH]; 137 unsigned char deviceName[WIFI_P2P_DEVICE_NAME_LENGTH]; 138 int configMethods; 139 int deviceCapabilities; 140 int groupCapabilities; 141 unsigned char wfdDeviceInfo[WIFI_P2P_WFD_DEVICE_INFO_LENGTH]; 142 unsigned int wfdLength; 143 unsigned char operSsid[WIFI_P2P_DEVICE_NAME_LENGTH]; 144 }; 145 146 struct P2pDeviceLostParam { 147 unsigned char p2pDeviceAddress[ETH_ADDR_LEN]; 148 int networkId; 149 }; 150 151 struct P2pGoNegotiationRequestParam { 152 unsigned char srcAddress[ETH_ADDR_LEN]; 153 int passwordId; 154 }; 155 156 struct P2pGoNegotiationCompletedParam { 157 int status; 158 }; 159 160 struct P2pInvitationReceivedParam { 161 int type; /* 0:Received, 1:Accepted */ 162 int persistentNetworkId; 163 int operatingFrequency; 164 unsigned char srcAddress[ETH_ADDR_LEN]; 165 unsigned char goDeviceAddress[ETH_ADDR_LEN]; 166 unsigned char bssid[ETH_ADDR_LEN]; 167 }; 168 169 struct P2pInvitationResultParam { 170 int status; 171 unsigned char bssid[ETH_ADDR_LEN]; 172 }; 173 174 struct P2pGroupStartedParam { 175 int isGo; 176 int isPersistent; 177 int frequency; 178 unsigned char groupIfName[WIFI_P2P_GROUP_IFNAME_LENGTH]; 179 unsigned char ssid[WIFI_SSID_LENGTH]; 180 unsigned char psk[WIFI_P2P_PASSWORD_SIZE]; 181 unsigned char passphrase[WIFI_P2P_PASSWORD_SIZE]; 182 unsigned char goDeviceAddress[ETH_ADDR_LEN]; 183 unsigned char goRandomDeviceAddress[ETH_ADDR_LEN]; 184 }; 185 186 struct P2pGroupRemovedParam { 187 int isGo; 188 unsigned char groupIfName[WIFI_P2P_GROUP_IFNAME_LENGTH]; 189 }; 190 191 struct P2pProvisionDiscoveryCompletedParam { 192 int isRequest; 193 int provDiscStatusCode; 194 int configMethods; 195 unsigned char p2pDeviceAddress[ETH_ADDR_LEN]; 196 unsigned char generatedPin[WIFI_PIN_CODE_LENGTH]; 197 }; 198 199 struct P2pServDiscRespParam { 200 int updateIndicator; 201 unsigned char srcAddress[ETH_ADDR_LEN]; 202 unsigned char tlvs[WIFI_P2P_TLVS_LENGTH]; 203 }; 204 205 struct P2pStaConnectStateParam { 206 int state; 207 unsigned char srcAddress[ETH_ADDR_LEN]; 208 unsigned char p2pDeviceAddress[ETH_ADDR_LEN]; 209 }; 210 211 struct P2pServDiscReqInfoParam { 212 int freq; 213 int dialogToken; 214 int updateIndic; 215 unsigned char mac[ETH_ADDR_LEN]; 216 unsigned char tlvs[WIFI_P2P_TLVS_LENGTH]; 217 }; 218 219 struct P2pIfaceCreatedParam { 220 int isGo; 221 }; 222 223 typedef int32_t (*OnReceiveFunc)(uint32_t event, void *data, const char *ifName); 224 225 struct WpaCallbackEvent { 226 uint32_t eventType; /* eventmap */ 227 char ifName[IFNAMSIZ + 1]; 228 OnReceiveFunc onRecFunc; 229 }; 230 231 struct WpaVendorExtInfo { 232 int type; 233 int freq; 234 int width; 235 int id; 236 int status; 237 int reason; 238 unsigned char ssid[WPA_VENDOR_SSID_LEN]; 239 unsigned char psk[WPA_VENDOR_PSK_LEN]; 240 unsigned char devAddr[ETH_ADDR_LEN]; 241 unsigned char data[WPA_VENDOR_DATA_LEN]; 242 }; 243 244 void WpaEventReport(const char *ifName, uint32_t event, void *data); 245 int32_t WpaRegisterEventCallback(OnReceiveFunc onRecFunc, uint32_t eventType, const char *ifName); 246 int32_t WpaUnregisterEventCallback(OnReceiveFunc onRecFunc, uint32_t eventType, const char *ifName); 247 void ReleaseEventCallback(void); 248 #endif 249