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
spwf/wifi_interface.c@0:dc55f40eb04f, 2016-04-13 (annotated)
- 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?
User | Revision | Line number | New 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>© 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 |