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:
scsims
Date:
Tue Jun 21 20:20:50 2016 +0000
Revision:
18:b265b3b696f1
Parent:
8:0f302a13e21b
Child:
22:a1276b7d3b2d
Added SPWFInterface::start_access_point() to allow the module to be put into AP mode. Operational data rates are configurable as is the channel number. AP's have to be open as the underlying driver only appears to support open APs at the moment

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