Extending the X_NUCLEO_IDW01M1 to allow configuration of the board as an access point

Dependents:   X_NUCLEO_IDW01M1_AP_Test

Fork of X_NUCLEO_IDW01M1 by ST

Committer:
mridup
Date:
Wed Apr 13 11:34:07 2016 +0000
Revision:
0:dc55f40eb04f
First Version of mbed X_NUCLEO_IDW01M1 library

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mridup 0:dc55f40eb04f 1 /**
mridup 0:dc55f40eb04f 2 ******************************************************************************
mridup 0:dc55f40eb04f 3 * @file wifi_interface.c
mridup 0:dc55f40eb04f 4 * @author Central LAB
mridup 0:dc55f40eb04f 5 * @version V2.0.0
mridup 0:dc55f40eb04f 6 * @date 10-February-2016
mridup 0:dc55f40eb04f 7 * @brief User APIs implementation for X-CUBE-WIFI1
mridup 0:dc55f40eb04f 8 ******************************************************************************
mridup 0:dc55f40eb04f 9 * @attention
mridup 0:dc55f40eb04f 10 *
mridup 0:dc55f40eb04f 11 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
mridup 0:dc55f40eb04f 12 *
mridup 0:dc55f40eb04f 13 * Redistribution and use in source and binary forms, with or without modification,
mridup 0:dc55f40eb04f 14 * are permitted provided that the following conditions are met:
mridup 0:dc55f40eb04f 15 * 1. Redistributions of source code must retain the above copyright notice,
mridup 0:dc55f40eb04f 16 * this list of conditions and the following disclaimer.
mridup 0:dc55f40eb04f 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
mridup 0:dc55f40eb04f 18 * this list of conditions and the following disclaimer in the documentation
mridup 0:dc55f40eb04f 19 * and/or other materials provided with the distribution.
mridup 0:dc55f40eb04f 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
mridup 0:dc55f40eb04f 21 * may be used to endorse or promote products derived from this software
mridup 0:dc55f40eb04f 22 * without specific prior written permission.
mridup 0:dc55f40eb04f 23 *
mridup 0:dc55f40eb04f 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
mridup 0:dc55f40eb04f 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
mridup 0:dc55f40eb04f 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
mridup 0:dc55f40eb04f 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
mridup 0:dc55f40eb04f 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
mridup 0:dc55f40eb04f 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
mridup 0:dc55f40eb04f 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
mridup 0:dc55f40eb04f 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
mridup 0:dc55f40eb04f 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
mridup 0:dc55f40eb04f 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
mridup 0:dc55f40eb04f 34 *
mridup 0:dc55f40eb04f 35 ******************************************************************************
mridup 0:dc55f40eb04f 36 */
mridup 0:dc55f40eb04f 37
mridup 0:dc55f40eb04f 38 /* Includes ------------------------------------------------------------------*/
mridup 0:dc55f40eb04f 39 #include "wifi_module.h"
mridup 0:dc55f40eb04f 40 //#include "stm32_spwf_wifi.h"
mridup 0:dc55f40eb04f 41 #include "ring_buffer.h"
mridup 0:dc55f40eb04f 42 #include "stdio.h"
mridup 0:dc55f40eb04f 43 #include "string.h"
mridup 0:dc55f40eb04f 44 #include "gpio_irq_api.h"
mridup 0:dc55f40eb04f 45 #include "gpio_api.h"
mridup 0:dc55f40eb04f 46 #include "wait_api.h"
mridup 0:dc55f40eb04f 47 #include "serial_api.h"
mridup 0:dc55f40eb04f 48
mridup 0:dc55f40eb04f 49 /** @addtogroup MIDDLEWARES
mridup 0:dc55f40eb04f 50 * @{
mridup 0:dc55f40eb04f 51 */
mridup 0:dc55f40eb04f 52
mridup 0:dc55f40eb04f 53
mridup 0:dc55f40eb04f 54 /** @defgroup NUCLEO_WIFI_INTERFACE
mridup 0:dc55f40eb04f 55 * @brief Wi-Fi User API modules
mridup 0:dc55f40eb04f 56 * @{
mridup 0:dc55f40eb04f 57 */
mridup 0:dc55f40eb04f 58
mridup 0:dc55f40eb04f 59
mridup 0:dc55f40eb04f 60 /** @defgroup NUCLEO_WIFI_INTERFACE_Private_Defines
mridup 0:dc55f40eb04f 61 * @{
mridup 0:dc55f40eb04f 62 */
mridup 0:dc55f40eb04f 63
mridup 0:dc55f40eb04f 64
mridup 0:dc55f40eb04f 65 /**
mridup 0:dc55f40eb04f 66 * @}
mridup 0:dc55f40eb04f 67 */
mridup 0:dc55f40eb04f 68
mridup 0:dc55f40eb04f 69 /** @addtogroup NUCLEO_WIFI_INTERFACE_Private_Variables
mridup 0:dc55f40eb04f 70 * @{
mridup 0:dc55f40eb04f 71 */
mridup 0:dc55f40eb04f 72 /* Private variables ---------------------------------------------------------*/
mridup 0:dc55f40eb04f 73
mridup 0:dc55f40eb04f 74 #if defined (USE_STM32F4XX_NUCLEO) || (USE_STM32L4XX_NUCLEO)
mridup 0:dc55f40eb04f 75 extern uint8_t WiFi_AT_Cmd_Buff[2048];
mridup 0:dc55f40eb04f 76 #else
mridup 0:dc55f40eb04f 77 extern uint8_t WiFi_AT_Cmd_Buff[1024];
mridup 0:dc55f40eb04f 78 #endif
mridup 0:dc55f40eb04f 79
mridup 0:dc55f40eb04f 80 extern volatile Wifi_Status_Var status_flag;
mridup 0:dc55f40eb04f 81
mridup 0:dc55f40eb04f 82 extern char UserDataBuff[MAX_BUFFER_GLOBAL];
mridup 0:dc55f40eb04f 83 extern wifi_scan *wifi_scanned_list;//[15];
mridup 0:dc55f40eb04f 84 extern char print_msg_buff[MAX_BUFFER_GLOBAL];
mridup 0:dc55f40eb04f 85 extern uint8_t user_scan_number;
mridup 0:dc55f40eb04f 86 extern uint8_t no_of_open_client_sockets;
mridup 0:dc55f40eb04f 87 extern wifi_bool open_sockets[8];//Max open sockets allowed is 8. Each array element depicts one socket (true=open, false=closed)
mridup 0:dc55f40eb04f 88 extern WiFi_AT_CMD_Response_t WiFi_Module_State;
mridup 0:dc55f40eb04f 89 extern volatile uint8_t wifi_client_connected;
mridup 0:dc55f40eb04f 90 extern uint8_t gpio_value, gpio_direc;
mridup 0:dc55f40eb04f 91 extern volatile uint8_t wifi_connected;
mridup 0:dc55f40eb04f 92 extern uint32_t SockON_Data_Length;
mridup 0:dc55f40eb04f 93 extern uint8_t Socket_Open_ID, sockon_query_id;
mridup 0:dc55f40eb04f 94 extern volatile uint32_t WIND64_count;
mridup 0:dc55f40eb04f 95 extern uint32_t process_buffer_index;
mridup 0:dc55f40eb04f 96 extern uint32_t epoch_time;
mridup 0:dc55f40eb04f 97
mridup 0:dc55f40eb04f 98 /*SPWFSADevice Class functions and variables*/
mridup 0:dc55f40eb04f 99 void * spwf_device_class;
mridup 0:dc55f40eb04f 100 extern void callSpwfSADevice_wakeup(void* object, int wake);
mridup 0:dc55f40eb04f 101 extern void callSpwfSADevice_debug(void* object, const char * string);
mridup 0:dc55f40eb04f 102 /**
mridup 0:dc55f40eb04f 103 * @}
mridup 0:dc55f40eb04f 104 */
mridup 0:dc55f40eb04f 105
mridup 0:dc55f40eb04f 106 /** @defgroup NUCLEO_WIFI_INTERFACE_Private_Functions
mridup 0:dc55f40eb04f 107 * @{
mridup 0:dc55f40eb04f 108 */
mridup 0:dc55f40eb04f 109 #ifdef USART_PRINT_MSG
mridup 0:dc55f40eb04f 110 #define printf(arg) {sprintf((char*)print_msg_buff,arg); \
mridup 0:dc55f40eb04f 111 HAL_UART_Transmit(&UartMsgHandle, (uint8_t*)print_msg_buff, strlen(print_msg_buff), 1000);}
mridup 0:dc55f40eb04f 112 #endif
mridup 0:dc55f40eb04f 113
mridup 0:dc55f40eb04f 114 /**
mridup 0:dc55f40eb04f 115 *Changed/introduced functions for MBED implementation:
mridup 0:dc55f40eb04f 116
mridup 0:dc55f40eb04f 117 - WiFi_Status_t wifi_init(wifi_config* config)
mridup 0:dc55f40eb04f 118 - WiFi_Status_t wifi_wakeup(wifi_bool wakeup)
mridup 0:dc55f40eb04f 119 - WiFi_Status_t wifi_socket_server_write(uint16_t DataLength,char * pData)
mridup 0:dc55f40eb04f 120 - void wifi_reset(void);
mridup 0:dc55f40eb04f 121 - WiFi_Status_t wifi_enable(wifi_bool enable)
mridup 0:dc55f40eb04f 122
mridup 0:dc55f40eb04f 123 */
mridup 0:dc55f40eb04f 124
mridup 0:dc55f40eb04f 125
mridup 0:dc55f40eb04f 126 /**
mridup 0:dc55f40eb04f 127 * @brief wifi_init
mridup 0:dc55f40eb04f 128 * User API for wifi init
mridup 0:dc55f40eb04f 129 * @param None
mridup 0:dc55f40eb04f 130 * @retval None
mridup 0:dc55f40eb04f 131 */
mridup 0:dc55f40eb04f 132 WiFi_Status_t wifi_init(wifi_config* config)
mridup 0:dc55f40eb04f 133 {
mridup 0:dc55f40eb04f 134 #ifndef WIFI_USE_VCOM
mridup 0:dc55f40eb04f 135 uint8_t tx_level;
mridup 0:dc55f40eb04f 136 #endif
mridup 0:dc55f40eb04f 137
mridup 0:dc55f40eb04f 138 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 139
mridup 0:dc55f40eb04f 140 #if DEBUG_PRINT
mridup 0:dc55f40eb04f 141 printf("\r\n[SPWF]Initializing SPWF01SA1 Interface\r\n");
mridup 0:dc55f40eb04f 142 #endif
mridup 0:dc55f40eb04f 143 //callSpwfSADevice_debug(spwf_device_class, "\r\n[SPWF] Initializing mbed SPWF01SA1 Interface\r\n");
mridup 0:dc55f40eb04f 144
mridup 0:dc55f40eb04f 145 WiFi_Module_Init();
mridup 0:dc55f40eb04f 146
mridup 0:dc55f40eb04f 147 //callSpwfSADevice_debug(spwf_device_class, "\r\n[SPWF] Module Init done\r\n");
mridup 0:dc55f40eb04f 148
mridup 0:dc55f40eb04f 149 #ifndef WIFI_USE_VCOM
mridup 0:dc55f40eb04f 150
mridup 0:dc55f40eb04f 151 wifi_wakeup(WIFI_TRUE);//Prevent from going to sleep during configuration
mridup 0:dc55f40eb04f 152
mridup 0:dc55f40eb04f 153 /* Soft reset the module */
mridup 0:dc55f40eb04f 154 wifi_reset();
mridup 0:dc55f40eb04f 155
mridup 0:dc55f40eb04f 156 //callSpwfSADevice_debug(spwf_device_class, "\r\n[SPWF] Hardware started\r\n");
mridup 0:dc55f40eb04f 157
mridup 0:dc55f40eb04f 158 /* Set localecho1 to 0*/
mridup 0:dc55f40eb04f 159 status = SET_Configuration_Value(LOCALECHO1, 0);
mridup 0:dc55f40eb04f 160 if(status != WiFi_MODULE_SUCCESS) return status;
mridup 0:dc55f40eb04f 161
mridup 0:dc55f40eb04f 162 /* Restore default setting*/
mridup 0:dc55f40eb04f 163 Reset_AT_CMD_Buffer();
mridup 0:dc55f40eb04f 164 sprintf((char*)WiFi_AT_Cmd_Buff,AT_RESTORE_DEFAULT_SETTING);
mridup 0:dc55f40eb04f 165 status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
mridup 0:dc55f40eb04f 166 if(status == WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 167 {
mridup 0:dc55f40eb04f 168 status = USART_Receive_AT_Resp(Process_Event);
mridup 0:dc55f40eb04f 169 if(status != WiFi_MODULE_SUCCESS) return status;
mridup 0:dc55f40eb04f 170 }
mridup 0:dc55f40eb04f 171
mridup 0:dc55f40eb04f 172 /* Switch on HW Flow Control*/
mridup 0:dc55f40eb04f 173 status = SET_Configuration_Value(CONSOLE1_HWFC, 1);
mridup 0:dc55f40eb04f 174 if(status != WiFi_MODULE_SUCCESS) return status;
mridup 0:dc55f40eb04f 175
mridup 0:dc55f40eb04f 176 if(config->wifi_baud_rate)
mridup 0:dc55f40eb04f 177 {
mridup 0:dc55f40eb04f 178 /* Set USART Speed*/
mridup 0:dc55f40eb04f 179 status = SET_Configuration_Value(CONSOLE1_SPEED, config->wifi_baud_rate);
mridup 0:dc55f40eb04f 180 if(status != WiFi_MODULE_SUCCESS) return status;
mridup 0:dc55f40eb04f 181 }
mridup 0:dc55f40eb04f 182
mridup 0:dc55f40eb04f 183 /* Set wifi_mode to idle*/
mridup 0:dc55f40eb04f 184 status = SET_Configuration_Value(WIFI_MODE, WiFi_IDLE_MODE);
mridup 0:dc55f40eb04f 185 if(status != WiFi_MODULE_SUCCESS) return status;
mridup 0:dc55f40eb04f 186
mridup 0:dc55f40eb04f 187 switch(config->ht_mode)
mridup 0:dc55f40eb04f 188 {
mridup 0:dc55f40eb04f 189 case WIFI_FALSE:
mridup 0:dc55f40eb04f 190 status = SET_Configuration_Value(WIFI_HT_MODE, 0);
mridup 0:dc55f40eb04f 191 if(status != WiFi_MODULE_SUCCESS) return status;
mridup 0:dc55f40eb04f 192 status = SET_Configuration_Addr(WIFI_OPR_RATE_MASK, "0x00003FCF");
mridup 0:dc55f40eb04f 193 if(status != WiFi_MODULE_SUCCESS) return status;
mridup 0:dc55f40eb04f 194 break;
mridup 0:dc55f40eb04f 195 case WIFI_TRUE:
mridup 0:dc55f40eb04f 196 status = SET_Configuration_Value(WIFI_HT_MODE, 1);
mridup 0:dc55f40eb04f 197 if(status != WiFi_MODULE_SUCCESS) return status;
mridup 0:dc55f40eb04f 198 status = SET_Configuration_Addr(WIFI_OPR_RATE_MASK, "0x003FFFCF");
mridup 0:dc55f40eb04f 199 if(status != WiFi_MODULE_SUCCESS) return status;
mridup 0:dc55f40eb04f 200 break;
mridup 0:dc55f40eb04f 201 default:
mridup 0:dc55f40eb04f 202 break;
mridup 0:dc55f40eb04f 203 }
mridup 0:dc55f40eb04f 204
mridup 0:dc55f40eb04f 205 switch(config->power)
mridup 0:dc55f40eb04f 206 {
mridup 0:dc55f40eb04f 207 case wifi_active:
mridup 0:dc55f40eb04f 208 status = SET_Configuration_Value(WIFI_POWERSAVE, 0);
mridup 0:dc55f40eb04f 209 if(status != WiFi_MODULE_SUCCESS) return status;
mridup 0:dc55f40eb04f 210 status = SET_Configuration_Value(WIFI_SLEEP_ENABLED, 0);
mridup 0:dc55f40eb04f 211 if(status != WiFi_MODULE_SUCCESS) return status;
mridup 0:dc55f40eb04f 212 break;
mridup 0:dc55f40eb04f 213 case wifi_reactive:
mridup 0:dc55f40eb04f 214 status = SET_Configuration_Value(WIFI_POWERSAVE, 1);
mridup 0:dc55f40eb04f 215 if(status != WiFi_MODULE_SUCCESS) return status;
mridup 0:dc55f40eb04f 216 status = SET_Configuration_Value(WIFI_OPERATIONAL_MODE, 11);
mridup 0:dc55f40eb04f 217 if(status != WiFi_MODULE_SUCCESS) return status;
mridup 0:dc55f40eb04f 218 status = SET_Configuration_Value(WIFI_BEACON_WAKEUP, 0);
mridup 0:dc55f40eb04f 219 if(status != WiFi_MODULE_SUCCESS) return status;
mridup 0:dc55f40eb04f 220 status = SET_Configuration_Value(WIFI_LISTEN_INTERVAL, 0);
mridup 0:dc55f40eb04f 221 if(status != WiFi_MODULE_SUCCESS) return status;
mridup 0:dc55f40eb04f 222 status = SET_Configuration_Value(WIFI_SLEEP_ENABLED, 0);
mridup 0:dc55f40eb04f 223 if(status != WiFi_MODULE_SUCCESS) return status;
mridup 0:dc55f40eb04f 224 break;
mridup 0:dc55f40eb04f 225 case wifi_sleep:
mridup 0:dc55f40eb04f 226 status = SET_Configuration_Value(WIFI_POWERSAVE, 1);
mridup 0:dc55f40eb04f 227 if(status != WiFi_MODULE_SUCCESS) return status;
mridup 0:dc55f40eb04f 228 status = SET_Configuration_Value(WIFI_OPERATIONAL_MODE, 12);
mridup 0:dc55f40eb04f 229 if(status != WiFi_MODULE_SUCCESS) return status;
mridup 0:dc55f40eb04f 230 status = SET_Configuration_Value(WIFI_BEACON_WAKEUP, 10);
mridup 0:dc55f40eb04f 231 if(status != WiFi_MODULE_SUCCESS) return status;
mridup 0:dc55f40eb04f 232 status = SET_Configuration_Value(WIFI_LISTEN_INTERVAL, 1);
mridup 0:dc55f40eb04f 233 if(status != WiFi_MODULE_SUCCESS) return status;
mridup 0:dc55f40eb04f 234 status = SET_Configuration_Value(WIFI_SLEEP_ENABLED, 1);
mridup 0:dc55f40eb04f 235 if(status != WiFi_MODULE_SUCCESS) return status;
mridup 0:dc55f40eb04f 236 break;
mridup 0:dc55f40eb04f 237 default:
mridup 0:dc55f40eb04f 238 break;
mridup 0:dc55f40eb04f 239 }
mridup 0:dc55f40eb04f 240
mridup 0:dc55f40eb04f 241 switch(config->power_level)
mridup 0:dc55f40eb04f 242 {
mridup 0:dc55f40eb04f 243 case low:
mridup 0:dc55f40eb04f 244 case medium:
mridup 0:dc55f40eb04f 245 case high:
mridup 0:dc55f40eb04f 246 case max:
mridup 0:dc55f40eb04f 247 tx_level=config->power_level*6;
mridup 0:dc55f40eb04f 248 status = SET_Configuration_Value(WIFI_TX_POWER, tx_level);
mridup 0:dc55f40eb04f 249 if(status != WiFi_MODULE_SUCCESS) return status;
mridup 0:dc55f40eb04f 250 break;
mridup 0:dc55f40eb04f 251 default:
mridup 0:dc55f40eb04f 252 break;
mridup 0:dc55f40eb04f 253 }
mridup 0:dc55f40eb04f 254
mridup 0:dc55f40eb04f 255 switch(config->dhcp)
mridup 0:dc55f40eb04f 256 {
mridup 0:dc55f40eb04f 257 case off:
mridup 0:dc55f40eb04f 258 case on:
mridup 0:dc55f40eb04f 259 case custom:
mridup 0:dc55f40eb04f 260 status = SET_Configuration_Value(IP_USE_DHCP_SERVER, config->dhcp);
mridup 0:dc55f40eb04f 261 if(status != WiFi_MODULE_SUCCESS) return status;
mridup 0:dc55f40eb04f 262 break;
mridup 0:dc55f40eb04f 263 default:
mridup 0:dc55f40eb04f 264 break;
mridup 0:dc55f40eb04f 265 }
mridup 0:dc55f40eb04f 266
mridup 0:dc55f40eb04f 267 /* Set IP address */
mridup 0:dc55f40eb04f 268 if(config->ip_addr)
mridup 0:dc55f40eb04f 269 {
mridup 0:dc55f40eb04f 270 status = SET_Configuration_Addr(WIFI_IP_ADDRESS, config->ip_addr);
mridup 0:dc55f40eb04f 271 if(status != WiFi_MODULE_SUCCESS) return status;
mridup 0:dc55f40eb04f 272 }
mridup 0:dc55f40eb04f 273 /* Set netmask address */
mridup 0:dc55f40eb04f 274 if(config->netmask_addr)
mridup 0:dc55f40eb04f 275 {
mridup 0:dc55f40eb04f 276 status = SET_Configuration_Addr(WIFI_IP_NETMASK, config->netmask_addr);
mridup 0:dc55f40eb04f 277 if(status != WiFi_MODULE_SUCCESS) return status;
mridup 0:dc55f40eb04f 278 }
mridup 0:dc55f40eb04f 279 /* Set default gateway address */
mridup 0:dc55f40eb04f 280 if(config->gateway_addr)
mridup 0:dc55f40eb04f 281 {
mridup 0:dc55f40eb04f 282 status = SET_Configuration_Addr(WIFI_IP_DEFAULT_GATEWAY, config->gateway_addr);
mridup 0:dc55f40eb04f 283 if(status != WiFi_MODULE_SUCCESS) return status;
mridup 0:dc55f40eb04f 284 }
mridup 0:dc55f40eb04f 285 /* Set dns address */
mridup 0:dc55f40eb04f 286 if(config->dns_addr)
mridup 0:dc55f40eb04f 287 {
mridup 0:dc55f40eb04f 288 status = SET_Configuration_Addr(WIFI_IP_DNS, config->dns_addr);
mridup 0:dc55f40eb04f 289 if(status != WiFi_MODULE_SUCCESS) return status;
mridup 0:dc55f40eb04f 290 }
mridup 0:dc55f40eb04f 291 /* Set hostname */
mridup 0:dc55f40eb04f 292 if(config->host_name)
mridup 0:dc55f40eb04f 293 {
mridup 0:dc55f40eb04f 294 status = SET_Configuration_Addr(WIFI_IP_HOSTNAME, config->host_name);
mridup 0:dc55f40eb04f 295 if(status != WiFi_MODULE_SUCCESS) return status;
mridup 0:dc55f40eb04f 296 }
mridup 0:dc55f40eb04f 297
mridup 0:dc55f40eb04f 298 if(config->ap_domain_name)
mridup 0:dc55f40eb04f 299 {
mridup 0:dc55f40eb04f 300 status = SET_Configuration_Addr(WIFI_IP_APDOMAINNAME, config->ap_domain_name);
mridup 0:dc55f40eb04f 301 if(status != WiFi_MODULE_SUCCESS) return status;
mridup 0:dc55f40eb04f 302 }
mridup 0:dc55f40eb04f 303
mridup 0:dc55f40eb04f 304 if(config->ap_config_page_name)
mridup 0:dc55f40eb04f 305 {
mridup 0:dc55f40eb04f 306 status = SET_Configuration_Addr(WIFI_IP_APREDIRECT, config->ap_config_page_name);
mridup 0:dc55f40eb04f 307 if(status != WiFi_MODULE_SUCCESS) return status;
mridup 0:dc55f40eb04f 308 }
mridup 0:dc55f40eb04f 309
mridup 0:dc55f40eb04f 310 if(config->http_timeout)
mridup 0:dc55f40eb04f 311 {
mridup 0:dc55f40eb04f 312 status = SET_Configuration_Value(WIFI_IP_HTTP_TIMEOUT, config->http_timeout*1000);
mridup 0:dc55f40eb04f 313 if(status != WiFi_MODULE_SUCCESS) return status;
mridup 0:dc55f40eb04f 314 }
mridup 0:dc55f40eb04f 315 if(config->dhcp_timeout)
mridup 0:dc55f40eb04f 316 {
mridup 0:dc55f40eb04f 317 status = SET_Configuration_Value(WIFI_IP_DHCP_TIMEOUT, config->dhcp_timeout);
mridup 0:dc55f40eb04f 318 if(status != WiFi_MODULE_SUCCESS) return status;
mridup 0:dc55f40eb04f 319 }
mridup 0:dc55f40eb04f 320
mridup 0:dc55f40eb04f 321 #ifdef MODULE_VERSION_SPWF01Sx_1y
mridup 0:dc55f40eb04f 322 Reset_AT_CMD_Buffer();
mridup 0:dc55f40eb04f 323 sprintf((char*)WiFi_AT_Cmd_Buff,AT_HTTPD, config->web_server);
mridup 0:dc55f40eb04f 324 status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
mridup 0:dc55f40eb04f 325 if(status == WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 326 {
mridup 0:dc55f40eb04f 327 status = USART_Receive_AT_Resp(Process_Event);
mridup 0:dc55f40eb04f 328 if(status != WiFi_MODULE_SUCCESS) return status;
mridup 0:dc55f40eb04f 329 }
mridup 0:dc55f40eb04f 330 #endif
mridup 0:dc55f40eb04f 331
mridup 0:dc55f40eb04f 332 /*AT+S.TLSCERT2=clean,all */
mridup 0:dc55f40eb04f 333 Reset_AT_CMD_Buffer();
mridup 0:dc55f40eb04f 334 sprintf((char*)WiFi_AT_Cmd_Buff,"AT+S.TLSCERT2=clean,all\r");
mridup 0:dc55f40eb04f 335 status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
mridup 0:dc55f40eb04f 336 if(status == WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 337 {
mridup 0:dc55f40eb04f 338 status = USART_Receive_AT_Resp(Process_Event);
mridup 0:dc55f40eb04f 339 if(status != WiFi_MODULE_SUCCESS) return status;
mridup 0:dc55f40eb04f 340 }
mridup 0:dc55f40eb04f 341
mridup 0:dc55f40eb04f 342 /* save current setting in flash */
mridup 0:dc55f40eb04f 343 Reset_AT_CMD_Buffer();
mridup 0:dc55f40eb04f 344 sprintf((char*)WiFi_AT_Cmd_Buff,AT_SAVE_CURRENT_SETTING);
mridup 0:dc55f40eb04f 345 status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
mridup 0:dc55f40eb04f 346 if(status == WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 347 {
mridup 0:dc55f40eb04f 348 status = USART_Receive_AT_Resp(Process_Event);
mridup 0:dc55f40eb04f 349 if(status != WiFi_MODULE_SUCCESS) return status;
mridup 0:dc55f40eb04f 350 }
mridup 0:dc55f40eb04f 351
mridup 0:dc55f40eb04f 352 if(config->wifi_baud_rate)
mridup 0:dc55f40eb04f 353 {
mridup 0:dc55f40eb04f 354 UART_Configuration(config->wifi_baud_rate);
mridup 0:dc55f40eb04f 355 Receive_Data();//Restart data reception
mridup 0:dc55f40eb04f 356 }
mridup 0:dc55f40eb04f 357
mridup 0:dc55f40eb04f 358 /* Soft reset the module, Do the second reset after setting all parameters and saving in flash */
mridup 0:dc55f40eb04f 359 wifi_reset();
mridup 0:dc55f40eb04f 360
mridup 0:dc55f40eb04f 361 wifi_wakeup(WIFI_FALSE);//De-assert wakeup signal (PC8) to allow sleep if enabled
mridup 0:dc55f40eb04f 362 #endif //WIFI_USE_VCOM
mridup 0:dc55f40eb04f 363
mridup 0:dc55f40eb04f 364 #if DEBUG_PRINT
mridup 0:dc55f40eb04f 365 printf("\r\nEnd of Initialization..\r\n");
mridup 0:dc55f40eb04f 366 #endif
mridup 0:dc55f40eb04f 367 //callSpwfSADevice_debug(spwf_device_class, "\r\n[SPWF] End of mbed Initialization\r\n");
mridup 0:dc55f40eb04f 368
mridup 0:dc55f40eb04f 369 return status;
mridup 0:dc55f40eb04f 370 }
mridup 0:dc55f40eb04f 371
mridup 0:dc55f40eb04f 372
mridup 0:dc55f40eb04f 373 /**
mridup 0:dc55f40eb04f 374 * @brief wifi_socket_client_security
mridup 0:dc55f40eb04f 375 * Set the security certificates and key for secure socket (TLS)
mridup 0:dc55f40eb04f 376 * @param None
mridup 0:dc55f40eb04f 377 * @retval WiFi_Status_t : return status
mridup 0:dc55f40eb04f 378 */
mridup 0:dc55f40eb04f 379 WiFi_Status_t wifi_socket_client_security(uint8_t* tls_mode, uint8_t* root_ca_server, uint8_t* client_cert, uint8_t* client_key, uint8_t* client_domain, uint32_t tls_epoch_time)
mridup 0:dc55f40eb04f 380 {
mridup 0:dc55f40eb04f 381 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 382
mridup 0:dc55f40eb04f 383 /*AT+S.TLSCERT2=clean,all */
mridup 0:dc55f40eb04f 384 Reset_AT_CMD_Buffer();
mridup 0:dc55f40eb04f 385 sprintf((char*)WiFi_AT_Cmd_Buff,"AT+S.TLSCERT2=clean,all\r");
mridup 0:dc55f40eb04f 386 status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
mridup 0:dc55f40eb04f 387 if(status == WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 388 {
mridup 0:dc55f40eb04f 389 status = USART_Receive_AT_Resp(Process_Event);
mridup 0:dc55f40eb04f 390 if(status != WiFi_MODULE_SUCCESS) return status;
mridup 0:dc55f40eb04f 391 }
mridup 0:dc55f40eb04f 392
mridup 0:dc55f40eb04f 393 /* AT+S.SETTIME=<seconds> */
mridup 0:dc55f40eb04f 394 Reset_AT_CMD_Buffer();
mridup 0:dc55f40eb04f 395 if(tls_epoch_time==0)
mridup 0:dc55f40eb04f 396 epoch_time = EPOCH_TIME;
mridup 0:dc55f40eb04f 397 else
mridup 0:dc55f40eb04f 398 epoch_time = tls_epoch_time;
mridup 0:dc55f40eb04f 399
mridup 0:dc55f40eb04f 400 sprintf((char*)WiFi_AT_Cmd_Buff,"AT+S.SETTIME=%lu\r",(unsigned long)epoch_time);
mridup 0:dc55f40eb04f 401 status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
mridup 0:dc55f40eb04f 402 if(status == WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 403 {
mridup 0:dc55f40eb04f 404 status = USART_Receive_AT_Resp(Process_Event);
mridup 0:dc55f40eb04f 405 if(status != WiFi_MODULE_SUCCESS) return status;
mridup 0:dc55f40eb04f 406 }
mridup 0:dc55f40eb04f 407
mridup 0:dc55f40eb04f 408 /*AT+S.TLSCERT=f_ca,<size><CR><data>*/
mridup 0:dc55f40eb04f 409 Reset_AT_CMD_Buffer();
mridup 0:dc55f40eb04f 410 sprintf((char*)WiFi_AT_Cmd_Buff,"AT+S.TLSCERT=f_ca,%d\r%s",strlen((const char *)root_ca_server) - 1, root_ca_server);
mridup 0:dc55f40eb04f 411
mridup 0:dc55f40eb04f 412 status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
mridup 0:dc55f40eb04f 413 if(status == WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 414 {
mridup 0:dc55f40eb04f 415 status = USART_Receive_AT_Resp(Process_Event);
mridup 0:dc55f40eb04f 416 if(status != WiFi_MODULE_SUCCESS) return status;
mridup 0:dc55f40eb04f 417 }
mridup 0:dc55f40eb04f 418
mridup 0:dc55f40eb04f 419 /*AT+S.TLSCERT=f_cert,<size><CR><data>*/
mridup 0:dc55f40eb04f 420 if(tls_mode[0]=='m')
mridup 0:dc55f40eb04f 421 {
mridup 0:dc55f40eb04f 422 Reset_AT_CMD_Buffer();
mridup 0:dc55f40eb04f 423 sprintf((char*)WiFi_AT_Cmd_Buff,"AT+S.TLSCERT=f_cert,%d\r%s",strlen((const char *)client_cert) - 1, client_cert);
mridup 0:dc55f40eb04f 424
mridup 0:dc55f40eb04f 425 status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
mridup 0:dc55f40eb04f 426 if(status == WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 427 {
mridup 0:dc55f40eb04f 428 status = USART_Receive_AT_Resp(Process_Event);
mridup 0:dc55f40eb04f 429 if(status != WiFi_MODULE_SUCCESS) return status;
mridup 0:dc55f40eb04f 430 }
mridup 0:dc55f40eb04f 431
mridup 0:dc55f40eb04f 432 /*AT+S.TLSCERT=f_key,<size><CR><data>*/
mridup 0:dc55f40eb04f 433 Reset_AT_CMD_Buffer();
mridup 0:dc55f40eb04f 434 sprintf((char*)WiFi_AT_Cmd_Buff,"AT+S.TLSCERT=f_key,%d\r%s",strlen((const char *)client_key) - 1, client_key);
mridup 0:dc55f40eb04f 435
mridup 0:dc55f40eb04f 436 status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
mridup 0:dc55f40eb04f 437 if(status == WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 438 {
mridup 0:dc55f40eb04f 439 status = USART_Receive_AT_Resp(Process_Event);
mridup 0:dc55f40eb04f 440 if(status != WiFi_MODULE_SUCCESS) return status;
mridup 0:dc55f40eb04f 441 }
mridup 0:dc55f40eb04f 442 }
mridup 0:dc55f40eb04f 443
mridup 0:dc55f40eb04f 444 /*AT+S.TLSDOMAIN=f_domain,<server domain>*/
mridup 0:dc55f40eb04f 445 Reset_AT_CMD_Buffer();
mridup 0:dc55f40eb04f 446 sprintf((char*)WiFi_AT_Cmd_Buff,"AT+S.TLSDOMAIN=f_domain,%s\r", client_domain);
mridup 0:dc55f40eb04f 447 status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
mridup 0:dc55f40eb04f 448 if(status == WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 449 {
mridup 0:dc55f40eb04f 450 status = USART_Receive_AT_Resp(Process_Event);
mridup 0:dc55f40eb04f 451 if(status != WiFi_MODULE_SUCCESS) return status;
mridup 0:dc55f40eb04f 452 }
mridup 0:dc55f40eb04f 453
mridup 0:dc55f40eb04f 454 return status;
mridup 0:dc55f40eb04f 455 }
mridup 0:dc55f40eb04f 456
mridup 0:dc55f40eb04f 457 /**
mridup 0:dc55f40eb04f 458 * @brief wifi_socket_client_open
mridup 0:dc55f40eb04f 459 * Open a network socket
mridup 0:dc55f40eb04f 460 * @param Hostname hostname to connect to
mridup 0:dc55f40eb04f 461 * portnumber portnumber of the Host to connect to
mridup 0:dc55f40eb04f 462 * protocol tcp or udp protocol
mridup 0:dc55f40eb04f 463 * sock_id socket id of the opened socket returned to the user
mridup 0:dc55f40eb04f 464 * @retval WiFi_Status_t : return status of socket open request
mridup 0:dc55f40eb04f 465 */
mridup 0:dc55f40eb04f 466 WiFi_Status_t wifi_socket_client_open(uint8_t * hostname, uint32_t port_number, uint8_t * protocol, uint8_t * sock_id)
mridup 0:dc55f40eb04f 467 {
mridup 0:dc55f40eb04f 468 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 469
mridup 0:dc55f40eb04f 470 Queue_Client_Open_Event(hostname,port_number,protocol);
mridup 0:dc55f40eb04f 471 status = USART_Receive_AT_Resp(Process_Event);
mridup 0:dc55f40eb04f 472
mridup 0:dc55f40eb04f 473 *sock_id = Socket_Open_ID; //return the socket id to the user
mridup 0:dc55f40eb04f 474
mridup 0:dc55f40eb04f 475 return status;
mridup 0:dc55f40eb04f 476 }
mridup 0:dc55f40eb04f 477
mridup 0:dc55f40eb04f 478 /**
mridup 0:dc55f40eb04f 479 * @brief Open_Serial_Port
mridup 0:dc55f40eb04f 480 * Open a network socket
mridup 0:dc55f40eb04f 481 * @param None
mridup 0:dc55f40eb04f 482 * @retval WiFi_Status_t : Wifi status
mridup 0:dc55f40eb04f 483 */
mridup 0:dc55f40eb04f 484 WiFi_Status_t Open_Serial_Port()
mridup 0:dc55f40eb04f 485 {
mridup 0:dc55f40eb04f 486 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 487 /* AT+S.SOCKOS=2<cr> */
mridup 0:dc55f40eb04f 488 Reset_AT_CMD_Buffer();
mridup 0:dc55f40eb04f 489 //sprintf((char*)WiFi_AT_Cmd_Buff,"\rAT+S.SOCKOS=%d\r",SerialPortNo);
mridup 0:dc55f40eb04f 490 status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
mridup 0:dc55f40eb04f 491
mridup 0:dc55f40eb04f 492 if(status==WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 493 {
mridup 0:dc55f40eb04f 494 status = USART_Receive_AT_Resp(Process_Event);
mridup 0:dc55f40eb04f 495 }
mridup 0:dc55f40eb04f 496 return status;
mridup 0:dc55f40eb04f 497 }
mridup 0:dc55f40eb04f 498
mridup 0:dc55f40eb04f 499 /**
mridup 0:dc55f40eb04f 500 * @brief wifi_socket_client_write
mridup 0:dc55f40eb04f 501 * Write len bytes of data to socket
mridup 0:dc55f40eb04f 502 * @param sock_id socket ID of the socket to write to
mridup 0:dc55f40eb04f 503 * DataLength: data length to send
mridup 0:dc55f40eb04f 504 * pData : pointer of data buffer to be written
mridup 0:dc55f40eb04f 505 * @retval WiFi_Status_t : return status of socket write request
mridup 0:dc55f40eb04f 506 */
mridup 0:dc55f40eb04f 507 WiFi_Status_t wifi_socket_client_write(uint8_t sock_id, uint16_t DataLength, char * pData)
mridup 0:dc55f40eb04f 508 {
mridup 0:dc55f40eb04f 509 /* AT+S.SOCKW=00,11<cr> */
mridup 0:dc55f40eb04f 510 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 511
mridup 0:dc55f40eb04f 512 //Check if sock_id is open
mridup 0:dc55f40eb04f 513 if(!open_sockets[sock_id])
mridup 0:dc55f40eb04f 514 return WiFi_NOT_READY;
mridup 0:dc55f40eb04f 515
mridup 0:dc55f40eb04f 516 if(DataLength>=1021 || DataLength<=0)
mridup 0:dc55f40eb04f 517 return WiFi_NOT_SUPPORTED;
mridup 0:dc55f40eb04f 518
mridup 0:dc55f40eb04f 519 Queue_Client_Write_Event(sock_id,DataLength,pData);
mridup 0:dc55f40eb04f 520 status = USART_Receive_AT_Resp(Process_Event);
mridup 0:dc55f40eb04f 521 return status;
mridup 0:dc55f40eb04f 522 }
mridup 0:dc55f40eb04f 523
mridup 0:dc55f40eb04f 524 /**
mridup 0:dc55f40eb04f 525 * @brief Socket_Read
mridup 0:dc55f40eb04f 526 * Return len bytes of data from socket
mridup 0:dc55f40eb04f 527 * @param DataLength: data length to read
mridup 0:dc55f40eb04f 528 * @retval WiFi_Status_t : return status of socket read request
mridup 0:dc55f40eb04f 529 */
mridup 0:dc55f40eb04f 530 WiFi_Status_t Socket_Read(uint16_t DataLength)
mridup 0:dc55f40eb04f 531 {
mridup 0:dc55f40eb04f 532 /* AT+S.SOCKR=01,12<cr> */
mridup 0:dc55f40eb04f 533 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 534 wait_for_command_mode();
mridup 0:dc55f40eb04f 535
mridup 0:dc55f40eb04f 536 /* AT+S.SOCKON=myserver,1234,t<cr> */
mridup 0:dc55f40eb04f 537 sprintf((char*)WiFi_AT_Cmd_Buff,AT_SOCKET_READ,sockon_query_id,DataLength);
mridup 0:dc55f40eb04f 538 status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
mridup 0:dc55f40eb04f 539 if(status == WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 540 {
mridup 0:dc55f40eb04f 541 if(status_flag.stop_event_dequeue == WIFI_FALSE)
mridup 0:dc55f40eb04f 542 status_flag.stop_event_dequeue = WIFI_TRUE;
mridup 0:dc55f40eb04f 543 SockON_Data_Length = DataLength;
mridup 0:dc55f40eb04f 544 status_flag.enable_sock_read = WIFI_TRUE;
mridup 0:dc55f40eb04f 545 process_buffer_index =5;
mridup 0:dc55f40eb04f 546 status_flag.enable_receive_data_chunk = WIFI_TRUE;
mridup 0:dc55f40eb04f 547 WiFi_Module_State = Process_Event;
mridup 0:dc55f40eb04f 548 status_flag.Set_AT_Cmd_Response_False = WIFI_TRUE;
mridup 0:dc55f40eb04f 549 memset(UserDataBuff, 0x00, MAX_BUFFER_GLOBAL);
mridup 0:dc55f40eb04f 550 }
mridup 0:dc55f40eb04f 551 return status;
mridup 0:dc55f40eb04f 552 }
mridup 0:dc55f40eb04f 553
mridup 0:dc55f40eb04f 554 /**
mridup 0:dc55f40eb04f 555 * @brief wifi_socket_client_close
mridup 0:dc55f40eb04f 556 * The SOCKC command allows to close socket
mridup 0:dc55f40eb04f 557 * @param sock_close_id the socket ID of the socket which needs to be closed.
mridup 0:dc55f40eb04f 558 * @retval WiFi_Status_t : return status of socket close request
mridup 0:dc55f40eb04f 559 */
mridup 0:dc55f40eb04f 560 WiFi_Status_t wifi_socket_client_close(uint8_t sock_close_id)
mridup 0:dc55f40eb04f 561 {
mridup 0:dc55f40eb04f 562 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 563
mridup 0:dc55f40eb04f 564 if(open_sockets[sock_close_id])
mridup 0:dc55f40eb04f 565 {
mridup 0:dc55f40eb04f 566 Queue_Client_Close_Event(sock_close_id);
mridup 0:dc55f40eb04f 567 return status;
mridup 0:dc55f40eb04f 568 }
mridup 0:dc55f40eb04f 569 else
mridup 0:dc55f40eb04f 570 return WiFi_MODULE_ERROR;
mridup 0:dc55f40eb04f 571
mridup 0:dc55f40eb04f 572 }
mridup 0:dc55f40eb04f 573
mridup 0:dc55f40eb04f 574 /**
mridup 0:dc55f40eb04f 575 * @brief Socket_Pending_Data
mridup 0:dc55f40eb04f 576 * Query pending data.It will returns the number of bytes of data waiting on socket
mridup 0:dc55f40eb04f 577 * @param None
mridup 0:dc55f40eb04f 578 * @retval uint8_t :number of bytes of data waiting on socket
mridup 0:dc55f40eb04f 579 */
mridup 0:dc55f40eb04f 580 void Socket_Pending_Data()
mridup 0:dc55f40eb04f 581 {
mridup 0:dc55f40eb04f 582 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 583
mridup 0:dc55f40eb04f 584 /* AT+S.SOCKQ=01<cr> */
mridup 0:dc55f40eb04f 585 Reset_AT_CMD_Buffer();
mridup 0:dc55f40eb04f 586
mridup 0:dc55f40eb04f 587 wait_for_command_mode();
mridup 0:dc55f40eb04f 588
mridup 0:dc55f40eb04f 589 if(open_sockets[sockon_query_id])
mridup 0:dc55f40eb04f 590 {
mridup 0:dc55f40eb04f 591 if(status_flag.stop_event_dequeue == WIFI_FALSE)
mridup 0:dc55f40eb04f 592 status_flag.stop_event_dequeue = WIFI_TRUE;
mridup 0:dc55f40eb04f 593
mridup 0:dc55f40eb04f 594 sprintf((char*)WiFi_AT_Cmd_Buff,AT_QUERY_PENDING_DATA,sockon_query_id);
mridup 0:dc55f40eb04f 595 status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
mridup 0:dc55f40eb04f 596 if(status==WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 597 {
mridup 0:dc55f40eb04f 598 /* EQ. Set state to Process_Event */
mridup 0:dc55f40eb04f 599 WiFi_Module_State = Process_Event;
mridup 0:dc55f40eb04f 600 status_flag.Set_AT_Cmd_Response_False = WIFI_TRUE;
mridup 0:dc55f40eb04f 601 }
mridup 0:dc55f40eb04f 602 }
mridup 0:dc55f40eb04f 603 }
mridup 0:dc55f40eb04f 604
mridup 0:dc55f40eb04f 605 /**
mridup 0:dc55f40eb04f 606 * @brief wifi_socket_server_open
mridup 0:dc55f40eb04f 607 * Open a Server socket
mridup 0:dc55f40eb04f 608 * @param None
mridup 0:dc55f40eb04f 609 * @retval WiFi_Status_t : return status of server socket request
mridup 0:dc55f40eb04f 610 */
mridup 0:dc55f40eb04f 611 WiFi_Status_t wifi_socket_server_open(uint32_t port_number, uint8_t * protocol)
mridup 0:dc55f40eb04f 612 {
mridup 0:dc55f40eb04f 613 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 614 Reset_AT_CMD_Buffer();
mridup 0:dc55f40eb04f 615
mridup 0:dc55f40eb04f 616 /* AT+S.SOCKD=portNo,t<cr> */
mridup 0:dc55f40eb04f 617 sprintf((char*)WiFi_AT_Cmd_Buff,AT_SERVER_SOCKET_OPEN,(int)port_number,protocol);
mridup 0:dc55f40eb04f 618 status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
mridup 0:dc55f40eb04f 619 if(status == WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 620 {
mridup 0:dc55f40eb04f 621 status = USART_Receive_AT_Resp(Process_Event);
mridup 0:dc55f40eb04f 622 }
mridup 0:dc55f40eb04f 623 return status;
mridup 0:dc55f40eb04f 624 }
mridup 0:dc55f40eb04f 625
mridup 0:dc55f40eb04f 626 /**
mridup 0:dc55f40eb04f 627 * @brief wifi_socket_server_write
mridup 0:dc55f40eb04f 628 * Write to a Server socket
mridup 0:dc55f40eb04f 629 * @param None
mridup 0:dc55f40eb04f 630 * @retval WiFi_Status_t : return status of server socket request
mridup 0:dc55f40eb04f 631 */
mridup 0:dc55f40eb04f 632 WiFi_Status_t wifi_socket_server_write(uint16_t DataLength,char * pData)
mridup 0:dc55f40eb04f 633 {
mridup 0:dc55f40eb04f 634 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 635 /*Can only write if there is a client connected*/
mridup 0:dc55f40eb04f 636 if(!wifi_client_connected)
mridup 0:dc55f40eb04f 637 {
mridup 0:dc55f40eb04f 638 return WiFi_NOT_READY;
mridup 0:dc55f40eb04f 639 }
mridup 0:dc55f40eb04f 640 __disable_irq();
mridup 0:dc55f40eb04f 641
mridup 0:dc55f40eb04f 642 status_flag.do_not_reset_push_WIFI_event = WIFI_TRUE;
mridup 0:dc55f40eb04f 643 status_flag.prevent_push_WIFI_event = WIFI_TRUE;
mridup 0:dc55f40eb04f 644 __enable_irq();
mridup 0:dc55f40eb04f 645
mridup 0:dc55f40eb04f 646 while(status_flag.sock_read_ongoing || WIND64_count!= 0)//wait till any pending data is read
mridup 0:dc55f40eb04f 647 {
mridup 0:dc55f40eb04f 648 asm("NOP");
mridup 0:dc55f40eb04f 649 }
mridup 0:dc55f40eb04f 650
mridup 0:dc55f40eb04f 651 wait_for_command_mode();
mridup 0:dc55f40eb04f 652
mridup 0:dc55f40eb04f 653 /*to make sure that by default the mode is not switched to command mode from data mode*/
mridup 0:dc55f40eb04f 654 status_flag.switch_by_default_to_command_mode = WIFI_FALSE;
mridup 0:dc55f40eb04f 655
mridup 0:dc55f40eb04f 656 /*Switch to Data Mode first*/
mridup 0:dc55f40eb04f 657 if(!status_flag.data_mode)
mridup 0:dc55f40eb04f 658 {
mridup 0:dc55f40eb04f 659 WiFi_switch_to_data_mode();//switch by default
mridup 0:dc55f40eb04f 660 while(!status_flag.data_mode)
mridup 0:dc55f40eb04f 661 {
mridup 0:dc55f40eb04f 662 //Wait till data_mode is active
mridup 0:dc55f40eb04f 663 asm("NOP");
mridup 0:dc55f40eb04f 664 }
mridup 0:dc55f40eb04f 665 }
mridup 0:dc55f40eb04f 666
mridup 0:dc55f40eb04f 667 /*Write the data on the uart*/
mridup 0:dc55f40eb04f 668 /*if(HAL_UART_Transmit(&UartWiFiHandle, (uint8_t *)pData, DataLength,1000)!= HAL_OK)
mridup 0:dc55f40eb04f 669 {
mridup 0:dc55f40eb04f 670 Error_Handler();
mridup 0:dc55f40eb04f 671 return WiFi_HAL_UART_ERROR;
mridup 0:dc55f40eb04f 672 }*/
mridup 0:dc55f40eb04f 673 //HAL_Delay(100);//Wait for tx before switching back to command mode
mridup 0:dc55f40eb04f 674
mridup 0:dc55f40eb04f 675 /*Switch back to Command Mode*/
mridup 0:dc55f40eb04f 676 if(!status_flag.command_mode)
mridup 0:dc55f40eb04f 677 {
mridup 0:dc55f40eb04f 678 WiFi_switch_to_command_mode();//switch by default
mridup 0:dc55f40eb04f 679 while(!status_flag.command_mode)
mridup 0:dc55f40eb04f 680 {
mridup 0:dc55f40eb04f 681 //Wait till command_mode is active
mridup 0:dc55f40eb04f 682 asm("NOP");
mridup 0:dc55f40eb04f 683 }
mridup 0:dc55f40eb04f 684 }
mridup 0:dc55f40eb04f 685
mridup 0:dc55f40eb04f 686 status_flag.switch_by_default_to_command_mode = WIFI_TRUE; /*back to default behaviour*/
mridup 0:dc55f40eb04f 687
mridup 0:dc55f40eb04f 688 __disable_irq();
mridup 0:dc55f40eb04f 689 status_flag.prevent_push_WIFI_event = WIFI_FALSE;
mridup 0:dc55f40eb04f 690 status_flag.do_not_reset_push_WIFI_event = WIFI_FALSE;
mridup 0:dc55f40eb04f 691 __enable_irq();
mridup 0:dc55f40eb04f 692
mridup 0:dc55f40eb04f 693 return status;
mridup 0:dc55f40eb04f 694 }
mridup 0:dc55f40eb04f 695
mridup 0:dc55f40eb04f 696 /**
mridup 0:dc55f40eb04f 697 * @brief Server Socket Close
mridup 0:dc55f40eb04f 698 * Close a Server socket
mridup 0:dc55f40eb04f 699 * @param None
mridup 0:dc55f40eb04f 700 * @retval WiFi_Status_t : return status of server socket request
mridup 0:dc55f40eb04f 701 */
mridup 0:dc55f40eb04f 702 WiFi_Status_t wifi_socket_server_close()
mridup 0:dc55f40eb04f 703 {
mridup 0:dc55f40eb04f 704 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 705 Reset_AT_CMD_Buffer();
mridup 0:dc55f40eb04f 706
mridup 0:dc55f40eb04f 707 /* AT+S.SOCKD=portNo,t<cr> */
mridup 0:dc55f40eb04f 708 sprintf((char*)WiFi_AT_Cmd_Buff,AT_SERVER_SOCKET_CLOSE);
mridup 0:dc55f40eb04f 709 status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
mridup 0:dc55f40eb04f 710 if(status == WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 711 {
mridup 0:dc55f40eb04f 712 status = USART_Receive_AT_Resp(Process_Event);
mridup 0:dc55f40eb04f 713 }
mridup 0:dc55f40eb04f 714
mridup 0:dc55f40eb04f 715 return status;
mridup 0:dc55f40eb04f 716 }
mridup 0:dc55f40eb04f 717
mridup 0:dc55f40eb04f 718
mridup 0:dc55f40eb04f 719 /**
mridup 0:dc55f40eb04f 720 * @brief wait_for_command_mode
mridup 0:dc55f40eb04f 721 * Waits till we are in command mode
mridup 0:dc55f40eb04f 722 * @param None
mridup 0:dc55f40eb04f 723 * @retval None
mridup 0:dc55f40eb04f 724 */
mridup 0:dc55f40eb04f 725 void wait_for_command_mode(void)
mridup 0:dc55f40eb04f 726 {
mridup 0:dc55f40eb04f 727 while(!status_flag.command_mode)
mridup 0:dc55f40eb04f 728 {
mridup 0:dc55f40eb04f 729 //Make sure we are in command mode, ideally we should do this in every User API?
mridup 0:dc55f40eb04f 730 asm("NOP");
mridup 0:dc55f40eb04f 731 }
mridup 0:dc55f40eb04f 732 }
mridup 0:dc55f40eb04f 733
mridup 0:dc55f40eb04f 734
mridup 0:dc55f40eb04f 735 /**
mridup 0:dc55f40eb04f 736 * @brief wifi_file_delete
mridup 0:dc55f40eb04f 737 * Delete a file
mridup 0:dc55f40eb04f 738 * @param pFileName : File Name to be deleted
mridup 0:dc55f40eb04f 739 * @retval WiFi_Status_t : return status of delete file request
mridup 0:dc55f40eb04f 740 */
mridup 0:dc55f40eb04f 741 WiFi_Status_t wifi_file_delete(char * pFileName)
mridup 0:dc55f40eb04f 742 {
mridup 0:dc55f40eb04f 743 /* AT+S.FSD: delete an existing file */
mridup 0:dc55f40eb04f 744 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 745 Reset_AT_CMD_Buffer();
mridup 0:dc55f40eb04f 746 /* AT+S.FSL */
mridup 0:dc55f40eb04f 747 sprintf((char*)WiFi_AT_Cmd_Buff,AT_DELETE_FILE,pFileName);
mridup 0:dc55f40eb04f 748
mridup 0:dc55f40eb04f 749 status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
mridup 0:dc55f40eb04f 750 if(status == WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 751 {
mridup 0:dc55f40eb04f 752 status = USART_Receive_AT_Resp(Process_Event);
mridup 0:dc55f40eb04f 753 }
mridup 0:dc55f40eb04f 754 return status;
mridup 0:dc55f40eb04f 755 }
mridup 0:dc55f40eb04f 756
mridup 0:dc55f40eb04f 757 /**
mridup 0:dc55f40eb04f 758 * @brief wifi_file_list
mridup 0:dc55f40eb04f 759 * List existing filename
mridup 0:dc55f40eb04f 760 * @param None
mridup 0:dc55f40eb04f 761 * @retval WiFi_Status_t : return status of AT cmd request
mridup 0:dc55f40eb04f 762 */
mridup 0:dc55f40eb04f 763
mridup 0:dc55f40eb04f 764 WiFi_Status_t wifi_file_list()
mridup 0:dc55f40eb04f 765 {
mridup 0:dc55f40eb04f 766 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 767 Queue_Wifi_File_Event(NULL,NULL,0);
mridup 0:dc55f40eb04f 768 status = USART_Receive_AT_Resp(Process_Event);
mridup 0:dc55f40eb04f 769 return status;
mridup 0:dc55f40eb04f 770 }
mridup 0:dc55f40eb04f 771
mridup 0:dc55f40eb04f 772 /**
mridup 0:dc55f40eb04f 773 * @brief wifi_file_show
mridup 0:dc55f40eb04f 774 * Print the contents of an existing file
mridup 0:dc55f40eb04f 775 * @param pFileName : pinter of file name
mridup 0:dc55f40eb04f 776 * @retval WiFi_Status_t : return status of AT cmd request
mridup 0:dc55f40eb04f 777 */
mridup 0:dc55f40eb04f 778
mridup 0:dc55f40eb04f 779 WiFi_Status_t wifi_file_show(uint8_t * pFileName)
mridup 0:dc55f40eb04f 780 {
mridup 0:dc55f40eb04f 781 if(pFileName==NULL)
mridup 0:dc55f40eb04f 782 return WiFi_MODULE_ERROR;
mridup 0:dc55f40eb04f 783
mridup 0:dc55f40eb04f 784 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 785 Queue_Wifi_File_Event(NULL,pFileName,0);
mridup 0:dc55f40eb04f 786 status = USART_Receive_AT_Resp(Process_Event);
mridup 0:dc55f40eb04f 787 return status;
mridup 0:dc55f40eb04f 788 }
mridup 0:dc55f40eb04f 789
mridup 0:dc55f40eb04f 790 /**
mridup 0:dc55f40eb04f 791 * @brief wifi_file_create
mridup 0:dc55f40eb04f 792 * Create file for HTTP server
mridup 0:dc55f40eb04f 793 * @param pFileName : pointer of file name to be created
mridup 0:dc55f40eb04f 794 * alength : length of file
mridup 0:dc55f40eb04f 795 * @retval WiFi_Status_t : return status of AT cmd request
mridup 0:dc55f40eb04f 796 */
mridup 0:dc55f40eb04f 797
mridup 0:dc55f40eb04f 798 WiFi_Status_t wifi_file_create(char *pFileName, uint16_t alength, char * pUserFileBuff)
mridup 0:dc55f40eb04f 799 {
mridup 0:dc55f40eb04f 800 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 801
mridup 0:dc55f40eb04f 802 if(alength >1024)
mridup 0:dc55f40eb04f 803 return WiFi_AT_FILE_LENGTH_ERROR;
mridup 0:dc55f40eb04f 804
mridup 0:dc55f40eb04f 805 Reset_AT_CMD_Buffer();
mridup 0:dc55f40eb04f 806
mridup 0:dc55f40eb04f 807 /* AT+S.FSC=/index.html */
mridup 0:dc55f40eb04f 808 sprintf((char*)WiFi_AT_Cmd_Buff, AT_CREATE_NEW_HTML_FILE, pFileName, alength);
mridup 0:dc55f40eb04f 809
mridup 0:dc55f40eb04f 810 status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
mridup 0:dc55f40eb04f 811 if(status == WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 812 {
mridup 0:dc55f40eb04f 813 status = USART_Receive_AT_Resp(Process_Event);
mridup 0:dc55f40eb04f 814 int len = strlen(pUserFileBuff);
mridup 0:dc55f40eb04f 815
mridup 0:dc55f40eb04f 816 if(len >= 1024)
mridup 0:dc55f40eb04f 817 return WiFi_AT_FILE_LENGTH_ERROR;
mridup 0:dc55f40eb04f 818
mridup 0:dc55f40eb04f 819 /* AT+S.FSA=/index.html */
mridup 0:dc55f40eb04f 820 sprintf((char*)WiFi_AT_Cmd_Buff,AT_APPEND_FILE,pFileName,len);
mridup 0:dc55f40eb04f 821
mridup 0:dc55f40eb04f 822 status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
mridup 0:dc55f40eb04f 823 if(status == WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 824 {
mridup 0:dc55f40eb04f 825 memset(WiFi_AT_Cmd_Buff, 0x00, sizeof WiFi_AT_Cmd_Buff);
mridup 0:dc55f40eb04f 826 memcpy((char*)(char*)WiFi_AT_Cmd_Buff, (char*) pUserFileBuff,len);
mridup 0:dc55f40eb04f 827 WiFi_AT_Cmd_Buff[len+1]='\r';
mridup 0:dc55f40eb04f 828 status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
mridup 0:dc55f40eb04f 829 if(status == WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 830 {
mridup 0:dc55f40eb04f 831 status = USART_Receive_AT_Resp(Process_Event);
mridup 0:dc55f40eb04f 832 }
mridup 0:dc55f40eb04f 833 }
mridup 0:dc55f40eb04f 834 }
mridup 0:dc55f40eb04f 835 return status;
mridup 0:dc55f40eb04f 836 }
mridup 0:dc55f40eb04f 837
mridup 0:dc55f40eb04f 838 /**
mridup 0:dc55f40eb04f 839 * @brief wifi_http_get
mridup 0:dc55f40eb04f 840 * Issue an HTTP GET of the given path to the specified host
mridup 0:dc55f40eb04f 841 * @param None
mridup 0:dc55f40eb04f 842 * @retval WiFi_Status_t : return status of AT cmd response
mridup 0:dc55f40eb04f 843 */
mridup 0:dc55f40eb04f 844
mridup 0:dc55f40eb04f 845 WiFi_Status_t wifi_http_get(uint8_t * hostname, uint8_t * path, uint32_t port_number)
mridup 0:dc55f40eb04f 846 {
mridup 0:dc55f40eb04f 847 if(hostname == NULL || path == NULL)
mridup 0:dc55f40eb04f 848 return WiFi_MODULE_ERROR;
mridup 0:dc55f40eb04f 849
mridup 0:dc55f40eb04f 850 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 851
mridup 0:dc55f40eb04f 852 while(status_flag.sock_read_ongoing || WIND64_count!= 0); //wait till any pending data is read
mridup 0:dc55f40eb04f 853 {
mridup 0:dc55f40eb04f 854 asm("NOP");
mridup 0:dc55f40eb04f 855 }
mridup 0:dc55f40eb04f 856
mridup 0:dc55f40eb04f 857 // AT+S.HTTPGET=host.example.com,/index.html, port_number<cr>
mridup 0:dc55f40eb04f 858 //Queue the http-get command
mridup 0:dc55f40eb04f 859 Queue_Http_Event(hostname, path, port_number,NULL);
mridup 0:dc55f40eb04f 860
mridup 0:dc55f40eb04f 861 //Make the user wait anyway
mridup 0:dc55f40eb04f 862 status = USART_Receive_AT_Resp(Process_Event);
mridup 0:dc55f40eb04f 863
mridup 0:dc55f40eb04f 864 return status;
mridup 0:dc55f40eb04f 865
mridup 0:dc55f40eb04f 866 }
mridup 0:dc55f40eb04f 867
mridup 0:dc55f40eb04f 868 /**
mridup 0:dc55f40eb04f 869 * @brief wifi_http_post
mridup 0:dc55f40eb04f 870 * Issue an HTTP GET of the given path to the specified host
mridup 0:dc55f40eb04f 871 * @param None
mridup 0:dc55f40eb04f 872 * @retval WiFi_Status_t : status of Http Post Request
mridup 0:dc55f40eb04f 873 */
mridup 0:dc55f40eb04f 874
mridup 0:dc55f40eb04f 875 WiFi_Status_t wifi_http_post(uint8_t * pURL_path)
mridup 0:dc55f40eb04f 876 {
mridup 0:dc55f40eb04f 877 if(pURL_path == NULL)
mridup 0:dc55f40eb04f 878 return WiFi_MODULE_ERROR;
mridup 0:dc55f40eb04f 879
mridup 0:dc55f40eb04f 880 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 881
mridup 0:dc55f40eb04f 882 while(status_flag.sock_read_ongoing || WIND64_count!= 0);//wait till any pending data is read
mridup 0:dc55f40eb04f 883 {
mridup 0:dc55f40eb04f 884 asm("NOP");
mridup 0:dc55f40eb04f 885 }
mridup 0:dc55f40eb04f 886
mridup 0:dc55f40eb04f 887 // AT+S.HTTPPOST = posttestserver.com,/post.php,name=demo&email=mymail&subject=subj&body=message<cr>
mridup 0:dc55f40eb04f 888 Queue_Http_Event(NULL,NULL,0,pURL_path);
mridup 0:dc55f40eb04f 889
mridup 0:dc55f40eb04f 890 //Make the user wait anyway
mridup 0:dc55f40eb04f 891 status = USART_Receive_AT_Resp(Process_Event);
mridup 0:dc55f40eb04f 892 return status;
mridup 0:dc55f40eb04f 893 }
mridup 0:dc55f40eb04f 894
mridup 0:dc55f40eb04f 895 /**
mridup 0:dc55f40eb04f 896 * @brief wifi_file_image_create
mridup 0:dc55f40eb04f 897 * Downloads an updated file system via a single HTTP GET request to the
mridup 0:dc55f40eb04f 898 * named host and path.
mridup 0:dc55f40eb04f 899 * @param None
mridup 0:dc55f40eb04f 900 * @retval WiFi_Status_t
mridup 0:dc55f40eb04f 901 */
mridup 0:dc55f40eb04f 902 WiFi_Status_t wifi_file_image_create(uint8_t * pHostName, uint8_t * pFileName, uint32_t port_number)
mridup 0:dc55f40eb04f 903 {
mridup 0:dc55f40eb04f 904 if(pHostName == NULL || pFileName == NULL || port_number ==0)
mridup 0:dc55f40eb04f 905 return WiFi_MODULE_ERROR;
mridup 0:dc55f40eb04f 906
mridup 0:dc55f40eb04f 907 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 908 Queue_Wifi_File_Event(pHostName,pFileName,port_number);
mridup 0:dc55f40eb04f 909 status = USART_Receive_AT_Resp(Process_Event);
mridup 0:dc55f40eb04f 910
mridup 0:dc55f40eb04f 911 /* Soft reset the module */
mridup 0:dc55f40eb04f 912 SET_Power_State(PowerSave_State);
mridup 0:dc55f40eb04f 913 return status;
mridup 0:dc55f40eb04f 914 }
mridup 0:dc55f40eb04f 915
mridup 0:dc55f40eb04f 916 /**
mridup 0:dc55f40eb04f 917 * @brief wifi_file_erase_external_flash
mridup 0:dc55f40eb04f 918 * This API allows to erase the content of the external flash
mridup 0:dc55f40eb04f 919 * @param None
mridup 0:dc55f40eb04f 920 * @retval WiFi_Status_t
mridup 0:dc55f40eb04f 921 */
mridup 0:dc55f40eb04f 922 WiFi_Status_t wifi_file_erase_external_flash()
mridup 0:dc55f40eb04f 923 {
mridup 0:dc55f40eb04f 924 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 925
mridup 0:dc55f40eb04f 926 Reset_AT_CMD_Buffer();
mridup 0:dc55f40eb04f 927 ResetBuffer();
mridup 0:dc55f40eb04f 928
mridup 0:dc55f40eb04f 929 /* AT+S.HTTPDFSERASE */
mridup 0:dc55f40eb04f 930 sprintf((char*)WiFi_AT_Cmd_Buff,AT_ERASE_FLASH_MEMORY);
mridup 0:dc55f40eb04f 931 status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
mridup 0:dc55f40eb04f 932
mridup 0:dc55f40eb04f 933 /* Soft reset the module */
mridup 0:dc55f40eb04f 934 SET_Power_State(PowerSave_State);
mridup 0:dc55f40eb04f 935
mridup 0:dc55f40eb04f 936 return status;
mridup 0:dc55f40eb04f 937 }
mridup 0:dc55f40eb04f 938
mridup 0:dc55f40eb04f 939 /**
mridup 0:dc55f40eb04f 940 * @brief wifi_fw_update
mridup 0:dc55f40eb04f 941 * Issue an HTTP GET of the given path to the specified host and get the firmware updated
mridup 0:dc55f40eb04f 942 * @param None
mridup 0:dc55f40eb04f 943 * @retval None
mridup 0:dc55f40eb04f 944 */
mridup 0:dc55f40eb04f 945 WiFi_Status_t wifi_fw_update(uint8_t * hostname, uint8_t * filename_path, uint32_t port_number)
mridup 0:dc55f40eb04f 946 {
mridup 0:dc55f40eb04f 947 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 948 Queue_Wifi_FW_Update_Event(hostname,filename_path,port_number);
mridup 0:dc55f40eb04f 949 status = USART_Receive_AT_Resp(Process_Event);
mridup 0:dc55f40eb04f 950 /* Soft reset the module */
mridup 0:dc55f40eb04f 951 SET_Power_State(PowerSave_State);
mridup 0:dc55f40eb04f 952 return status;
mridup 0:dc55f40eb04f 953 }
mridup 0:dc55f40eb04f 954
mridup 0:dc55f40eb04f 955 /**
mridup 0:dc55f40eb04f 956 * @brief wifi_network_scan
mridup 0:dc55f40eb04f 957 * Performs an immediate scan for available network
mridup 0:dc55f40eb04f 958 * @param None
mridup 0:dc55f40eb04f 959 * @retval WiFi_Status_t : WiFi status error
mridup 0:dc55f40eb04f 960 */
mridup 0:dc55f40eb04f 961 WiFi_Status_t wifi_network_scan(wifi_scan *scan_result, uint16_t max_scan_number)
mridup 0:dc55f40eb04f 962 {
mridup 0:dc55f40eb04f 963 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 964 wifi_scanned_list = scan_result;
mridup 0:dc55f40eb04f 965 if(max_scan_number>MAX_WIFI_SCAN_NETWORK)
mridup 0:dc55f40eb04f 966 return WiFi_NOT_SUPPORTED;
mridup 0:dc55f40eb04f 967 user_scan_number = max_scan_number;
mridup 0:dc55f40eb04f 968
mridup 0:dc55f40eb04f 969 if(status_flag.Scan_Ongoing)
mridup 0:dc55f40eb04f 970 {
mridup 0:dc55f40eb04f 971 return WiFi_AT_CMD_BUSY;
mridup 0:dc55f40eb04f 972 }
mridup 0:dc55f40eb04f 973
mridup 0:dc55f40eb04f 974 status_flag.Scan_Ongoing = WIFI_TRUE;
mridup 0:dc55f40eb04f 975
mridup 0:dc55f40eb04f 976 #if 0 //TBD
mridup 0:dc55f40eb04f 977 if(WiFi_Param.WiFi_Module_State == WiFi_MiniAP_MODE)
mridup 0:dc55f40eb04f 978 return WiFi_NOT_SUPPORTED;
mridup 0:dc55f40eb04f 979 #endif
mridup 0:dc55f40eb04f 980
mridup 0:dc55f40eb04f 981 /* AT+S.SCAN: performs an immediate scan for available networks */
mridup 0:dc55f40eb04f 982 Reset_AT_CMD_Buffer();
mridup 0:dc55f40eb04f 983 sprintf((char*)WiFi_AT_Cmd_Buff,AT_WiFi_SCAN);
mridup 0:dc55f40eb04f 984 status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
mridup 0:dc55f40eb04f 985 if(status == WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 986 {
mridup 0:dc55f40eb04f 987 status = USART_Receive_AT_Resp(Process_Event);
mridup 0:dc55f40eb04f 988 }
mridup 0:dc55f40eb04f 989
mridup 0:dc55f40eb04f 990 /*At this point we have WiFi_Scan_Buffer filled with RSSI and SSID values*/
mridup 0:dc55f40eb04f 991 return status;
mridup 0:dc55f40eb04f 992 }
mridup 0:dc55f40eb04f 993
mridup 0:dc55f40eb04f 994 /**
mridup 0:dc55f40eb04f 995 * @brief Set_MiniAP_Mode
mridup 0:dc55f40eb04f 996 * Configure Wi-Fi module in AP mode.
mridup 0:dc55f40eb04f 997 MiniAP is always configured in open mode (WEP not supported)
mridup 0:dc55f40eb04f 998 * @param None
mridup 0:dc55f40eb04f 999 * @retval WiFi_Status_t : status of AT cmd
mridup 0:dc55f40eb04f 1000 */
mridup 0:dc55f40eb04f 1001 WiFi_Status_t wifi_ap_start(uint8_t * ssid, uint8_t channel_num)
mridup 0:dc55f40eb04f 1002 {
mridup 0:dc55f40eb04f 1003 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 1004
mridup 0:dc55f40eb04f 1005 /* Set the SSID : AT+S.SSIDTXT=<SSID>*/
mridup 0:dc55f40eb04f 1006 //if(ssid)
mridup 0:dc55f40eb04f 1007 status = SET_SSID((char*)ssid);
mridup 0:dc55f40eb04f 1008
mridup 0:dc55f40eb04f 1009
mridup 0:dc55f40eb04f 1010 if(status != WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 1011 return WiFi_SSID_ERROR;
mridup 0:dc55f40eb04f 1012
mridup 0:dc55f40eb04f 1013 /* Set the network privacy mode : AT+S.SCFG=wifi_priv_mode,0*/
mridup 0:dc55f40eb04f 1014 status = SET_Configuration_Value(WIFI_PRIV_MODE, None);
mridup 0:dc55f40eb04f 1015 if(status != WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 1016 return WiFi_CONFIG_ERROR;
mridup 0:dc55f40eb04f 1017
mridup 0:dc55f40eb04f 1018 /* Set the network mode (1 = STA, 2 = IBSS, 3 = MiniAP) :: AT+S.SCFG=wifi_mode,3*/
mridup 0:dc55f40eb04f 1019 status = SET_Configuration_Value(WIFI_MODE, WiFi_MiniAP_MODE);
mridup 0:dc55f40eb04f 1020 if(status != WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 1021 return WiFi_CONFIG_ERROR;
mridup 0:dc55f40eb04f 1022
mridup 0:dc55f40eb04f 1023 /* Set the channel number */
mridup 0:dc55f40eb04f 1024 status = SET_Configuration_Value(WIFI_CHANNEL_NUMBER, channel_num);
mridup 0:dc55f40eb04f 1025 if(status != WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 1026 return WiFi_CONFIG_ERROR;
mridup 0:dc55f40eb04f 1027
mridup 0:dc55f40eb04f 1028 /* Save the settings on the flash memory : AT&W*/
mridup 0:dc55f40eb04f 1029 Save_Current_Setting();
mridup 0:dc55f40eb04f 1030
mridup 0:dc55f40eb04f 1031 status_flag.WiFi_Configuration_Done = WIFI_TRUE;
mridup 0:dc55f40eb04f 1032 WiFi_Module_State = Process_Event;
mridup 0:dc55f40eb04f 1033
mridup 0:dc55f40eb04f 1034 /* Soft reset the module */
mridup 0:dc55f40eb04f 1035 SET_Power_State(PowerSave_State);
mridup 0:dc55f40eb04f 1036
mridup 0:dc55f40eb04f 1037 return status;
mridup 0:dc55f40eb04f 1038 }
mridup 0:dc55f40eb04f 1039
mridup 0:dc55f40eb04f 1040
mridup 0:dc55f40eb04f 1041 /**
mridup 0:dc55f40eb04f 1042 * @brief SET_WiFi_STA_Mode
mridup 0:dc55f40eb04f 1043 * Configure Wi-Fi module in STA mode
mridup 0:dc55f40eb04f 1044 * @param SSID : SSID name
mridup 0:dc55f40eb04f 1045 * @param sec_key : security key
mridup 0:dc55f40eb04f 1046 * @param priv_mode : network privecy mode
mridup 0:dc55f40eb04f 1047 * @retval WiFi_Status_t : status of AT cmd
mridup 0:dc55f40eb04f 1048 */
mridup 0:dc55f40eb04f 1049 WiFi_Status_t wifi_connect(char * ssid, char * sec_key, WiFi_Priv_Mode priv_mode)
mridup 0:dc55f40eb04f 1050 {
mridup 0:dc55f40eb04f 1051 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 1052 if(status_flag.AT_Cmd_Ongoing == WIFI_FALSE)
mridup 0:dc55f40eb04f 1053 status_flag.AT_Cmd_Ongoing = WIFI_TRUE;
mridup 0:dc55f40eb04f 1054 else
mridup 0:dc55f40eb04f 1055 {
mridup 0:dc55f40eb04f 1056 return WiFi_AT_CMD_BUSY;
mridup 0:dc55f40eb04f 1057 }
mridup 0:dc55f40eb04f 1058
mridup 0:dc55f40eb04f 1059 if(sec_key) {
mridup 0:dc55f40eb04f 1060 status = SET_WiFi_SecKey((char*)sec_key);
mridup 0:dc55f40eb04f 1061 if(status != WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 1062 return WiFi_SecKey_ERROR;
mridup 0:dc55f40eb04f 1063 }
mridup 0:dc55f40eb04f 1064
mridup 0:dc55f40eb04f 1065 /* Set the SSID : AT+S.SSIDTXT=<SSID>*/
mridup 0:dc55f40eb04f 1066
mridup 0:dc55f40eb04f 1067 status = SET_SSID((char*)ssid);
mridup 0:dc55f40eb04f 1068
mridup 0:dc55f40eb04f 1069 if(status != WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 1070 return WiFi_SSID_ERROR;
mridup 0:dc55f40eb04f 1071
mridup 0:dc55f40eb04f 1072 /* Set the network privacy mode : AT+S.SCFG=wifi_priv_mode,2*/
mridup 0:dc55f40eb04f 1073 status = SET_Configuration_Value(WIFI_PRIV_MODE, priv_mode);
mridup 0:dc55f40eb04f 1074 if(status != WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 1075 return WiFi_CONFIG_ERROR;
mridup 0:dc55f40eb04f 1076
mridup 0:dc55f40eb04f 1077 /* Set the network mode (1 = STA, 2 = IBSS, 3 = MiniAP) :: AT+S.SCFG=wifi_mode,1*/
mridup 0:dc55f40eb04f 1078 status = SET_Configuration_Value(WIFI_MODE, WiFi_STA_MODE);
mridup 0:dc55f40eb04f 1079 if(status != WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 1080 return WiFi_CONFIG_ERROR;
mridup 0:dc55f40eb04f 1081
mridup 0:dc55f40eb04f 1082 /* Save the settings on the flash memory : AT&W*/
mridup 0:dc55f40eb04f 1083 Save_Current_Setting();
mridup 0:dc55f40eb04f 1084
mridup 0:dc55f40eb04f 1085 status_flag.WiFi_Configuration_Done = WIFI_TRUE;
mridup 0:dc55f40eb04f 1086 //WiFi_Module_State = WiFi_Process_Event;
mridup 0:dc55f40eb04f 1087
mridup 0:dc55f40eb04f 1088 /* Soft reset the module */
mridup 0:dc55f40eb04f 1089 SET_Power_State(PowerSave_State);
mridup 0:dc55f40eb04f 1090
mridup 0:dc55f40eb04f 1091 status_flag.AT_Cmd_Ongoing = WIFI_FALSE;
mridup 0:dc55f40eb04f 1092
mridup 0:dc55f40eb04f 1093 return status;
mridup 0:dc55f40eb04f 1094 }
mridup 0:dc55f40eb04f 1095
mridup 0:dc55f40eb04f 1096 /**
mridup 0:dc55f40eb04f 1097 * @brief SET_WiFi_IBSS_Mode
mridup 0:dc55f40eb04f 1098 * Configure Wi-Fi module in IBSS mode
mridup 0:dc55f40eb04f 1099 * @param SSID : SSID name
mridup 0:dc55f40eb04f 1100 * @param priv_mode : network privecy mode
mridup 0:dc55f40eb04f 1101 * @retval WiFi_Status_t : status of AT cmd
mridup 0:dc55f40eb04f 1102 */
mridup 0:dc55f40eb04f 1103 WiFi_Status_t wifi_adhoc_create(uint8_t * ssid, WiFi_Priv_Mode priv_mode)
mridup 0:dc55f40eb04f 1104 {
mridup 0:dc55f40eb04f 1105 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 1106
mridup 0:dc55f40eb04f 1107 Attention_Cmd();
mridup 0:dc55f40eb04f 1108 /* Set the SSID : AT+S.SSIDTXT=<SSID>*/
mridup 0:dc55f40eb04f 1109 status = SET_SSID((char*)ssid);
mridup 0:dc55f40eb04f 1110 if(status != WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 1111 return WiFi_SSID_ERROR;
mridup 0:dc55f40eb04f 1112
mridup 0:dc55f40eb04f 1113 /* Set the network privacy mode : AT+S.SCFG=wifi_priv_mode,0*/
mridup 0:dc55f40eb04f 1114 status = SET_Configuration_Value(WIFI_PRIV_MODE, priv_mode);
mridup 0:dc55f40eb04f 1115 if(status != WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 1116 return WiFi_CONFIG_ERROR;
mridup 0:dc55f40eb04f 1117
mridup 0:dc55f40eb04f 1118
mridup 0:dc55f40eb04f 1119 /* Set the network mode (1 = STA, 2 = IBSS, 3 = MiniAP) :: AT+S.SCFG=wifi_mode,2*/
mridup 0:dc55f40eb04f 1120 status = SET_Configuration_Value(WIFI_MODE, WiFi_IBSS_MODE);
mridup 0:dc55f40eb04f 1121 if(status != WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 1122 return WiFi_CONFIG_ERROR;
mridup 0:dc55f40eb04f 1123
mridup 0:dc55f40eb04f 1124 /* Set IP address */
mridup 0:dc55f40eb04f 1125 status = SET_Configuration_Addr(WIFI_IP_ADDRESS, WIFI_IBSS_IP_ADDR);
mridup 0:dc55f40eb04f 1126 if(status != WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 1127 return WiFi_CONFIG_ERROR;
mridup 0:dc55f40eb04f 1128
mridup 0:dc55f40eb04f 1129 /* Set IP default gateway */
mridup 0:dc55f40eb04f 1130 status = SET_Configuration_Addr(WIFI_IP_DEFAULT_GATEWAY, WIFI_IBSS_DEFAULT_GATEWAY);
mridup 0:dc55f40eb04f 1131 if(status != WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 1132 return WiFi_CONFIG_ERROR;
mridup 0:dc55f40eb04f 1133
mridup 0:dc55f40eb04f 1134
mridup 0:dc55f40eb04f 1135 /* Set IP DNS */
mridup 0:dc55f40eb04f 1136 status = SET_Configuration_Addr(WIFI_IP_DNS, WIFI_IBSS_IP_DNS_ADDR);
mridup 0:dc55f40eb04f 1137 if(status != WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 1138 return WiFi_CONFIG_ERROR;
mridup 0:dc55f40eb04f 1139
mridup 0:dc55f40eb04f 1140 /* Set IP netmask */
mridup 0:dc55f40eb04f 1141 status = SET_Configuration_Addr(WIFI_IP_NETMASK, WIFI_IBSS_IP_MASK);
mridup 0:dc55f40eb04f 1142 if(status != WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 1143 return WiFi_CONFIG_ERROR;
mridup 0:dc55f40eb04f 1144
mridup 0:dc55f40eb04f 1145 /* Turn OFF the DHCP */
mridup 0:dc55f40eb04f 1146 SET_Configuration_Value(IP_USE_DHCP_SERVER, WIFI_IP_USE_DHCP);
mridup 0:dc55f40eb04f 1147 if(status != WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 1148 return WiFi_CONFIG_ERROR;
mridup 0:dc55f40eb04f 1149
mridup 0:dc55f40eb04f 1150 /* Save the settings on the flash memory : AT&W*/
mridup 0:dc55f40eb04f 1151 Save_Current_Setting();
mridup 0:dc55f40eb04f 1152
mridup 0:dc55f40eb04f 1153 /* Soft reset the module */
mridup 0:dc55f40eb04f 1154 SET_Power_State(PowerSave_State);
mridup 0:dc55f40eb04f 1155 return status;
mridup 0:dc55f40eb04f 1156 }
mridup 0:dc55f40eb04f 1157
mridup 0:dc55f40eb04f 1158
mridup 0:dc55f40eb04f 1159 /**
mridup 0:dc55f40eb04f 1160 * @brief wifi_standby
mridup 0:dc55f40eb04f 1161 * Configured WiFi module to enter standby
mridup 0:dc55f40eb04f 1162 * @param arg_standby_time: standby time
mridup 0:dc55f40eb04f 1163 * @retval WiFi_Status_t : status of AT cmd
mridup 0:dc55f40eb04f 1164 */
mridup 0:dc55f40eb04f 1165 WiFi_Status_t wifi_standby(uint8_t arg_standby_time)
mridup 0:dc55f40eb04f 1166 {
mridup 0:dc55f40eb04f 1167 /*
mridup 0:dc55f40eb04f 1168 For Standby, the presence of Jumpers on JP4 and JP3 has the following behaviour:
mridup 0:dc55f40eb04f 1169 JP3 (middle and bottom): prevents standby and immediately wakes-up module
mridup 0:dc55f40eb04f 1170 JP3 (middle and top): no effect on standby
mridup 0:dc55f40eb04f 1171 JP4 (middle and right): prevents wakeup and standby runs forever
mridup 0:dc55f40eb04f 1172 JP4 (middle and left): no effect on standby
mridup 0:dc55f40eb04f 1173 */
mridup 0:dc55f40eb04f 1174
mridup 0:dc55f40eb04f 1175 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 1176
mridup 0:dc55f40eb04f 1177 /*if(arg_standby_time<2)
mridup 0:dc55f40eb04f 1178 return WiFi_NOT_SUPPORTED;*/
mridup 0:dc55f40eb04f 1179
mridup 0:dc55f40eb04f 1180 SET_Configuration_Value(WIFI_SLEEP_ENABLED, 0);
mridup 0:dc55f40eb04f 1181 SET_Configuration_Value(WIFI_STANDBY_ENABLED, 1);
mridup 0:dc55f40eb04f 1182 status = SET_Configuration_Value(WIFI_STANDBY_TIME, arg_standby_time);
mridup 0:dc55f40eb04f 1183
mridup 0:dc55f40eb04f 1184 /* save current setting in flash */
mridup 0:dc55f40eb04f 1185 Save_Current_Setting();
mridup 0:dc55f40eb04f 1186
mridup 0:dc55f40eb04f 1187 /* AT : send AT command */
mridup 0:dc55f40eb04f 1188 sprintf((char*)WiFi_AT_Cmd_Buff,AT_SET_POWER_STATE,1); //cfun=4
mridup 0:dc55f40eb04f 1189 WiFi_Module_State = Process_Event; //make sure the WiFi module is in this state to receive WINDS after wakeup
mridup 0:dc55f40eb04f 1190 status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
mridup 0:dc55f40eb04f 1191
mridup 0:dc55f40eb04f 1192 if(status == WiFi_MODULE_SUCCESS)//if transmit is success, prepare for resume
mridup 0:dc55f40eb04f 1193 {
mridup 0:dc55f40eb04f 1194 /*
mridup 0:dc55f40eb04f 1195 status_flag.AT_Cmd_Processing = WIFI_TRUE;//We do not want the next UART data_byte fetch to be done
mridup 0:dc55f40eb04f 1196 HAL_NVIC_DisableIRQ(USARTx_IRQn);//Disable UART IRQ
mridup 0:dc55f40eb04f 1197 status_flag.Standby_Timer_Running=WIFI_TRUE;
mridup 0:dc55f40eb04f 1198 printf("\r\nGoing into Standby Mode...\r\n");*/
mridup 0:dc55f40eb04f 1199 }
mridup 0:dc55f40eb04f 1200
mridup 0:dc55f40eb04f 1201 return status;
mridup 0:dc55f40eb04f 1202
mridup 0:dc55f40eb04f 1203 }
mridup 0:dc55f40eb04f 1204
mridup 0:dc55f40eb04f 1205 /**
mridup 0:dc55f40eb04f 1206 * @brief wifi_wakeup
mridup 0:dc55f40eb04f 1207 * wakeup the module from sleep by setting the GPIO6 through PC13
mridup 0:dc55f40eb04f 1208 * or allow it to go to sleep
mridup 0:dc55f40eb04f 1209 * Jumper needed on JP4
mridup 0:dc55f40eb04f 1210 * @param wakeup wakeup (WIFI_TRUE) or allow sleep(WIFI_FALSE)
mridup 0:dc55f40eb04f 1211 * @retval WiFi_Status_t : status of function call
mridup 0:dc55f40eb04f 1212 */
mridup 0:dc55f40eb04f 1213 WiFi_Status_t wifi_wakeup(wifi_bool wakeup)
mridup 0:dc55f40eb04f 1214 {
mridup 0:dc55f40eb04f 1215 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 1216
mridup 0:dc55f40eb04f 1217 if(wakeup)
mridup 0:dc55f40eb04f 1218 callSpwfSADevice_wakeup(spwf_device_class, 1);
mridup 0:dc55f40eb04f 1219 else
mridup 0:dc55f40eb04f 1220 callSpwfSADevice_wakeup(spwf_device_class, 0);
mridup 0:dc55f40eb04f 1221 wait_ms(100);
mridup 0:dc55f40eb04f 1222 return status;
mridup 0:dc55f40eb04f 1223 }
mridup 0:dc55f40eb04f 1224
mridup 0:dc55f40eb04f 1225
mridup 0:dc55f40eb04f 1226 /**
mridup 0:dc55f40eb04f 1227 * @brief wifi_disconnect
mridup 0:dc55f40eb04f 1228 * disconnect the module from any AP
mridup 0:dc55f40eb04f 1229 * @param None
mridup 0:dc55f40eb04f 1230 * @retval WiFi_Status_t : status of AT cmd
mridup 0:dc55f40eb04f 1231 */
mridup 0:dc55f40eb04f 1232 WiFi_Status_t wifi_disconnect(void)
mridup 0:dc55f40eb04f 1233 {
mridup 0:dc55f40eb04f 1234 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 1235
mridup 0:dc55f40eb04f 1236 /* Set wifi_mode to idle*/
mridup 0:dc55f40eb04f 1237 status = SET_Configuration_Value(WIFI_MODE, WiFi_IDLE_MODE);
mridup 0:dc55f40eb04f 1238
mridup 0:dc55f40eb04f 1239 /*If module was connected, reset the status*/
mridup 0:dc55f40eb04f 1240 if(wifi_connected == 1)
mridup 0:dc55f40eb04f 1241 {
mridup 0:dc55f40eb04f 1242 wifi_connected = 0;//this will allow the TIM handler to make the callback on connection(WiFiUp)
mridup 0:dc55f40eb04f 1243 }
mridup 0:dc55f40eb04f 1244
mridup 0:dc55f40eb04f 1245 /* save current setting in flash */
mridup 0:dc55f40eb04f 1246 Save_Current_Setting();
mridup 0:dc55f40eb04f 1247
mridup 0:dc55f40eb04f 1248 /* Soft reset the module */
mridup 0:dc55f40eb04f 1249 status = SET_Power_State(PowerSave_State);//CFUN=1
mridup 0:dc55f40eb04f 1250
mridup 0:dc55f40eb04f 1251 return status;
mridup 0:dc55f40eb04f 1252 }
mridup 0:dc55f40eb04f 1253
mridup 0:dc55f40eb04f 1254 /**
mridup 0:dc55f40eb04f 1255 * @brief wifi_enable
mridup 0:dc55f40eb04f 1256 * Enable/Disable the Wi-Fi interface
mridup 0:dc55f40eb04f 1257 * @param enable enable Wi-Fi (WIFI_TRUE) disable Wi-Fi (WIFI_FALSE)
mridup 0:dc55f40eb04f 1258 * @retval WiFi_Status_t : status of AT cmd
mridup 0:dc55f40eb04f 1259 */
mridup 0:dc55f40eb04f 1260 WiFi_Status_t wifi_enable(wifi_bool enable)
mridup 0:dc55f40eb04f 1261 {
mridup 0:dc55f40eb04f 1262 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 1263
mridup 0:dc55f40eb04f 1264 /* Enable or Disable wifi interface*/
mridup 0:dc55f40eb04f 1265 Reset_AT_CMD_Buffer();
mridup 0:dc55f40eb04f 1266 sprintf((char*)WiFi_AT_Cmd_Buff,AT_WIFI_ENABLE, enable);
mridup 0:dc55f40eb04f 1267
mridup 0:dc55f40eb04f 1268 /*if(HAL_UART_Transmit(&UartWiFiHandle, (uint8_t *)WiFi_AT_Cmd_Buff, strlen((char*)WiFi_AT_Cmd_Buff),1000)!= HAL_OK)
mridup 0:dc55f40eb04f 1269 {
mridup 0:dc55f40eb04f 1270 Error_Handler();
mridup 0:dc55f40eb04f 1271 #if DEBUG_PRINT
mridup 0:dc55f40eb04f 1272 printf("HAL_UART_Transmit Error");
mridup 0:dc55f40eb04f 1273 #endif
mridup 0:dc55f40eb04f 1274 return WiFi_HAL_UART_ERROR;
mridup 0:dc55f40eb04f 1275 } */
mridup 0:dc55f40eb04f 1276
mridup 0:dc55f40eb04f 1277 status = USART_Receive_AT_Resp(Process_Event);
mridup 0:dc55f40eb04f 1278
mridup 0:dc55f40eb04f 1279 //wait for power down/hw started
mridup 0:dc55f40eb04f 1280 if(enable)
mridup 0:dc55f40eb04f 1281 while(status_flag.WiFi_Enabled != WIFI_TRUE)
mridup 0:dc55f40eb04f 1282 {
mridup 0:dc55f40eb04f 1283 asm("NOP");
mridup 0:dc55f40eb04f 1284 }
mridup 0:dc55f40eb04f 1285 else
mridup 0:dc55f40eb04f 1286 while(status_flag.WiFi_Enabled != WIFI_FALSE)
mridup 0:dc55f40eb04f 1287 {
mridup 0:dc55f40eb04f 1288 asm("NOP");
mridup 0:dc55f40eb04f 1289 }
mridup 0:dc55f40eb04f 1290
mridup 0:dc55f40eb04f 1291 return status;
mridup 0:dc55f40eb04f 1292
mridup 0:dc55f40eb04f 1293 }
mridup 0:dc55f40eb04f 1294
mridup 0:dc55f40eb04f 1295
mridup 0:dc55f40eb04f 1296
mridup 0:dc55f40eb04f 1297 /**
mridup 0:dc55f40eb04f 1298 * @brief wifi_restore
mridup 0:dc55f40eb04f 1299 * Restore the Wi-Fi with default values.
mridup 0:dc55f40eb04f 1300 * @param None
mridup 0:dc55f40eb04f 1301 * @retval WiFi_Status_t : status of AT cmd
mridup 0:dc55f40eb04f 1302 */
mridup 0:dc55f40eb04f 1303 WiFi_Status_t wifi_restore()
mridup 0:dc55f40eb04f 1304 {
mridup 0:dc55f40eb04f 1305 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 1306
mridup 0:dc55f40eb04f 1307 /* Restore default setting*/
mridup 0:dc55f40eb04f 1308 Restore_Default_Setting();
mridup 0:dc55f40eb04f 1309
mridup 0:dc55f40eb04f 1310 /* Set wifi_mode to idle*/
mridup 0:dc55f40eb04f 1311 SET_Configuration_Value(WIFI_MODE, WiFi_IDLE_MODE);
mridup 0:dc55f40eb04f 1312
mridup 0:dc55f40eb04f 1313 /* set the local echo */
mridup 0:dc55f40eb04f 1314 SET_Configuration_Value(LOCALECHO1, 0);
mridup 0:dc55f40eb04f 1315
mridup 0:dc55f40eb04f 1316 /* save current setting in flash */
mridup 0:dc55f40eb04f 1317 Save_Current_Setting();
mridup 0:dc55f40eb04f 1318
mridup 0:dc55f40eb04f 1319 /* Soft reset the module */
mridup 0:dc55f40eb04f 1320 status = SET_Power_State(PowerSave_State);//CFUN=1
mridup 0:dc55f40eb04f 1321
mridup 0:dc55f40eb04f 1322 return status;
mridup 0:dc55f40eb04f 1323 }
mridup 0:dc55f40eb04f 1324
mridup 0:dc55f40eb04f 1325 /*GPIO Configuration Functions*/
mridup 0:dc55f40eb04f 1326
mridup 0:dc55f40eb04f 1327 /**
mridup 0:dc55f40eb04f 1328 * @brief wifi_gpio_init
mridup 0:dc55f40eb04f 1329 * Configure a GPIO pin as in or out with IRQ setting
mridup 0:dc55f40eb04f 1330 * @param pin GPIO pin number
mridup 0:dc55f40eb04f 1331 * @param irq configuration of the pin
mridup 0:dc55f40eb04f 1332 * @retval WiFi_Status_t : status of AT cmd
mridup 0:dc55f40eb04f 1333 */
mridup 0:dc55f40eb04f 1334 uint8_t wifi_gpio_init(GpioPin pin, char* dir, char irq)
mridup 0:dc55f40eb04f 1335 {
mridup 0:dc55f40eb04f 1336 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 1337
mridup 0:dc55f40eb04f 1338 /* AT+S.GPIOC=pin,dir,irq */
mridup 0:dc55f40eb04f 1339 Reset_AT_CMD_Buffer();
mridup 0:dc55f40eb04f 1340
mridup 0:dc55f40eb04f 1341 memset(WiFi_AT_Cmd_Buff, 0x00, sizeof WiFi_AT_Cmd_Buff);
mridup 0:dc55f40eb04f 1342
mridup 0:dc55f40eb04f 1343 if(irq!=GPIO_Off)
mridup 0:dc55f40eb04f 1344 sprintf((char*)WiFi_AT_Cmd_Buff,"AT+S.GPIOC=%d,%s,%c\r", pin, dir, irq);
mridup 0:dc55f40eb04f 1345 else
mridup 0:dc55f40eb04f 1346 sprintf((char*)WiFi_AT_Cmd_Buff,"AT+S.GPIOC=%d,%s\r", pin, dir);
mridup 0:dc55f40eb04f 1347
mridup 0:dc55f40eb04f 1348 status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
mridup 0:dc55f40eb04f 1349 if(status == WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 1350 {
mridup 0:dc55f40eb04f 1351 status = USART_Receive_AT_Resp(Process_Event);
mridup 0:dc55f40eb04f 1352 }
mridup 0:dc55f40eb04f 1353
mridup 0:dc55f40eb04f 1354
mridup 0:dc55f40eb04f 1355 return status;
mridup 0:dc55f40eb04f 1356
mridup 0:dc55f40eb04f 1357 }
mridup 0:dc55f40eb04f 1358
mridup 0:dc55f40eb04f 1359 /**
mridup 0:dc55f40eb04f 1360 * @brief wifi_gpio_read
mridup 0:dc55f40eb04f 1361 * Read the configuration of a GPIO pin
mridup 0:dc55f40eb04f 1362 * @param pin GPIO pin number
mridup 0:dc55f40eb04f 1363 * @param val value returned
mridup 0:dc55f40eb04f 1364 * @param dir configuration direction returned
mridup 0:dc55f40eb04f 1365 * @retval WiFi_Status_t : status of AT cmd
mridup 0:dc55f40eb04f 1366 */
mridup 0:dc55f40eb04f 1367 uint8_t wifi_gpio_read(GpioPin pin, uint8_t *val, uint8_t *dir)
mridup 0:dc55f40eb04f 1368 {
mridup 0:dc55f40eb04f 1369 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 1370
mridup 0:dc55f40eb04f 1371 /* AT+S.GPIOR=pin */
mridup 0:dc55f40eb04f 1372 Reset_AT_CMD_Buffer();
mridup 0:dc55f40eb04f 1373
mridup 0:dc55f40eb04f 1374 sprintf((char*)WiFi_AT_Cmd_Buff,"AT+S.GPIOR=%d\r", pin);
mridup 0:dc55f40eb04f 1375
mridup 0:dc55f40eb04f 1376 status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
mridup 0:dc55f40eb04f 1377 if(status == WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 1378 {
mridup 0:dc55f40eb04f 1379 status = USART_Receive_AT_Resp(Process_Event);
mridup 0:dc55f40eb04f 1380 }
mridup 0:dc55f40eb04f 1381 *val = gpio_value;
mridup 0:dc55f40eb04f 1382 *dir = gpio_direc;
mridup 0:dc55f40eb04f 1383
mridup 0:dc55f40eb04f 1384 return status;
mridup 0:dc55f40eb04f 1385 }
mridup 0:dc55f40eb04f 1386
mridup 0:dc55f40eb04f 1387 /**
mridup 0:dc55f40eb04f 1388 * @brief wifi_gpio_write
mridup 0:dc55f40eb04f 1389 * Read the value of a GPIO pin
mridup 0:dc55f40eb04f 1390 * @param pin GPIO pin number
mridup 0:dc55f40eb04f 1391 * @param val value to be configured
mridup 0:dc55f40eb04f 1392 * @retval WiFi_Status_t : status of AT cmd
mridup 0:dc55f40eb04f 1393 */
mridup 0:dc55f40eb04f 1394 uint8_t wifi_gpio_write(GpioPin pin, GpioWriteValue value)
mridup 0:dc55f40eb04f 1395 {
mridup 0:dc55f40eb04f 1396 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 1397
mridup 0:dc55f40eb04f 1398 /* AT+S.GPIOW=pin,value */
mridup 0:dc55f40eb04f 1399 Reset_AT_CMD_Buffer();
mridup 0:dc55f40eb04f 1400
mridup 0:dc55f40eb04f 1401 sprintf((char*)WiFi_AT_Cmd_Buff,"AT+S.GPIOW=%d,%d\r", pin, value);
mridup 0:dc55f40eb04f 1402
mridup 0:dc55f40eb04f 1403 status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
mridup 0:dc55f40eb04f 1404 if(status == WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 1405 {
mridup 0:dc55f40eb04f 1406 status = USART_Receive_AT_Resp(Process_Event);
mridup 0:dc55f40eb04f 1407 }
mridup 0:dc55f40eb04f 1408
mridup 0:dc55f40eb04f 1409 return status;
mridup 0:dc55f40eb04f 1410 }
mridup 0:dc55f40eb04f 1411
mridup 0:dc55f40eb04f 1412 void UART_Configuration(uint32_t baud_rate)
mridup 0:dc55f40eb04f 1413 {
mridup 0:dc55f40eb04f 1414 }
mridup 0:dc55f40eb04f 1415
mridup 0:dc55f40eb04f 1416 #ifdef USART_PRINT_MSG
mridup 0:dc55f40eb04f 1417 void USART_PRINT_MSG_Configuration(uint32_t baud_rate)
mridup 0:dc55f40eb04f 1418 {
mridup 0:dc55f40eb04f 1419 }
mridup 0:dc55f40eb04f 1420 #endif
mridup 0:dc55f40eb04f 1421
mridup 0:dc55f40eb04f 1422 /**
mridup 0:dc55f40eb04f 1423 * @}
mridup 0:dc55f40eb04f 1424 */
mridup 0:dc55f40eb04f 1425
mridup 0:dc55f40eb04f 1426 /**
mridup 0:dc55f40eb04f 1427 * @}
mridup 0:dc55f40eb04f 1428 */
mridup 0:dc55f40eb04f 1429
mridup 0:dc55f40eb04f 1430
mridup 0:dc55f40eb04f 1431 /**
mridup 0:dc55f40eb04f 1432 * @}
mridup 0:dc55f40eb04f 1433 */
mridup 0:dc55f40eb04f 1434
mridup 0:dc55f40eb04f 1435 /******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/
mridup 0:dc55f40eb04f 1436
mridup 0:dc55f40eb04f 1437