added function to enable power saving mode for es_wifi driver (Inventek Systems ISM43362-M3G-L44 )

Fork of DISCO_L475VG_IOT01A_wifi by ST

Committer:
jaafaryn
Date:
Sat Jan 13 23:37:46 2018 +0000
Revision:
2:9bbbcd0eff1c
Parent:
1:b37920c1ddb9
added function to enable power saving mode

Who changed what in which revision?

UserRevisionLine numberNew contents of line
adustm 0:c61a93635433 1 /**
adustm 0:c61a93635433 2 ******************************************************************************
adustm 0:c61a93635433 3 * @file wifi.c
adustm 0:c61a93635433 4 * @author MCD Application Team
adustm 0:c61a93635433 5 * @version V1.8.0
adustm 0:c61a93635433 6 * @date 21-April-2017
adustm 0:c61a93635433 7 * @brief WIFI interface file.
adustm 0:c61a93635433 8 ******************************************************************************
adustm 0:c61a93635433 9 * @attention
adustm 0:c61a93635433 10 *
adustm 0:c61a93635433 11 * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics International N.V.
adustm 0:c61a93635433 12 * All rights reserved.</center></h2>
adustm 0:c61a93635433 13 *
adustm 0:c61a93635433 14 * Redistribution and use in source and binary forms, with or without
adustm 0:c61a93635433 15 * modification, are permitted, provided that the following conditions are met:
adustm 0:c61a93635433 16 *
adustm 0:c61a93635433 17 * 1. Redistribution of source code must retain the above copyright notice,
adustm 0:c61a93635433 18 * this list of conditions and the following disclaimer.
adustm 0:c61a93635433 19 * 2. Redistributions in binary form must reproduce the above copyright notice,
adustm 0:c61a93635433 20 * this list of conditions and the following disclaimer in the documentation
adustm 0:c61a93635433 21 * and/or other materials provided with the distribution.
adustm 0:c61a93635433 22 * 3. Neither the name of STMicroelectronics nor the names of other
adustm 0:c61a93635433 23 * contributors to this software may be used to endorse or promote products
adustm 0:c61a93635433 24 * derived from this software without specific written permission.
adustm 0:c61a93635433 25 * 4. This software, including modifications and/or derivative works of this
adustm 0:c61a93635433 26 * software, must execute solely and exclusively on microcontroller or
adustm 0:c61a93635433 27 * microprocessor devices manufactured by or for STMicroelectronics.
adustm 0:c61a93635433 28 * 5. Redistribution and use of this software other than as permitted under
adustm 0:c61a93635433 29 * this license is void and will automatically terminate your rights under
adustm 0:c61a93635433 30 * this license.
adustm 0:c61a93635433 31 *
adustm 0:c61a93635433 32 * THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS"
adustm 0:c61a93635433 33 * AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
adustm 0:c61a93635433 34 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
adustm 0:c61a93635433 35 * PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY
adustm 0:c61a93635433 36 * RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
adustm 0:c61a93635433 37 * SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
adustm 0:c61a93635433 38 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
adustm 0:c61a93635433 39 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
adustm 0:c61a93635433 40 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
adustm 0:c61a93635433 41 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
adustm 0:c61a93635433 42 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
adustm 0:c61a93635433 43 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
adustm 0:c61a93635433 44 *
adustm 0:c61a93635433 45 ******************************************************************************
adustm 0:c61a93635433 46 */
adustm 0:c61a93635433 47 /* Includes ------------------------------------------------------------------*/
adustm 0:c61a93635433 48 #include "wifi.h"
adustm 0:c61a93635433 49
adustm 0:c61a93635433 50 /* Private define ------------------------------------------------------------*/
adustm 0:c61a93635433 51 /* Private variables ---------------------------------------------------------*/
adustm 0:c61a93635433 52 ES_WIFIObject_t EsWifiObj;
adustm 0:c61a93635433 53
adustm 0:c61a93635433 54 /* Private functions ---------------------------------------------------------*/
adustm 0:c61a93635433 55 /**
adustm 0:c61a93635433 56 * @brief Initialiaze the WIFI core
adustm 0:c61a93635433 57 * @param None
adustm 0:c61a93635433 58 * @retval Operation status
adustm 0:c61a93635433 59 */
adustm 0:c61a93635433 60 WIFI_Status_t WIFI_Init(void)
adustm 0:c61a93635433 61 {
adustm 0:c61a93635433 62 WIFI_Status_t ret = WIFI_STATUS_ERROR;
adustm 0:c61a93635433 63
adustm 0:c61a93635433 64 if(ES_WIFI_RegisterBusIO(&EsWifiObj,
adustm 0:c61a93635433 65 SPI_WIFI_Init,
adustm 0:c61a93635433 66 SPI_WIFI_DeInit,
adustm 0:c61a93635433 67 SPI_WIFI_Delay,
adustm 0:c61a93635433 68 SPI_WIFI_SendData,
adustm 0:c61a93635433 69 SPI_WIFI_ReceiveData) == ES_WIFI_STATUS_OK)
adustm 0:c61a93635433 70 {
adustm 0:c61a93635433 71
adustm 0:c61a93635433 72 if(ES_WIFI_Init(&EsWifiObj) == ES_WIFI_STATUS_OK)
adustm 0:c61a93635433 73 {
adustm 0:c61a93635433 74 ret = WIFI_STATUS_OK;
adustm 0:c61a93635433 75 }
adustm 0:c61a93635433 76 }
adustm 0:c61a93635433 77 return ret;
adustm 0:c61a93635433 78 }
adustm 0:c61a93635433 79
adustm 0:c61a93635433 80 /**
adustm 0:c61a93635433 81 * @brief List a defined number of vailable access points
adustm 0:c61a93635433 82 * @param APs : pointer to APs structure
adustm 0:c61a93635433 83 * @param AP_MaxNbr : Max APs number to be listed
adustm 0:c61a93635433 84 * @retval Operation status
adustm 0:c61a93635433 85 */
adustm 0:c61a93635433 86 WIFI_Status_t WIFI_ListAccessPoints(WIFI_APs_t *APs, uint8_t AP_MaxNbr)
adustm 0:c61a93635433 87 {
adustm 0:c61a93635433 88 uint8_t APCount;
adustm 0:c61a93635433 89 WIFI_Status_t ret = WIFI_STATUS_ERROR;
adustm 0:c61a93635433 90 ES_WIFI_APs_t esWifiAPs;
adustm 0:c61a93635433 91
adustm 0:c61a93635433 92 if(ES_WIFI_ListAccessPoints(&EsWifiObj, &esWifiAPs) == ES_WIFI_STATUS_OK)
adustm 0:c61a93635433 93 {
adustm 0:c61a93635433 94 if(esWifiAPs.nbr > 0)
adustm 0:c61a93635433 95 {
adustm 0:c61a93635433 96 APs->count = MIN(esWifiAPs.nbr, AP_MaxNbr);
adustm 0:c61a93635433 97 for(APCount = 0; APCount < APs->count; APCount++)
adustm 0:c61a93635433 98 {
adustm 0:c61a93635433 99 APs->ap[APCount].Ecn = (WIFI_Ecn_t)esWifiAPs.AP[APCount].Security;
adustm 0:c61a93635433 100 strncpy( (char *)APs->ap[APCount].SSID, (char *)esWifiAPs.AP[APCount].SSID, MIN (WIFI_MAX_SSID_NAME, WIFI_MAX_SSID_NAME));
adustm 0:c61a93635433 101 APs->ap[APCount].RSSI = esWifiAPs.AP[APCount].RSSI;
adustm 0:c61a93635433 102 memcpy(APs->ap[APCount].MAC, esWifiAPs.AP[APCount].MAC, 6);
adustm 0:c61a93635433 103 }
adustm 0:c61a93635433 104 }
adustm 0:c61a93635433 105 ret = WIFI_STATUS_OK;
adustm 0:c61a93635433 106 }
adustm 0:c61a93635433 107 return ret;
adustm 0:c61a93635433 108 }
adustm 0:c61a93635433 109
adustm 0:c61a93635433 110 /**
adustm 0:c61a93635433 111 * @brief Join an Access Point
adustm 0:c61a93635433 112 * @param SSID : SSID string
adustm 0:c61a93635433 113 * @param Password : Password string
adustm 0:c61a93635433 114 * @param ecn : Encryption type
adustm 0:c61a93635433 115 * @param IP_Addr : Got IP Address
adustm 0:c61a93635433 116 * @param IP_Mask : Network IP mask
adustm 0:c61a93635433 117 * @param Gateway_Addr : Gateway IP address
adustm 0:c61a93635433 118 * @param MAC : pointer to MAC Address
adustm 0:c61a93635433 119 * @retval Operation status
adustm 0:c61a93635433 120 */
adustm 0:c61a93635433 121 WIFI_Status_t WIFI_Connect(
adustm 0:c61a93635433 122 const char* SSID,
adustm 0:c61a93635433 123 const char* Password,
adustm 0:c61a93635433 124 WIFI_Ecn_t ecn)
adustm 0:c61a93635433 125 {
adustm 0:c61a93635433 126 WIFI_Status_t ret = WIFI_STATUS_ERROR;
adustm 0:c61a93635433 127
adustm 0:c61a93635433 128 if(ES_WIFI_Connect(&EsWifiObj, SSID, Password, (ES_WIFI_SecurityType_t) ecn) == ES_WIFI_STATUS_OK)
adustm 0:c61a93635433 129 {
adustm 0:c61a93635433 130 if(ES_WIFI_GetNetworkSettings(&EsWifiObj) == ES_WIFI_STATUS_OK)
adustm 0:c61a93635433 131 {
jaafaryn 1:b37920c1ddb9 132 ret = WIFI_STATUS_OK;
adustm 0:c61a93635433 133 }
adustm 0:c61a93635433 134 }
adustm 0:c61a93635433 135 return ret;
adustm 0:c61a93635433 136 }
adustm 0:c61a93635433 137
adustm 0:c61a93635433 138 /**
jaafaryn 1:b37920c1ddb9 139 * @brief This function put the es-wifi module in power save mode
jaafaryn 1:b37920c1ddb9 140 * @param beacon_int: beacon interval in sec (typ. 1, 5, 10)
jaafaryn 1:b37920c1ddb9 141 * @param sleep_ms: time in ms spent in sleep mode (typically: 1000ms -> 5000ms)
jaafaryn 1:b37920c1ddb9 142 * @retval Operation Status.
jaafaryn 1:b37920c1ddb9 143 */
jaafaryn 2:9bbbcd0eff1c 144 WIFI_Status_t WIFI_SetPowerSaveMode(uint8_t beacon_int, uint32_t sleep_ms) {
jaafaryn 1:b37920c1ddb9 145 WIFI_Status_t ret = WIFI_STATUS_ERROR;
jaafaryn 1:b37920c1ddb9 146 if(ES_WIFI_SetPowerSaveMode(&EsWifiObj, beacon_int, sleep_ms) == ES_WIFI_STATUS_OK) {
jaafaryn 1:b37920c1ddb9 147 ret = WIFI_STATUS_OK;
jaafaryn 1:b37920c1ddb9 148 }
jaafaryn 1:b37920c1ddb9 149 return ret;
jaafaryn 1:b37920c1ddb9 150 }
jaafaryn 1:b37920c1ddb9 151
jaafaryn 1:b37920c1ddb9 152 /**
adustm 0:c61a93635433 153 * @brief This function retrieves the WiFi interface's MAC address.
adustm 0:c61a93635433 154 * @retval Operation Status.
adustm 0:c61a93635433 155 */
adustm 0:c61a93635433 156 WIFI_Status_t WIFI_GetMAC_Address(uint8_t *mac)
adustm 0:c61a93635433 157 {
adustm 0:c61a93635433 158 WIFI_Status_t ret = WIFI_STATUS_ERROR;
adustm 0:c61a93635433 159
adustm 0:c61a93635433 160 if(ES_WIFI_GetMACAddress(&EsWifiObj, mac) == ES_WIFI_STATUS_OK)
adustm 0:c61a93635433 161 {
adustm 0:c61a93635433 162 ret = WIFI_STATUS_OK;
adustm 0:c61a93635433 163 }
adustm 0:c61a93635433 164 return ret;
adustm 0:c61a93635433 165 }
adustm 0:c61a93635433 166
adustm 0:c61a93635433 167 /**
adustm 0:c61a93635433 168 * @brief This function retrieves the WiFi interface's IP address.
adustm 0:c61a93635433 169 * @retval Operation Status.
adustm 0:c61a93635433 170 */
adustm 0:c61a93635433 171 WIFI_Status_t WIFI_GetIP_Address (uint8_t *ipaddr)
adustm 0:c61a93635433 172 {
adustm 0:c61a93635433 173 WIFI_Status_t ret = WIFI_STATUS_ERROR;
adustm 0:c61a93635433 174
adustm 0:c61a93635433 175 if(EsWifiObj.NetSettings.IsConnected)
adustm 0:c61a93635433 176 {
adustm 0:c61a93635433 177 memcpy(ipaddr, EsWifiObj.NetSettings.IP_Addr, 4);
adustm 0:c61a93635433 178 ret = WIFI_STATUS_OK;
adustm 0:c61a93635433 179 }
adustm 0:c61a93635433 180 return ret;
adustm 0:c61a93635433 181 }
adustm 0:c61a93635433 182
adustm 0:c61a93635433 183 /**
adustm 0:c61a93635433 184 * @brief Disconnect from a network
adustm 0:c61a93635433 185 * @param None
adustm 0:c61a93635433 186 * @retval Operation status
adustm 0:c61a93635433 187 */
adustm 0:c61a93635433 188 WIFI_Status_t WIFI_Disconnect(void)
adustm 0:c61a93635433 189 {
adustm 0:c61a93635433 190 WIFI_Status_t ret = WIFI_STATUS_ERROR;
adustm 0:c61a93635433 191 if( ES_WIFI_Disconnect(&EsWifiObj)== ES_WIFI_STATUS_OK)
adustm 0:c61a93635433 192 {
adustm 0:c61a93635433 193 ret = WIFI_STATUS_OK;
adustm 0:c61a93635433 194 }
adustm 0:c61a93635433 195
adustm 0:c61a93635433 196 return ret;
adustm 0:c61a93635433 197 }
adustm 0:c61a93635433 198
adustm 0:c61a93635433 199 /**
adustm 0:c61a93635433 200 * @brief Configure an Access Point
adustm 0:c61a93635433 201
adustm 0:c61a93635433 202 * @param ssid : SSID string
adustm 0:c61a93635433 203 * @param pass : Password string
adustm 0:c61a93635433 204 * @param ecn : Encryption type
adustm 0:c61a93635433 205 * @param channel : channel number
adustm 0:c61a93635433 206 * @param max_conn : Max allowed connections
adustm 0:c61a93635433 207 * @retval Operation status
adustm 0:c61a93635433 208 */
adustm 0:c61a93635433 209 WIFI_Status_t WIFI_ConfigureAP(uint8_t *ssid, uint8_t *pass, WIFI_Ecn_t ecn, uint8_t channel, uint8_t max_conn)
adustm 0:c61a93635433 210 {
adustm 0:c61a93635433 211 WIFI_Status_t ret = WIFI_STATUS_ERROR;
adustm 0:c61a93635433 212 ES_WIFI_APConfig_t ApConfig;
adustm 0:c61a93635433 213
adustm 0:c61a93635433 214 strncpy((char*)ApConfig.SSID, (char*)ssid, ES_WIFI_MAX_SSID_NAME_SIZE);
adustm 0:c61a93635433 215 strncpy((char*)ApConfig.Pass, (char*)pass, ES_WIFI_MAX_PSWD_NAME_SIZE);
adustm 0:c61a93635433 216 ApConfig.Channel = channel;
adustm 0:c61a93635433 217 ApConfig.MaxConnections = WIFI_MAX_CONNECTED_STATIONS;
adustm 0:c61a93635433 218 ApConfig.Security = (ES_WIFI_SecurityType_t)ecn;
adustm 0:c61a93635433 219
adustm 0:c61a93635433 220 if(ES_WIFI_ActivateAP(&EsWifiObj, &ApConfig) == ES_WIFI_STATUS_OK)
adustm 0:c61a93635433 221 {
adustm 0:c61a93635433 222 ret = WIFI_STATUS_OK;
adustm 0:c61a93635433 223 }
adustm 0:c61a93635433 224 return ret;
adustm 0:c61a93635433 225 }
adustm 0:c61a93635433 226
adustm 0:c61a93635433 227 /**
adustm 0:c61a93635433 228 * @brief Handle the background events of the wifi module
adustm 0:c61a93635433 229
adustm 0:c61a93635433 230 * @retval None
adustm 0:c61a93635433 231 */
adustm 0:c61a93635433 232 WIFI_Status_t WIFI_HandleAPEvents(WIFI_APSettings_t *setting)
adustm 0:c61a93635433 233 {
adustm 0:c61a93635433 234 WIFI_Status_t ret = WIFI_STATUS_OK;
adustm 0:c61a93635433 235 ES_WIFI_APState_t State;
adustm 0:c61a93635433 236
adustm 0:c61a93635433 237 State= ES_WIFI_WaitAPStateChange(&EsWifiObj);
adustm 0:c61a93635433 238
adustm 0:c61a93635433 239 switch (State)
adustm 0:c61a93635433 240 {
adustm 0:c61a93635433 241 case ES_WIFI_AP_ASSIGNED:
adustm 0:c61a93635433 242 memcpy(setting->IP_Addr, EsWifiObj.APSettings.IP_Addr, 4);
adustm 0:c61a93635433 243 memcpy(setting->MAC_Addr, EsWifiObj.APSettings.MAC_Addr, 6);
adustm 0:c61a93635433 244 ret = WIFI_STATUS_ASSIGNED;
adustm 0:c61a93635433 245 break;
adustm 0:c61a93635433 246
adustm 0:c61a93635433 247 case ES_WIFI_AP_JOINED:
adustm 0:c61a93635433 248 strncpy((char *)setting->SSID, (char *)EsWifiObj.APSettings.SSID, WIFI_MAX_SSID_NAME);
adustm 0:c61a93635433 249 memcpy(setting->IP_Addr, EsWifiObj.APSettings.IP_Addr, 4);
adustm 0:c61a93635433 250 ret = WIFI_STATUS_JOINED;
adustm 0:c61a93635433 251 break;
adustm 0:c61a93635433 252
adustm 0:c61a93635433 253 case ES_WIFI_AP_ERROR:
adustm 0:c61a93635433 254 ret = WIFI_STATUS_ERROR;
adustm 0:c61a93635433 255 break;
adustm 0:c61a93635433 256
adustm 0:c61a93635433 257 default:
adustm 0:c61a93635433 258 break;
adustm 0:c61a93635433 259 }
adustm 0:c61a93635433 260
adustm 0:c61a93635433 261 return ret;
adustm 0:c61a93635433 262 }
adustm 0:c61a93635433 263
adustm 0:c61a93635433 264 /**
adustm 0:c61a93635433 265 * @brief Ping an IP address in the network
adustm 0:c61a93635433 266 * @param ipaddr : array of the IP address
adustm 0:c61a93635433 267 * @retval Operation status
adustm 0:c61a93635433 268 */
adustm 0:c61a93635433 269 WIFI_Status_t WIFI_Ping(uint8_t* ipaddr, uint16_t count, uint16_t interval_ms)
adustm 0:c61a93635433 270 {
adustm 0:c61a93635433 271 WIFI_Status_t ret = WIFI_STATUS_ERROR;
adustm 0:c61a93635433 272
adustm 0:c61a93635433 273 if(ES_WIFI_Ping(&EsWifiObj, ipaddr, count, interval_ms) == ES_WIFI_STATUS_OK)
adustm 0:c61a93635433 274 {
adustm 0:c61a93635433 275 ret = WIFI_STATUS_OK;
adustm 0:c61a93635433 276 }
adustm 0:c61a93635433 277 return ret;
adustm 0:c61a93635433 278 }
adustm 0:c61a93635433 279
adustm 0:c61a93635433 280 /**
adustm 0:c61a93635433 281 * @brief Get IP address from URL using DNS
adustm 0:c61a93635433 282 * @param location : Host URL
adustm 0:c61a93635433 283 * @param ipaddr : array of the IP address
adustm 0:c61a93635433 284 * @retval Operation status
adustm 0:c61a93635433 285 */
adustm 0:c61a93635433 286 WIFI_Status_t WIFI_GetHostAddress( char* location, uint8_t* ipaddr)
adustm 0:c61a93635433 287 {
adustm 0:c61a93635433 288 WIFI_Status_t ret = WIFI_STATUS_ERROR;
adustm 0:c61a93635433 289
adustm 0:c61a93635433 290 if (ES_WIFI_DNS_LookUp(&EsWifiObj, location, ipaddr) == ES_WIFI_STATUS_OK)
adustm 0:c61a93635433 291 {
adustm 0:c61a93635433 292 return WIFI_STATUS_OK;
adustm 0:c61a93635433 293 }
adustm 0:c61a93635433 294
adustm 0:c61a93635433 295 return ret;
adustm 0:c61a93635433 296 }
adustm 0:c61a93635433 297 /**
adustm 0:c61a93635433 298 * @brief Configure and start a client connection
adustm 0:c61a93635433 299 * @param type : Connection type TCP/UDP
adustm 0:c61a93635433 300 * @param name : name of the connection
adustm 0:c61a93635433 301 * @param ipaddr : Client IP address
adustm 0:c61a93635433 302 * @param port : Remote port
adustm 0:c61a93635433 303 * @param local_port : Local port
adustm 0:c61a93635433 304 * @retval Operation status
adustm 0:c61a93635433 305 */
adustm 0:c61a93635433 306 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)
adustm 0:c61a93635433 307 {
adustm 0:c61a93635433 308 WIFI_Status_t ret = WIFI_STATUS_ERROR;
adustm 0:c61a93635433 309 ES_WIFI_Conn_t conn;
adustm 0:c61a93635433 310
adustm 0:c61a93635433 311 conn.Number = socket;
adustm 0:c61a93635433 312 conn.RemotePort = port;
adustm 0:c61a93635433 313 conn.LocalPort = local_port;
adustm 0:c61a93635433 314 conn.Type = (type == WIFI_TCP_PROTOCOL)? ES_WIFI_TCP_CONNECTION : ES_WIFI_UDP_CONNECTION;
adustm 0:c61a93635433 315 conn.RemoteIP[0] = ipaddr[0];
adustm 0:c61a93635433 316 conn.RemoteIP[1] = ipaddr[1];
adustm 0:c61a93635433 317 conn.RemoteIP[2] = ipaddr[2];
adustm 0:c61a93635433 318 conn.RemoteIP[3] = ipaddr[3];
adustm 0:c61a93635433 319 if(ES_WIFI_StartClientConnection(&EsWifiObj, &conn)== ES_WIFI_STATUS_OK)
adustm 0:c61a93635433 320 {
adustm 0:c61a93635433 321 ret = WIFI_STATUS_OK;
adustm 0:c61a93635433 322 }
adustm 0:c61a93635433 323 return ret;
adustm 0:c61a93635433 324 }
adustm 0:c61a93635433 325
adustm 0:c61a93635433 326 /**
adustm 0:c61a93635433 327 * @brief Close client connection
adustm 0:c61a93635433 328 * @param type : Connection type TCP/UDP
adustm 0:c61a93635433 329 * @param name : name of the connection
adustm 0:c61a93635433 330 * @param location : Client address
adustm 0:c61a93635433 331 * @param port : Remote port
adustm 0:c61a93635433 332 * @param local_port : Local port
adustm 0:c61a93635433 333 * @retval Operation status
adustm 0:c61a93635433 334 */
adustm 0:c61a93635433 335 WIFI_Status_t WIFI_CloseClientConnection(uint32_t socket)
adustm 0:c61a93635433 336 {
adustm 0:c61a93635433 337 WIFI_Status_t ret = WIFI_STATUS_ERROR;
adustm 0:c61a93635433 338 ES_WIFI_Conn_t conn;
adustm 0:c61a93635433 339 conn.Number = socket;
adustm 0:c61a93635433 340
adustm 0:c61a93635433 341 if(ES_WIFI_StopClientConnection(&EsWifiObj, &conn)== ES_WIFI_STATUS_OK)
adustm 0:c61a93635433 342 {
adustm 0:c61a93635433 343 ret = WIFI_STATUS_OK;
adustm 0:c61a93635433 344 }
adustm 0:c61a93635433 345 return ret;
adustm 0:c61a93635433 346 }
adustm 0:c61a93635433 347
adustm 0:c61a93635433 348 /**
adustm 0:c61a93635433 349 * @brief Configure and start a Server
adustm 0:c61a93635433 350 * @param type : Connection type TCP/UDP
adustm 0:c61a93635433 351 * @param name : name of the connection
adustm 0:c61a93635433 352 * @param port : Remote port
adustm 0:c61a93635433 353 * @retval Operation status
adustm 0:c61a93635433 354 */
adustm 0:c61a93635433 355 WIFI_Status_t WIFI_StartServer(uint32_t socket, WIFI_Protocol_t protocol, const char* name, uint16_t port)
adustm 0:c61a93635433 356 {
adustm 0:c61a93635433 357 WIFI_Status_t ret = WIFI_STATUS_ERROR;
adustm 0:c61a93635433 358 ES_WIFI_Conn_t conn;
adustm 0:c61a93635433 359 conn.Number = socket;
adustm 0:c61a93635433 360 conn.LocalPort = port;
adustm 0:c61a93635433 361 conn.Type = (protocol == WIFI_TCP_PROTOCOL)? ES_WIFI_TCP_CONNECTION : ES_WIFI_UDP_CONNECTION;
adustm 0:c61a93635433 362 if(ES_WIFI_StartServerSingleConn(&EsWifiObj, &conn)== ES_WIFI_STATUS_OK)
adustm 0:c61a93635433 363 {
adustm 0:c61a93635433 364 ret = WIFI_STATUS_OK;
adustm 0:c61a93635433 365 }
adustm 0:c61a93635433 366 return ret;
adustm 0:c61a93635433 367 }
adustm 0:c61a93635433 368
adustm 0:c61a93635433 369 /**
adustm 0:c61a93635433 370 * @brief Stop a server
adustm 0:c61a93635433 371 * @retval Operation status
adustm 0:c61a93635433 372 */
adustm 0:c61a93635433 373 WIFI_Status_t WIFI_StopServer(uint32_t socket)
adustm 0:c61a93635433 374 {
adustm 0:c61a93635433 375 WIFI_Status_t ret = WIFI_STATUS_ERROR;
adustm 0:c61a93635433 376
adustm 0:c61a93635433 377 if(ES_WIFI_StopServerSingleConn(&EsWifiObj)== ES_WIFI_STATUS_OK)
adustm 0:c61a93635433 378 {
adustm 0:c61a93635433 379 ret = WIFI_STATUS_OK;
adustm 0:c61a93635433 380 }
adustm 0:c61a93635433 381 return ret;
adustm 0:c61a93635433 382 }
adustm 0:c61a93635433 383 /**
adustm 0:c61a93635433 384 * @brief Send Data on a socket
adustm 0:c61a93635433 385 * @param pdata : pointer to data to be sent
adustm 0:c61a93635433 386 * @param len : length of data to be sent
adustm 0:c61a93635433 387 * @retval Operation status
adustm 0:c61a93635433 388 */
adustm 0:c61a93635433 389 WIFI_Status_t WIFI_SendData(uint8_t socket, uint8_t *pdata, uint16_t Reqlen, uint16_t *SentDatalen, uint32_t Timeout)
adustm 0:c61a93635433 390 {
adustm 0:c61a93635433 391 WIFI_Status_t ret = WIFI_STATUS_ERROR;
adustm 0:c61a93635433 392
adustm 0:c61a93635433 393 if(ES_WIFI_SendData(&EsWifiObj, socket, pdata, Reqlen, SentDatalen, Timeout) == ES_WIFI_STATUS_OK)
adustm 0:c61a93635433 394 {
adustm 0:c61a93635433 395 ret = WIFI_STATUS_OK;
adustm 0:c61a93635433 396 }
adustm 0:c61a93635433 397
adustm 0:c61a93635433 398 return ret;
adustm 0:c61a93635433 399 }
adustm 0:c61a93635433 400
adustm 0:c61a93635433 401 /**
adustm 0:c61a93635433 402 * @brief Receive Data from a socket
adustm 0:c61a93635433 403 * @param pdata : pointer to Rx buffer
adustm 0:c61a93635433 404 * @param *len : pointer to length of data
adustm 0:c61a93635433 405 * @retval Operation status
adustm 0:c61a93635433 406 */
adustm 0:c61a93635433 407 WIFI_Status_t WIFI_ReceiveData(uint8_t socket, uint8_t *pdata, uint16_t Reqlen, uint16_t *RcvDatalen, uint32_t Timeout)
adustm 0:c61a93635433 408 {
adustm 0:c61a93635433 409 WIFI_Status_t ret = WIFI_STATUS_ERROR;
adustm 0:c61a93635433 410
adustm 0:c61a93635433 411 if(ES_WIFI_ReceiveData(&EsWifiObj, socket, pdata, Reqlen, RcvDatalen, Timeout) == ES_WIFI_STATUS_OK)
adustm 0:c61a93635433 412 {
adustm 0:c61a93635433 413 ret = WIFI_STATUS_OK;
adustm 0:c61a93635433 414 }
adustm 0:c61a93635433 415 return ret;
adustm 0:c61a93635433 416 }
adustm 0:c61a93635433 417
adustm 0:c61a93635433 418 /**
adustm 0:c61a93635433 419 * @brief Customize module data
adustm 0:c61a93635433 420 * @param name : MFC name
adustm 0:c61a93635433 421 * @param Mac : Mac Address
adustm 0:c61a93635433 422 * @retval Operation status
adustm 0:c61a93635433 423 */
adustm 0:c61a93635433 424 WIFI_Status_t WIFI_SetOEMProperties(const char *name, uint8_t *Mac)
adustm 0:c61a93635433 425 {
adustm 0:c61a93635433 426 WIFI_Status_t ret = WIFI_STATUS_ERROR;
adustm 0:c61a93635433 427
adustm 0:c61a93635433 428 if(ES_WIFI_SetProductName(&EsWifiObj, (uint8_t *)name) == ES_WIFI_STATUS_OK)
adustm 0:c61a93635433 429 {
adustm 0:c61a93635433 430 if(ES_WIFI_SetMACAddress(&EsWifiObj, Mac) == ES_WIFI_STATUS_OK)
adustm 0:c61a93635433 431 {
adustm 0:c61a93635433 432 ret = WIFI_STATUS_OK;
adustm 0:c61a93635433 433 }
adustm 0:c61a93635433 434 }
adustm 0:c61a93635433 435 return ret;
adustm 0:c61a93635433 436 }
adustm 0:c61a93635433 437
adustm 0:c61a93635433 438 /**
adustm 0:c61a93635433 439 * @brief Reset the WIFI module
adustm 0:c61a93635433 440 * @retval Operation status
adustm 0:c61a93635433 441 */
adustm 0:c61a93635433 442 WIFI_Status_t WIFI_ResetModule(void)
adustm 0:c61a93635433 443 {
adustm 0:c61a93635433 444 WIFI_Status_t ret = WIFI_STATUS_ERROR;
adustm 0:c61a93635433 445
adustm 0:c61a93635433 446 if(ES_WIFI_ResetModule(&EsWifiObj) == ES_WIFI_STATUS_OK)
adustm 0:c61a93635433 447 {
adustm 0:c61a93635433 448 ret = WIFI_STATUS_OK;
adustm 0:c61a93635433 449 }
adustm 0:c61a93635433 450 return ret;
adustm 0:c61a93635433 451 }
adustm 0:c61a93635433 452
adustm 0:c61a93635433 453 /**
adustm 0:c61a93635433 454 * @brief Restore module default configuration
adustm 0:c61a93635433 455 * @retval Operation status
adustm 0:c61a93635433 456 */
adustm 0:c61a93635433 457 WIFI_Status_t WIFI_SetModuleDefault(void)
adustm 0:c61a93635433 458 {
adustm 0:c61a93635433 459 WIFI_Status_t ret = WIFI_STATUS_ERROR;
adustm 0:c61a93635433 460
adustm 0:c61a93635433 461 if(ES_WIFI_ResetToFactoryDefault(&EsWifiObj) == ES_WIFI_STATUS_OK)
adustm 0:c61a93635433 462 {
adustm 0:c61a93635433 463 ret = WIFI_STATUS_OK;
adustm 0:c61a93635433 464 }
adustm 0:c61a93635433 465 return ret;
adustm 0:c61a93635433 466 }
adustm 0:c61a93635433 467
adustm 0:c61a93635433 468
adustm 0:c61a93635433 469 /**
adustm 0:c61a93635433 470 * @brief Update module firmware
adustm 0:c61a93635433 471 * @param location : Binary Location IP address
adustm 0:c61a93635433 472 * @retval Operation status
adustm 0:c61a93635433 473 */
adustm 0:c61a93635433 474 WIFI_Status_t WIFI_ModuleFirmwareUpdate(const char *location)
adustm 0:c61a93635433 475 {
adustm 0:c61a93635433 476 return WIFI_STATUS_NOT_SUPPORTED;
adustm 0:c61a93635433 477 }
adustm 0:c61a93635433 478
adustm 0:c61a93635433 479 /**
adustm 0:c61a93635433 480 * @brief Return Module firmware revision
adustm 0:c61a93635433 481 * @param rev : revision string
adustm 0:c61a93635433 482 * @retval Operation status
adustm 0:c61a93635433 483 */
adustm 0:c61a93635433 484 WIFI_Status_t WIFI_GetModuleFwRevision(char *rev)
adustm 0:c61a93635433 485 {
adustm 0:c61a93635433 486 WIFI_Status_t ret = WIFI_STATUS_ERROR;
adustm 0:c61a93635433 487
adustm 0:c61a93635433 488 if(EsWifiObj.FW_Rev != NULL)
adustm 0:c61a93635433 489 {
adustm 0:c61a93635433 490 strncpy(rev, (char *)EsWifiObj.FW_Rev, ES_WIFI_FW_REV_SIZE);
adustm 0:c61a93635433 491 ret = WIFI_STATUS_OK;
adustm 0:c61a93635433 492 }
adustm 0:c61a93635433 493 return ret;
adustm 0:c61a93635433 494 }
adustm 0:c61a93635433 495
adustm 0:c61a93635433 496 /**
adustm 0:c61a93635433 497 * @brief Return Module ID
adustm 0:c61a93635433 498 * @param Info : Module ID string
adustm 0:c61a93635433 499 * @retval Operation status
adustm 0:c61a93635433 500 */
adustm 0:c61a93635433 501 WIFI_Status_t WIFI_GetModuleID(char *Id)
adustm 0:c61a93635433 502 {
adustm 0:c61a93635433 503 WIFI_Status_t ret = WIFI_STATUS_ERROR;
adustm 0:c61a93635433 504
adustm 0:c61a93635433 505 if(EsWifiObj.Product_ID != NULL)
adustm 0:c61a93635433 506 {
adustm 0:c61a93635433 507 strncpy(Id, (char *)EsWifiObj.Product_ID, ES_WIFI_PRODUCT_ID_SIZE);
adustm 0:c61a93635433 508 ret = WIFI_STATUS_OK;
adustm 0:c61a93635433 509 }
adustm 0:c61a93635433 510 return ret;
adustm 0:c61a93635433 511 }
adustm 0:c61a93635433 512
adustm 0:c61a93635433 513 /**
adustm 0:c61a93635433 514 * @brief Return Module Name
adustm 0:c61a93635433 515 * @param Info : Module Name string
adustm 0:c61a93635433 516 * @retval Operation status
adustm 0:c61a93635433 517 */
adustm 0:c61a93635433 518 WIFI_Status_t WIFI_GetModuleName(char *ModuleName)
adustm 0:c61a93635433 519 {
adustm 0:c61a93635433 520 WIFI_Status_t ret = WIFI_STATUS_ERROR;
adustm 0:c61a93635433 521
adustm 0:c61a93635433 522 if(EsWifiObj.Product_Name != NULL)
adustm 0:c61a93635433 523 {
adustm 0:c61a93635433 524 strncpy(ModuleName, (char *)EsWifiObj.Product_Name, ES_WIFI_PRODUCT_NAME_SIZE);
adustm 0:c61a93635433 525 ret = WIFI_STATUS_OK;
adustm 0:c61a93635433 526 }
adustm 0:c61a93635433 527 return ret;
adustm 0:c61a93635433 528 }
adustm 0:c61a93635433 529 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
adustm 0:c61a93635433 530