DISCO_L475VG_IOT01 wifi library with TCP-SSL support

Dependents:   DISCO_L475VG_IOT01-Telegram-BOT

Committer:
dvddnr
Date:
Wed Jan 24 11:03:18 2018 +0000
Revision:
0:991714b0e830
Child:
1:0ce37d60fe92
first release

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dvddnr 0:991714b0e830 1 /**
dvddnr 0:991714b0e830 2 ******************************************************************************
dvddnr 0:991714b0e830 3 * @file es-wifi.c
dvddnr 0:991714b0e830 4 * @author MCD Application Team
dvddnr 0:991714b0e830 5 * @version V1.8.0
dvddnr 0:991714b0e830 6 * @date 21-April-2017
dvddnr 0:991714b0e830 7 * @brief This file provides a set of functions to manage the es-wifi module.
dvddnr 0:991714b0e830 8 ******************************************************************************
dvddnr 0:991714b0e830 9 * @attention
dvddnr 0:991714b0e830 10 *
dvddnr 0:991714b0e830 11 * <h2><center>&copy; Copyright © 2017 STMicroelectronics International N.V.
dvddnr 0:991714b0e830 12 * All rights reserved.</center></h2>
dvddnr 0:991714b0e830 13 *
dvddnr 0:991714b0e830 14 * Redistribution and use in source and binary forms, with or without
dvddnr 0:991714b0e830 15 * modification, are permitted, provided that the following conditions are met:
dvddnr 0:991714b0e830 16 *
dvddnr 0:991714b0e830 17 * 1. Redistribution of source code must retain the above copyright notice,
dvddnr 0:991714b0e830 18 * this list of conditions and the following disclaimer.
dvddnr 0:991714b0e830 19 * 2. Redistributions in binary form must reproduce the above copyright notice,
dvddnr 0:991714b0e830 20 * this list of conditions and the following disclaimer in the documentation
dvddnr 0:991714b0e830 21 * and/or other materials provided with the distribution.
dvddnr 0:991714b0e830 22 * 3. Neither the name of STMicroelectronics nor the names of other
dvddnr 0:991714b0e830 23 * contributors to this software may be used to endorse or promote products
dvddnr 0:991714b0e830 24 * derived from this software without specific written permission.
dvddnr 0:991714b0e830 25 * 4. This software, including modifications and/or derivative works of this
dvddnr 0:991714b0e830 26 * software, must execute solely and exclusively on microcontroller or
dvddnr 0:991714b0e830 27 * microprocessor devices manufactured by or for STMicroelectronics.
dvddnr 0:991714b0e830 28 * 5. Redistribution and use of this software other than as permitted under
dvddnr 0:991714b0e830 29 * this license is void and will automatically terminate your rights under
dvddnr 0:991714b0e830 30 * this license.
dvddnr 0:991714b0e830 31 *
dvddnr 0:991714b0e830 32 * THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS"
dvddnr 0:991714b0e830 33 * AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
dvddnr 0:991714b0e830 34 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
dvddnr 0:991714b0e830 35 * PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY
dvddnr 0:991714b0e830 36 * RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
dvddnr 0:991714b0e830 37 * SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
dvddnr 0:991714b0e830 38 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
dvddnr 0:991714b0e830 39 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
dvddnr 0:991714b0e830 40 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
dvddnr 0:991714b0e830 41 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
dvddnr 0:991714b0e830 42 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
dvddnr 0:991714b0e830 43 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
dvddnr 0:991714b0e830 44 *
dvddnr 0:991714b0e830 45 ******************************************************************************
dvddnr 0:991714b0e830 46 */
dvddnr 0:991714b0e830 47 /* Includes ------------------------------------------------------------------*/
dvddnr 0:991714b0e830 48 #include "es_wifi.h"
dvddnr 0:991714b0e830 49
dvddnr 0:991714b0e830 50 #define AT_OK_STRING "\r\nOK\r\n> "
dvddnr 0:991714b0e830 51 #define AT_OK_STRING_LEN 8
dvddnr 0:991714b0e830 52
dvddnr 0:991714b0e830 53 #define AT_ERROR_STRING "\r\nERROR"
dvddnr 0:991714b0e830 54
dvddnr 0:991714b0e830 55
dvddnr 0:991714b0e830 56
dvddnr 0:991714b0e830 57 #define CHARISHEXNUM(x) (((x) >= '0' && (x) <= '9') || \
dvddnr 0:991714b0e830 58 ((x) >= 'a' && (x) <= 'f') || \
dvddnr 0:991714b0e830 59 ((x) >= 'A' && (x) <= 'F'))
dvddnr 0:991714b0e830 60
dvddnr 0:991714b0e830 61 #define CHARISNUM(x) ((x) >= '0' && (x) <= '9')
dvddnr 0:991714b0e830 62 #define CHAR2NUM(x) ((x) - '0')
dvddnr 0:991714b0e830 63 /* Private function prototypes -----------------------------------------------*/
dvddnr 0:991714b0e830 64 static uint8_t Hex2Num(char a);
dvddnr 0:991714b0e830 65 static uint32_t ParseHexNumber(char* ptr, uint8_t* cnt);
dvddnr 0:991714b0e830 66 static uint32_t ParseHexNumber(char* ptr, uint8_t* cnt);
dvddnr 0:991714b0e830 67 static void ParseMAC(char* ptr, uint8_t* arr);
dvddnr 0:991714b0e830 68 static void ParseIP(char* ptr, uint8_t* arr);
dvddnr 0:991714b0e830 69 static ES_WIFI_SecurityType_t ParseSecurity(char* ptr);
dvddnr 0:991714b0e830 70 #if (ES_WIFI_USE_UART == 1)
dvddnr 0:991714b0e830 71 static void AT_ParseUARTConfig(char *pdata, ES_WIFI_UARTConfig_t *pConfig);
dvddnr 0:991714b0e830 72 #endif
dvddnr 0:991714b0e830 73 static void AT_ParseSystemConfig(char *pdata, ES_WIFI_SystemConfig_t *pConfig);
dvddnr 0:991714b0e830 74 static void AT_ParseConnSettings(char *pdata, ES_WIFI_Network_t *NetSettings);
dvddnr 0:991714b0e830 75 static ES_WIFI_Status_t AT_ExecuteCommand(ES_WIFIObject_t *Obj, uint8_t* cmd, uint8_t *pdata);
dvddnr 0:991714b0e830 76
dvddnr 0:991714b0e830 77 /* Private functions ---------------------------------------------------------*/
dvddnr 0:991714b0e830 78 /**
dvddnr 0:991714b0e830 79 * @brief Convert char in Hex format to integer.
dvddnr 0:991714b0e830 80 * @param a: character to convert
dvddnr 0:991714b0e830 81 * @retval integer value.
dvddnr 0:991714b0e830 82 */
dvddnr 0:991714b0e830 83 static uint8_t Hex2Num(char a)
dvddnr 0:991714b0e830 84 {
dvddnr 0:991714b0e830 85 if (a >= '0' && a <= '9') { /* Char is num */
dvddnr 0:991714b0e830 86 return a - '0';
dvddnr 0:991714b0e830 87 } else if (a >= 'a' && a <= 'f') { /* Char is lowercase character A - Z (hex) */
dvddnr 0:991714b0e830 88 return (a - 'a') + 10;
dvddnr 0:991714b0e830 89 } else if (a >= 'A' && a <= 'F') { /* Char is uppercase character A - Z (hex) */
dvddnr 0:991714b0e830 90 return (a - 'A') + 10;
dvddnr 0:991714b0e830 91 }
dvddnr 0:991714b0e830 92
dvddnr 0:991714b0e830 93 return 0;
dvddnr 0:991714b0e830 94 }
dvddnr 0:991714b0e830 95
dvddnr 0:991714b0e830 96 /**
dvddnr 0:991714b0e830 97 * @brief Extract a hex number from a string.
dvddnr 0:991714b0e830 98 * @param ptr: pointer to string
dvddnr 0:991714b0e830 99 * @param cnt: pointer to the number of parsed digit
dvddnr 0:991714b0e830 100 * @retval Hex value.
dvddnr 0:991714b0e830 101 */
dvddnr 0:991714b0e830 102 static uint32_t ParseHexNumber(char* ptr, uint8_t* cnt)
dvddnr 0:991714b0e830 103 {
dvddnr 0:991714b0e830 104 uint32_t sum = 0;
dvddnr 0:991714b0e830 105 uint8_t i = 0;
dvddnr 0:991714b0e830 106
dvddnr 0:991714b0e830 107 while (CHARISHEXNUM(*ptr)) { /* Parse number */
dvddnr 0:991714b0e830 108 sum <<= 4;
dvddnr 0:991714b0e830 109 sum += Hex2Num(*ptr);
dvddnr 0:991714b0e830 110 ptr++;
dvddnr 0:991714b0e830 111 i++;
dvddnr 0:991714b0e830 112 }
dvddnr 0:991714b0e830 113
dvddnr 0:991714b0e830 114 if (cnt != NULL) { /* Save number of characters used for number */
dvddnr 0:991714b0e830 115 *cnt = i;
dvddnr 0:991714b0e830 116 }
dvddnr 0:991714b0e830 117 return sum; /* Return number */
dvddnr 0:991714b0e830 118 }
dvddnr 0:991714b0e830 119
dvddnr 0:991714b0e830 120 /**
dvddnr 0:991714b0e830 121 * @brief Parses and returns number from string.
dvddnr 0:991714b0e830 122 * @param ptr: pointer to string
dvddnr 0:991714b0e830 123 * @param cnt: pointer to the number of parsed digit
dvddnr 0:991714b0e830 124 * @retval integer value.
dvddnr 0:991714b0e830 125 */
dvddnr 0:991714b0e830 126 static int32_t ParseNumber(char* ptr, uint8_t* cnt)
dvddnr 0:991714b0e830 127 {
dvddnr 0:991714b0e830 128 uint8_t minus = 0, i = 0;
dvddnr 0:991714b0e830 129 int32_t sum = 0;
dvddnr 0:991714b0e830 130
dvddnr 0:991714b0e830 131 if (*ptr == '-') { /* Check for minus character */
dvddnr 0:991714b0e830 132 minus = 1;
dvddnr 0:991714b0e830 133 ptr++;
dvddnr 0:991714b0e830 134 i++;
dvddnr 0:991714b0e830 135 }
dvddnr 0:991714b0e830 136 while (CHARISNUM(*ptr)) { /* Parse number */
dvddnr 0:991714b0e830 137 sum = 10 * sum + CHAR2NUM(*ptr);
dvddnr 0:991714b0e830 138 ptr++;
dvddnr 0:991714b0e830 139 i++;
dvddnr 0:991714b0e830 140 }
dvddnr 0:991714b0e830 141 if (cnt != NULL) { /* Save number of characters used for number */
dvddnr 0:991714b0e830 142 *cnt = i;
dvddnr 0:991714b0e830 143 }
dvddnr 0:991714b0e830 144 if (minus) { /* Minus detected */
dvddnr 0:991714b0e830 145 return 0 - sum;
dvddnr 0:991714b0e830 146 }
dvddnr 0:991714b0e830 147 return sum; /* Return number */
dvddnr 0:991714b0e830 148 }
dvddnr 0:991714b0e830 149
dvddnr 0:991714b0e830 150 /**
dvddnr 0:991714b0e830 151 * @brief Parses and returns MAC address.
dvddnr 0:991714b0e830 152 * @param ptr: pointer to string
dvddnr 0:991714b0e830 153 * @param arr: pointer to MAC array
dvddnr 0:991714b0e830 154 * @retval None.
dvddnr 0:991714b0e830 155 */
dvddnr 0:991714b0e830 156 static void ParseMAC(char* ptr, uint8_t* arr)
dvddnr 0:991714b0e830 157 {
dvddnr 0:991714b0e830 158 uint8_t hexnum = 0, hexcnt;
dvddnr 0:991714b0e830 159
dvddnr 0:991714b0e830 160 while(* ptr) {
dvddnr 0:991714b0e830 161 hexcnt = 1;
dvddnr 0:991714b0e830 162 if(*ptr != ':')
dvddnr 0:991714b0e830 163 {
dvddnr 0:991714b0e830 164 arr[hexnum++] = ParseHexNumber(ptr, &hexcnt);
dvddnr 0:991714b0e830 165 }
dvddnr 0:991714b0e830 166 ptr = ptr + hexcnt;
dvddnr 0:991714b0e830 167 }
dvddnr 0:991714b0e830 168 }
dvddnr 0:991714b0e830 169
dvddnr 0:991714b0e830 170 /**
dvddnr 0:991714b0e830 171 * @brief Parses and returns IP address.
dvddnr 0:991714b0e830 172 * @param ptr: pointer to string
dvddnr 0:991714b0e830 173 * @param arr: pointer to IP array
dvddnr 0:991714b0e830 174 * @retval None.
dvddnr 0:991714b0e830 175 */
dvddnr 0:991714b0e830 176 static void ParseIP(char* ptr, uint8_t* arr)
dvddnr 0:991714b0e830 177 {
dvddnr 0:991714b0e830 178 uint8_t hexnum = 0, hexcnt;
dvddnr 0:991714b0e830 179
dvddnr 0:991714b0e830 180 while(* ptr) {
dvddnr 0:991714b0e830 181 hexcnt = 1;
dvddnr 0:991714b0e830 182 if(*ptr != '.')
dvddnr 0:991714b0e830 183 {
dvddnr 0:991714b0e830 184 arr[hexnum++] = ParseNumber(ptr, &hexcnt);
dvddnr 0:991714b0e830 185 }
dvddnr 0:991714b0e830 186 ptr = ptr + hexcnt;
dvddnr 0:991714b0e830 187 }
dvddnr 0:991714b0e830 188 }
dvddnr 0:991714b0e830 189
dvddnr 0:991714b0e830 190 /**
dvddnr 0:991714b0e830 191 * @brief Parses Security type.
dvddnr 0:991714b0e830 192 * @param ptr: pointer to string
dvddnr 0:991714b0e830 193 * @retval Encryption type.
dvddnr 0:991714b0e830 194 */
dvddnr 0:991714b0e830 195 static ES_WIFI_SecurityType_t ParseSecurity(char* ptr)
dvddnr 0:991714b0e830 196 {
dvddnr 0:991714b0e830 197 if(strstr(ptr,"Open")) return ES_WIFI_SEC_OPEN;
dvddnr 0:991714b0e830 198 else if(strstr(ptr,"WEP")) return ES_WIFI_SEC_WEP;
dvddnr 0:991714b0e830 199 else if(strstr(ptr,"WPA")) return ES_WIFI_SEC_WPA;
dvddnr 0:991714b0e830 200 else if(strstr(ptr,"WPA2")) return ES_WIFI_SEC_WPA2;
dvddnr 0:991714b0e830 201 else if(strstr(ptr,"WPA WPA2")) return ES_WIFI_SEC_WPA_WPA2;
dvddnr 0:991714b0e830 202 else if(strstr(ptr,"WPA2 TKIP")) return ES_WIFI_SEC_WPA2_TKIP;
dvddnr 0:991714b0e830 203 else return ES_WIFI_SEC_UNKNOWN;
dvddnr 0:991714b0e830 204 }
dvddnr 0:991714b0e830 205
dvddnr 0:991714b0e830 206 /**
dvddnr 0:991714b0e830 207 * @brief Parses ES module informations and save them in the handle.
dvddnr 0:991714b0e830 208 * @param Obj: pointer to module handle
dvddnr 0:991714b0e830 209 * @param ptr: pointer to string
dvddnr 0:991714b0e830 210 * @retval None.
dvddnr 0:991714b0e830 211 */
dvddnr 0:991714b0e830 212 static void AT_ParseInfo(ES_WIFIObject_t *Obj,uint8_t *pdata)
dvddnr 0:991714b0e830 213 {
dvddnr 0:991714b0e830 214 char *ptr;
dvddnr 0:991714b0e830 215 uint8_t num = 0;
dvddnr 0:991714b0e830 216
dvddnr 0:991714b0e830 217 ptr = strtok((char *)pdata + 2, ",");
dvddnr 0:991714b0e830 218
dvddnr 0:991714b0e830 219 while (ptr != NULL){
dvddnr 0:991714b0e830 220 switch (num++) {
dvddnr 0:991714b0e830 221 case 0:
dvddnr 0:991714b0e830 222 strncpy((char *)Obj->Product_ID, ptr, ES_WIFI_PRODUCT_ID_SIZE);
dvddnr 0:991714b0e830 223 break;
dvddnr 0:991714b0e830 224
dvddnr 0:991714b0e830 225 case 1:
dvddnr 0:991714b0e830 226 strncpy((char *)Obj->FW_Rev, ptr, ES_WIFI_FW_REV_SIZE );
dvddnr 0:991714b0e830 227 break;
dvddnr 0:991714b0e830 228
dvddnr 0:991714b0e830 229 case 2:
dvddnr 0:991714b0e830 230 strncpy((char *)Obj->API_Rev, ptr, ES_WIFI_API_REV_SIZE);
dvddnr 0:991714b0e830 231 break;
dvddnr 0:991714b0e830 232
dvddnr 0:991714b0e830 233 case 3:
dvddnr 0:991714b0e830 234 strncpy((char *)Obj->Stack_Rev, ptr, ES_WIFI_STACK_REV_SIZE);
dvddnr 0:991714b0e830 235 break;
dvddnr 0:991714b0e830 236
dvddnr 0:991714b0e830 237 case 4:
dvddnr 0:991714b0e830 238 strncpy((char *)Obj->RTOS_Rev, ptr, ES_WIFI_RTOS_REV_SIZE);
dvddnr 0:991714b0e830 239 break;
dvddnr 0:991714b0e830 240
dvddnr 0:991714b0e830 241 case 5:
dvddnr 0:991714b0e830 242 Obj->CPU_Clock = ParseNumber(ptr, NULL);
dvddnr 0:991714b0e830 243 break;
dvddnr 0:991714b0e830 244
dvddnr 0:991714b0e830 245 case 6:
dvddnr 0:991714b0e830 246 ptr = strtok(ptr, "\r");
dvddnr 0:991714b0e830 247 strncpy((char *)Obj->Product_Name, ptr, ES_WIFI_PRODUCT_NAME_SIZE);
dvddnr 0:991714b0e830 248 break;
dvddnr 0:991714b0e830 249
dvddnr 0:991714b0e830 250 default: break;
dvddnr 0:991714b0e830 251 }
dvddnr 0:991714b0e830 252 ptr = strtok(NULL, ",");
dvddnr 0:991714b0e830 253 }
dvddnr 0:991714b0e830 254 }
dvddnr 0:991714b0e830 255
dvddnr 0:991714b0e830 256 /**
dvddnr 0:991714b0e830 257 * @brief Parses Access point configuration.
dvddnr 0:991714b0e830 258 * @param APs: Access points structure
dvddnr 0:991714b0e830 259 * @param ptr: pointer to string
dvddnr 0:991714b0e830 260 * @retval None.
dvddnr 0:991714b0e830 261 */
dvddnr 0:991714b0e830 262 static void AT_ParseAP(char *pdata, ES_WIFI_APs_t *APs)
dvddnr 0:991714b0e830 263 {
dvddnr 0:991714b0e830 264 uint8_t num = 0;
dvddnr 0:991714b0e830 265 char *ptr;
dvddnr 0:991714b0e830 266 APs->nbr = 0;
dvddnr 0:991714b0e830 267
dvddnr 0:991714b0e830 268 ptr = strtok(pdata + 2, ",");
dvddnr 0:991714b0e830 269
dvddnr 0:991714b0e830 270 while ((ptr != NULL) && (APs->nbr < ES_WIFI_MAX_DETECTED_AP)) {
dvddnr 0:991714b0e830 271 switch (num++) {
dvddnr 0:991714b0e830 272 case 0: /* Ignore index */
dvddnr 0:991714b0e830 273 case 4: /* Ignore Max Rate */
dvddnr 0:991714b0e830 274 case 5: /* Ignore Network Type */
dvddnr 0:991714b0e830 275 case 7: /* Ignore Radio Band */
dvddnr 0:991714b0e830 276 break;
dvddnr 0:991714b0e830 277
dvddnr 0:991714b0e830 278 case 1:
dvddnr 0:991714b0e830 279 ptr[strlen(ptr) - 1] = 0;
dvddnr 0:991714b0e830 280 strncpy((char *)APs->AP[APs->nbr].SSID, ptr+ 1, ES_WIFI_MAX_SSID_NAME_SIZE + 1);
dvddnr 0:991714b0e830 281 break;
dvddnr 0:991714b0e830 282
dvddnr 0:991714b0e830 283 case 2:
dvddnr 0:991714b0e830 284 ParseMAC(ptr, APs->AP[APs->nbr].MAC);
dvddnr 0:991714b0e830 285 break;
dvddnr 0:991714b0e830 286
dvddnr 0:991714b0e830 287 case 3:
dvddnr 0:991714b0e830 288 APs->AP[APs->nbr].RSSI = ParseNumber(ptr, NULL);
dvddnr 0:991714b0e830 289 break;
dvddnr 0:991714b0e830 290
dvddnr 0:991714b0e830 291 case 6:
dvddnr 0:991714b0e830 292 APs->AP[APs->nbr].Security = ParseSecurity(ptr);
dvddnr 0:991714b0e830 293 break;
dvddnr 0:991714b0e830 294
dvddnr 0:991714b0e830 295 case 8:
dvddnr 0:991714b0e830 296 APs->AP[APs->nbr].Channel = ParseNumber(ptr, NULL);
dvddnr 0:991714b0e830 297 APs->nbr++;
dvddnr 0:991714b0e830 298 num = 1;
dvddnr 0:991714b0e830 299 break;
dvddnr 0:991714b0e830 300
dvddnr 0:991714b0e830 301 default:
dvddnr 0:991714b0e830 302 break;
dvddnr 0:991714b0e830 303 }
dvddnr 0:991714b0e830 304 ptr = strtok(NULL, ",");
dvddnr 0:991714b0e830 305 }
dvddnr 0:991714b0e830 306 }
dvddnr 0:991714b0e830 307
dvddnr 0:991714b0e830 308 #if (ES_WIFI_USE_UART == 1)
dvddnr 0:991714b0e830 309 /**
dvddnr 0:991714b0e830 310 * @brief Parses UART configuration.
dvddnr 0:991714b0e830 311 * @param APs: UART Config structure
dvddnr 0:991714b0e830 312 * @param ptr: pointer to string
dvddnr 0:991714b0e830 313 * @retval None.
dvddnr 0:991714b0e830 314 */
dvddnr 0:991714b0e830 315 static void AT_ParseUARTConfig(char *pdata, ES_WIFI_UARTConfig_t *pConfig)
dvddnr 0:991714b0e830 316 {
dvddnr 0:991714b0e830 317 uint8_t num = 0;
dvddnr 0:991714b0e830 318 char *ptr;
dvddnr 0:991714b0e830 319
dvddnr 0:991714b0e830 320 ptr = strtok(pdata + 2, ",");
dvddnr 0:991714b0e830 321
dvddnr 0:991714b0e830 322 while (ptr != NULL) {
dvddnr 0:991714b0e830 323 switch (num++) {
dvddnr 0:991714b0e830 324 case 0:
dvddnr 0:991714b0e830 325 pConfig->Port = ParseNumber(ptr, NULL);
dvddnr 0:991714b0e830 326 break;
dvddnr 0:991714b0e830 327
dvddnr 0:991714b0e830 328 case 1:
dvddnr 0:991714b0e830 329 pConfig->BaudRate = ParseNumber(ptr, NULL);
dvddnr 0:991714b0e830 330 break;
dvddnr 0:991714b0e830 331
dvddnr 0:991714b0e830 332 case 2:
dvddnr 0:991714b0e830 333 pConfig->DataWidth = ParseNumber(ptr, NULL);
dvddnr 0:991714b0e830 334 break;
dvddnr 0:991714b0e830 335
dvddnr 0:991714b0e830 336 case 3:
dvddnr 0:991714b0e830 337 pConfig->Parity = ParseNumber(ptr, NULL);
dvddnr 0:991714b0e830 338 break;
dvddnr 0:991714b0e830 339
dvddnr 0:991714b0e830 340 case 4:
dvddnr 0:991714b0e830 341 pConfig->StopBits = ParseNumber(ptr, NULL);
dvddnr 0:991714b0e830 342 break;
dvddnr 0:991714b0e830 343
dvddnr 0:991714b0e830 344 case 5:
dvddnr 0:991714b0e830 345 pConfig->Mode = ParseNumber(ptr, NULL);
dvddnr 0:991714b0e830 346 break;
dvddnr 0:991714b0e830 347
dvddnr 0:991714b0e830 348 default:
dvddnr 0:991714b0e830 349 break;
dvddnr 0:991714b0e830 350 }
dvddnr 0:991714b0e830 351 ptr = strtok(NULL, ",");
dvddnr 0:991714b0e830 352 }
dvddnr 0:991714b0e830 353 }
dvddnr 0:991714b0e830 354 #endif
dvddnr 0:991714b0e830 355
dvddnr 0:991714b0e830 356 /**
dvddnr 0:991714b0e830 357 * @brief Parses System configuration.
dvddnr 0:991714b0e830 358 * @param APs: System Config structure
dvddnr 0:991714b0e830 359 * @param ptr: pointer to string
dvddnr 0:991714b0e830 360 * @retval None.
dvddnr 0:991714b0e830 361 */
dvddnr 0:991714b0e830 362 static void AT_ParseSystemConfig(char *pdata, ES_WIFI_SystemConfig_t *pConfig)
dvddnr 0:991714b0e830 363 {
dvddnr 0:991714b0e830 364 uint8_t num = 0;
dvddnr 0:991714b0e830 365 char *ptr;
dvddnr 0:991714b0e830 366
dvddnr 0:991714b0e830 367 ptr = strtok(pdata + 2, ",");
dvddnr 0:991714b0e830 368
dvddnr 0:991714b0e830 369 while (ptr != NULL) {
dvddnr 0:991714b0e830 370 switch (num++) {
dvddnr 0:991714b0e830 371 case 0:
dvddnr 0:991714b0e830 372 pConfig->Configuration = ParseNumber(ptr, NULL);
dvddnr 0:991714b0e830 373 break;
dvddnr 0:991714b0e830 374
dvddnr 0:991714b0e830 375 case 1:
dvddnr 0:991714b0e830 376 pConfig->WPSPin = ParseNumber(ptr, NULL);
dvddnr 0:991714b0e830 377 break;
dvddnr 0:991714b0e830 378
dvddnr 0:991714b0e830 379 case 2:
dvddnr 0:991714b0e830 380 pConfig->VID = ParseNumber(ptr, NULL);
dvddnr 0:991714b0e830 381 break;
dvddnr 0:991714b0e830 382
dvddnr 0:991714b0e830 383 case 3:
dvddnr 0:991714b0e830 384 pConfig->PID = ParseNumber(ptr, NULL);
dvddnr 0:991714b0e830 385 break;
dvddnr 0:991714b0e830 386
dvddnr 0:991714b0e830 387 case 4:
dvddnr 0:991714b0e830 388 ParseMAC(ptr, pConfig->MAC);
dvddnr 0:991714b0e830 389 break;
dvddnr 0:991714b0e830 390
dvddnr 0:991714b0e830 391 case 5:
dvddnr 0:991714b0e830 392 ParseIP(ptr, pConfig->AP_IPAddress);
dvddnr 0:991714b0e830 393 break;
dvddnr 0:991714b0e830 394
dvddnr 0:991714b0e830 395 case 6:
dvddnr 0:991714b0e830 396 pConfig->PS_Mode = ParseNumber(ptr, NULL);
dvddnr 0:991714b0e830 397 break;
dvddnr 0:991714b0e830 398
dvddnr 0:991714b0e830 399 case 7:
dvddnr 0:991714b0e830 400 pConfig->RadioMode = ParseNumber(ptr, NULL);
dvddnr 0:991714b0e830 401 break;
dvddnr 0:991714b0e830 402
dvddnr 0:991714b0e830 403 case 8:
dvddnr 0:991714b0e830 404 pConfig->CurrentBeacon = ParseNumber(ptr, NULL);
dvddnr 0:991714b0e830 405 break;
dvddnr 0:991714b0e830 406
dvddnr 0:991714b0e830 407 case 9:
dvddnr 0:991714b0e830 408 pConfig->PrevBeacon = ParseNumber(ptr, NULL);
dvddnr 0:991714b0e830 409 break;
dvddnr 0:991714b0e830 410
dvddnr 0:991714b0e830 411 case 10:
dvddnr 0:991714b0e830 412 pConfig->ProductName = ParseNumber(ptr, NULL);
dvddnr 0:991714b0e830 413 break;
dvddnr 0:991714b0e830 414
dvddnr 0:991714b0e830 415 default:
dvddnr 0:991714b0e830 416 break;
dvddnr 0:991714b0e830 417 }
dvddnr 0:991714b0e830 418 ptr = strtok(NULL, ",");
dvddnr 0:991714b0e830 419 }
dvddnr 0:991714b0e830 420 }
dvddnr 0:991714b0e830 421
dvddnr 0:991714b0e830 422
dvddnr 0:991714b0e830 423 /**
dvddnr 0:991714b0e830 424 * @brief Parses WIFI connection settings.
dvddnr 0:991714b0e830 425 * @param NetSettings: settings
dvddnr 0:991714b0e830 426 * @param pdata: pointer to data
dvddnr 0:991714b0e830 427 * @retval None.
dvddnr 0:991714b0e830 428 */
dvddnr 0:991714b0e830 429 static void AT_ParseConnSettings(char *pdata, ES_WIFI_Network_t *NetSettings)
dvddnr 0:991714b0e830 430 {
dvddnr 0:991714b0e830 431 uint8_t num = 0;
dvddnr 0:991714b0e830 432 char *ptr;
dvddnr 0:991714b0e830 433
dvddnr 0:991714b0e830 434 ptr = strtok(pdata + 2, ",");
dvddnr 0:991714b0e830 435
dvddnr 0:991714b0e830 436 while (ptr != NULL) {
dvddnr 0:991714b0e830 437 switch (num++) {
dvddnr 0:991714b0e830 438 case 0:
dvddnr 0:991714b0e830 439 strncpy((char *)NetSettings->SSID, ptr, ES_WIFI_MAX_SSID_NAME_SIZE + 1);
dvddnr 0:991714b0e830 440 break;
dvddnr 0:991714b0e830 441
dvddnr 0:991714b0e830 442 case 1:
dvddnr 0:991714b0e830 443 strncpy((char *)NetSettings->pswd, ptr, ES_WIFI_MAX_PSWD_NAME_SIZE + 1);
dvddnr 0:991714b0e830 444 break;
dvddnr 0:991714b0e830 445
dvddnr 0:991714b0e830 446 case 2:
dvddnr 0:991714b0e830 447 NetSettings->Security = (ES_WIFI_SecurityType_t)ParseNumber(ptr, NULL);
dvddnr 0:991714b0e830 448 break;
dvddnr 0:991714b0e830 449
dvddnr 0:991714b0e830 450 case 3:
dvddnr 0:991714b0e830 451 NetSettings->DHCP_IsEnabled = ParseNumber(ptr, NULL);
dvddnr 0:991714b0e830 452 break;
dvddnr 0:991714b0e830 453
dvddnr 0:991714b0e830 454 case 4:
dvddnr 0:991714b0e830 455 NetSettings->IP_Ver = (ES_WIFI_IPVer_t)ParseNumber(ptr, NULL);
dvddnr 0:991714b0e830 456 break;
dvddnr 0:991714b0e830 457
dvddnr 0:991714b0e830 458 case 5:
dvddnr 0:991714b0e830 459 ParseIP(ptr, NetSettings->IP_Addr);
dvddnr 0:991714b0e830 460 break;
dvddnr 0:991714b0e830 461
dvddnr 0:991714b0e830 462 case 6:
dvddnr 0:991714b0e830 463 ParseIP(ptr, NetSettings->IP_Mask);
dvddnr 0:991714b0e830 464 break;
dvddnr 0:991714b0e830 465
dvddnr 0:991714b0e830 466 case 7:
dvddnr 0:991714b0e830 467 ParseIP(ptr, NetSettings->Gateway_Addr);
dvddnr 0:991714b0e830 468 break;
dvddnr 0:991714b0e830 469
dvddnr 0:991714b0e830 470 case 8:
dvddnr 0:991714b0e830 471 ParseIP(ptr, NetSettings->DNS1);
dvddnr 0:991714b0e830 472 break;
dvddnr 0:991714b0e830 473
dvddnr 0:991714b0e830 474 case 9:
dvddnr 0:991714b0e830 475 ParseIP(ptr, NetSettings->DNS2);
dvddnr 0:991714b0e830 476 break;
dvddnr 0:991714b0e830 477
dvddnr 0:991714b0e830 478 case 10:
dvddnr 0:991714b0e830 479 NetSettings->JoinRetries = ParseNumber(ptr, NULL);
dvddnr 0:991714b0e830 480 break;
dvddnr 0:991714b0e830 481
dvddnr 0:991714b0e830 482 case 11:
dvddnr 0:991714b0e830 483 NetSettings->AutoConnect = ParseNumber(ptr, NULL);
dvddnr 0:991714b0e830 484 break;
dvddnr 0:991714b0e830 485
dvddnr 0:991714b0e830 486 default:
dvddnr 0:991714b0e830 487 break;
dvddnr 0:991714b0e830 488 }
dvddnr 0:991714b0e830 489 ptr = strtok(NULL, ",");
dvddnr 0:991714b0e830 490 if ((ptr != NULL) && (ptr[-1] == ','))
dvddnr 0:991714b0e830 491 { /* Ignore empty fields */
dvddnr 0:991714b0e830 492 num++;
dvddnr 0:991714b0e830 493 }
dvddnr 0:991714b0e830 494 }
dvddnr 0:991714b0e830 495 }
dvddnr 0:991714b0e830 496
dvddnr 0:991714b0e830 497 /**
dvddnr 0:991714b0e830 498 * @brief Execute AT command.
dvddnr 0:991714b0e830 499 * @param Obj: pointer to module handle
dvddnr 0:991714b0e830 500 * @param cmd: pointer to command string
dvddnr 0:991714b0e830 501 * @param pdata: pointer to returned data
dvddnr 0:991714b0e830 502 * @retval Operation Status.
dvddnr 0:991714b0e830 503 */
dvddnr 0:991714b0e830 504 static ES_WIFI_Status_t AT_ExecuteCommand(ES_WIFIObject_t *Obj, uint8_t* cmd, uint8_t *pdata)
dvddnr 0:991714b0e830 505 {
dvddnr 0:991714b0e830 506 if(Obj->fops.IO_Send(cmd, strlen((char*)cmd), Obj->Timeout) > 0)
dvddnr 0:991714b0e830 507 {
dvddnr 0:991714b0e830 508 int16_t n=Obj->fops.IO_Receive(pdata, 0, Obj->Timeout);
dvddnr 0:991714b0e830 509 if(n > 0)
dvddnr 0:991714b0e830 510 {
dvddnr 0:991714b0e830 511 *(pdata+n)=0;
dvddnr 0:991714b0e830 512 if(strstr((char *)pdata, AT_OK_STRING))
dvddnr 0:991714b0e830 513 {
dvddnr 0:991714b0e830 514 return ES_WIFI_STATUS_OK;
dvddnr 0:991714b0e830 515 }
dvddnr 0:991714b0e830 516 else if(strstr((char *)pdata, AT_ERROR_STRING))
dvddnr 0:991714b0e830 517 {
dvddnr 0:991714b0e830 518 return ES_WIFI_STATUS_ERROR;
dvddnr 0:991714b0e830 519 }
dvddnr 0:991714b0e830 520 }
dvddnr 0:991714b0e830 521 }
dvddnr 0:991714b0e830 522 return ES_WIFI_STATUS_IO_ERROR;
dvddnr 0:991714b0e830 523 }
dvddnr 0:991714b0e830 524
dvddnr 0:991714b0e830 525 /**
dvddnr 0:991714b0e830 526 * @brief Execute AT command with data.
dvddnr 0:991714b0e830 527 * @param Obj: pointer to module handle
dvddnr 0:991714b0e830 528 * @param cmd: pointer to command string
dvddnr 0:991714b0e830 529 * @param pcmd_data: pointer to binary data
dvddnr 0:991714b0e830 530 * @param len: binary data length
dvddnr 0:991714b0e830 531 * @param pdata: pointer to returned data
dvddnr 0:991714b0e830 532 * @retval Operation Status.
dvddnr 0:991714b0e830 533 */
dvddnr 0:991714b0e830 534 static ES_WIFI_Status_t AT_RequestSendData(ES_WIFIObject_t *Obj, uint8_t* cmd, uint8_t *pcmd_data, uint16_t len, uint8_t *pdata)
dvddnr 0:991714b0e830 535 {
dvddnr 0:991714b0e830 536 /* can send only even number of byte on first send */
dvddnr 0:991714b0e830 537 uint16_t n=strlen((char*)cmd);
dvddnr 0:991714b0e830 538 if (n &1 ) return ES_WIFI_STATUS_ERROR;
dvddnr 0:991714b0e830 539 if(Obj->fops.IO_Send(cmd, n, Obj->Timeout) == n)
dvddnr 0:991714b0e830 540 {
dvddnr 0:991714b0e830 541 int16_t n=Obj->fops.IO_Send(pcmd_data, len, Obj->Timeout);
dvddnr 0:991714b0e830 542 if(n == len)
dvddnr 0:991714b0e830 543 {
dvddnr 0:991714b0e830 544 n = Obj->fops.IO_Receive(pdata, 0, Obj->Timeout);
dvddnr 0:991714b0e830 545 if(n > 0)
dvddnr 0:991714b0e830 546 {
dvddnr 0:991714b0e830 547 *(pdata+n)=0;
dvddnr 0:991714b0e830 548 if(strstr((char *)pdata, AT_OK_STRING))
dvddnr 0:991714b0e830 549 {
dvddnr 0:991714b0e830 550 return ES_WIFI_STATUS_OK;
dvddnr 0:991714b0e830 551 }
dvddnr 0:991714b0e830 552 else if(strstr((char *)pdata, AT_ERROR_STRING))
dvddnr 0:991714b0e830 553 {
dvddnr 0:991714b0e830 554 return ES_WIFI_STATUS_ERROR;
dvddnr 0:991714b0e830 555 }
dvddnr 0:991714b0e830 556 }
dvddnr 0:991714b0e830 557 }
dvddnr 0:991714b0e830 558 else
dvddnr 0:991714b0e830 559 {
dvddnr 0:991714b0e830 560 return ES_WIFI_STATUS_ERROR;
dvddnr 0:991714b0e830 561 }
dvddnr 0:991714b0e830 562 }
dvddnr 0:991714b0e830 563 return ES_WIFI_STATUS_IO_ERROR;
dvddnr 0:991714b0e830 564 }
dvddnr 0:991714b0e830 565
dvddnr 0:991714b0e830 566
dvddnr 0:991714b0e830 567 /**
dvddnr 0:991714b0e830 568 * @brief Parses Received short data length.
dvddnr 0:991714b0e830 569 * @param Obj: pointer to module handle
dvddnr 0:991714b0e830 570 * @param cmd:command formatted string
dvddnr 0:991714b0e830 571 * @param pdata: payload
dvddnr 0:991714b0e830 572 * @param Reqlen : requested Data length.
dvddnr 0:991714b0e830 573 * @param ReadData : pointer to received data length.
dvddnr 0:991714b0e830 574 * @retval Operation Status.
dvddnr 0:991714b0e830 575 */
dvddnr 0:991714b0e830 576 static ES_WIFI_Status_t ReceiveShortDataLen(ES_WIFIObject_t *Obj, char *pdata, uint16_t Reqlen, uint16_t *ReadData)
dvddnr 0:991714b0e830 577 {
dvddnr 0:991714b0e830 578 uint16_t len;
dvddnr 0:991714b0e830 579
dvddnr 0:991714b0e830 580 len = Obj->fops.IO_Receive(Obj->CmdData, Reqlen + AT_OK_STRING_LEN , Obj->Timeout);
dvddnr 0:991714b0e830 581 if (len >= AT_OK_STRING_LEN)
dvddnr 0:991714b0e830 582 {
dvddnr 0:991714b0e830 583
dvddnr 0:991714b0e830 584 if(strstr((char *)Obj->CmdData + len - AT_OK_STRING_LEN, AT_OK_STRING))
dvddnr 0:991714b0e830 585 {
dvddnr 0:991714b0e830 586 *ReadData = len - AT_OK_STRING_LEN;
dvddnr 0:991714b0e830 587 memcpy(pdata, Obj->CmdData, *ReadData);
dvddnr 0:991714b0e830 588 return ES_WIFI_STATUS_OK;
dvddnr 0:991714b0e830 589 }
dvddnr 0:991714b0e830 590 }
dvddnr 0:991714b0e830 591 return ES_WIFI_STATUS_IO_ERROR;
dvddnr 0:991714b0e830 592
dvddnr 0:991714b0e830 593 }
dvddnr 0:991714b0e830 594
dvddnr 0:991714b0e830 595 /**
dvddnr 0:991714b0e830 596 * @brief Parses Received long data length.
dvddnr 0:991714b0e830 597 * @param Obj: pointer to module handle
dvddnr 0:991714b0e830 598 * @param cmd:command formatted string
dvddnr 0:991714b0e830 599 * @param pdata: payload
dvddnr 0:991714b0e830 600 * @param Reqlen : requested Data length.
dvddnr 0:991714b0e830 601 * @param ReadData : pointer to received data length.
dvddnr 0:991714b0e830 602 * @retval Operation Status.
dvddnr 0:991714b0e830 603 */
dvddnr 0:991714b0e830 604 static ES_WIFI_Status_t ReceiveLongDataLen(ES_WIFIObject_t *Obj, char *pdata, uint16_t Reqlen, uint16_t *ReadData)
dvddnr 0:991714b0e830 605 {
dvddnr 0:991714b0e830 606 uint16_t len, rlen;
dvddnr 0:991714b0e830 607
dvddnr 0:991714b0e830 608 len = Obj->fops.IO_Receive((uint8_t *)pdata, ES_WIFI_DATA_SIZE, Obj->Timeout);
dvddnr 0:991714b0e830 609 //for(int i=0;i<len;i++) printf("%c",pdata[i]);
dvddnr 0:991714b0e830 610
dvddnr 0:991714b0e830 611 if (len >= AT_OK_STRING_LEN)
dvddnr 0:991714b0e830 612 {
dvddnr 0:991714b0e830 613 if(strstr((char *)pdata + len - AT_OK_STRING_LEN, AT_OK_STRING))
dvddnr 0:991714b0e830 614 {
dvddnr 0:991714b0e830 615 *ReadData = len - AT_OK_STRING_LEN;
dvddnr 0:991714b0e830 616 return ES_WIFI_STATUS_OK;
dvddnr 0:991714b0e830 617 }
dvddnr 0:991714b0e830 618 else
dvddnr 0:991714b0e830 619 {
dvddnr 0:991714b0e830 620 memcpy(Obj->CmdData, pdata + len - AT_OK_STRING_LEN, AT_OK_STRING_LEN);
dvddnr 0:991714b0e830 621 rlen = Obj->fops.IO_Receive(Obj->CmdData + AT_OK_STRING_LEN, AT_OK_STRING_LEN, Obj->Timeout);
dvddnr 0:991714b0e830 622 Obj->CmdData[AT_OK_STRING_LEN+rlen]=0;
dvddnr 0:991714b0e830 623 //for(int i=0;i<rlen;i++) printf("%c",Obj->CmdData[AT_OK_STRING_LEN+i]);
dvddnr 0:991714b0e830 624
dvddnr 0:991714b0e830 625 if(strstr((char *) Obj->CmdData, AT_OK_STRING))
dvddnr 0:991714b0e830 626 {
dvddnr 0:991714b0e830 627 *ReadData = len + rlen - AT_OK_STRING_LEN;
dvddnr 0:991714b0e830 628 return ES_WIFI_STATUS_OK;
dvddnr 0:991714b0e830 629 }
dvddnr 0:991714b0e830 630 }
dvddnr 0:991714b0e830 631 }
dvddnr 0:991714b0e830 632 return ES_WIFI_STATUS_IO_ERROR;
dvddnr 0:991714b0e830 633 }
dvddnr 0:991714b0e830 634
dvddnr 0:991714b0e830 635 /**
dvddnr 0:991714b0e830 636 * @brief Parses Received data.
dvddnr 0:991714b0e830 637 * @param Obj: pointer to module handle
dvddnr 0:991714b0e830 638 * @param cmd:command formatted string
dvddnr 0:991714b0e830 639 * @param pdata: payload
dvddnr 0:991714b0e830 640 * @param Reqlen : requested Data length.
dvddnr 0:991714b0e830 641 * @param ReadData : pointer to received data length.
dvddnr 0:991714b0e830 642 * @retval Operation Status.
dvddnr 0:991714b0e830 643 */
dvddnr 0:991714b0e830 644 static ES_WIFI_Status_t AT_RequestReceiveData(ES_WIFIObject_t *Obj, uint8_t* cmd, char *pdata, uint16_t Reqlen, uint16_t *ReadData)
dvddnr 0:991714b0e830 645 {
dvddnr 0:991714b0e830 646 if(Obj->fops.IO_Send(cmd, strlen((char*)cmd), Obj->Timeout) > 0)
dvddnr 0:991714b0e830 647 {
dvddnr 0:991714b0e830 648 if(Obj->fops.IO_Receive(Obj->CmdData, 2, Obj->Timeout) == 2) /* Read Prompt */
dvddnr 0:991714b0e830 649 {
dvddnr 0:991714b0e830 650 if (Reqlen <= AT_OK_STRING_LEN) return ReceiveShortDataLen(Obj,pdata, Reqlen ,ReadData);
dvddnr 0:991714b0e830 651 if (Reqlen > AT_OK_STRING_LEN) return ReceiveLongDataLen(Obj,pdata, Reqlen ,ReadData);
dvddnr 0:991714b0e830 652 }
dvddnr 0:991714b0e830 653 }
dvddnr 0:991714b0e830 654 return ES_WIFI_STATUS_IO_ERROR;
dvddnr 0:991714b0e830 655 }
dvddnr 0:991714b0e830 656
dvddnr 0:991714b0e830 657
dvddnr 0:991714b0e830 658 /**
dvddnr 0:991714b0e830 659 * @brief Initialize WIFI module.
dvddnr 0:991714b0e830 660 * @param Obj: pointer to module handle
dvddnr 0:991714b0e830 661 * @retval Operation Status.
dvddnr 0:991714b0e830 662 */
dvddnr 0:991714b0e830 663 ES_WIFI_Status_t ES_WIFI_Init(ES_WIFIObject_t *Obj)
dvddnr 0:991714b0e830 664 {
dvddnr 0:991714b0e830 665 ES_WIFI_Status_t ret = ES_WIFI_STATUS_ERROR;
dvddnr 0:991714b0e830 666
dvddnr 0:991714b0e830 667 Obj->Timeout = ES_WIFI_TIMEOUT;
dvddnr 0:991714b0e830 668
dvddnr 0:991714b0e830 669 if (Obj->fops.IO_Init() == 0)
dvddnr 0:991714b0e830 670 {
dvddnr 0:991714b0e830 671 ret = AT_ExecuteCommand(Obj,(uint8_t*)"I?\r\n", Obj->CmdData);
dvddnr 0:991714b0e830 672
dvddnr 0:991714b0e830 673 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 674 {
dvddnr 0:991714b0e830 675 AT_ParseInfo (Obj, Obj->CmdData);
dvddnr 0:991714b0e830 676 }
dvddnr 0:991714b0e830 677 }
dvddnr 0:991714b0e830 678 return ret;
dvddnr 0:991714b0e830 679 }
dvddnr 0:991714b0e830 680
dvddnr 0:991714b0e830 681 /**
dvddnr 0:991714b0e830 682 * @brief Return ProductID.
dvddnr 0:991714b0e830 683 * @param Obj: pointer to module handle
dvddnr 0:991714b0e830 684 * @param productID: pointer productID
dvddnr 0:991714b0e830 685 * @retval Operation Status.
dvddnr 0:991714b0e830 686 */
dvddnr 0:991714b0e830 687 ES_WIFI_Status_t ES_WIFI_GetProductID(ES_WIFIObject_t *Obj, uint8_t *productID)
dvddnr 0:991714b0e830 688 {
dvddnr 0:991714b0e830 689 strncpy((char *)productID, (char *)Obj->Product_ID, ES_WIFI_PRODUCT_ID_SIZE);
dvddnr 0:991714b0e830 690 return ES_WIFI_STATUS_OK;
dvddnr 0:991714b0e830 691 }
dvddnr 0:991714b0e830 692
dvddnr 0:991714b0e830 693 /**
dvddnr 0:991714b0e830 694 * @brief Return Firmware Revision.
dvddnr 0:991714b0e830 695 * @param Obj: pointer to module handle
dvddnr 0:991714b0e830 696 * @param productID: pointer Revision
dvddnr 0:991714b0e830 697 * @retval Operation Status.
dvddnr 0:991714b0e830 698 */
dvddnr 0:991714b0e830 699 ES_WIFI_Status_t ES_WIFI_GetFWRevID(ES_WIFIObject_t *Obj, uint8_t *FWRev)
dvddnr 0:991714b0e830 700 {
dvddnr 0:991714b0e830 701 strncpy((char *)FWRev, (char *)Obj->FW_Rev, ES_WIFI_FW_REV_SIZE);
dvddnr 0:991714b0e830 702 return ES_WIFI_STATUS_OK;
dvddnr 0:991714b0e830 703 }
dvddnr 0:991714b0e830 704
dvddnr 0:991714b0e830 705 /**
dvddnr 0:991714b0e830 706 * @brief Return product Name.
dvddnr 0:991714b0e830 707 * @param Obj: pointer to module handle
dvddnr 0:991714b0e830 708 * @param productID: pointer product Name
dvddnr 0:991714b0e830 709 * @retval Operation Status.
dvddnr 0:991714b0e830 710 */
dvddnr 0:991714b0e830 711 ES_WIFI_Status_t ES_WIFI_GetProductName(ES_WIFIObject_t *Obj, uint8_t *productName)
dvddnr 0:991714b0e830 712 {
dvddnr 0:991714b0e830 713 strncpy((char *)productName, (char *)Obj->Product_Name, ES_WIFI_PRODUCT_NAME_SIZE);
dvddnr 0:991714b0e830 714 return ES_WIFI_STATUS_OK;
dvddnr 0:991714b0e830 715 }
dvddnr 0:991714b0e830 716
dvddnr 0:991714b0e830 717 /**
dvddnr 0:991714b0e830 718 * @brief Return API revision.
dvddnr 0:991714b0e830 719 * @param Obj: pointer to module handle
dvddnr 0:991714b0e830 720 * @param productID: pointer API revision.
dvddnr 0:991714b0e830 721 * @retval Operation Status.
dvddnr 0:991714b0e830 722 */
dvddnr 0:991714b0e830 723 ES_WIFI_Status_t ES_WIFI_GetAPIRev(ES_WIFIObject_t *Obj, uint8_t *APIRev)
dvddnr 0:991714b0e830 724 {
dvddnr 0:991714b0e830 725 strncpy((char *)APIRev, (char *)Obj->API_Rev, ES_WIFI_API_REV_SIZE);
dvddnr 0:991714b0e830 726 return ES_WIFI_STATUS_OK;
dvddnr 0:991714b0e830 727 }
dvddnr 0:991714b0e830 728
dvddnr 0:991714b0e830 729 /**
dvddnr 0:991714b0e830 730 * @brief Return Stack Revision.
dvddnr 0:991714b0e830 731 * @param Obj: pointer to module handle
dvddnr 0:991714b0e830 732 * @param productID: pointer Stack Revision
dvddnr 0:991714b0e830 733 * @retval Operation Status.
dvddnr 0:991714b0e830 734 */
dvddnr 0:991714b0e830 735 ES_WIFI_Status_t ES_WIFI_GetStackRev(ES_WIFIObject_t *Obj, uint8_t *StackRev)
dvddnr 0:991714b0e830 736 {
dvddnr 0:991714b0e830 737 strncpy((char *)StackRev, (char *)Obj->Stack_Rev, ES_WIFI_STACK_REV_SIZE);
dvddnr 0:991714b0e830 738 return ES_WIFI_STATUS_OK;
dvddnr 0:991714b0e830 739 }
dvddnr 0:991714b0e830 740
dvddnr 0:991714b0e830 741 /**
dvddnr 0:991714b0e830 742 * @brief Return RTOS Revision
dvddnr 0:991714b0e830 743 * @param Obj: pointer to module handle
dvddnr 0:991714b0e830 744 * @param productID: pointer RTOS Revision
dvddnr 0:991714b0e830 745 * @retval Operation Status.
dvddnr 0:991714b0e830 746 */
dvddnr 0:991714b0e830 747 ES_WIFI_Status_t ES_WIFI_GetRTOSRev(ES_WIFIObject_t *Obj, uint8_t *RTOSRev)
dvddnr 0:991714b0e830 748 {
dvddnr 0:991714b0e830 749 strncpy((char *)RTOSRev, (char *)Obj->RTOS_Rev, ES_WIFI_RTOS_REV_SIZE);
dvddnr 0:991714b0e830 750 return ES_WIFI_STATUS_OK;
dvddnr 0:991714b0e830 751 }
dvddnr 0:991714b0e830 752
dvddnr 0:991714b0e830 753
dvddnr 0:991714b0e830 754 /**
dvddnr 0:991714b0e830 755 * @brief Initialize WIFI module.
dvddnr 0:991714b0e830 756 * @param Obj: pointer to module handle
dvddnr 0:991714b0e830 757 * @retval Operation Status.
dvddnr 0:991714b0e830 758 */
dvddnr 0:991714b0e830 759 ES_WIFI_Status_t ES_WIFI_RegisterBusIO(ES_WIFIObject_t *Obj, IO_Init_Func IO_Init,
dvddnr 0:991714b0e830 760 IO_DeInit_Func IO_DeInit,
dvddnr 0:991714b0e830 761 IO_Delay_Func IO_Delay,
dvddnr 0:991714b0e830 762 IO_Send_Func IO_Send,
dvddnr 0:991714b0e830 763 IO_Receive_Func IO_Receive)
dvddnr 0:991714b0e830 764 {
dvddnr 0:991714b0e830 765 if(!Obj || !IO_Init || !IO_DeInit || !IO_Send || !IO_Receive)
dvddnr 0:991714b0e830 766 {
dvddnr 0:991714b0e830 767 return ES_WIFI_STATUS_ERROR;
dvddnr 0:991714b0e830 768 }
dvddnr 0:991714b0e830 769
dvddnr 0:991714b0e830 770 Obj->fops.IO_Init = IO_Init;
dvddnr 0:991714b0e830 771 Obj->fops.IO_Send = IO_Send;
dvddnr 0:991714b0e830 772 Obj->fops.IO_Receive = IO_Receive;
dvddnr 0:991714b0e830 773 Obj->fops.IO_Delay = IO_Delay;
dvddnr 0:991714b0e830 774
dvddnr 0:991714b0e830 775 return ES_WIFI_STATUS_OK;
dvddnr 0:991714b0e830 776 }
dvddnr 0:991714b0e830 777
dvddnr 0:991714b0e830 778 /**
dvddnr 0:991714b0e830 779 * @brief Change default Timeout.
dvddnr 0:991714b0e830 780 * @param Obj: pointer to module handle
dvddnr 0:991714b0e830 781 * @param Timeout: Timeout in mS
dvddnr 0:991714b0e830 782 * @retval Operation Status.
dvddnr 0:991714b0e830 783 */
dvddnr 0:991714b0e830 784 ES_WIFI_Status_t ES_WIFI_SetTimeout(ES_WIFIObject_t *Obj, uint32_t Timeout)
dvddnr 0:991714b0e830 785 {
dvddnr 0:991714b0e830 786 Obj->Timeout = Timeout;
dvddnr 0:991714b0e830 787 return ES_WIFI_STATUS_OK;
dvddnr 0:991714b0e830 788 }
dvddnr 0:991714b0e830 789
dvddnr 0:991714b0e830 790 /**
dvddnr 0:991714b0e830 791 * @brief List all detected APs.
dvddnr 0:991714b0e830 792 * @param Obj: pointer to module handle
dvddnr 0:991714b0e830 793 * @param APs: pointer Access points structure
dvddnr 0:991714b0e830 794 * @retval Operation Status.
dvddnr 0:991714b0e830 795 */
dvddnr 0:991714b0e830 796 ES_WIFI_Status_t ES_WIFI_ListAccessPoints(ES_WIFIObject_t *Obj, ES_WIFI_APs_t *APs)
dvddnr 0:991714b0e830 797 {
dvddnr 0:991714b0e830 798
dvddnr 0:991714b0e830 799 ES_WIFI_Status_t ret;
dvddnr 0:991714b0e830 800
dvddnr 0:991714b0e830 801 ret = AT_ExecuteCommand(Obj,(uint8_t*)"F0\r", Obj->CmdData);
dvddnr 0:991714b0e830 802 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 803 {
dvddnr 0:991714b0e830 804 AT_ParseAP((char *)Obj->CmdData, APs);
dvddnr 0:991714b0e830 805 }
dvddnr 0:991714b0e830 806 return ret;
dvddnr 0:991714b0e830 807 }
dvddnr 0:991714b0e830 808
dvddnr 0:991714b0e830 809 /**
dvddnr 0:991714b0e830 810 * @brief Join an Access point.
dvddnr 0:991714b0e830 811 * @param Obj: pointer to module handle
dvddnr 0:991714b0e830 812 * @param Ssid: the access point id.
dvddnr 0:991714b0e830 813 * @param Password: the Access point password.
dvddnr 0:991714b0e830 814 * @param SecType: Security type.
dvddnr 0:991714b0e830 815 * @retval Operation Status.
dvddnr 0:991714b0e830 816 */
dvddnr 0:991714b0e830 817 ES_WIFI_Status_t ES_WIFI_Connect(ES_WIFIObject_t *Obj, const char* SSID,
dvddnr 0:991714b0e830 818 const char* Password,
dvddnr 0:991714b0e830 819 ES_WIFI_SecurityType_t SecType)
dvddnr 0:991714b0e830 820 {
dvddnr 0:991714b0e830 821 ES_WIFI_Status_t ret;
dvddnr 0:991714b0e830 822
dvddnr 0:991714b0e830 823 sprintf((char*)Obj->CmdData,"C1=%s\r", SSID);
dvddnr 0:991714b0e830 824 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 825 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 826 {
dvddnr 0:991714b0e830 827 sprintf((char*)Obj->CmdData,"C2=%s\r", Password);
dvddnr 0:991714b0e830 828 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 829
dvddnr 0:991714b0e830 830 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 831 {
dvddnr 0:991714b0e830 832 Obj->Security = SecType;
dvddnr 0:991714b0e830 833 sprintf((char*)Obj->CmdData,"C3=%d\r", (uint8_t)SecType);
dvddnr 0:991714b0e830 834 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 835
dvddnr 0:991714b0e830 836 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 837 {
dvddnr 0:991714b0e830 838 sprintf((char*)Obj->CmdData,"C0\r");
dvddnr 0:991714b0e830 839 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 840 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 841 {
dvddnr 0:991714b0e830 842 Obj->NetSettings.IsConnected = 1;
dvddnr 0:991714b0e830 843 }
dvddnr 0:991714b0e830 844 }
dvddnr 0:991714b0e830 845 }
dvddnr 0:991714b0e830 846 }
dvddnr 0:991714b0e830 847 return ret;
dvddnr 0:991714b0e830 848 }
dvddnr 0:991714b0e830 849
dvddnr 0:991714b0e830 850 /**
dvddnr 0:991714b0e830 851 * @brief Check whether the module is connected to an access point.
dvddnr 0:991714b0e830 852 * @retval Operation Status.
dvddnr 0:991714b0e830 853 */
dvddnr 0:991714b0e830 854 uint8_t ES_WIFI_IsConnected(ES_WIFIObject_t *Obj)
dvddnr 0:991714b0e830 855 {
dvddnr 0:991714b0e830 856 return Obj->NetSettings.IsConnected;
dvddnr 0:991714b0e830 857 }
dvddnr 0:991714b0e830 858 /**
dvddnr 0:991714b0e830 859 * @brief Disconnect from a network.
dvddnr 0:991714b0e830 860 * @param Obj: pointer to module handle
dvddnr 0:991714b0e830 861 * @retval Operation Status.
dvddnr 0:991714b0e830 862 */
dvddnr 0:991714b0e830 863 ES_WIFI_Status_t ES_WIFI_Disconnect(ES_WIFIObject_t *Obj)
dvddnr 0:991714b0e830 864 {
dvddnr 0:991714b0e830 865 sprintf((char*)Obj->CmdData,"CD\r");
dvddnr 0:991714b0e830 866 return AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 867 }
dvddnr 0:991714b0e830 868 /**
dvddnr 0:991714b0e830 869 * @brief Return network settings.
dvddnr 0:991714b0e830 870 * @param Obj: pointer to module handle
dvddnr 0:991714b0e830 871 * @param Pointer to network setting structure.
dvddnr 0:991714b0e830 872 * @retval Operation Status.
dvddnr 0:991714b0e830 873 */
dvddnr 0:991714b0e830 874 ES_WIFI_Status_t ES_WIFI_GetNetworkSettings(ES_WIFIObject_t *Obj)
dvddnr 0:991714b0e830 875 {
dvddnr 0:991714b0e830 876 ES_WIFI_Status_t ret;
dvddnr 0:991714b0e830 877
dvddnr 0:991714b0e830 878 sprintf((char*)Obj->CmdData,"C?\r");
dvddnr 0:991714b0e830 879 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 880
dvddnr 0:991714b0e830 881 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 882 {
dvddnr 0:991714b0e830 883 AT_ParseConnSettings((char *)Obj->CmdData, &Obj->NetSettings);
dvddnr 0:991714b0e830 884 }
dvddnr 0:991714b0e830 885 return ret;
dvddnr 0:991714b0e830 886 }
dvddnr 0:991714b0e830 887
dvddnr 0:991714b0e830 888 /**
dvddnr 0:991714b0e830 889 * @brief Configure and activate SoftAP.
dvddnr 0:991714b0e830 890 * @param Obj: pointer to module handle
dvddnr 0:991714b0e830 891 * @param ApConfig : Pointer to AP config structure.
dvddnr 0:991714b0e830 892 * @param ip : AP IP address
dvddnr 0:991714b0e830 893 * @param mac : AP MAC address
dvddnr 0:991714b0e830 894 * @retval Operation Status.
dvddnr 0:991714b0e830 895 */
dvddnr 0:991714b0e830 896 ES_WIFI_Status_t ES_WIFI_ActivateAP(ES_WIFIObject_t *Obj, ES_WIFI_APConfig_t *ApConfig)
dvddnr 0:991714b0e830 897 {
dvddnr 0:991714b0e830 898 ES_WIFI_Status_t ret;
dvddnr 0:991714b0e830 899
dvddnr 0:991714b0e830 900 sprintf((char*)Obj->CmdData,"AS=0,%s\r", ApConfig->SSID);
dvddnr 0:991714b0e830 901 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 902 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 903 {
dvddnr 0:991714b0e830 904
dvddnr 0:991714b0e830 905 sprintf((char*)Obj->CmdData,"A1=%c\r", (int)ApConfig->Security + '0');
dvddnr 0:991714b0e830 906 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 907 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 908 {
dvddnr 0:991714b0e830 909
dvddnr 0:991714b0e830 910 sprintf((char*)Obj->CmdData,"A2=%s\r", ApConfig->Pass);
dvddnr 0:991714b0e830 911 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 912 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 913 {
dvddnr 0:991714b0e830 914
dvddnr 0:991714b0e830 915 sprintf((char*)Obj->CmdData,"AC=%d\r", ApConfig->Channel);
dvddnr 0:991714b0e830 916 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 917 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 918 {
dvddnr 0:991714b0e830 919
dvddnr 0:991714b0e830 920 sprintf((char*)Obj->CmdData,"AT=%d\r", ApConfig->MaxConnections);
dvddnr 0:991714b0e830 921 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 922 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 923 {
dvddnr 0:991714b0e830 924 sprintf((char*)Obj->CmdData,"A0\r");
dvddnr 0:991714b0e830 925 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 926 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 927 {
dvddnr 0:991714b0e830 928 if(strstr((char *)Obj->CmdData, "[AP ]"))
dvddnr 0:991714b0e830 929 {
dvddnr 0:991714b0e830 930 ret = ES_WIFI_STATUS_OK;
dvddnr 0:991714b0e830 931 }
dvddnr 0:991714b0e830 932 }
dvddnr 0:991714b0e830 933 }
dvddnr 0:991714b0e830 934 }
dvddnr 0:991714b0e830 935 }
dvddnr 0:991714b0e830 936 }
dvddnr 0:991714b0e830 937 }
dvddnr 0:991714b0e830 938 return ret;
dvddnr 0:991714b0e830 939 }
dvddnr 0:991714b0e830 940
dvddnr 0:991714b0e830 941 /**
dvddnr 0:991714b0e830 942 * @brief Get AP notification.
dvddnr 0:991714b0e830 943 * @param Obj: pointer to module handle
dvddnr 0:991714b0e830 944 * @param ip : Assigned ip address.
dvddnr 0:991714b0e830 945 * @param ip : joind device mac address.
dvddnr 0:991714b0e830 946 * @retval AP State.
dvddnr 0:991714b0e830 947 */
dvddnr 0:991714b0e830 948 ES_WIFI_APState_t ES_WIFI_WaitAPStateChange(ES_WIFIObject_t *Obj)
dvddnr 0:991714b0e830 949 {
dvddnr 0:991714b0e830 950 ES_WIFI_APState_t ret = ES_WIFI_AP_NONE;
dvddnr 0:991714b0e830 951 char *ptr;
dvddnr 0:991714b0e830 952
dvddnr 0:991714b0e830 953 #if (ES_WIFI_USE_UART == 1)
dvddnr 0:991714b0e830 954 if(Obj->fops.IO_Receive(Obj->CmdData, 0, Obj->Timeout) > 0)
dvddnr 0:991714b0e830 955 {
dvddnr 0:991714b0e830 956 if(strstr((char *)Obj->CmdData, AT_ERROR_STRING))
dvddnr 0:991714b0e830 957 {
dvddnr 0:991714b0e830 958 return ES_WIFI_AP_ERROR;
dvddnr 0:991714b0e830 959 }
dvddnr 0:991714b0e830 960 #else
dvddnr 0:991714b0e830 961 do
dvddnr 0:991714b0e830 962 {
dvddnr 0:991714b0e830 963 sprintf((char*)Obj->CmdData,"MR\r");
dvddnr 0:991714b0e830 964 if(AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData) != ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 965 {
dvddnr 0:991714b0e830 966 return ES_WIFI_AP_ERROR;
dvddnr 0:991714b0e830 967 }
dvddnr 0:991714b0e830 968 #endif
dvddnr 0:991714b0e830 969 else if(strstr((char *)Obj->CmdData, "[AP DHCP]"))
dvddnr 0:991714b0e830 970 {
dvddnr 0:991714b0e830 971 ptr = strtok((char *)Obj->CmdData + 2, " ");
dvddnr 0:991714b0e830 972 ptr = strtok(NULL, " ");
dvddnr 0:991714b0e830 973 ptr = strtok(NULL, " ");
dvddnr 0:991714b0e830 974 ptr = strtok(NULL, " ");
dvddnr 0:991714b0e830 975 ParseMAC((char *)ptr, Obj->APSettings.MAC_Addr);
dvddnr 0:991714b0e830 976 ptr = strtok(NULL, " ");
dvddnr 0:991714b0e830 977 ptr = strtok(NULL, "\r");
dvddnr 0:991714b0e830 978 ParseIP((char *)ptr, Obj->APSettings.IP_Addr);
dvddnr 0:991714b0e830 979 ret = ES_WIFI_AP_ASSIGNED;
dvddnr 0:991714b0e830 980 #if (ES_WIFI_USE_SPI == 1)
dvddnr 0:991714b0e830 981 break;
dvddnr 0:991714b0e830 982 #endif
dvddnr 0:991714b0e830 983 }
dvddnr 0:991714b0e830 984 else if(strstr((char *)Obj->CmdData, "[JOIN ]"))
dvddnr 0:991714b0e830 985 {
dvddnr 0:991714b0e830 986 ptr = strtok((char *)Obj->CmdData + 12, ",");
dvddnr 0:991714b0e830 987 strncpy((char *)Obj->APSettings.SSID, ptr, ES_WIFI_MAX_SSID_NAME_SIZE );
dvddnr 0:991714b0e830 988 ptr = strtok(NULL, ",");
dvddnr 0:991714b0e830 989 ParseIP((char *)ptr, Obj->APSettings.IP_Addr);
dvddnr 0:991714b0e830 990 ret = ES_WIFI_AP_JOINED;
dvddnr 0:991714b0e830 991 #if (ES_WIFI_USE_SPI == 1)
dvddnr 0:991714b0e830 992 break;
dvddnr 0:991714b0e830 993 #endif
dvddnr 0:991714b0e830 994 }
dvddnr 0:991714b0e830 995 #if (ES_WIFI_USE_UART == 1)
dvddnr 0:991714b0e830 996 }
dvddnr 0:991714b0e830 997 #else
dvddnr 0:991714b0e830 998 Obj->fops.IO_Delay(1000);
dvddnr 0:991714b0e830 999 } while (1);
dvddnr 0:991714b0e830 1000 #endif
dvddnr 0:991714b0e830 1001 return ret;
dvddnr 0:991714b0e830 1002 }
dvddnr 0:991714b0e830 1003
dvddnr 0:991714b0e830 1004 /**
dvddnr 0:991714b0e830 1005 * @brief retrn the MAC address of the es module.
dvddnr 0:991714b0e830 1006 * @param Obj: pointer to module handle
dvddnr 0:991714b0e830 1007 * @param mac: pointer to the MAC address array.
dvddnr 0:991714b0e830 1008 * @retval Operation Status.
dvddnr 0:991714b0e830 1009 */
dvddnr 0:991714b0e830 1010 ES_WIFI_Status_t ES_WIFI_GetMACAddress(ES_WIFIObject_t *Obj, uint8_t *mac)
dvddnr 0:991714b0e830 1011 {
dvddnr 0:991714b0e830 1012 ES_WIFI_Status_t ret ;
dvddnr 0:991714b0e830 1013 char *ptr;
dvddnr 0:991714b0e830 1014
dvddnr 0:991714b0e830 1015 sprintf((char*)Obj->CmdData,"Z5\r");
dvddnr 0:991714b0e830 1016 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1017 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1018 {
dvddnr 0:991714b0e830 1019 ptr = strtok((char *)(Obj->CmdData + 2), "\r\n");
dvddnr 0:991714b0e830 1020 ParseMAC(ptr, mac) ;
dvddnr 0:991714b0e830 1021 }
dvddnr 0:991714b0e830 1022 return ret;
dvddnr 0:991714b0e830 1023 }
dvddnr 0:991714b0e830 1024
dvddnr 0:991714b0e830 1025 /**
dvddnr 0:991714b0e830 1026 * @brief retrn the IP address of the es module.
dvddnr 0:991714b0e830 1027 * @param Obj: pointer to module handle
dvddnr 0:991714b0e830 1028 * @param mac: pointer to the IP address array.
dvddnr 0:991714b0e830 1029 * @retval Operation Status.
dvddnr 0:991714b0e830 1030 */
dvddnr 0:991714b0e830 1031 ES_WIFI_Status_t ES_WIFI_GetIPAddress(ES_WIFIObject_t *Obj, uint8_t *ipaddr)
dvddnr 0:991714b0e830 1032 {
dvddnr 0:991714b0e830 1033 memcpy(ipaddr, Obj->NetSettings.IP_Addr, 4);
dvddnr 0:991714b0e830 1034 return ES_WIFI_STATUS_OK;
dvddnr 0:991714b0e830 1035 }
dvddnr 0:991714b0e830 1036
dvddnr 0:991714b0e830 1037 /**
dvddnr 0:991714b0e830 1038 * @brief Set the MAC address of the es module.
dvddnr 0:991714b0e830 1039 * @param Obj: pointer to module handle
dvddnr 0:991714b0e830 1040 * @param mac: pointer to the MAC address array.
dvddnr 0:991714b0e830 1041 * @retval Operation Status.
dvddnr 0:991714b0e830 1042 */
dvddnr 0:991714b0e830 1043 ES_WIFI_Status_t ES_WIFI_SetMACAddress(ES_WIFIObject_t *Obj, uint8_t *mac)
dvddnr 0:991714b0e830 1044 {
dvddnr 0:991714b0e830 1045 ES_WIFI_Status_t ret ;
dvddnr 0:991714b0e830 1046
dvddnr 0:991714b0e830 1047 sprintf((char*)Obj->CmdData,"Z4=%X:%X:%X:%X:%X:%X\r",mac[0],mac[1],mac[2],mac[3],mac[4],mac[5] );
dvddnr 0:991714b0e830 1048 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1049 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1050 {
dvddnr 0:991714b0e830 1051 sprintf((char*)Obj->CmdData,"Z1\r");
dvddnr 0:991714b0e830 1052 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1053 }
dvddnr 0:991714b0e830 1054 return ret;
dvddnr 0:991714b0e830 1055 }
dvddnr 0:991714b0e830 1056
dvddnr 0:991714b0e830 1057 /**
dvddnr 0:991714b0e830 1058 * @brief Reset To factory defaults.
dvddnr 0:991714b0e830 1059 * @param Obj: pointer to module handle
dvddnr 0:991714b0e830 1060 * @retval Operation Status.
dvddnr 0:991714b0e830 1061 */
dvddnr 0:991714b0e830 1062 ES_WIFI_Status_t ES_WIFI_ResetToFactoryDefault(ES_WIFIObject_t *Obj)
dvddnr 0:991714b0e830 1063 {
dvddnr 0:991714b0e830 1064 ES_WIFI_Status_t ret ;
dvddnr 0:991714b0e830 1065
dvddnr 0:991714b0e830 1066 sprintf((char*)Obj->CmdData,"Z0\r");
dvddnr 0:991714b0e830 1067 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1068 return ret;
dvddnr 0:991714b0e830 1069 }
dvddnr 0:991714b0e830 1070
dvddnr 0:991714b0e830 1071 /**
dvddnr 0:991714b0e830 1072 * @brief Reset the module.
dvddnr 0:991714b0e830 1073 * @param Obj: pointer to module handle
dvddnr 0:991714b0e830 1074 * @retval Operation Status.
dvddnr 0:991714b0e830 1075 */
dvddnr 0:991714b0e830 1076 ES_WIFI_Status_t ES_WIFI_ResetModule(ES_WIFIObject_t *Obj)
dvddnr 0:991714b0e830 1077 {
dvddnr 0:991714b0e830 1078 ES_WIFI_Status_t ret ;
dvddnr 0:991714b0e830 1079
dvddnr 0:991714b0e830 1080 sprintf((char*)Obj->CmdData,"ZR\r");
dvddnr 0:991714b0e830 1081 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1082 return ret;
dvddnr 0:991714b0e830 1083 }
dvddnr 0:991714b0e830 1084
dvddnr 0:991714b0e830 1085 /**
dvddnr 0:991714b0e830 1086 * @brief Set Product Name.
dvddnr 0:991714b0e830 1087 * @param Obj: pointer to module handle
dvddnr 0:991714b0e830 1088 * @param ProductName : pointer to product name string
dvddnr 0:991714b0e830 1089 * @retval Operation Status.
dvddnr 0:991714b0e830 1090 */
dvddnr 0:991714b0e830 1091 ES_WIFI_Status_t ES_WIFI_SetProductName(ES_WIFIObject_t *Obj, uint8_t *ProductName)
dvddnr 0:991714b0e830 1092 {
dvddnr 0:991714b0e830 1093 ES_WIFI_Status_t ret ;
dvddnr 0:991714b0e830 1094
dvddnr 0:991714b0e830 1095 sprintf((char*)Obj->CmdData,"ZN=%s\r",ProductName);
dvddnr 0:991714b0e830 1096 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1097 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1098 {
dvddnr 0:991714b0e830 1099 sprintf((char*)Obj->CmdData,"Z1\r");
dvddnr 0:991714b0e830 1100 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1101 }
dvddnr 0:991714b0e830 1102 return ret;
dvddnr 0:991714b0e830 1103 }
dvddnr 0:991714b0e830 1104
dvddnr 0:991714b0e830 1105 #if (ES_WIFI_USE_FIRMWAREUPDATE == 1)
dvddnr 0:991714b0e830 1106 /**
dvddnr 0:991714b0e830 1107 * @brief OTA Firmware Upgrade.
dvddnr 0:991714b0e830 1108 * @param Obj: pointer to module handle
dvddnr 0:991714b0e830 1109 * @param Upgrade link path
dvddnr 0:991714b0e830 1110 * @retval Operation Status.
dvddnr 0:991714b0e830 1111 */
dvddnr 0:991714b0e830 1112 ES_WIFI_Status_t ES_WIFI_OTA_Upgrade(ES_WIFIObject_t *Obj, uint8_t *link)
dvddnr 0:991714b0e830 1113 {
dvddnr 0:991714b0e830 1114 ES_WIFI_Status_t ret ;
dvddnr 0:991714b0e830 1115
dvddnr 0:991714b0e830 1116 sprintf((char*)Obj->CmdData,"Z0=%d\r%s",strlen((char *)link), (char *)link);
dvddnr 0:991714b0e830 1117 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1118 return ret;
dvddnr 0:991714b0e830 1119 }
dvddnr 0:991714b0e830 1120 #endif
dvddnr 0:991714b0e830 1121 #if (ES_WIFI_USE_UART == 1)
dvddnr 0:991714b0e830 1122 /**
dvddnr 0:991714b0e830 1123 * @brief Set UART Baud Rate.
dvddnr 0:991714b0e830 1124 * @param Obj: pointer to module handle
dvddnr 0:991714b0e830 1125 * @param UART BAud rate
dvddnr 0:991714b0e830 1126 * @retval Operation Status.
dvddnr 0:991714b0e830 1127 */
dvddnr 0:991714b0e830 1128 ES_WIFI_Status_t ES_WIFI_SetUARTBaudRate(ES_WIFIObject_t *Obj, uint16_t BaudRate)
dvddnr 0:991714b0e830 1129 {
dvddnr 0:991714b0e830 1130 ES_WIFI_Status_t ret ;
dvddnr 0:991714b0e830 1131
dvddnr 0:991714b0e830 1132 sprintf((char*)Obj->CmdData,"U2=%d\r", BaudRate);
dvddnr 0:991714b0e830 1133 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1134 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1135 {
dvddnr 0:991714b0e830 1136 sprintf((char*)Obj->CmdData,"U0\r");
dvddnr 0:991714b0e830 1137 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1138 }
dvddnr 0:991714b0e830 1139 return ret;
dvddnr 0:991714b0e830 1140 }
dvddnr 0:991714b0e830 1141
dvddnr 0:991714b0e830 1142 /**
dvddnr 0:991714b0e830 1143 * @brief Get UART Configuration.
dvddnr 0:991714b0e830 1144 * @param Obj: pointer to module handle
dvddnr 0:991714b0e830 1145 * @param pointer to UART config structure
dvddnr 0:991714b0e830 1146 * @retval Operation Status.
dvddnr 0:991714b0e830 1147 */
dvddnr 0:991714b0e830 1148 ES_WIFI_Status_t ES_WIFI_GetUARTConfig(ES_WIFIObject_t *Obj, ES_WIFI_UARTConfig_t *pconf)
dvddnr 0:991714b0e830 1149 {
dvddnr 0:991714b0e830 1150 ES_WIFI_Status_t ret ;
dvddnr 0:991714b0e830 1151
dvddnr 0:991714b0e830 1152 sprintf((char*)Obj->CmdData,"U?\r");
dvddnr 0:991714b0e830 1153 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1154 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1155 {
dvddnr 0:991714b0e830 1156 AT_ParseUARTConfig((char *)Obj->CmdData, pconf);
dvddnr 0:991714b0e830 1157 }
dvddnr 0:991714b0e830 1158 return ret;
dvddnr 0:991714b0e830 1159 }
dvddnr 0:991714b0e830 1160 #endif
dvddnr 0:991714b0e830 1161
dvddnr 0:991714b0e830 1162 /**
dvddnr 0:991714b0e830 1163 * @brief Get System Configuration.
dvddnr 0:991714b0e830 1164 * @param Obj: pointer to module handle
dvddnr 0:991714b0e830 1165 * @param pointer to System config structure
dvddnr 0:991714b0e830 1166 * @retval Operation Status.
dvddnr 0:991714b0e830 1167 */
dvddnr 0:991714b0e830 1168 ES_WIFI_Status_t ES_WIFI_GetSystemConfig(ES_WIFIObject_t *Obj, ES_WIFI_SystemConfig_t *pconf)
dvddnr 0:991714b0e830 1169 {
dvddnr 0:991714b0e830 1170 ES_WIFI_Status_t ret ;
dvddnr 0:991714b0e830 1171
dvddnr 0:991714b0e830 1172 sprintf((char*)Obj->CmdData,"Z?\r");
dvddnr 0:991714b0e830 1173 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1174 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1175 {
dvddnr 0:991714b0e830 1176 AT_ParseSystemConfig((char *)Obj->CmdData, pconf);
dvddnr 0:991714b0e830 1177 }
dvddnr 0:991714b0e830 1178 return ret;
dvddnr 0:991714b0e830 1179 }
dvddnr 0:991714b0e830 1180
dvddnr 0:991714b0e830 1181 #if (ES_WIFI_USE_PING == 1)
dvddnr 0:991714b0e830 1182 /**
dvddnr 0:991714b0e830 1183 * @brief Ping an IP address.
dvddnr 0:991714b0e830 1184 * @param Obj: pointer to module handle
dvddnr 0:991714b0e830 1185 * @param Ping: ping structure.
dvddnr 0:991714b0e830 1186 * @retval Operation Status.
dvddnr 0:991714b0e830 1187 */
dvddnr 0:991714b0e830 1188 ES_WIFI_Status_t ES_WIFI_Ping(ES_WIFIObject_t *Obj, uint8_t *address, uint16_t count, uint16_t interval_ms)
dvddnr 0:991714b0e830 1189 {
dvddnr 0:991714b0e830 1190 ES_WIFI_Status_t ret;
dvddnr 0:991714b0e830 1191
dvddnr 0:991714b0e830 1192 sprintf((char*)Obj->CmdData,"T1=%d.%d.%d.%d\r", address[0],address[1],
dvddnr 0:991714b0e830 1193 address[2],address[3]);
dvddnr 0:991714b0e830 1194 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1195
dvddnr 0:991714b0e830 1196 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1197 {
dvddnr 0:991714b0e830 1198
dvddnr 0:991714b0e830 1199 sprintf((char*)Obj->CmdData,"T2=%d\r", count);
dvddnr 0:991714b0e830 1200 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1201
dvddnr 0:991714b0e830 1202 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1203 {
dvddnr 0:991714b0e830 1204 sprintf((char*)Obj->CmdData,"T3=%d\r", interval_ms);
dvddnr 0:991714b0e830 1205 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1206
dvddnr 0:991714b0e830 1207 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1208 {
dvddnr 0:991714b0e830 1209 sprintf((char*)Obj->CmdData,"T0=\r");
dvddnr 0:991714b0e830 1210 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1211 }
dvddnr 0:991714b0e830 1212 }
dvddnr 0:991714b0e830 1213 }
dvddnr 0:991714b0e830 1214
dvddnr 0:991714b0e830 1215 return ret;
dvddnr 0:991714b0e830 1216 }
dvddnr 0:991714b0e830 1217 #endif
dvddnr 0:991714b0e830 1218 /**
dvddnr 0:991714b0e830 1219 * @brief DNS Lookup to get IP address .
dvddnr 0:991714b0e830 1220 * @param Obj: pointer to module handle
dvddnr 0:991714b0e830 1221 * @param url: Domain Name.
dvddnr 0:991714b0e830 1222 * @param ipaddress: IP address.
dvddnr 0:991714b0e830 1223 * @retval Operation Status.
dvddnr 0:991714b0e830 1224 */
dvddnr 0:991714b0e830 1225 ES_WIFI_Status_t ES_WIFI_DNS_LookUp(ES_WIFIObject_t *Obj, const char *url, uint8_t *ipaddress)
dvddnr 0:991714b0e830 1226 {
dvddnr 0:991714b0e830 1227 ES_WIFI_Status_t ret;
dvddnr 0:991714b0e830 1228 char *ptr;
dvddnr 0:991714b0e830 1229
dvddnr 0:991714b0e830 1230 sprintf((char*)Obj->CmdData,"D0=%s\r", url);
dvddnr 0:991714b0e830 1231 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1232
dvddnr 0:991714b0e830 1233 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1234 {
dvddnr 0:991714b0e830 1235 ptr = strtok((char *)Obj->CmdData + 2, "\r");
dvddnr 0:991714b0e830 1236 ParseIP(ptr, ipaddress);
dvddnr 0:991714b0e830 1237 }
dvddnr 0:991714b0e830 1238 return ret;
dvddnr 0:991714b0e830 1239 }
dvddnr 0:991714b0e830 1240
dvddnr 0:991714b0e830 1241
dvddnr 0:991714b0e830 1242 /**
dvddnr 0:991714b0e830 1243 * @brief Configure and Start a Client connection.
dvddnr 0:991714b0e830 1244 * @param Obj: pointer to module handle
dvddnr 0:991714b0e830 1245 * @param conn: pointer to the connection structure
dvddnr 0:991714b0e830 1246 * @retval Operation Status.
dvddnr 0:991714b0e830 1247 */
dvddnr 0:991714b0e830 1248 ES_WIFI_Status_t ES_WIFI_StartClientConnection(ES_WIFIObject_t *Obj, ES_WIFI_Conn_t *conn)
dvddnr 0:991714b0e830 1249 {
dvddnr 0:991714b0e830 1250 ES_WIFI_Status_t ret;
dvddnr 0:991714b0e830 1251
dvddnr 0:991714b0e830 1252 sprintf((char*)Obj->CmdData,"P0=%d\r", conn->Number);
dvddnr 0:991714b0e830 1253 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1254
dvddnr 0:991714b0e830 1255 if( conn->Type == ES_WIFI_TCP_SSL_CONNECTION )
dvddnr 0:991714b0e830 1256 {
dvddnr 0:991714b0e830 1257 sprintf((char*)Obj->CmdData,"P1=3\r");
dvddnr 0:991714b0e830 1258 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1259 if(ret != ES_WIFI_STATUS_OK) return ret;
dvddnr 0:991714b0e830 1260
dvddnr 0:991714b0e830 1261 sprintf((char*)Obj->CmdData,"D0=%s\r",(char*)conn->RemoteIP);
dvddnr 0:991714b0e830 1262 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1263 if(ret != ES_WIFI_STATUS_OK) return ret;
dvddnr 0:991714b0e830 1264
dvddnr 0:991714b0e830 1265 sprintf((char*)Obj->CmdData,"P4=%d\r", conn->RemotePort);
dvddnr 0:991714b0e830 1266 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1267 if(ret != ES_WIFI_STATUS_OK) return ret;
dvddnr 0:991714b0e830 1268
dvddnr 0:991714b0e830 1269 sprintf((char*)Obj->CmdData,"P9=0\r");
dvddnr 0:991714b0e830 1270 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1271 if(ret != ES_WIFI_STATUS_OK) return ret;
dvddnr 0:991714b0e830 1272
dvddnr 0:991714b0e830 1273 sprintf((char*)Obj->CmdData,"P6=1\r");
dvddnr 0:991714b0e830 1274 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1275
dvddnr 0:991714b0e830 1276 return ret;
dvddnr 0:991714b0e830 1277 }
dvddnr 0:991714b0e830 1278
dvddnr 0:991714b0e830 1279 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1280 {
dvddnr 0:991714b0e830 1281 sprintf((char*)Obj->CmdData,"P1=%d\r", conn->Type);
dvddnr 0:991714b0e830 1282 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1283 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1284 {
dvddnr 0:991714b0e830 1285 if ((conn->Type == ES_WIFI_UDP_CONNECTION) && (conn->LocalPort > 0))
dvddnr 0:991714b0e830 1286 {
dvddnr 0:991714b0e830 1287 sprintf((char*)Obj->CmdData,"P2=%d\r", conn->RemotePort);
dvddnr 0:991714b0e830 1288 if(AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData) == ES_WIFI_STATUS_ERROR)
dvddnr 0:991714b0e830 1289 {
dvddnr 0:991714b0e830 1290 return ES_WIFI_STATUS_ERROR;
dvddnr 0:991714b0e830 1291 }
dvddnr 0:991714b0e830 1292 }
dvddnr 0:991714b0e830 1293 sprintf((char*)Obj->CmdData,"P4=%d\r", conn->RemotePort);
dvddnr 0:991714b0e830 1294 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1295
dvddnr 0:991714b0e830 1296 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1297 {
dvddnr 0:991714b0e830 1298 sprintf((char*)Obj->CmdData,"P3=%d.%d.%d.%d\r", conn->RemoteIP[0],conn->RemoteIP[1],conn->RemoteIP[2],conn->RemoteIP[3]);
dvddnr 0:991714b0e830 1299 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1300 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1301 {
dvddnr 0:991714b0e830 1302 sprintf((char*)Obj->CmdData,"P9=0\r");
dvddnr 0:991714b0e830 1303 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1304 }
dvddnr 0:991714b0e830 1305 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1306 {
dvddnr 0:991714b0e830 1307 sprintf((char*)Obj->CmdData,"P6=1\r");
dvddnr 0:991714b0e830 1308 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1309 }
dvddnr 0:991714b0e830 1310 }
dvddnr 0:991714b0e830 1311 }
dvddnr 0:991714b0e830 1312 }
dvddnr 0:991714b0e830 1313 return ret;
dvddnr 0:991714b0e830 1314 }
dvddnr 0:991714b0e830 1315
dvddnr 0:991714b0e830 1316 /**
dvddnr 0:991714b0e830 1317 * @brief Stop Client connection.
dvddnr 0:991714b0e830 1318 * @param Obj: pointer to module handle
dvddnr 0:991714b0e830 1319 * @retval Operation Status.
dvddnr 0:991714b0e830 1320 */
dvddnr 0:991714b0e830 1321 ES_WIFI_Status_t ES_WIFI_StopClientConnection(ES_WIFIObject_t *Obj, ES_WIFI_Conn_t *conn)
dvddnr 0:991714b0e830 1322 {
dvddnr 0:991714b0e830 1323 ES_WIFI_Status_t ret;
dvddnr 0:991714b0e830 1324
dvddnr 0:991714b0e830 1325 sprintf((char*)Obj->CmdData,"P0=%d\r", conn->Number);
dvddnr 0:991714b0e830 1326 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1327
dvddnr 0:991714b0e830 1328 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1329 {
dvddnr 0:991714b0e830 1330 sprintf((char*)Obj->CmdData,"P6=0\r");
dvddnr 0:991714b0e830 1331 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1332 }
dvddnr 0:991714b0e830 1333 return ret;
dvddnr 0:991714b0e830 1334 }
dvddnr 0:991714b0e830 1335
dvddnr 0:991714b0e830 1336 #if (ES_WIFI_USE_AWS == 1)
dvddnr 0:991714b0e830 1337 /**
dvddnr 0:991714b0e830 1338 * @brief Configure and Start a AWS Client connection.
dvddnr 0:991714b0e830 1339 * @param Obj: pointer to module handle
dvddnr 0:991714b0e830 1340 * @param conn: pointer to the connection structure
dvddnr 0:991714b0e830 1341 * @retval Operation Status.
dvddnr 0:991714b0e830 1342 */
dvddnr 0:991714b0e830 1343 ES_WIFI_Status_t ES_WIFI_StartAWSClientConnection(ES_WIFIObject_t *Obj, ES_WIFI_AWS_Conn_t *conn)
dvddnr 0:991714b0e830 1344 {
dvddnr 0:991714b0e830 1345
dvddnr 0:991714b0e830 1346 ES_WIFI_Status_t ret;
dvddnr 0:991714b0e830 1347
dvddnr 0:991714b0e830 1348 sprintf((char*)Obj->CmdData,"P0=%d\r", conn->Number);
dvddnr 0:991714b0e830 1349 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1350
dvddnr 0:991714b0e830 1351 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1352 {
dvddnr 0:991714b0e830 1353 sprintf((char*)Obj->CmdData,"P1=%d\r", conn->Type);
dvddnr 0:991714b0e830 1354 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1355 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1356 {
dvddnr 0:991714b0e830 1357 sprintf((char*)Obj->CmdData,"P4=%d\r", conn->RemotePort);
dvddnr 0:991714b0e830 1358 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1359
dvddnr 0:991714b0e830 1360 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1361 {
dvddnr 0:991714b0e830 1362 sprintf((char*)Obj->CmdData,"PM=0,%s\r", conn->PublishTopic);
dvddnr 0:991714b0e830 1363 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1364 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1365 {
dvddnr 0:991714b0e830 1366 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1367 {
dvddnr 0:991714b0e830 1368 sprintf((char*)Obj->CmdData,"PM=1,%s\r", conn->SubscribeTopic);
dvddnr 0:991714b0e830 1369 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1370 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1371 {
dvddnr 0:991714b0e830 1372
dvddnr 0:991714b0e830 1373 sprintf((char*)Obj->CmdData,"PM=2,%d\r", conn->MQTTMode);
dvddnr 0:991714b0e830 1374 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1375 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1376 {
dvddnr 0:991714b0e830 1377 sprintf((char*)Obj->CmdData,"PM=5,%s\r", conn->ClientID);
dvddnr 0:991714b0e830 1378 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1379 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1380 {
dvddnr 0:991714b0e830 1381 sprintf((char*)Obj->CmdData,"PM\r");
dvddnr 0:991714b0e830 1382 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1383 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1384 {
dvddnr 0:991714b0e830 1385 sprintf((char*)Obj->CmdData,"P6=1\r");
dvddnr 0:991714b0e830 1386 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1387 }
dvddnr 0:991714b0e830 1388 }
dvddnr 0:991714b0e830 1389 }
dvddnr 0:991714b0e830 1390 }
dvddnr 0:991714b0e830 1391 }
dvddnr 0:991714b0e830 1392 }
dvddnr 0:991714b0e830 1393 }
dvddnr 0:991714b0e830 1394 }
dvddnr 0:991714b0e830 1395 }
dvddnr 0:991714b0e830 1396 return ret;
dvddnr 0:991714b0e830 1397 }
dvddnr 0:991714b0e830 1398 #endif
dvddnr 0:991714b0e830 1399 /**
dvddnr 0:991714b0e830 1400 * @brief Configure and Start a Server.
dvddnr 0:991714b0e830 1401 * @param Obj: pointer to module handle
dvddnr 0:991714b0e830 1402 * @param conn: pointer to the connection structure
dvddnr 0:991714b0e830 1403 * @retval Operation Status.
dvddnr 0:991714b0e830 1404 */
dvddnr 0:991714b0e830 1405 ES_WIFI_Status_t ES_WIFI_StartServerSingleConn(ES_WIFIObject_t *Obj, ES_WIFI_Conn_t *conn)
dvddnr 0:991714b0e830 1406 {
dvddnr 0:991714b0e830 1407 ES_WIFI_Status_t ret = ES_WIFI_STATUS_ERROR;
dvddnr 0:991714b0e830 1408 char *ptr;
dvddnr 0:991714b0e830 1409
dvddnr 0:991714b0e830 1410 sprintf((char*)Obj->CmdData,"PK=1,3000\r");
dvddnr 0:991714b0e830 1411 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1412 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1413 {
dvddnr 0:991714b0e830 1414 sprintf((char*)Obj->CmdData,"P0=%d\r", conn->Number);
dvddnr 0:991714b0e830 1415 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1416 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1417 {
dvddnr 0:991714b0e830 1418 sprintf((char*)Obj->CmdData,"P1=%d\r", conn->Type);
dvddnr 0:991714b0e830 1419 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1420 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1421 {
dvddnr 0:991714b0e830 1422 sprintf((char*)Obj->CmdData,"P2=%d\r", conn->LocalPort);
dvddnr 0:991714b0e830 1423 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1424 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1425 {
dvddnr 0:991714b0e830 1426 sprintf((char*)Obj->CmdData,"P5=1\r");
dvddnr 0:991714b0e830 1427 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1428
dvddnr 0:991714b0e830 1429 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1430 {
dvddnr 0:991714b0e830 1431 #if (ES_WIFI_USE_UART == 1)
dvddnr 0:991714b0e830 1432 if(Obj->fops.IO_Receive(Obj->CmdData, 0, Obj->Timeout) > 0)
dvddnr 0:991714b0e830 1433 {
dvddnr 0:991714b0e830 1434 if(strstr((char *)Obj->CmdData, "Accepted"))
dvddnr 0:991714b0e830 1435 {
dvddnr 0:991714b0e830 1436 ptr = strtok((char *)Obj->CmdData + 2, " ");
dvddnr 0:991714b0e830 1437 ptr = strtok(NULL, " ");
dvddnr 0:991714b0e830 1438 ptr = strtok(NULL, " ");
dvddnr 0:991714b0e830 1439 ptr = strtok(NULL, ":");
dvddnr 0:991714b0e830 1440 ParseIP((char *)ptr, conn->RemoteIP);
dvddnr 0:991714b0e830 1441 ret = ES_WIFI_STATUS_OK;
dvddnr 0:991714b0e830 1442 }
dvddnr 0:991714b0e830 1443 }
dvddnr 0:991714b0e830 1444 #else
dvddnr 0:991714b0e830 1445 do
dvddnr 0:991714b0e830 1446 {
dvddnr 0:991714b0e830 1447 sprintf((char*)Obj->CmdData,"MR\r");
dvddnr 0:991714b0e830 1448 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1449 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1450 {
dvddnr 0:991714b0e830 1451 if((strstr((char *)Obj->CmdData, "[SOMA]")) && (strstr((char *)Obj->CmdData, "[EOMA]")))
dvddnr 0:991714b0e830 1452 {
dvddnr 0:991714b0e830 1453 if(strstr((char *)Obj->CmdData, "Accepted"))
dvddnr 0:991714b0e830 1454 {
dvddnr 0:991714b0e830 1455 ptr = strtok((char *)Obj->CmdData + 2, " ");
dvddnr 0:991714b0e830 1456 ptr = strtok(NULL, " ");
dvddnr 0:991714b0e830 1457 ptr = strtok(NULL, " ");
dvddnr 0:991714b0e830 1458 ptr = strtok(NULL, ":");
dvddnr 0:991714b0e830 1459 ParseIP((char *)ptr, conn->RemoteIP);
dvddnr 0:991714b0e830 1460 ret = ES_WIFI_STATUS_OK;
dvddnr 0:991714b0e830 1461 break;
dvddnr 0:991714b0e830 1462 }
dvddnr 0:991714b0e830 1463 }
dvddnr 0:991714b0e830 1464 }
dvddnr 0:991714b0e830 1465 else
dvddnr 0:991714b0e830 1466 {
dvddnr 0:991714b0e830 1467 ret = ES_WIFI_STATUS_ERROR;
dvddnr 0:991714b0e830 1468 break;
dvddnr 0:991714b0e830 1469 }
dvddnr 0:991714b0e830 1470 Obj->fops.IO_Delay(1000);
dvddnr 0:991714b0e830 1471 } while (1);
dvddnr 0:991714b0e830 1472 #endif
dvddnr 0:991714b0e830 1473 }
dvddnr 0:991714b0e830 1474 }
dvddnr 0:991714b0e830 1475 }
dvddnr 0:991714b0e830 1476 }
dvddnr 0:991714b0e830 1477 }
dvddnr 0:991714b0e830 1478 return ret;
dvddnr 0:991714b0e830 1479 }
dvddnr 0:991714b0e830 1480
dvddnr 0:991714b0e830 1481 /**
dvddnr 0:991714b0e830 1482 * @brief Stop a Server.
dvddnr 0:991714b0e830 1483 * @param Obj: pointer to module handle
dvddnr 0:991714b0e830 1484 * @retval Operation Status.
dvddnr 0:991714b0e830 1485 */
dvddnr 0:991714b0e830 1486 ES_WIFI_Status_t ES_WIFI_StopServerSingleConn(ES_WIFIObject_t *Obj)
dvddnr 0:991714b0e830 1487 {
dvddnr 0:991714b0e830 1488 sprintf((char*)Obj->CmdData,"P5=0\r");
dvddnr 0:991714b0e830 1489 return AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1490 }
dvddnr 0:991714b0e830 1491
dvddnr 0:991714b0e830 1492
dvddnr 0:991714b0e830 1493 /**
dvddnr 0:991714b0e830 1494 * @brief Configure and Start a Server.
dvddnr 0:991714b0e830 1495 * @param Obj: pointer to module handle
dvddnr 0:991714b0e830 1496 * @param conn: pointer to the connection structure
dvddnr 0:991714b0e830 1497 * @retval Operation Status.
dvddnr 0:991714b0e830 1498 */
dvddnr 0:991714b0e830 1499 ES_WIFI_Status_t ES_WIFI_StartServerMultiConn(ES_WIFIObject_t *Obj, ES_WIFI_Conn_t *conn)
dvddnr 0:991714b0e830 1500 {
dvddnr 0:991714b0e830 1501 ES_WIFI_Status_t ret = ES_WIFI_STATUS_ERROR;
dvddnr 0:991714b0e830 1502 char *ptr;
dvddnr 0:991714b0e830 1503
dvddnr 0:991714b0e830 1504 sprintf((char*)Obj->CmdData,"PK=1,3000\r");
dvddnr 0:991714b0e830 1505 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1506 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1507 {
dvddnr 0:991714b0e830 1508 sprintf((char*)Obj->CmdData,"P0=%d\r", conn->Number);
dvddnr 0:991714b0e830 1509 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1510 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1511 {
dvddnr 0:991714b0e830 1512 sprintf((char*)Obj->CmdData,"P1=%d\r", conn->Type);
dvddnr 0:991714b0e830 1513 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1514 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1515 {
dvddnr 0:991714b0e830 1516 sprintf((char*)Obj->CmdData,"P2=%d\r", conn->LocalPort);
dvddnr 0:991714b0e830 1517 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1518 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1519 {
dvddnr 0:991714b0e830 1520 sprintf((char*)Obj->CmdData,"P8=6\r");
dvddnr 0:991714b0e830 1521 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1522
dvddnr 0:991714b0e830 1523 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1524 {
dvddnr 0:991714b0e830 1525 sprintf((char*)Obj->CmdData,"P5=1\r");
dvddnr 0:991714b0e830 1526 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1527
dvddnr 0:991714b0e830 1528 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1529 {
dvddnr 0:991714b0e830 1530 #if (ES_WIFI_USE_UART == 1)
dvddnr 0:991714b0e830 1531 if(Obj->fops.IO_Receive(Obj->CmdData, 0, Obj->Timeout) > 0)
dvddnr 0:991714b0e830 1532 {
dvddnr 0:991714b0e830 1533 if(strstr((char *)Obj->CmdData, "Accepted"))
dvddnr 0:991714b0e830 1534 {
dvddnr 0:991714b0e830 1535 ptr = strtok((char *)Obj->CmdData + 2, " ");
dvddnr 0:991714b0e830 1536 ptr = strtok(NULL, " ");
dvddnr 0:991714b0e830 1537 ptr = strtok(NULL, " ");
dvddnr 0:991714b0e830 1538 ptr = strtok(NULL, ":");
dvddnr 0:991714b0e830 1539 ParseIP((char *)ptr, conn->RemoteIP);
dvddnr 0:991714b0e830 1540 ret = ES_WIFI_STATUS_OK;
dvddnr 0:991714b0e830 1541 }
dvddnr 0:991714b0e830 1542 }
dvddnr 0:991714b0e830 1543 #else
dvddnr 0:991714b0e830 1544 do
dvddnr 0:991714b0e830 1545 {
dvddnr 0:991714b0e830 1546 sprintf((char*)Obj->CmdData,"MR\r");
dvddnr 0:991714b0e830 1547 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1548 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1549 {
dvddnr 0:991714b0e830 1550 if((strstr((char *)Obj->CmdData, "[SOMA]")) && (strstr((char *)Obj->CmdData, "[EOMA]")))
dvddnr 0:991714b0e830 1551 {
dvddnr 0:991714b0e830 1552 if(strstr((char *)Obj->CmdData, "Accepted"))
dvddnr 0:991714b0e830 1553 {
dvddnr 0:991714b0e830 1554 ptr = strtok((char *)Obj->CmdData + 2, " ");
dvddnr 0:991714b0e830 1555 ptr = strtok(NULL, " ");
dvddnr 0:991714b0e830 1556 ptr = strtok(NULL, " ");
dvddnr 0:991714b0e830 1557 ptr = strtok(NULL, ":");
dvddnr 0:991714b0e830 1558 ParseIP((char *)ptr, conn->RemoteIP);
dvddnr 0:991714b0e830 1559 ret = ES_WIFI_STATUS_OK;
dvddnr 0:991714b0e830 1560 break;
dvddnr 0:991714b0e830 1561 }
dvddnr 0:991714b0e830 1562 }
dvddnr 0:991714b0e830 1563 }
dvddnr 0:991714b0e830 1564 else
dvddnr 0:991714b0e830 1565 {
dvddnr 0:991714b0e830 1566 ret = ES_WIFI_STATUS_ERROR;
dvddnr 0:991714b0e830 1567 break;
dvddnr 0:991714b0e830 1568 }
dvddnr 0:991714b0e830 1569 Obj->fops.IO_Delay(1000);
dvddnr 0:991714b0e830 1570 } while (1);
dvddnr 0:991714b0e830 1571 #endif
dvddnr 0:991714b0e830 1572 }
dvddnr 0:991714b0e830 1573 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1574 {
dvddnr 0:991714b0e830 1575 sprintf((char*)Obj->CmdData,"P7=1\r");
dvddnr 0:991714b0e830 1576 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1577
dvddnr 0:991714b0e830 1578 }
dvddnr 0:991714b0e830 1579 }
dvddnr 0:991714b0e830 1580 }
dvddnr 0:991714b0e830 1581 }
dvddnr 0:991714b0e830 1582 }
dvddnr 0:991714b0e830 1583 }
dvddnr 0:991714b0e830 1584 return ret;
dvddnr 0:991714b0e830 1585 }
dvddnr 0:991714b0e830 1586
dvddnr 0:991714b0e830 1587 /**
dvddnr 0:991714b0e830 1588 * @brief Stop a Server.
dvddnr 0:991714b0e830 1589 * @param Obj: pointer to module handle
dvddnr 0:991714b0e830 1590 * @retval Operation Status.
dvddnr 0:991714b0e830 1591 */
dvddnr 0:991714b0e830 1592 ES_WIFI_Status_t ES_WIFI_StopServerMultiConn(ES_WIFIObject_t *Obj)
dvddnr 0:991714b0e830 1593 {
dvddnr 0:991714b0e830 1594 ES_WIFI_Status_t ret = ES_WIFI_STATUS_ERROR;
dvddnr 0:991714b0e830 1595
dvddnr 0:991714b0e830 1596 /* close the socket handle for the current request. */
dvddnr 0:991714b0e830 1597 sprintf((char*)Obj->CmdData,"P7=2\r");
dvddnr 0:991714b0e830 1598 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1599
dvddnr 0:991714b0e830 1600 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1601 {
dvddnr 0:991714b0e830 1602 /*Get the next request out of the queue */
dvddnr 0:991714b0e830 1603 sprintf((char*)Obj->CmdData,"P7=3\r");
dvddnr 0:991714b0e830 1604 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1605 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1606 {
dvddnr 0:991714b0e830 1607 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1608 {
dvddnr 0:991714b0e830 1609 if(Obj->fops.IO_Receive(Obj->CmdData, 0, Obj->Timeout) > 0)
dvddnr 0:991714b0e830 1610 {
dvddnr 0:991714b0e830 1611 if(strstr((char *)Obj->CmdData, "Accepted"))
dvddnr 0:991714b0e830 1612 {
dvddnr 0:991714b0e830 1613 ret = ES_WIFI_STATUS_OK;
dvddnr 0:991714b0e830 1614 }
dvddnr 0:991714b0e830 1615 }
dvddnr 0:991714b0e830 1616 }
dvddnr 0:991714b0e830 1617 }
dvddnr 0:991714b0e830 1618 }
dvddnr 0:991714b0e830 1619 return ret;
dvddnr 0:991714b0e830 1620 }
dvddnr 0:991714b0e830 1621 /**
dvddnr 0:991714b0e830 1622 * @brief Send an amount data over WIFI.
dvddnr 0:991714b0e830 1623 * @param Obj: pointer to module handle
dvddnr 0:991714b0e830 1624 * @param Socket: number of the socket
dvddnr 0:991714b0e830 1625 * @param pdata: pointer to data
dvddnr 0:991714b0e830 1626 * @param len : length of the data to be sent
dvddnr 0:991714b0e830 1627 * @retval Operation Status.
dvddnr 0:991714b0e830 1628 */
dvddnr 0:991714b0e830 1629 ES_WIFI_Status_t ES_WIFI_SendData(ES_WIFIObject_t *Obj, uint8_t Socket, uint8_t *pdata, uint16_t Reqlen , uint16_t *SentLen , uint32_t Timeout)
dvddnr 0:991714b0e830 1630 {
dvddnr 0:991714b0e830 1631 ES_WIFI_Status_t ret = ES_WIFI_STATUS_ERROR;
dvddnr 0:991714b0e830 1632
dvddnr 0:991714b0e830 1633 if(Reqlen >= ES_WIFI_PAYLOAD_SIZE ) Reqlen= ES_WIFI_PAYLOAD_SIZE;
dvddnr 0:991714b0e830 1634
dvddnr 0:991714b0e830 1635 *SentLen = Reqlen;
dvddnr 0:991714b0e830 1636 sprintf((char*)Obj->CmdData,"P0=%d\r", Socket);
dvddnr 0:991714b0e830 1637 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1638 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1639 {
dvddnr 0:991714b0e830 1640 sprintf((char*)Obj->CmdData,"S2=%lu\r",Timeout);
dvddnr 0:991714b0e830 1641 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1642
dvddnr 0:991714b0e830 1643 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1644 {
dvddnr 0:991714b0e830 1645 sprintf((char *)Obj->CmdData,"S3=%04d\r",Reqlen);
dvddnr 0:991714b0e830 1646 ret = AT_RequestSendData(Obj, Obj->CmdData, pdata, Reqlen, Obj->CmdData);
dvddnr 0:991714b0e830 1647
dvddnr 0:991714b0e830 1648 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1649 {
dvddnr 0:991714b0e830 1650 if(strstr((char *)Obj->CmdData,"-1\r\n"))
dvddnr 0:991714b0e830 1651 {
dvddnr 0:991714b0e830 1652 ret = ES_WIFI_STATUS_ERROR;
dvddnr 0:991714b0e830 1653 }
dvddnr 0:991714b0e830 1654 }
dvddnr 0:991714b0e830 1655 }
dvddnr 0:991714b0e830 1656 }
dvddnr 0:991714b0e830 1657
dvddnr 0:991714b0e830 1658 if (ret == ES_WIFI_STATUS_ERROR) *SentLen = 0;
dvddnr 0:991714b0e830 1659 return ret;
dvddnr 0:991714b0e830 1660 }
dvddnr 0:991714b0e830 1661
dvddnr 0:991714b0e830 1662 /**
dvddnr 0:991714b0e830 1663 * @brief Receive an amount data over WIFI.
dvddnr 0:991714b0e830 1664 * @param Obj: pointer to module handle
dvddnr 0:991714b0e830 1665 * @param Socket: number of the socket
dvddnr 0:991714b0e830 1666 * @param pdata: pointer to data
dvddnr 0:991714b0e830 1667 * @param len : pointer to the length of the data to be received
dvddnr 0:991714b0e830 1668 * @retval Operation Status.
dvddnr 0:991714b0e830 1669 */
dvddnr 0:991714b0e830 1670 ES_WIFI_Status_t ES_WIFI_ReceiveData(ES_WIFIObject_t *Obj, uint8_t Socket, uint8_t *pdata, uint16_t Reqlen, uint16_t *Receivedlen, uint32_t Timeout)
dvddnr 0:991714b0e830 1671 {
dvddnr 0:991714b0e830 1672 ES_WIFI_Status_t ret = ES_WIFI_STATUS_ERROR;
dvddnr 0:991714b0e830 1673
dvddnr 0:991714b0e830 1674 if(Reqlen <= ES_WIFI_PAYLOAD_SIZE )
dvddnr 0:991714b0e830 1675 {
dvddnr 0:991714b0e830 1676 sprintf((char*)Obj->CmdData,"P0=%d\r", Socket);
dvddnr 0:991714b0e830 1677 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1678
dvddnr 0:991714b0e830 1679 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1680 {
dvddnr 0:991714b0e830 1681 sprintf((char*)Obj->CmdData,"R1=%d\r", Reqlen);
dvddnr 0:991714b0e830 1682 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1683 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1684 {
dvddnr 0:991714b0e830 1685 sprintf((char*)Obj->CmdData,"R2=%lu\r", Timeout);
dvddnr 0:991714b0e830 1686 ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
dvddnr 0:991714b0e830 1687 if(ret == ES_WIFI_STATUS_OK)
dvddnr 0:991714b0e830 1688 {
dvddnr 0:991714b0e830 1689 sprintf((char*)Obj->CmdData,"R0=\r");
dvddnr 0:991714b0e830 1690 ret = AT_RequestReceiveData(Obj, Obj->CmdData, (char *)pdata, Reqlen, Receivedlen);
dvddnr 0:991714b0e830 1691 }
dvddnr 0:991714b0e830 1692 }
dvddnr 0:991714b0e830 1693 else
dvddnr 0:991714b0e830 1694 {
dvddnr 0:991714b0e830 1695 *Receivedlen = 0;
dvddnr 0:991714b0e830 1696 }
dvddnr 0:991714b0e830 1697 }
dvddnr 0:991714b0e830 1698 }
dvddnr 0:991714b0e830 1699 return ret;
dvddnr 0:991714b0e830 1700 }
dvddnr 0:991714b0e830 1701
dvddnr 0:991714b0e830 1702 ES_WIFI_Status_t ES_WIFI_ReceiveData2(ES_WIFIObject_t *Obj, uint8_t *pdata, uint16_t Reqlen, uint16_t *Receivedlen)
dvddnr 0:991714b0e830 1703 {
dvddnr 0:991714b0e830 1704 ES_WIFI_Status_t ret = ES_WIFI_STATUS_ERROR;
dvddnr 0:991714b0e830 1705
dvddnr 0:991714b0e830 1706 if(Reqlen <= ES_WIFI_PAYLOAD_SIZE )
dvddnr 0:991714b0e830 1707 {
dvddnr 0:991714b0e830 1708 *Receivedlen = 0;
dvddnr 0:991714b0e830 1709 sprintf((char*)Obj->CmdData,"R0=\r");
dvddnr 0:991714b0e830 1710 ret = AT_RequestReceiveData(Obj, Obj->CmdData, (char *)pdata, Reqlen, Receivedlen);
dvddnr 0:991714b0e830 1711 }
dvddnr 0:991714b0e830 1712 return ret;
dvddnr 0:991714b0e830 1713 }
dvddnr 0:991714b0e830 1714
dvddnr 0:991714b0e830 1715 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/