Changes on the code
Dependencies: BSP_B-L475E-IOT01
wifi.c
00001 /** 00002 ****************************************************************************** 00003 * @file wifi.c 00004 * @author MCD Application Team 00005 * @version V1.8.0 00006 * @date 21-April-2017 00007 * @brief WIFI interface file. 00008 ****************************************************************************** 00009 * @attention 00010 * 00011 * <h2><center>© Copyright (c) 2017 STMicroelectronics International N.V. 00012 * All rights reserved.</center></h2> 00013 * 00014 * Redistribution and use in source and binary forms, with or without 00015 * modification, are permitted, provided that the following conditions are met: 00016 * 00017 * 1. Redistribution of source code must retain the above copyright notice, 00018 * this list of conditions and the following disclaimer. 00019 * 2. Redistributions in binary form must reproduce the above copyright notice, 00020 * this list of conditions and the following disclaimer in the documentation 00021 * and/or other materials provided with the distribution. 00022 * 3. Neither the name of STMicroelectronics nor the names of other 00023 * contributors to this software may be used to endorse or promote products 00024 * derived from this software without specific written permission. 00025 * 4. This software, including modifications and/or derivative works of this 00026 * software, must execute solely and exclusively on microcontroller or 00027 * microprocessor devices manufactured by or for STMicroelectronics. 00028 * 5. Redistribution and use of this software other than as permitted under 00029 * this license is void and will automatically terminate your rights under 00030 * this license. 00031 * 00032 * THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS" 00033 * AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT 00034 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 00035 * PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY 00036 * RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT 00037 * SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 00038 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 00039 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 00040 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 00041 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 00042 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 00043 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00044 * 00045 ****************************************************************************** 00046 */ 00047 /* Includes ------------------------------------------------------------------*/ 00048 #include "wifi.h" 00049 00050 /* Private define ------------------------------------------------------------*/ 00051 /* Private variables ---------------------------------------------------------*/ 00052 ES_WIFIObject_t EsWifiObj; 00053 00054 /* Private functions ---------------------------------------------------------*/ 00055 /** 00056 * @brief Initialiaze the WIFI core 00057 * @param None 00058 * @retval Operation status 00059 */ 00060 WIFI_Status_t WIFI_Init(void) 00061 { 00062 WIFI_Status_t ret = WIFI_STATUS_ERROR; 00063 00064 if(ES_WIFI_RegisterBusIO(&EsWifiObj, 00065 SPI_WIFI_Init, 00066 SPI_WIFI_DeInit, 00067 SPI_WIFI_Delay, 00068 SPI_WIFI_SendData, 00069 SPI_WIFI_ReceiveData) == ES_WIFI_STATUS_OK) 00070 { 00071 00072 if(ES_WIFI_Init(&EsWifiObj) == ES_WIFI_STATUS_OK) 00073 { 00074 ret = WIFI_STATUS_OK; 00075 } 00076 } 00077 return ret; 00078 } 00079 00080 /** 00081 * @brief List a defined number of vailable access points 00082 * @param APs : pointer to APs structure 00083 * @param AP_MaxNbr : Max APs number to be listed 00084 * @retval Operation status 00085 */ 00086 WIFI_Status_t WIFI_ListAccessPoints(WIFI_APs_t *APs, uint8_t AP_MaxNbr) 00087 { 00088 uint8_t APCount; 00089 WIFI_Status_t ret = WIFI_STATUS_ERROR; 00090 ES_WIFI_APs_t esWifiAPs; 00091 00092 if(ES_WIFI_ListAccessPoints(&EsWifiObj, &esWifiAPs) == ES_WIFI_STATUS_OK) 00093 { 00094 if(esWifiAPs.nbr > 0) 00095 { 00096 APs->count = MIN(esWifiAPs.nbr, AP_MaxNbr); 00097 for(APCount = 0; APCount < APs->count; APCount++) 00098 { 00099 APs->ap[APCount].Ecn = (WIFI_Ecn_t)esWifiAPs.AP[APCount].Security; 00100 strncpy( (char *)APs->ap[APCount].SSID, (char *)esWifiAPs.AP[APCount].SSID, MIN (WIFI_MAX_SSID_NAME, WIFI_MAX_SSID_NAME)); 00101 APs->ap[APCount].RSSI = esWifiAPs.AP[APCount].RSSI; 00102 memcpy(APs->ap[APCount].MAC, esWifiAPs.AP[APCount].MAC, 6); 00103 } 00104 } 00105 ret = WIFI_STATUS_OK; 00106 } 00107 return ret; 00108 } 00109 00110 /** 00111 * @brief Join an Access Point 00112 * @param SSID : SSID string 00113 * @param Password : Password string 00114 * @param ecn : Encryption type 00115 * @param IP_Addr : Got IP Address 00116 * @param IP_Mask : Network IP mask 00117 * @param Gateway_Addr : Gateway IP address 00118 * @param MAC : pointer to MAC Address 00119 * @retval Operation status 00120 */ 00121 WIFI_Status_t WIFI_Connect( 00122 const char* SSID, 00123 const char* Password, 00124 WIFI_Ecn_t ecn) 00125 { 00126 WIFI_Status_t ret = WIFI_STATUS_ERROR; 00127 00128 if(ES_WIFI_Connect(&EsWifiObj, SSID, Password, (ES_WIFI_SecurityType_t) ecn) == ES_WIFI_STATUS_OK) 00129 { 00130 if(ES_WIFI_GetNetworkSettings(&EsWifiObj) == ES_WIFI_STATUS_OK) 00131 { 00132 ret = WIFI_STATUS_OK; 00133 } 00134 00135 } 00136 return ret; 00137 } 00138 00139 /** 00140 * @brief This function retrieves the WiFi interface's MAC address. 00141 * @retval Operation Status. 00142 */ 00143 WIFI_Status_t WIFI_GetMAC_Address(uint8_t *mac) 00144 { 00145 WIFI_Status_t ret = WIFI_STATUS_ERROR; 00146 00147 if(ES_WIFI_GetMACAddress(&EsWifiObj, mac) == ES_WIFI_STATUS_OK) 00148 { 00149 ret = WIFI_STATUS_OK; 00150 } 00151 return ret; 00152 } 00153 00154 /** 00155 * @brief This function retrieves the WiFi interface's IP address. 00156 * @retval Operation Status. 00157 */ 00158 WIFI_Status_t WIFI_GetIP_Address (uint8_t *ipaddr) 00159 { 00160 WIFI_Status_t ret = WIFI_STATUS_ERROR; 00161 00162 if(EsWifiObj.NetSettings.IsConnected) 00163 { 00164 memcpy(ipaddr, EsWifiObj.NetSettings.IP_Addr, 4); 00165 ret = WIFI_STATUS_OK; 00166 } 00167 return ret; 00168 } 00169 00170 /** 00171 * @brief Disconnect from a network 00172 * @param None 00173 * @retval Operation status 00174 */ 00175 WIFI_Status_t WIFI_Disconnect(void) 00176 { 00177 WIFI_Status_t ret = WIFI_STATUS_ERROR; 00178 if( ES_WIFI_Disconnect(&EsWifiObj)== ES_WIFI_STATUS_OK) 00179 { 00180 ret = WIFI_STATUS_OK; 00181 } 00182 00183 return ret; 00184 } 00185 00186 /** 00187 * @brief Configure an Access Point 00188 00189 * @param ssid : SSID string 00190 * @param pass : Password string 00191 * @param ecn : Encryption type 00192 * @param channel : channel number 00193 * @param max_conn : Max allowed connections 00194 * @retval Operation status 00195 */ 00196 WIFI_Status_t WIFI_ConfigureAP(uint8_t *ssid, uint8_t *pass, WIFI_Ecn_t ecn, uint8_t channel, uint8_t max_conn) 00197 { 00198 WIFI_Status_t ret = WIFI_STATUS_ERROR; 00199 ES_WIFI_APConfig_t ApConfig; 00200 00201 strncpy((char*)ApConfig.SSID, (char*)ssid, ES_WIFI_MAX_SSID_NAME_SIZE); 00202 strncpy((char*)ApConfig.Pass, (char*)pass, ES_WIFI_MAX_PSWD_NAME_SIZE); 00203 ApConfig.Channel = channel; 00204 ApConfig.MaxConnections = WIFI_MAX_CONNECTED_STATIONS; 00205 ApConfig.Security = (ES_WIFI_SecurityType_t)ecn; 00206 00207 if(ES_WIFI_ActivateAP(&EsWifiObj, &ApConfig) == ES_WIFI_STATUS_OK) 00208 { 00209 ret = WIFI_STATUS_OK; 00210 } 00211 return ret; 00212 } 00213 00214 /** 00215 * @brief Handle the background events of the wifi module 00216 00217 * @retval None 00218 */ 00219 WIFI_Status_t WIFI_HandleAPEvents(WIFI_APSettings_t *setting) 00220 { 00221 WIFI_Status_t ret = WIFI_STATUS_OK; 00222 ES_WIFI_APState_t State; 00223 00224 State= ES_WIFI_WaitAPStateChange(&EsWifiObj); 00225 00226 switch (State) 00227 { 00228 case ES_WIFI_AP_ASSIGNED: 00229 memcpy(setting->IP_Addr, EsWifiObj.APSettings.IP_Addr, 4); 00230 memcpy(setting->MAC_Addr, EsWifiObj.APSettings.MAC_Addr, 6); 00231 ret = WIFI_STATUS_ASSIGNED; 00232 break; 00233 00234 case ES_WIFI_AP_JOINED: 00235 strncpy((char *)setting->SSID, (char *)EsWifiObj.APSettings.SSID, WIFI_MAX_SSID_NAME); 00236 memcpy(setting->IP_Addr, EsWifiObj.APSettings.IP_Addr, 4); 00237 ret = WIFI_STATUS_JOINED; 00238 break; 00239 00240 case ES_WIFI_AP_ERROR: 00241 ret = WIFI_STATUS_ERROR; 00242 break; 00243 00244 default: 00245 break; 00246 } 00247 00248 return ret; 00249 } 00250 00251 /** 00252 * @brief Ping an IP address in the network 00253 * @param ipaddr : array of the IP address 00254 * @retval Operation status 00255 */ 00256 WIFI_Status_t WIFI_Ping(uint8_t* ipaddr, uint16_t count, uint16_t interval_ms) 00257 { 00258 WIFI_Status_t ret = WIFI_STATUS_ERROR; 00259 00260 if(ES_WIFI_Ping(&EsWifiObj, ipaddr, count, interval_ms) == ES_WIFI_STATUS_OK) 00261 { 00262 ret = WIFI_STATUS_OK; 00263 } 00264 return ret; 00265 } 00266 00267 /** 00268 * @brief Get IP address from URL using DNS 00269 * @param location : Host URL 00270 * @param ipaddr : array of the IP address 00271 * @retval Operation status 00272 */ 00273 WIFI_Status_t WIFI_GetHostAddress( char* location, uint8_t* ipaddr) 00274 { 00275 WIFI_Status_t ret = WIFI_STATUS_ERROR; 00276 00277 if (ES_WIFI_DNS_LookUp(&EsWifiObj, location, ipaddr) == ES_WIFI_STATUS_OK) 00278 { 00279 return WIFI_STATUS_OK; 00280 } 00281 00282 return ret; 00283 } 00284 /** 00285 * @brief Configure and start a client connection 00286 * @param type : Connection type TCP/UDP 00287 * @param name : name of the connection 00288 * @param ipaddr : Client IP address 00289 * @param port : Remote port 00290 * @param local_port : Local port 00291 * @retval Operation status 00292 */ 00293 WIFI_Status_t WIFI_OpenClientConnection(uint32_t socket, WIFI_Protocol_t type, const char* name, uint8_t* ipaddr, uint16_t port, uint16_t local_port) 00294 { 00295 WIFI_Status_t ret = WIFI_STATUS_ERROR; 00296 ES_WIFI_Conn_t conn; 00297 00298 conn.Number = socket; 00299 conn.RemotePort = port; 00300 conn.LocalPort = local_port; 00301 conn.Type = (type == WIFI_TCP_PROTOCOL)? ES_WIFI_TCP_CONNECTION : ES_WIFI_UDP_CONNECTION; 00302 conn.RemoteIP[0] = ipaddr[0]; 00303 conn.RemoteIP[1] = ipaddr[1]; 00304 conn.RemoteIP[2] = ipaddr[2]; 00305 conn.RemoteIP[3] = ipaddr[3]; 00306 if(ES_WIFI_StartClientConnection(&EsWifiObj, &conn)== ES_WIFI_STATUS_OK) 00307 { 00308 ret = WIFI_STATUS_OK; 00309 } 00310 return ret; 00311 } 00312 00313 /** 00314 * @brief Close client connection 00315 * @param type : Connection type TCP/UDP 00316 * @param name : name of the connection 00317 * @param location : Client address 00318 * @param port : Remote port 00319 * @param local_port : Local port 00320 * @retval Operation status 00321 */ 00322 WIFI_Status_t WIFI_CloseClientConnection(uint32_t socket) 00323 { 00324 WIFI_Status_t ret = WIFI_STATUS_ERROR; 00325 ES_WIFI_Conn_t conn; 00326 conn.Number = socket; 00327 00328 if(ES_WIFI_StopClientConnection(&EsWifiObj, &conn)== ES_WIFI_STATUS_OK) 00329 { 00330 ret = WIFI_STATUS_OK; 00331 } 00332 return ret; 00333 } 00334 00335 /** 00336 * @brief Configure and start a Server 00337 * @param type : Connection type TCP/UDP 00338 * @param name : name of the connection 00339 * @param port : Remote port 00340 * @retval Operation status 00341 */ 00342 WIFI_Status_t WIFI_StartServer(uint32_t socket, WIFI_Protocol_t protocol, const char* name, uint16_t port) 00343 { 00344 WIFI_Status_t ret = WIFI_STATUS_ERROR; 00345 ES_WIFI_Conn_t conn; 00346 conn.Number = socket; 00347 conn.LocalPort = port; 00348 conn.Type = (protocol == WIFI_TCP_PROTOCOL)? ES_WIFI_TCP_CONNECTION : ES_WIFI_UDP_CONNECTION; 00349 if(ES_WIFI_StartServerSingleConn(&EsWifiObj, &conn)== ES_WIFI_STATUS_OK) 00350 { 00351 ret = WIFI_STATUS_OK; 00352 } 00353 return ret; 00354 } 00355 00356 /** 00357 * @brief Stop a server 00358 * @retval Operation status 00359 */ 00360 WIFI_Status_t WIFI_StopServer(uint32_t socket) 00361 { 00362 WIFI_Status_t ret = WIFI_STATUS_ERROR; 00363 00364 if(ES_WIFI_StopServerSingleConn(&EsWifiObj)== ES_WIFI_STATUS_OK) 00365 { 00366 ret = WIFI_STATUS_OK; 00367 } 00368 return ret; 00369 } 00370 /** 00371 * @brief Send Data on a socket 00372 * @param pdata : pointer to data to be sent 00373 * @param len : length of data to be sent 00374 * @retval Operation status 00375 */ 00376 WIFI_Status_t WIFI_SendData(uint8_t socket, uint8_t *pdata, uint16_t Reqlen, uint16_t *SentDatalen, uint32_t Timeout) 00377 { 00378 WIFI_Status_t ret = WIFI_STATUS_ERROR; 00379 00380 if(ES_WIFI_SendData(&EsWifiObj, socket, pdata, Reqlen, SentDatalen, Timeout) == ES_WIFI_STATUS_OK) 00381 { 00382 ret = WIFI_STATUS_OK; 00383 } 00384 00385 return ret; 00386 } 00387 00388 /** 00389 * @brief Receive Data from a socket 00390 * @param pdata : pointer to Rx buffer 00391 * @param *len : pointer to length of data 00392 * @retval Operation status 00393 */ 00394 WIFI_Status_t WIFI_ReceiveData(uint8_t socket, uint8_t *pdata, uint16_t Reqlen, uint16_t *RcvDatalen, uint32_t Timeout) 00395 { 00396 WIFI_Status_t ret = WIFI_STATUS_ERROR; 00397 00398 if(ES_WIFI_ReceiveData(&EsWifiObj, socket, pdata, Reqlen, RcvDatalen, Timeout) == ES_WIFI_STATUS_OK) 00399 { 00400 ret = WIFI_STATUS_OK; 00401 } 00402 return ret; 00403 } 00404 00405 /** 00406 * @brief Customize module data 00407 * @param name : MFC name 00408 * @param Mac : Mac Address 00409 * @retval Operation status 00410 */ 00411 WIFI_Status_t WIFI_SetOEMProperties(const char *name, uint8_t *Mac) 00412 { 00413 WIFI_Status_t ret = WIFI_STATUS_ERROR; 00414 00415 if(ES_WIFI_SetProductName(&EsWifiObj, (uint8_t *)name) == ES_WIFI_STATUS_OK) 00416 { 00417 if(ES_WIFI_SetMACAddress(&EsWifiObj, Mac) == ES_WIFI_STATUS_OK) 00418 { 00419 ret = WIFI_STATUS_OK; 00420 } 00421 } 00422 return ret; 00423 } 00424 00425 /** 00426 * @brief Reset the WIFI module 00427 * @retval Operation status 00428 */ 00429 WIFI_Status_t WIFI_ResetModule(void) 00430 { 00431 WIFI_Status_t ret = WIFI_STATUS_ERROR; 00432 00433 if(ES_WIFI_ResetModule(&EsWifiObj) == ES_WIFI_STATUS_OK) 00434 { 00435 ret = WIFI_STATUS_OK; 00436 } 00437 return ret; 00438 } 00439 00440 /** 00441 * @brief Restore module default configuration 00442 * @retval Operation status 00443 */ 00444 WIFI_Status_t WIFI_SetModuleDefault(void) 00445 { 00446 WIFI_Status_t ret = WIFI_STATUS_ERROR; 00447 00448 if(ES_WIFI_ResetToFactoryDefault(&EsWifiObj) == ES_WIFI_STATUS_OK) 00449 { 00450 ret = WIFI_STATUS_OK; 00451 } 00452 return ret; 00453 } 00454 00455 00456 /** 00457 * @brief Update module firmware 00458 * @param location : Binary Location IP address 00459 * @retval Operation status 00460 */ 00461 WIFI_Status_t WIFI_ModuleFirmwareUpdate(const char *location) 00462 { 00463 return WIFI_STATUS_NOT_SUPPORTED; 00464 } 00465 00466 /** 00467 * @brief Return Module firmware revision 00468 * @param rev : revision string 00469 * @retval Operation status 00470 */ 00471 WIFI_Status_t WIFI_GetModuleFwRevision(char *rev) 00472 { 00473 WIFI_Status_t ret = WIFI_STATUS_ERROR; 00474 00475 if(EsWifiObj.FW_Rev != NULL) 00476 { 00477 strncpy(rev, (char *)EsWifiObj.FW_Rev, ES_WIFI_FW_REV_SIZE); 00478 ret = WIFI_STATUS_OK; 00479 } 00480 return ret; 00481 } 00482 00483 /** 00484 * @brief Return Module ID 00485 * @param Info : Module ID string 00486 * @retval Operation status 00487 */ 00488 WIFI_Status_t WIFI_GetModuleID(char *Id) 00489 { 00490 WIFI_Status_t ret = WIFI_STATUS_ERROR; 00491 00492 if(EsWifiObj.Product_ID != NULL) 00493 { 00494 strncpy(Id, (char *)EsWifiObj.Product_ID, ES_WIFI_PRODUCT_ID_SIZE); 00495 ret = WIFI_STATUS_OK; 00496 } 00497 return ret; 00498 } 00499 00500 /** 00501 * @brief Return Module Name 00502 * @param Info : Module Name string 00503 * @retval Operation status 00504 */ 00505 WIFI_Status_t WIFI_GetModuleName(char *ModuleName) 00506 { 00507 WIFI_Status_t ret = WIFI_STATUS_ERROR; 00508 00509 if(EsWifiObj.Product_Name != NULL) 00510 { 00511 strncpy(ModuleName, (char *)EsWifiObj.Product_Name, ES_WIFI_PRODUCT_NAME_SIZE); 00512 ret = WIFI_STATUS_OK; 00513 } 00514 return ret; 00515 } 00516 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ 00517
Generated on Fri Jul 29 2022 17:05:21 by
1.7.2