Connect through Wifi to IBM MQTT cloud https://quickstart.internetofthings.ibmcloud.com

Dependencies:   MQTT NetworkSocketAPI X_NUCLEO_IDW01M1v2 X_NUCLEO_IKS01A1 mbed NDefLib X_NUCLEO_NFC01A1

Fork of IDW01M1_Cloud_IBM by ST Expansion SW Team

To start the demo the following expansion boards are required

X_NUCLEO_IDW01M1v2, X_NUCLEO_IKS01A1, X_NUCLEO_NFC01A1

After having mounted the board stack on the Nucleo board the below steps should be followed:

  • Program in the application source code you local WiFi SSID and password and flash the binary. Make sure the Wifi network has visible SSID.
  • Reset the Nucleo board and after few seconds the Nucleo green led will be on (it means the Nucleo is connected to the local Wifi and to the IBM cloud server)
  • Read the NFC tag with an Android device and the browser will be automatically opened and directed to the specific brocker IBM demo page where the environmental values are displayed in form of a x-y graph. The values are updated every few seconds. On the Hyperterminal is possible to see the values sent to the IBM cloud server and the board mac address to be entered on the IBM quickstart web page if a manual connection is needed (eg. to connect from a PC browser).

Files at this revision

API Documentation at this revision

Comitter:
mridup
Date:
Thu Apr 14 06:20:36 2016 +0000
Parent:
2:ba0531d896f0
Child:
4:1ed7f173eec5
Commit message:
change in main

Changed in this revision

X_NUCLEO_IDW01M1.lib Show annotated file Show diff for this revision Revisions of this file
X_NUCLEO_IDW01M1/SPWFInterface.cpp Show diff for this revision Revisions of this file
X_NUCLEO_IDW01M1/SPWFInterface.h Show diff for this revision Revisions of this file
X_NUCLEO_IDW01M1/WIFI_API/SpwfSADevice.cpp Show diff for this revision Revisions of this file
X_NUCLEO_IDW01M1/WIFI_API/SpwfSADevice.h Show diff for this revision Revisions of this file
X_NUCLEO_IDW01M1/intermediate.cpp Show diff for this revision Revisions of this file
X_NUCLEO_IDW01M1/intermediate.h Show diff for this revision Revisions of this file
X_NUCLEO_IDW01M1/spwf/inc/wifi_const.h Show diff for this revision Revisions of this file
X_NUCLEO_IDW01M1/spwf/inc/wifi_driver.h Show diff for this revision Revisions of this file
X_NUCLEO_IDW01M1/spwf/inc/wifi_interface.h Show diff for this revision Revisions of this file
X_NUCLEO_IDW01M1/spwf/inc/wifi_module.h Show diff for this revision Revisions of this file
X_NUCLEO_IDW01M1/spwf/utils/event_buffer.c Show diff for this revision Revisions of this file
X_NUCLEO_IDW01M1/spwf/utils/event_buffer.h Show diff for this revision Revisions of this file
X_NUCLEO_IDW01M1/spwf/utils/ring_buffer.c Show diff for this revision Revisions of this file
X_NUCLEO_IDW01M1/spwf/utils/ring_buffer.h Show diff for this revision Revisions of this file
X_NUCLEO_IDW01M1/spwf/wifi_driver.c Show diff for this revision Revisions of this file
X_NUCLEO_IDW01M1/spwf/wifi_interface.c Show diff for this revision Revisions of this file
X_NUCLEO_IDW01M1/spwf/wifi_module.c Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/X_NUCLEO_IDW01M1.lib	Thu Apr 14 06:20:36 2016 +0000
@@ -0,0 +1,1 @@
+https://developer.mbed.org/users/mridup/code/X_NUCLEO_IDW01M1/#bd9db471d47d
--- a/X_NUCLEO_IDW01M1/SPWFInterface.cpp	Wed Apr 13 10:14:35 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,177 +0,0 @@
-/* SpwfSAInterface implementation of NetworkInterfaceAPI
- * Copyright (c) 2015 ARM Limited
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "SPWFInterface.h"
- 
-// Various timeouts for different SPWF operations
-#define SPWF_CONNECT_TIMEOUT 20000
-#define SPWF_SEND_TIMEOUT    500
-#define SPWF_RECV_TIMEOUT    10000
-#define SPWF_MISC_TIMEOUT    15000
- 
-/**
- * The singleton which represents the SpwfSAInterface.
- *
- */
-static SpwfSAInterface spwf_device(PA_9, PA_10, PC_12, PC_8, PA_12, true);
- 
-/**
-* Export the instance to the user.
-*/
-SpwfSAInterface *createSPWFInstance(void)
-{
-    return (&spwf_device);
-}
-
-// SpwfSAInterface implementation
-SpwfSAInterface::SpwfSAInterface(PinName tx, PinName rx, PinName rst, PinName wkup, PinName rts, bool debug)
-    : _spwf(tx, rx, rst, wkup, rts)
-{
-    memset(_ids, 0, sizeof(_ids));
-}
- 
-SpwfSAInterface::~SpwfSAInterface()
-{
-}
-
-int32_t SpwfSAInterface::init(void) 
-{
-    _spwf.setTimeout(SPWF_MISC_TIMEOUT);
-    return (_spwf.init());
-}
-
-int32_t SpwfSAInterface::connect(
-    const char *ap, 
-    const char *pass_phrase, 
-    ns_security_t security)
-{
-    _spwf.setTimeout(SPWF_CONNECT_TIMEOUT);
-    
-    if(security == NS_SECURITY_WPA2) return NS_ERROR_DEVICE_ERROR;
-    
-    WiFi_Priv_Mode mode = (WiFi_Priv_Mode)security;
-  
-    return (_spwf.connect((char*)ap, (char*)pass_phrase, mode));//0 on success
-}
- 
-int32_t SpwfSAInterface::disconnect()
-{
-    //_spwf.setTimeout(SPWF_SEND_TIMEOUT);
-    
-    return (_spwf.disconnect());
-}
- 
-const char *SpwfSAInterface::getIPAddress()
-{
-    return _spwf.getIPAddress();
-}
- 
-const char *SpwfSAInterface::getMACAddress()
-{
-    return _spwf.getMACAddress();
-}
-
-void SpwfSAInterface::setid(bool set, int id)
-{
-    if(set)
-        _ids[id] = true;
-    else
-        _ids[id] = false;
-}
-    
-SocketInterface *SpwfSAInterface::createSocket(ns_protocol_t proto)
-{
-    return new SpwfSASocket(this, &_spwf, proto);
-}
- 
-void SpwfSAInterface::destroySocket(SocketInterface *iface)
-{
-    SpwfSASocket *socket = (SpwfSASocket *)iface;
-    _ids[socket->_id] = false;
-    delete socket;
-}
- 
- 
-// SpwfSASocket implementation
-int32_t SpwfSAInterface::SpwfSASocket::open(const char *ip, uint16_t port)
-{
-    uint8_t sock_id = -1;
-    
-    //__spwf->setTimeout(SPWF_SEND_TIMEOUT);
- 
-    const char *proto = (_proto == NS_UDP) ? "u" : "t";//"s" for secure socket?
- 
-    __spwf->socket_client_open((uint8_t*)ip, (uint32_t)port, (uint8_t *)proto, &sock_id);
-    
-    //TODO: Maintain a socket table to map socket ID to host & port
-    //TODO: lookup on client table to see if already socket is allocated to same host/port
-    //multimap <char *, vector <uint16_t> > ::iterator i = c_table.find((char*)ip);
-      
-    if(sock_id <= SPWFSA_SOCKET_COUNT)
-    {
-        _id = sock_id;//the socket ID of this Socket instance
-        _itf->setid(true, _id);
-        //_itf->c_table.insert(pair <char *, vector <uint16_t> > ((char*)ip, port));
-    }
-    else 
-        return NS_ERROR_NO_SOCKET;
-    
-    return 0;//0 means SUCCESS
-}
- 
-int32_t SpwfSAInterface::SpwfSASocket::close()
-{
-    int32_t err;
-    
-    //__spwf->setTimeout(SPWF_SEND_TIMEOUT);
-    
-    _itf->setid(false, _id);      
-    //_itf->c_table.empty();
-    
-    err = __spwf->socket_client_close((uint8_t)_id);
-    
-    return err;
-}
- 
-int32_t SpwfSAInterface::SpwfSASocket::send(const void *data, uint32_t size)
-{
-    int32_t err;
-
-    //__spwf->setTimeout(SPWF_SEND_TIMEOUT);
-    
-    err = __spwf->socket_client_write((uint8_t)_id, (uint16_t)size, (char*)data);
-    
-    return err;
-}
-
-//return no of bytes read
-int32_t SpwfSAInterface::SpwfSASocket::recv(void *data, uint32_t size)
-{
-    int32_t recv;
-    
-    __spwf->setTimeout(SPWF_RECV_TIMEOUT);
-    
-    recv = __spwf->socket_client_recv((uint8_t)_id, (uint16_t)size, (char*)data);
-    
-    
-    return recv;
-    
-}
-
-void SpwfSAInterface::debug(const char * string)
-{
-    _spwf.debug_print(string);
-}
--- a/X_NUCLEO_IDW01M1/SPWFInterface.h	Wed Apr 13 10:14:35 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,94 +0,0 @@
-/* SpwfSAInterface implementation of NetworkInterfaceAPI
- * Copyright (c) 2015 ARM Limited
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- 
-#ifndef SPWFSA_INTERFACE_H
-#define SPWFSA_INTERFACE_H
-
-#include <vector>
-#include <map>
-#include "WiFiInterface.h"
-#include "SpwfSADevice.h"
- 
-#define SPWFSA_SOCKET_COUNT 8
- 
-/** SpwfSAInterface class
- *  Implementation of the NetworkInterface for the SPWF Device
- */
-class SpwfSAInterface : public WiFiInterface
-{
-public:
- 
-    SpwfSAInterface(PinName tx, PinName rx, PinName rst, PinName wkup, PinName rts, bool debug = false);
-    virtual     ~SpwfSAInterface();
- 
-    // Implementation of WiFiInterface
-    virtual     int32_t connect(
-                                const char *ssid,
-                                const char *pass,
-                                ns_security_t security = NS_SECURITY_NONE);
- 
-    virtual     int32_t disconnect();
- 
-    // Implementation of NetworkInterface
-    virtual     const char *getIPAddress();
-    virtual     const char *getMACAddress();
- 
-    virtual     SocketInterface *createSocket(ns_protocol_t proto);
-    virtual     void destroySocket(SocketInterface *socket);
-    
-    int32_t     init(void);
-    void        debug(const char * string);
-    void        setid(bool set, int id);
-        
-private:
- 
-    SpwfSADevice _spwf;
-    bool _ids[SPWFSA_SOCKET_COUNT];
-    multimap <char *, vector <uint16_t> > c_table;
-
-    // Implementation of the SocketInterface for the SpwfSA
-    class SpwfSASocket : public SocketInterface
-    {
-    public:
-    
-        // SpwfSA specific details
-        SpwfSADevice *__spwf;
-        SpwfSAInterface *_itf;
-        ns_protocol_t _proto;
-        int _id;
-        
-        SpwfSASocket(SpwfSAInterface *itf, SpwfSADevice *spwf, ns_protocol_t proto)
-            : __spwf(spwf), _itf(itf), _proto(proto) {}
-        
-        virtual ~SpwfSASocket() {
-            _itf = 0;
-            __spwf = 0;
-        }
-            
-        // Implementation of SocketInterface
-        virtual int32_t open(const char *ip, uint16_t port);
-        virtual int32_t close();
-    
-        virtual int32_t send(const void *data, uint32_t size);
-        virtual int32_t recv(void *data, uint32_t size);
-    };
-
-};
-
-/*Function to export singleton instance*/
-SpwfSAInterface *createSPWFInstance(void);
-
-#endif
--- a/X_NUCLEO_IDW01M1/WIFI_API/SpwfSADevice.cpp	Wed Apr 13 10:14:35 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,398 +0,0 @@
-/* mbed Microcontroller Library
-* Copyright (c) 2006-2013 ARM Limited
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
- 
-/**
-  ******************************************************************************
-  * @file    SpwfSADevice.cpp 
-  * @author  STMicroelectronics
-  * @brief   Implementation of SpwfSADevice class for Wi-Fi mbed
-  ******************************************************************************
-  * @copy
-  *
-  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
-  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
-  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
-  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
-  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
-  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
-  *
-  * <h2><center>&copy; COPYRIGHT 2016 STMicroelectronics</center></h2>
-  ******************************************************************************
-  */ 
-  
-
-#include "SpwfSADevice.h" 
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-  
-void Rx_irq_handler(void);
-void Wifi_scheduler(void);
-void Wifi_ticker(void);
-
-#ifdef __cplusplus
-}
-#endif
-
-extern void setSpwfSADevice(SpwfSADevice * dev);
-
-SpwfSADevice::SpwfSADevice(PinName tx, PinName rx, PinName rst, PinName wkup, PinName rts):
-    uart_(tx,rx), 
-    term_(SERIAL_TX, SERIAL_RX),
-    wakeup_(wkup, PIN_INPUT, PullNone, 0),
-    rst_(rst, PIN_INPUT, PullUp, 1),     
-    rts_(rts, PIN_INPUT, PullUp, 0)
-{
-    setSpwfSADevice(this);
-    sync_wait_signal = false;
-}
-
-SpwfSADevice::~SpwfSADevice(void)
-{
-    //de-constructor
-}
-
-int32_t SpwfSADevice::init(void) 
-{
-    WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-    Timer timer;
-    
-    timer.start();    
-    rst_.output();
-    wakeup_.output();
-    rts_.output();
-    
-    term_.baud(9600);
-    term_.format(8, SerialBase::None, 1);
-  
-    uart_.baud(115200);
-    uart_.format(8, SerialBase::None, 1);
-    uart_.set_flow_control(SerialBase::RTS, PA_12, NC);//RTSCTS
-    uart_.attach(Rx_irq_handler, SerialBase::RxIrq);
-
-    config.power=wifi_active;
-    config.power_level=high;
-    config.dhcp=on;//use DHCP IP address
-    
-    /*Initialize the tickers*/
-    wifi_isr.attach_us(Wifi_ticker, 1000); //decreasing the time period to 1ms may be causing overrun issue with UART?\
-                                                //UART error not evident but characters are sometimes missing in pipeline(ring_buffer)\
-                                                //specifically in the +WIND:25:WiFi Association with 'STM' successful WIND (why specifically this?)
-    
-    wifi_callback.attach_us(Wifi_scheduler, 2000);//How low can we go?
-        
-    sync_wait_signal = false;
-    status = wifi_init(&config);
-    if(status!=WiFi_MODULE_SUCCESS)
-    {
-        return -1;
-    }
-    
-    while(!sync_wait_signal)
-    {
-        if (timer.read_ms() > _timeout) {
-            return -1;
-        }
-        __NOP();
-    }
-    
-    return 0;
-}
-
-int32_t SpwfSADevice::connect(char * ssid, char * sec_key, WiFi_Priv_Mode priv_mode) 
-{
-    WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-    Timer timer;
-    
-    timer.start();
-    sync_wait_signal = false;
-    status = wifi_connect(ssid, sec_key, priv_mode);
-    if(status!=WiFi_MODULE_SUCCESS)
-    {
-        return -1;
-    }        
-    
-    while(!sync_wait_signal)
-    {
-        if (timer.read_ms() > _timeout) {
-            return -1;
-        }
-        __NOP();
-    } 
-    
-    return 0;
-}
-
-int32_t SpwfSADevice::disconnect()
-{
-    WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-
-    status = wifi_disconnect();//will set to Idle Mode
-    if(status!=WiFi_MODULE_SUCCESS)
-    {
-        return -1;
-    }
-    
-    return 0;
-}
-
-const char *SpwfSADevice::getIPAddress()
-{
-    WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-
-    status = WiFi_Get_IP_Address((uint8_t *)_ip_buffer);
-    
-    if(status!=WiFi_MODULE_SUCCESS)
-    {
-        return NULL;
-    } else 
-        return _ip_buffer;
-}
-
-const char *SpwfSADevice::getMACAddress()
-{
-    WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-
-    status = WiFi_Get_MAC_Address((uint8_t *)_mac_buffer);
-    
-    if(status!=WiFi_MODULE_SUCCESS)
-    {
-        return NULL;
-    } else 
-        return _mac_buffer;
-}
-
-int32_t SpwfSADevice::socket_client_open(uint8_t * hostname, uint32_t port_number, uint8_t * protocol, uint8_t * sock_id)
-{
-    WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-
-    //Timeout of synchronous functions?
-    status = wifi_socket_client_open(hostname, port_number, protocol, sock_id);
-    if(status!=WiFi_MODULE_SUCCESS)
-    {
-        *sock_id = 9;//make sure socket id is not set(set to out of bounds of SPWFSA_SOCKET_COUNT range)
-        return -1;
-    }
-    
-    return 0;
-}
-
-
-int32_t SpwfSADevice::socket_client_write(uint8_t sock_id, uint16_t DataLength,char * pData)
-{
-    WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-
-    status = wifi_socket_client_write(sock_id, DataLength, pData);
-    //map error to enum ns_error_t 
-    
-    if(status!=WiFi_MODULE_SUCCESS)
-    {
-        return -1;
-    }
-    return 0;
-}
-
-
-int32_t SpwfSADevice::socket_client_recv(uint8_t sock_id, uint16_t RecvLength,char * pData)
-{
-    Timer timer;
-    
-    timer.start();
-    bytes_to_read = RecvLength;
-
-    __disable_irq();
-    bytes_read=0;
-    sync_wait_signal = false;
-    recv_buff = (uint8_t*)pData;
-    __enable_irq();
-    
-    while(!sync_wait_signal)
-    {
-      if (timer.read_ms() > _timeout) {
-            //debug_print("\r\n SpwfSADevice:: Timeout!\r\n");
-            sync_wait_signal = true;            
-            //if(bytes_read==0) return -1;//return error if no bytes are read!
-            return bytes_read;//return amount of data arrived so far
-            //when do we return NS_ERROR_WOULD_BLOCK??
-        }
-      __NOP();
-    }
-
-    return bytes_read;
-    
-}
-
-void SpwfSADevice::network_scan(wifi_scan *scan_result, uint16_t max_scan_number)
-{
-    WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-    
-    status = wifi_network_scan(scan_result, max_scan_number);
-    if(status!=WiFi_MODULE_SUCCESS)
-    {
-        return;
-    }
-}
-
-void SpwfSADevice::http_get(uint8_t * hostname, uint8_t * path, uint32_t port_number)
-{
-    WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-    
-    status = wifi_http_get((uint8_t *)hostname, (uint8_t *)path, port_number);
-    if(status!=WiFi_MODULE_SUCCESS)
-    {
-        return;
-    }    
-}
-
-void SpwfSADevice::http_post(uint8_t * url_path)
-{
-    WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-    
-    status = wifi_http_post(url_path);
-    if(status!=WiFi_MODULE_SUCCESS)
-    {
-        return;
-    }    
-}
-
-void SpwfSADevice::signal_data_receive(uint8_t socket_id, uint8_t * data_ptr, uint32_t message_size, uint32_t chunk_size)
-{
-    char debug_str[10];
-    //Data will be copied or returned to user only if there is a pending request
-    //Copy data to pData
-    if(recv_buff && !sync_wait_signal)
-    {
-        if((bytes_read + message_size)<= bytes_to_read)
-        {
-            memcpy(recv_buff + bytes_read, data_ptr, message_size);//only copy bytes_to_read asked by user//rest of the data is lost!!
-            bytes_read += message_size;
-        }
-        else
-            {
-                uint32_t x_size = (bytes_read + message_size) - bytes_to_read;
-                memcpy(recv_buff + bytes_read, data_ptr, message_size-x_size);
-                bytes_read += (message_size-x_size);
-            }          
-        
-        if(bytes_read >= bytes_to_read)
-        {
-            __disable_irq();
-            sync_wait_signal = true;
-            __enable_irq();
-        }
-    }
-    else
-    {
-        debug_print("\r\n Socket:: Data Dropped: ");
-        sprintf((char*)debug_str,"%d\r\n",message_size); 
-        debug_print(debug_str);
-        __disable_irq();
-        sync_wait_signal = true;
-        __enable_irq();
-    }
-    
-}
-
-void SpwfSADevice::signal_synch_wait(WiFi_Status_t code)
-{
-    if(code == WiFi_DISASSOCIATION)
-    {
-        //do nothing
-    } 
-    else
-    {
-        __disable_irq();
-        sync_wait_signal = true;
-        __enable_irq();
-    }
-}
-
-int32_t SpwfSADevice::socket_client_close(uint8_t sock_close_id)
-{
-    WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-
-    status = wifi_socket_client_close(sock_close_id);
-    //map error to enum ns_error_t 
-    if(status!=WiFi_MODULE_SUCCESS)
-    {
-        return -1;
-    }    
-    
-    return 0;
-}
-
-
-void SpwfSADevice::spwf_attach_irq(wifi_bool attach) 
-{
-    if(attach)
-    {
-        uart_.attach(Rx_irq_handler, SerialBase::RxIrq);
-    }
-    else
-    {
-        uart_.attach(NULL, SerialBase::RxIrq);
-    }
-}
-
-void SpwfSADevice::spwf_send(const char * cmd, uint16_t size) 
-{
-    Timer timer;
-    int i;
-    //timer.start();
-    
-    //uart_.puts(cmd);//string may contain '\0' character in between hence not used
-    
-    for(i=0;i<size;i++)
-    {
-        uart_.putc(cmd[i]);        
-        //if (timer.read_ms() > _timeout) {
-            //return -1;
-        //}
-    }
-}
-
-char SpwfSADevice::spwf_get(void) 
-{
-    return(uart_.getc());
-}
-
-void SpwfSADevice::spwf_wakeup(int wake)
-{
-    wakeup_.write(wake);
-}
-
-void SpwfSADevice::spwf_reset(int reset)
-{
-    rst_.write(reset);
-}
-
-void SpwfSADevice::spwf_rts(int rts)
-{
-    rts_.write(rts);
-}
-
-int SpwfSADevice::spwf_read_rts()
-{
-    return(rts_.read());
-}
-
-void SpwfSADevice::debug_print(const char * string)
-{
-    term_.puts(string);
-}
-
--- a/X_NUCLEO_IDW01M1/WIFI_API/SpwfSADevice.h	Wed Apr 13 10:14:35 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,115 +0,0 @@
-/* mbed Microcontroller Library
-* Copyright (c) 2006-2013 ARM Limited
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
- 
-/**
-  ******************************************************************************
-  * @file    SpwfSADevice.h
-  * @author  STMicroelectronics
-  * @brief   Header File of SpwfSADevice class for Wi-Fi mbed
-  ******************************************************************************
-  * @copy
-  *
-  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
-  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
-  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
-  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
-  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
-  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
-  *
-  * <h2><center>&copy; COPYRIGHT 2016 STMicroelectronics</center></h2>
-  ******************************************************************************
-  */
-
-#ifndef __SPWFSA_DEVICE_H__
-#define __SPWFSA_DEVICE_H__
- 
-
-#include "mbed.h"
-#include "RawSerial.h"
-#include "Ticker.h"
-#include "Timer.h"
-#include "wifi_interface.h"
-
-
-/*Class describing the SPWF Device*/
-class SpwfSADevice
-{
- 
-public:
-    SpwfSADevice(PinName tx, PinName rx, PinName rst, PinName wkup, PinName rts);
-    ~SpwfSADevice(void);
-
-    int32_t     init(void);
-    int32_t     connect(char * ssid, char * sec_key, WiFi_Priv_Mode priv_mode);
-    int32_t     disconnect(void);
-    const       char  *getIPAddress();
-    const       char  *getMACAddress();      
-    void        network_scan(wifi_scan *scan_result, uint16_t max_scan_number);
-
-    int32_t     socket_client_open(uint8_t * hostname, uint32_t port_number, uint8_t * protocol, uint8_t * sock_id);
-    int32_t     socket_client_write(uint8_t sock_id, uint16_t DataLength,char * pData);
-    int32_t     socket_client_recv(uint8_t sock_id, uint16_t RecvLength,char * pData);
-    int32_t     socket_client_close(uint8_t sock_close_id);
-    void        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);
-
-    void        socket_server_open(uint32_t port_number, uint8_t * protocol);
-    void        socket_server_write(uint16_t DataLength,char * pData);
-    void        socket_server_close(void);
-    
-    void        http_get(uint8_t * hostname, uint8_t * path, uint32_t port_number);
-    void        http_post(uint8_t * url_path);
-
-    /*These functions should be pure virtual functions for ppl to derive and implement there own stuff*/
-    char        spwf_get(void);
-    void        spwf_send(const char * cmd, uint16_t size);
-    void        spwf_wakeup(int wake);
-    void        spwf_reset(int reset);
-    void        spwf_rts(int rts);
-    void        spwf_attach_irq(wifi_bool attach);
-    int         spwf_read_rts();    
-    
-    const       char  *getVersion(void);
-    void        waitForEvent(void); 
-    void        signal_data_receive(uint8_t socket_id, uint8_t * data_ptr, uint32_t message_size, uint32_t chunk_size);
-    void        signal_synch_wait(WiFi_Status_t code);
-    bool        getIsInitialized(void);
-    void        setTimeout(int timeout) {
-                _timeout = timeout;
-                }
-    void        debug_print(const char * string);
-    
-private:
-    bool        isInitialized;
- 
-    RawSerial                   uart_;
-    RawSerial                   term_;
-    Ticker                      wifi_isr;
-    Ticker                      wifi_callback;
-    DigitalInOut                wakeup_;
-    DigitalInOut                rst_;
-    DigitalInOut                rts_;              
-    wifi_config                 config;
-    bool                        sync_wait_signal;
-    uint16_t                    bytes_read;
-    uint16_t                    bytes_to_read;
-    uint8_t *                   recv_buff;
-    int                         _timeout;                
-    
-    char _ip_buffer[16];
-    char _mac_buffer[18];
-};
-
-#endif
\ No newline at end of file
--- a/X_NUCLEO_IDW01M1/intermediate.cpp	Wed Apr 13 10:14:35 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,164 +0,0 @@
-/* mbed Microcontroller Library
-* Copyright (c) 2006-2013 ARM Limited
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
- 
-/**
-  ******************************************************************************
-  * @file    intermediate.c
-  * @author  STMicroelectronics
-  * @brief   Wrapper Functions for access to SPWFSADevice class/vice-versa
-  ******************************************************************************
-  * @copy
-  *
-  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
-  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
-  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
-  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
-  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
-  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
-  *
-  * <h2><center>&copy; COPYRIGHT 2016 STMicroelectronics</center></h2>
-  ******************************************************************************
-  */
-
-#include "SpwfSADevice.h"
-
-SpwfSADevice * device;
-
-void setSpwfSADevice(SpwfSADevice * dev);
- 
-void setSpwfSADevice(SpwfSADevice * dev)
- {
-    device = dev;
- }
- 
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-
-void callSpwfSADevice_init(void* object);
-char callSpwfSADevice_getChar(void* object);
-void callSpwfSADevice_write(void* object, const char * cmd, uint16_t size);
-void callSpwfSADevice_wakeup(void* object, int wake);
-void callSpwfSADevice_reset(void* object, int reset); 
-void callSpwfSADevice_rts(void* object, int rts);
-void callSpwfSADevice_attach(wifi_bool attach);
-void callSpwfSADevice_debug(void* object, const char * string);
-void destroySpwfSADevice(void);
-int callSpwfSADevice_read_rts(void* object);
-
-
-void callSpwfSADevice_init(void* object)
- {
-    //static_cast<SpwfSADevice*>(object)->init();
-    device->init();
-    return;
- }
-
-char callSpwfSADevice_getChar(void* object)
- {
-    return(device->spwf_get());
- }
-
-void callSpwfSADevice_write(void* object, const char * cmd, uint16_t size)
- {
-   device->spwf_send(cmd, size);
- }
- 
-void callSpwfSADevice_wakeup(void* object, int wake)
-{
-  device->spwf_wakeup(wake);
-}
-
-void callSpwfSADevice_reset(void* object, int reset)
-{
-  device->spwf_reset(reset);
-}
-   
-void callSpwfSADevice_rts(void* object, int rts)
-{
-  device->spwf_rts(rts);
-}
-
-int callSpwfSADevice_read_rts(void* object)
-{
-  return(device->spwf_read_rts());
-}
-
-void callSpwfSADevice_attach(wifi_bool attach)
-{
-  device->spwf_attach_irq(attach);
-}
-
-void callSpwfSADevice_debug(void* object, const char * string)
-{
-  device->debug_print(string);
-}
-
-void destroySpwfSADevice()
- {
-  
- }
-
-/*Callbacks implementation*/
-
-void ind_wifi_on()
-{
-    device->signal_synch_wait(WiFi_MODULE_SUCCESS);
-}
-  
-void ind_wifi_connected()
-{
-    device->signal_synch_wait(WiFi_MODULE_SUCCESS);
-}
-
-void ind_wifi_connection_error(WiFi_Status_t code)
-{
-    switch(code)
-    {
-    case WiFi_DISASSOCIATION:
-        device->signal_synch_wait(code);
-      break;
-    case WiFi_DE_AUTH:
-      break;
-    default:
-      break;      
-    }
-}
-
-void ind_wifi_socket_data_received(uint8_t socket_id, uint8_t * data_ptr, uint32_t message_size, uint32_t chunk_size)
-{
-    device->signal_data_receive(socket_id, data_ptr, message_size, chunk_size);
-}
-
-void ind_wifi_http_data_available(uint8_t * data_ptr, uint32_t message_size)
-{
-  //spwf->debug("\r\nrx>>\r\n");
-  //memcpy(user_buffer, data_ptr, 511);
-}
-
-void ind_wifi_socket_client_remote_server_closed(uint8_t * socket_closed_id)
-{
-    device->signal_synch_wait(WiFi_MODULE_SUCCESS);
-}
-
-#ifdef __cplusplus
-}
-#endif
-
-
-
--- a/X_NUCLEO_IDW01M1/intermediate.h	Wed Apr 13 10:14:35 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,19 +0,0 @@
- // intermediate.h
-
-#ifndef __INTERMEDIATE_H__
-#define __INTERMEDIATE_H__
-
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
-
-
- #ifdef __cplusplus
- extern }
- #endif
-
-
-#endif
-
--- a/X_NUCLEO_IDW01M1/spwf/inc/wifi_const.h	Wed Apr 13 10:14:35 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,131 +0,0 @@
-/**
- ******************************************************************************
- * @file    wifi_const.h
- * @author  Central LAB
- * @version V2.0.0
- * @date    10-February-2016
- * @brief   Describes the constants and defines in X-CUBE-WIFI1
- ******************************************************************************
- * @attention
- *
- * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *   1. Redistributions of source code must retain the above copyright notice,
- *      this list of conditions and the following disclaimer.
- *   2. Redistributions in binary form must reproduce the above copyright notice,
- *      this list of conditions and the following disclaimer in the documentation
- *      and/or other materials provided with the distribution.
- *   3. Neither the name of STMicroelectronics nor the names of its contributors
- *      may be used to endorse or promote products derived from this software
- *      without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- ******************************************************************************
- */
-
-/** @defgroup NUCLEO_WIFI_INTERFACE_Private_Defines
-  * @{
-  */
-    
-#define EPOCH_TIME                              1453727657//Human time (GMT): Mon, 25 Jan 2016 13:14:17 GMT
-#define EXTI_CONF_TIMER                         1900 //millisec
-#define PROCESS_WIFI_TIMER                      1
-#define SLEEP_RESUME_PREVENT                    2000
-#define RINGBUF_SIZE                            2048//1024//3072//2048
-#define MAX_BUFFER_GLOBAL                       512
-#define MAX_PREFETCH_BUFFER                     20    
-#define MAX_WIFI_SCAN_NETWORK                   256
-#define RxBufferSize                            64
-#define AT_RESP_LEN_OK                          6 //\r\nOK\r\n
-#define AT_RESP_LEN_GPIOR                       21//GPIO n = 0,in\r\n\r\nOK\r\n
-#define AT_RESP_HELP_TEXT_LEN                   512
-#define AT_ATTENTION                            "AT\r"
-#define AT_WIFI_ENABLE                          "AT+S.WIFI=%d\r"
-#define AT_GET_CONFIGURATION_VALUE              "AT+S.GCFG=%s\r"
-#define AT_SET_CONFIGURATION_VALUE              "AT+S.SCFG=%s,%d\r"
-#define AT_SET_CONFIGURATION_ADDRESS            "AT+S.SCFG=%s,%s\r"
-//#define AT_GET_SSID                           "AT&F\r"
-#define AT_SET_SSID                             "AT+S.SSIDTXT=%s\r"
-#define AT_SET_SEC_KEY                          "AT+S.SCFG=wifi_wpa_psk_text,%s\r"
-#define AT_RESTORE_DEFAULT_SETTING              "AT&F\r"
-#define AT_SAVE_CURRENT_SETTING                 "AT&W\r"
-#define AT_SET_POWER_STATE                      "AT+CFUN=%d\r"
-#define AT_HELP_TEXT                            "AT+S.HELP\r"
-#define AT_RESET_MSG                            "\r\n+WIND:2:Reset\r\n"
-
-#define UNDEFINE_LENGTH                         0xFFFF
-#define AT_WiFi_SCAN                            "AT+S.SCAN\r"
-#define AT_SOCKET_OPEN                          "AT+S.SOCKON=%s,%d,%s,ind\r"
-#define AT_SOCKET_WRITE                         "AT+S.SOCKW=%d,%d\r"
-#define AT_SOCKET_READ                          "AT+S.SOCKR=%d,%d\r"
-#define AT_SOCKET_CLOSE                         "AT+S.SOCKC=%d\r"
-#define AT_SERVER_SOCKET_OPEN                   "AT+S.SOCKD=%d,%s,ind\r" //with indication option
-#define AT_SERVER_SOCKET_CLOSE                  "AT+S.SOCKD=0\r"
-#define AT_QUERY_PENDING_DATA                   "AT+S.SOCKQ=%d\r"
-#define AT_DISPLAY_FILE_NAME                    "AT+S.FSL\r"
-#define AT_DISPLAY_FILE_CONTENT                 "AT+S.FSP=/%s\r"
-#define AT_CREATE_NEW_HTML_FILE                 "AT+S.FSC=/%s,%d\r"
-#define AT_APPEND_FILE                          "AT+S.FSA=/%s,%d\r"
-#define AT_DELETE_FILE                          "AT+S.FSD=/%s\r"
-#define AT_DOWNLOAD_IMAGE_FILE                  "AT+S.HTTPDFSUPDATE=%s,/%s,%d\r"
-#define AT_ERASE_FLASH_MEMORY                   "AT+S.HTTPDFSERASE\r"
-
-#define AT_CMD_TO_DATA_MODE                     "AT+S.\r"
-#define AT_DATA_TO_CMD_MODE                     "at+s." /* NOT \r */
-#define AT_HTTPPOST_REQUEST                     "AT+S.HTTPPOST=%s\r"
-#define AT_HTTPD                                "AT+S.HTTPD=%d\r"
-#define AT_GET_STATUS_VALUE                     "AT+S.STS=%s\r"
-    
-/************Wi-Fi Config Variables**************/
-    
-#define BLINK_LED                               "blink_led"
-#define LOCALECHO1                              "localecho1"
-#define CONSOLE1_HWFC                           "console1_hwfc"
-#define CONSOLE1_SPEED                          "console1_speed"
-#define WIFI_PRIV_MODE                          "wifi_priv_mode"
-#define IP_USE_DHCP_SERVER                      "ip_use_dhcp"
-#define IP_USE_HTTPD                            "ip_use_httpd"
-#define WIFI_MODE                               "wifi_mode"
-#define WIFI_WPA_SECURITY                       "wifi_wpa_psk_text"  
-#define WIFI_CHANNEL_NUMBER                     "wifi_channelnum"  
-#define WIFI_IP_ADDRESS                         "ip_ipaddr"
-#define WIFI_IP_DEFAULT_GATEWAY                 "ip_gw"
-#define WIFI_IP_DNS                             "ip_dns"
-#define WIFI_IP_NETMASK                         "ip_netmask"
-#define WIFI_IP_HOSTNAME                        "ip_hostname"
-#define WIFI_IP_APDOMAINNAME                    "ip_apdomainname"
-#define WIFI_IP_APREDIRECT                      "ip_apredirect"
-#define WIFI_IP_HTTP_TIMEOUT                    "ip_http_get_recv_timeout"
-#define WIFI_IP_DHCP_TIMEOUT                    "ip_dhcp_timeout"
-    
-#define WIFI_SLEEP_ENABLED                      "sleep_enabled"
-#define WIFI_HT_MODE                            "wifi_ht_mode"
-#define WIFI_OPR_RATE_MASK                      "wifi_opr_rate_mask"
-#define WIFI_POWERSAVE                          "wifi_powersave"
-#define WIFI_OPERATIONAL_MODE                   "wifi_operational_mode"
-#define WIFI_LISTEN_INTERVAL                    "wifi_listen_interval"
-#define WIFI_BEACON_WAKEUP                      "wifi_beacon_wakeup"
-#define WIFI_STANDBY_ENABLED                    "standby_enabled"
-#define WIFI_STANDBY_TIME                       "standby_time" 
-#define WIFI_TX_POWER                           "wifi_tx_power"
-#define WIFI_IBSS_IP_ADDR                       "192.168.2.100"
-#define WIFI_IBSS_DEFAULT_GATEWAY               "192.168.2.1"
-#define WIFI_IBSS_IP_DNS_ADDR                   "192.168.2.1"
-#define WIFI_IBSS_IP_MASK                       "255.255.255.0"
-#define WIFI_IP_USE_DHCP                        0
-
-/**
-  * @}
-  */
--- a/X_NUCLEO_IDW01M1/spwf/inc/wifi_driver.h	Wed Apr 13 10:14:35 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +0,0 @@
-
-#include "wifi_module.h"
-
-extern volatile Wifi_Status_Var status_flag;
-
-extern wifi_bool Uartx_Rx_Processing;
-extern buffer_td big_buff;
-extern wifi_bool resume_receive_data;
-extern wifi_bool AT_Cmd_Processing;
-extern WiFi_AT_CMD_Response_t WiFi_Module_State;
-extern volatile WiFi_WIND_State_TypeDef WiFi_WIND_State;
-extern volatile uint8_t wifi_connected;
-extern wifi_bool WiFi_Enabled;
-extern wifi_bool Standby_Enabled;
-extern wifi_bool Deep_Sleep_Enabled;
-extern uint8_t WiFi_AT_Cmd_Buff[];
-
-extern void callSpwfSADevice_init(void* object);
-extern char callSpwfSADevice_getChar(void* object);
-extern void callSpwfSADevice_write(void* object, const char * cmd, uint16_t size);
-extern void callSpwfSADevice_wakeup(void* object, int wake);
-extern void callSpwfSADevice_reset(void* object, int reset); 
-extern void callSpwfSADevice_rts(void* object, int rts);
-extern void callSpwfSADevice_attach(wifi_bool attach);
-extern void callSpwfSADevice_debug(void* object, const char * string);
-extern void destroySpwfSADevice(void);
-extern int callSpwfSADevice_read_rts(void* object);
-
-extern void Stop_Timer(void);
-extern void Start_Timer(void);
-
-extern void Wifi_TIM_Handler(void);
-extern void Wifi_SysTick_Isr(void);
-
-void *spwf_dev;
-
-void Wifi_scheduler(void);
-void Rx_irq_handler(void);
-void Wifi_ticker(void);
-
--- a/X_NUCLEO_IDW01M1/spwf/inc/wifi_interface.h	Wed Apr 13 10:14:35 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,332 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    wifi_interface.h
-  * @author  Central LAB 
-  * @version V2.0.0
-  * @date    10-February-2016
-  * @brief   Header file for X-CUBE-WIFI1 API
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
-  *
-  * Redistribution and use in source and binary forms, with or without modification,
-  * are permitted provided that the following conditions are met:
-  *   1. Redistributions of source code must retain the above copyright notice,
-  *      this list of conditions and the following disclaimer.
-  *   2. Redistributions in binary form must reproduce the above copyright notice,
-  *      this list of conditions and the following disclaimer in the documentation
-  *      and/or other materials provided with the distribution.
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors
-  *      may be used to endorse or promote products derived from this software
-  *      without specific prior written permission.
-  *
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  *
-  ******************************************************************************
-  */
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __WIFI_INTERFACE_H
-#define __WIFI_INTERFACE_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-   
-/* Includes ------------------------------------------------------------------*/   
-#include<stdint.h>
-     
-   /** @addtogroup MIDDLEWARES
-* @{
-*/ 
-
-
-/** @addtogroup  NUCLEO_WIFI_API 
-  * @brief Wi-Fi_interface API
-  * @{
-  */ 
-
-
-/** @addtogroup NUCLEO_WIFI_API_Private_Macros
-  * @{
-  */   
-   
-   
-   /**
-  * @}
-  */
-
-
-/** @addtogroup NUCLEO_WIFI_API_Private_Variables
-  * @{
-  */
-/* Private variables ---------------------------------------------------------*/
-   
-   
-/* Exported macro ------------------------------------------------------------*/
-#define _ARG6(_0, _1, _2, _3, _4, _5, _6, ...) _6
-#define NARG6(...) _ARG6(__VA_ARGS__, 6, 5, 4, 3, 2, 1, 0)
-#define _FIVE_OR_SIX_ARGS_5(NAME, a, b, c, d, e) a, b, c, d, e, 1453727657
-#define _FIVE_OR_SIX_ARGS_6(NAME, a, b, c, d, e, f) a, b, c, d, e, f
-#define __FIVE_OR_SIX_ARGS(NAME, N, ...) _FIVE_OR_SIX_ARGS_ ## N (NAME, __VA_ARGS__)
-#define _FIVE_OR_SIX_ARGS(NAME, N, ...) __FIVE_OR_SIX_ARGS(NAME, N, __VA_ARGS__)
-#define FIVE_OR_SIX_ARGS(NAME, ...) NAME(_FIVE_OR_SIX_ARGS(NAME, NARG6(__VA_ARGS__), __VA_ARGS__))
-
-#define wifi_socket_client_security(...) FIVE_OR_SIX_ARGS(wifi_socket_client_security, __VA_ARGS__)
-
-/* Exported constants --------------------------------------------------------*/
-#define GPIO_IN                 "in"
-#define GPIO_OUT                "out"
-
-#define  GPIO_Off               '0'
-#define  GPIO_Rising            'R'
-#define  GPIO_Falling           'F'
-#define  GPIO_Both              'B'      
-   
-typedef enum GpioWriteValue
-{ 
-  GPIO_OFF      = 0,
-  GPIO_ON,
-} GpioWriteValue;
-
-typedef enum GpioPin
-{ 
-  GPIO_PIN0     = 0,
-  GPIO_PIN1,
-  GPIO_PIN2,
-  GPIO_PIN3,
-  GPIO_PIN4,
-  GPIO_PIN5,
-  GPIO_PIN6,
-  GPIO_PIN7,
-  GPIO_PIN8,
-  GPIO_PIN9,
-  GPIO_PIN10,
-  GPIO_PIN11,
-  GPIO_PIN12,
-  GPIO_PIN13,
-  GPIO_PIN14,
-  GPIO_PIN15
-} GpioPin;
-
-typedef enum wifi_bool
-{
-  WIFI_FALSE         = 0,
-  WIFI_TRUE          = 1,
-  Undefine      = 0xFF
-} wifi_bool;
-
-typedef enum WiFi_Priv_Mode
-{
-  None          = 0, 
-  WEP           = 1,
-  WPA_Personal  = 2,
-} WiFi_Priv_Mode;
-
-/********** Wi-Fi Error *************/
-typedef enum WiFi_Status_t
-{ 
-  WiFi_MODULE_SUCCESS           = 0,
-  WiFi_TIME_OUT_ERROR           = 1,  
-  WiFi_MODULE_ERROR,
-  WiFi_HAL_OK,
-  WiFi_NOT_SUPPORTED,
-  WiFi_NOT_READY,
-  WiFi_SCAN_FAILED,
-  WiFi_AT_CMD_BUSY,
-  WiFi_SSID_ERROR,
-  WiFi_SecKey_ERROR,
-  WiFi_CONFIG_ERROR,
-  WiFi_STA_MODE_ERROR,
-  WiFi_AP_MODE_ERROR,
-  WiFi_AT_CMD_RESP_ERROR,
-  WiFi_AT_FILE_LENGTH_ERROR,
-  WiFi_HAL_UART_ERROR,
-  WiFi_IN_LOW_POWER_ERROR,
-  WiFi_HW_FAILURE_ERROR,
-  WiFi_HEAP_TOO_SMALL_WARNING,
-  WiFi_STACK_OVERFLOW_ERROR,
-  WiFi_HARD_FAULT_ERROR,
-  WiFi_MALLOC_FAILED_ERROR,
-  WiFi_INIT_ERROR,
-  WiFi_POWER_SAVE_WARNING,
-  WiFi_SIGNAL_LOW_WARNING,
-  WiFi_JOIN_FAILED,
-  WiFi_SCAN_BLEWUP,
-  WiFi_START_FAILED_ERROR,
-  WiFi_EXCEPTION_ERROR,
-  WiFi_DE_AUTH,
-  WiFi_DISASSOCIATION,
-  WiFi_UNHANDLED_IND_ERROR,
-  WiFi_RX_MGMT,
-  WiFi_RX_DATA,
-  WiFi_RX_UNK  
-} WiFi_Status_t;
-
-typedef enum power_mode
-{
-  wifi_active        = 0,
-  wifi_reactive      = 1,
-  wifi_sleep      = 2,
-} power_mode;
-
-typedef enum tx_power_level
-{
-  low           = 0,
-  medium        = 1,
-  high          = 2,
-  max           = 3,
-} tx_power_level;
-
-typedef enum dhcp_mode
-{
-  off           = 0,
-  on            = 1,
-  custom        = 2,
-} dhcp_mode;
-
-typedef struct wifi_security
-{  
-  wifi_bool     wpa;
-  wifi_bool     wpa2;
-  wifi_bool     wps;
-} wifi_security;
-
-typedef struct wifi_scan
-{  
-  uint8_t       channel_num;
-  int           rssi;                     
-  char          ssid[30];  
-  wifi_security sec_type;
-} wifi_scan;
-
-typedef struct wifi_config
-{  
-  wifi_bool             ht_mode;
-  power_mode            power;
-  tx_power_level        power_level;
-  dhcp_mode             dhcp;
-  char*                 ip_addr;
-  char*                 netmask_addr;
-  char*                 gateway_addr;
-  char*                 dns_addr;
-  char*                 host_name;
-  wifi_bool             web_server;
-  char*                 ap_domain_name;
-  char*                 ap_config_page_name;
-  uint32_t              http_timeout;
-  uint32_t              dhcp_timeout;
-  uint8_t               wifi_region;     
-  uint32_t              wifi_baud_rate;
-} wifi_config;
-
-/* Exported functions ------------------------------------------------------- */
-
-#ifdef WIFI_USE_VCOM
-void wifi_vcom(void);
-#endif
-
-WiFi_Status_t   wifi_init(wifi_config* config);
-WiFi_Status_t   wifi_restore(void);
-WiFi_Status_t   wifi_enable(wifi_bool enable);
-WiFi_Status_t   wifi_disconnect(void);
-WiFi_Status_t   wifi_connect(char * ssid, char * sec_key, WiFi_Priv_Mode priv_mode);
-WiFi_Status_t   wifi_ap_start(uint8_t * ssid, uint8_t channel_num);
-WiFi_Status_t   wifi_adhoc_create(uint8_t * ssid, WiFi_Priv_Mode priv_mode);
-WiFi_Status_t   wifi_network_scan(wifi_scan *scan_result, uint16_t max_scan_number);
-void            wifi_reset(void);
-
-/******** Wi-Fi Socket Function **********/
-WiFi_Status_t   wifi_socket_client_open(uint8_t * hostname, uint32_t port_number, uint8_t * protocol, uint8_t * sock_id);
-WiFi_Status_t   wifi_socket_client_write(uint8_t sock_id, uint16_t DataLength,char * pData);
-WiFi_Status_t   wifi_socket_client_close(uint8_t sock_close_id);
-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);
-
-/********* Wi-Fi Socket Server ********/
-WiFi_Status_t   wifi_socket_server_open(uint32_t port_number, uint8_t * protocol);
-WiFi_Status_t   wifi_socket_server_write(uint16_t DataLength,char * pData);
-WiFi_Status_t   wifi_socket_server_close(void);
-
-/*** FileSystem Request ***********/
-WiFi_Status_t   wifi_file_create(char *pFileName,uint16_t alength,char * databuff);
-WiFi_Status_t   wifi_file_delete(char * pFileName);
-WiFi_Status_t   wifi_file_list(void);
-WiFi_Status_t   wifi_file_show(uint8_t * pFileName);
-WiFi_Status_t   wifi_file_image_create(uint8_t * pHostName,uint8_t * pFileName, uint32_t port_number);
-WiFi_Status_t   wifi_file_erase_external_flash(void);
-
-/*** HTTP File Request ***********/
-WiFi_Status_t   wifi_http_get(uint8_t * hostname, uint8_t * path, uint32_t port_number);
-WiFi_Status_t   wifi_http_post(uint8_t * url_path);
-
-WiFi_Status_t   wifi_fw_update(uint8_t * hostname, uint8_t * filename_path, uint32_t port_number);
-
-/*** Power Configuration **********/
-WiFi_Status_t   wifi_standby(uint8_t arg_standby_time);
-WiFi_Status_t   wifi_wakeup(wifi_bool enable);
-
-/*** GPIO Configuration **********/
-uint8_t         wifi_gpio_init(GpioPin pin, char* dir, char irq);
-uint8_t         wifi_gpio_read(GpioPin pin, uint8_t *val, uint8_t *dir);
-uint8_t         wifi_gpio_write(GpioPin pin, GpioWriteValue value);
-
-WiFi_Status_t   WiFi_Get_IP_Address(uint8_t *ip_addr);
-WiFi_Status_t   WiFi_Get_MAC_Address(uint8_t *mac_addr);
-
-void            UART_Configuration(uint32_t baud_rate);
-void            GPIO_Configuration(void);
-void            Timer_Config(void);
-void            UART_Msg_Gpio_Init(void);
-void            USART_PRINT_MSG_Configuration(uint32_t baud_rate);
-
-/******** Wi-Fi Indication User Callback: For User to implement *********/
-void            ind_wifi_warning(WiFi_Status_t warning_code);
-void            ind_wifi_error(WiFi_Status_t error_code);
-void            ind_wifi_connection_error(WiFi_Status_t status_code);
-void            ind_wifi_connected(void);
-void            ind_wifi_ap_ready(void);
-void            ind_wifi_ap_client_joined(uint8_t * client_mac_address);
-void            ind_wifi_ap_client_left(uint8_t * client_mac_address);
-void            ind_wifi_on(void);
-void            ind_wifi_packet_lost(WiFi_Status_t status_code);
-void            ind_wifi_gpio_changed(void);
-void            ind_wifi_socket_data_received(uint8_t socket_id, uint8_t * data_ptr, uint32_t message_size, uint32_t chunk_size);
-void            ind_wifi_socket_client_remote_server_closed(uint8_t * socketID);
-void            ind_wifi_socket_server_data_lost(void);
-void            ind_socket_server_client_joined(void);
-void            ind_socket_server_client_left(void);
-void            ind_wifi_http_data_available(uint8_t * data_ptr,uint32_t message_size);
-void            ind_wifi_file_data_available(uint8_t * data_ptr);
-void            ind_wifi_resuming(void);  
-
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-  
-/**
-  * @}
-  */
-  
-#ifdef __cplusplus
-  }
-#endif
-    
-#endif /* __WIFI_INTERFACE_H */
--- a/X_NUCLEO_IDW01M1/spwf/inc/wifi_module.h	Wed Apr 13 10:14:35 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,379 +0,0 @@
-  /**
-  ******************************************************************************
-  * @file    wifi_module.h
-  * @author  Central LAB 
-  * @version V2.0.0
-  * @date    10-February-2016
-  * @brief   Header file for Wi-Fi module
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
-  *
-  * Redistribution and use in source and binary forms, with or without modification,
-  * are permitted provided that the following conditions are met:
-  *   1. Redistributions of source code must retain the above copyright notice,
-  *      this list of conditions and the following disclaimer.
-  *   2. Redistributions in binary form must reproduce the above copyright notice,
-  *      this list of conditions and the following disclaimer in the documentation
-  *      and/or other materials provided with the distribution.
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors
-  *      may be used to endorse or promote products derived from this software
-  *      without specific prior written permission.
-  *
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  *
-  ******************************************************************************
-  */
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __WIFI_MODULE_H
-#define __WIFI_MODULE_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-   
-/* Includes ------------------------------------------------------------------*/
-//#include "stm32_spwf_wifi.h"
-#include "wifi_const.h"   
-#include "wifi_interface.h"
-#include "event_buffer.h"
-   
-/** @addtogroup MIDDLEWARES
-* @{
-*/ 
-
-
-/** @addtogroup  NUCLEO_WIFI_MODULE 
-  * @brief Wi-Fi_driver modules
-  * @{
-  */ 
-
-
-/** @addtogroup NUCLEO_WIFI_MODULE_Private_Macros
-  * @{
-  */
-   
-//#define USART3_INT_MODE
-#define USART3_POLLING_MODE
- /**
-  * @}
-  */
-
-
-/** @addtogroup NUCLEO_WIFI_MODULE_Private_Variables
-  * @{
-  */
-/* Private variables ---------------------------------------------------------*/
-
-/* Exported macro ------------------------------------------------------------*/
-
-/* Exported constants --------------------------------------------------------*/
-
-typedef struct Wifi_Status_Var
-{  
-    wifi_bool Single_Digit_Indication;
-    wifi_bool WiFi_Enabled;
-    wifi_bool http_req_pending;
-    wifi_bool WiFi_Configuration_Done;
-    wifi_bool Timer_Running;
-    wifi_bool resume_receive_data;
-    wifi_bool enable_dequeue;
-    wifi_bool stop_event_dequeue;
-    wifi_bool Standby_Timer_Running;
-    wifi_bool trigger_wakeup_callback;
-    wifi_bool Deep_Sleep_Enabled;
-    wifi_bool Standby_Enabled;
-    wifi_bool Low_Power_Enabled;
-    wifi_bool command_mode;
-    wifi_bool data_mode;
-    wifi_bool Scan_Ongoing;
-    wifi_bool AT_Cmd_Ongoing;
-    wifi_bool AT_Cmd_Processing;
-    wifi_bool Uartx_Rx_Processing;
-    wifi_bool Client_Connected;
-    wifi_bool Client_Disconnected;
-    wifi_bool switch_by_default_to_command_mode;
-    wifi_bool start_sock_read;
-    wifi_bool enable_receive_data_chunk;
-    wifi_bool data_pending_sockD;
-    wifi_bool enable_sock_read;
-    wifi_bool enable_query;
-    wifi_bool Set_AT_Cmd_Response_False;
-    wifi_bool enable_fw_update_read;
-    wifi_bool Q_Contains_Message;
-    wifi_bool Q_Contains_Data;
-    wifi_bool enable_receive_http_response;
-    wifi_bool enable_receive_file_response;
-    wifi_bool enable_receive_wifi_scan_response;
-    wifi_bool prevent_push_OK_event;
-    wifi_bool client_socket_close_ongoing;
-    wifi_bool prevent_push_WIFI_event;
-    wifi_bool sock_read_ongoing;
-    wifi_bool enable_client_socket_write;
-    wifi_bool event_deQ_x_wind64;
-    wifi_bool do_not_reset_push_WIFI_event;
-    wifi_bool message_pending;
-    wifi_bool Pending_SockON_Callback;
-    wifi_bool Pending_SockD_Callback;
-    wifi_bool SockON_Server_Closed_Callback;
-    wifi_bool Client_Socket_Close_Cmd;
-    wifi_bool standby_resume_callback;
-    wifi_bool HTTP_Data_available;
-    wifi_bool FILE_Data_available;
-    wifi_bool AT_Response_Received;
-    wifi_bool Deep_Sleep_Timer;
-    wifi_bool Timeout_Timer;
-    wifi_bool Deep_Sleep_Callback;
-} Wifi_Status_Var;
-
-/******* Wi-Fi Configuration Setting Parameters *****************/
-
-typedef enum WiFi_Mode_TypeDef {
-  WiFi_IDLE_MODE =0,
-  WiFi_STA_MODE,
-  WiFi_IBSS_MODE,
-  WiFi_MiniAP_MODE
-} WiFi_Mode_TypeDef;
-
-  
-/********** Wi-Fi Indications*************/
-
-#pragma pack(1) 
-typedef struct WiFi_WIND_State_TypeDef
-{
-  wifi_bool ConsoleActive;
-  wifi_bool WiFiPowerON;
-  wifi_bool WiFiReset;
-  wifi_bool WiFiHWFailure;
-  wifi_bool HardFault;
-  wifi_bool StackOverflow;
-  wifi_bool MallocFailed;
-  wifi_bool InitFailure;
-  wifi_bool StartFailed;
-  wifi_bool PS_Mode_Failure;
-  wifi_bool HeapTooSmall;
-  wifi_bool WiFiSignalLOW;
-  wifi_bool WiFiJoin;
-  wifi_bool WiFiScanning;
-  wifi_bool WiFiUp;
-  wifi_bool WiFiAssociation;
-  wifi_bool WiFiStarted_MiniAPMode;
-  wifi_bool WiFiAPClientJoined;
-  wifi_bool WiFiAPClientLeft;
-  wifi_bool WiFiException;  
-  wifi_bool WiFiHWStarted;
-  wifi_bool WiFiScanComplete;
-  wifi_bool WiFiPowerDown;
-  wifi_bool WiFiMiniAPMode;
-  wifi_bool WiFiDeauthentication;
-  
-  /*Wifi Connection Errors*/
-  wifi_bool WiFiJoinFailed;
-  wifi_bool WiFiScanBlewUp;
-  wifi_bool WiFiScanFailed;
-  wifi_bool WiFiDeAuth;
-  wifi_bool WiFiDisAssociation;
-  
-  /*Wifi packet lost INDs*/
-  wifi_bool WiFiUnHandledInd;
-  wifi_bool WiFiRXMgmt;
-  wifi_bool WiFiRXData;
-  wifi_bool WiFiRxUnk;   
-  wifi_bool WiFiSockdDataLost;
-  
-} WiFi_WIND_State_TypeDef;
-#pragma pack()
-
-typedef enum {
-  Console_Active          = 0,
-  Poweron                 = 1,
-  WiFi_Reset,
-  Watchdog_Running,
-  Heap_Too_Small,
-  WiFi_Hardware_Dead      = 5,
-  Watchdog_Terminating,
-  SysTickConfigure,
-  Hard_Fault              =8,   
-  StackOverflow,
-  MallocFailed,
-  Error,
-  WiFi_PS_Mode_Failure    = 12,
-  CopyrightInfo,
-  WiFi_BSS_Regained       = 14,
-  WiFi_Signal_LOW         = 15,
-  WiFi_Signal_OK          = 16,
-  FW_update               = 17,
-  Encryption_key_Not_Recognized,
-  WiFi_Join               = 19,
-  JOINFAILED              = 20,
-  WiFi_Scanning           = 21,
-  SCANBLEWUP,
-  SCANFAILED,
-  WiFi_Up                 = 24,
-  WiFi_Association_Successful = 25,
-  WiFi_Started_MiniAP_Mode    = 26,
-  Start_Failed                = 27,
-  WiFi__MiniAP_Associated    = 28,
-  WiFi_EXCEPTION          = 31,    
-  WiFi_Hardware_Started   = 32,
-  WiFi_BSS_LOST,
-  WiFi_Unhandled_Event,
-  Scan_Complete           = 35,
-  WiFi_UNHANDLED_IND,
-  WiFi_UNHANDLED,
-  WiFi_Powered_Down,
-  WiFi_MiniAP_Mode        = 39,
-  WiFi_Deauthentication   = 40,     
-  WiFi_Disassociation,
-  RX_MGMT,
-  RX_DATA,
-  RX_UNK,
-  DOT11_AUTHILLEGAL,
-  Creating_PSK            = 46,  
-  WPA_Terminated          = 49,  
-  WPA_Supplicant_Failed,
-  WPA_Handshake_Complete  = 51,
-  GPIO_line,
-  Wakeup,
-  Factory_debug,
-  SockON_Data_Pending           = 55,
-  Remote_Configuration          = 57,
-  SockON_Server_Socket_Closed   = 58,
-  In_Command_Mode         = 59,
-  In_Data_Mode            = 60,
-  Incoming_socket_client  = 61,
-  Outgoing_socket_client  = 62,
-  SockD_Dropping_Data     = 63,
-  SockD_Pending_Data      = 64,
-  Low_Power_Mode_Enabled  = 66,
-  Going_Into_Standby      = 67,
-  Resuming_From_Standby   = 68,
-  Going_Into_DeepSleep    = 69,
-  Resuming_From_DeepSleep = 70,
-  WiFi_MiniAP_Disassociated    = 72,
-  Undefine_Indication     = 0xFF
-} WiFi_Indication_t;
-
-typedef enum WiFi_Indication_t WiFi_Indication;
-
-typedef enum WiFi_Power_State_t
-{ 
-  Active_State,
-  PowerSave_State,    
-  Sleep_State=3,
-  StandBy_State=4
-} WiFi_Power_State_t;
-
-typedef enum WiFi_AT_CMD_Response_t {
-  Process_Event =0,
-} WiFi_AT_CMD_Response_t;
-
-#ifdef WIFI_USE_VCOM
-void console_input(void);
-#endif
-
-void PowerUp_WiFi_Module(void);
-void WiFi_Module_Init(void);
-void WiFi_Application(void);
-/******* Wi-Fi AT CMD SET ****************/
-WiFi_Status_t Attention_Cmd(void);
-WiFi_Status_t USART_Transmit_AT_Cmd(uint16_t size);
-WiFi_Status_t USART_Receive_AT_Resp(WiFi_AT_CMD_Response_t);
-WiFi_Status_t Save_Current_Setting(void);
-WiFi_Status_t Restore_Default_Setting(void);
-WiFi_Status_t SET_SSID(char* ssid);
-WiFi_Status_t GET_SSID(void);
-WiFi_Status_t SET_Configuration_Value(char* sVar_name,uint32_t aValue);
-WiFi_Status_t GET_Configuration_Value(char* sVar_name,uint32_t *aValue);
-WiFi_Status_t SET_Configuration_Addr(char* sVar_name,char* addr);
-WiFi_Status_t Display_Help_Text(void);
-WiFi_Status_t SET_Power_State(WiFi_Power_State_t state);
-void Process_Wind_Indication(uint8_t *process_buff_ptr);
-void Process_WiFi_Indication_Cmd(event_s_TypeDef * event_pop_s1);
-//void USART2_SendBuffer(USART_TypeDef* USARTx, uint8_t *pData, uint8_t length);
-WiFi_Status_t Read_WiFi_SSID(char *string);
-void Reset_AT_CMD_Buffer(void);
-WiFi_Status_t Open_Serial_Port(void);
-WiFi_Status_t WaitForResponse(uint16_t alength);
-WiFi_Status_t config_init_value(char* sVar_name,uint8_t aValue);
-WiFi_Status_t config_init_addr(char* sVar_name,char* addr);
-
-char* Delete_Colon(char* );
-WiFi_Status_t Read_WiFi_Mode(char *string);
-WiFi_Status_t Read_WiFi_SecKey(char *string);
-
-WiFi_Status_t Write_WiFi_SSID(char *string);
-WiFi_Status_t Write_WiFi_SecKey(char *string);
-void PrintErrorMsg (void);
-void Print_Msg(char * msgBuff,uint8_t length);
-char *search_buffer(char *pSourceBuff, uint16_t sourceBuffLen, char *pSearchStringBuff, uint16_t seartchStringLen);
-void Error_Handler(void);
-WiFi_Status_t SET_WiFi_SecKey(char* seckey);
-void WiFi_Receive_Indication_Msg(void);
-
-void ResetBuffer(void);
-void Start_Timer(void);
-void Stop_Timer(void);
-void Request_Time_Out(void);
-void Start_DeepSleep_Timer(void);
-void Stop_DeepSleep_Timer(void);
-
-void HTTP_Read_Data(void);
-WiFi_Status_t Socket_Read(uint16_t DataLength);
-void Read_Socket_Data(void);
-void Socket_Pending_Data(void);
-void WiFi_switch_to_command_mode(void);
-void WiFi_switch_to_data_mode(void);
-void WiFi_Configuration(void);
-
-void Receive_Data(void);
-void Process_Buffer(uint8_t * ptr);
-void Process_WiFi(void);
-#if 0
-void configure_to_exti(void);
-#endif
-void Stop_Dequeue(void);
-void Resume_Dequeue(void);
-void wait_for_command_mode(void);
-void Wifi_SysTick_Isr(void);
-void RX_EXTI_Isr(uint16_t GPIO_Pin);
-//void Wifi_TIM_Handler(TIM_HandleTypeDef *htim);
-void Queue_Http_Event(uint8_t * hostname, uint8_t * path, uint32_t port_number,uint8_t * pURL_path);
-void Queue_Client_Write_Event(uint8_t sock_id, uint16_t DataLength, char * pData);
-void Queue_Wifi_FW_Update_Event(uint8_t * hostname, uint8_t * filename_path, uint32_t port_number);
-void Queue_Wifi_File_Event(uint8_t * pHostName, uint8_t * pFileName, uint32_t port_number);
-void Queue_Client_Open_Event(uint8_t * hostname, uint32_t port_number, uint8_t * protocol);
-void Queue_Client_Close_Event(uint8_t sock_id);
-void Wait_For_Sock_Read_To_Complete(void);
-void initialize_status_flags(void);
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-  
-/**
-  * @}
-  */
-  
-#ifdef __cplusplus
-  }
-#endif
-#endif /* __WIFI_MODULE_H */
--- a/X_NUCLEO_IDW01M1/spwf/utils/event_buffer.c	Wed Apr 13 10:14:35 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,242 +0,0 @@
-/**
- ******************************************************************************
- * @file    event_buffer.c
- * @author  Central LAB
- * @version V2.0.0
- * @date    10-February-2016
- * @brief   Implements the Event Buffer management of the Wi-Fi module
- ******************************************************************************
- * @attention
- *
- * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *   1. Redistributions of source code must retain the above copyright notice,
- *      this list of conditions and the following disclaimer.
- *   2. Redistributions in binary form must reproduce the above copyright notice,
- *      this list of conditions and the following disclaimer in the documentation
- *      and/or other materials provided with the distribution.
- *   3. Neither the name of STMicroelectronics nor the names of its contributors
- *      may be used to endorse or promote products derived from this software
- *      without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- ******************************************************************************
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "event_buffer.h"
-#include "wifi_module.h"
-
-/** @addtogroup BSP
-* @{
-*/ 
-
-
-/** @defgroup  NUCLEO_WIFI_BUFFER_MGMT
-  * @brief Wi-Fi_driver modules
-  * @{
-  */ 
-
-
-/** @defgroup NUCLEO_WIFI_BUFFER_MGMT_Private_Defines
-  * @{
-  */
-
-/**
-  * @}
-  */
-
-/** @defgroup NUCLEO_WIFI_BUFFER_MGMT_Private_Variables
-  * @{
-  */
-extern event_s_TypeDef event_buffer[1024];
-#define ELEMENT_SIZE sizeof(event_s_TypeDef)   //1
-
-//extern UART_HandleTypeDef UartMsgHandle;
-//extern char print_msg_buff[512];
-extern event_s_TypeDef element;
-
-/*
-#ifdef USART_PRINT_MSG
-#define printf(arg)    sprintf((char*)print_msg_buff,arg);   \
-                       HAL_UART_Transmit(&UartMsgHandle, (uint8_t*)print_msg_buff, strlen(print_msg_buff), 1000);
-#endif 
-*/
-                       
-/**
-  * @}
-  */
-
-/** @defgroup NUCLEO_WIFI_BUFFER_MGMT_Private_Functions
-  * @{
-  */
-
-/**
-  * @brief  init
-  *         Initialize a circular buffer of type buffer_t
-  * @param  None
-  * @retval None
-  */
-void event_init(buffer_e *buffer, int size) {
-    uint32_t element_size;
-    element_size = sizeof(event_s_TypeDef);
-    buffer->size = element_size*size;
-    buffer->start = 0;
-    buffer->count = 0;
-    buffer->end = 0;
-    buffer->element = event_buffer;
-}
-
-/**
-  * @brief  full
-  *         indicates if the given buffer is full or not
-  * @param  None
-  * @retval None
-  */
-int event_full(buffer_e *buffer) 
-{
-  int bufsize = buffer->size;
-  if (buffer->count == (bufsize/ELEMENT_SIZE)) 
-  { 
-    return 1;
-  } 
-  else 
-  {
-    return 0;
-  }
-}
-
-/**
-  * @brief  empty
-  *         indicates if the given buffer is empty or not
-  * @param  None
-  * @retval None
-  */
-int event_empty(buffer_e *buffer) {
-    if (buffer->count == 0) {
-        return 1;
-    } else {
-        return 0;
-    }
-}
-
-/**
-  * @brief  push_buffer
-  *         pushes the data structure onto the circular buffer (queues it)
-  * @param  None
-  * @retval None
-  */
-void push_eventbuffer(buffer_e *buffer, event_s_TypeDef data) 
-{
-  int bufsize;
-  uint32_t index;
-  
-  if (event_full(buffer)) 
-  {     
-    //Buffer overflow and no more space
-    //MPD: No Action taken here; in case of buffer overflow, do we need to overwrite last buffer?
-    //printf("\r\nRing Buffer Full!!\r\n");
-    //printf(data);
-    return;
-  } else 
-  {
-    index=buffer->end/ELEMENT_SIZE;
-    buffer->element[index].data_length = data.data_length;
-    buffer->element[index].wind64_pending_packet_no = data.wind64_pending_packet_no;
-    buffer->element[index].enc = data.enc;
-    buffer->element[index].ok_eval = data.ok_eval;
-    buffer->element[index].socket_id = data.socket_id;
-    buffer->element[index].wind = data.wind;
-    buffer->element[index].event = data.event;
-    buffer->element[index].event_pop = data.event_pop;
-    buffer->count++;
-    buffer->end = buffer->end + ELEMENT_SIZE;
-    
-    //wrap around if max size is reached
-    bufsize = (buffer->size);
-    if (buffer->end >= bufsize) 
-    {
-      buffer->end = 0;
-    }
-  }
-}
-
-/**
-  * @brief  pop_buffer_queue
-  *         dequeues the circular buffer
-  * @param  None
-  * @retval None
-  */ 
-event_s_TypeDef * pop_eventbuffer_queue(buffer_e *buffer) 
-{
-  int bufsize;
-  uint32_t index;
-
-  if (event_empty(buffer)) 
-  {
-    //printf("\r\Event Buffer Empty!!\r\n");
-    return NULL;
-  } 
-  else 
-  {       
-    /* First in First Out*/
-    index=buffer->start/ELEMENT_SIZE;
-    element.data_length = buffer->element[index].data_length;
-    element.enc = buffer->element[index].enc;
-    element.ok_eval = buffer->element[index].ok_eval;
-    element.socket_id = buffer->element[index].socket_id;
-    element.wind64_pending_packet_no = buffer->element[index].wind64_pending_packet_no;
-    element.wind = buffer->element[index].wind;
-    element.event = buffer->element[index].event;
-    element.event_pop = buffer->element[index].event_pop;
-    buffer->start = buffer->start + ELEMENT_SIZE;
-    buffer->count--;
-
-    bufsize = (buffer->size);
-    if (buffer->start >= bufsize) 
-    {
-      buffer->start = 0;
-    }    
-    return &element;
-  }
-}
-
-void reset_event(event_s_TypeDef *r_event)
-{
-  r_event->data_length = 0;
-  r_event->enc         = WIFI_FALSE;
-  r_event->event       = WIFI_NO_EVENT; 
-  r_event->ok_eval     = WIFI_FALSE;
-  r_event->socket_id   = 9; //Socket ID 0-7
-  r_event->wind64_pending_packet_no = 9; //Max pending packets = 4
-  r_event->wind        = 99; //any default value
-  r_event->event_pop   = WIFI_TRUE;
-}
-
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */ 
-
-
-/**
-  * @}
-  */ 
-
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
--- a/X_NUCLEO_IDW01M1/spwf/utils/event_buffer.h	Wed Apr 13 10:14:35 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,157 +0,0 @@
-  /**
-  ******************************************************************************
-  * @file    event_buffer.h
-  * @author  Central LAB
-  * @version V2.0.0
-  * @date    10-February-2016
-  * @brief   Header File for Event Buffer management of the Wi-Fi module
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
-  *
-  * Redistribution and use in source and binary forms, with or without modification,
-  * are permitted provided that the following conditions are met:
-  *   1. Redistributions of source code must retain the above copyright notice,
-  *      this list of conditions and the following disclaimer.
-  *   2. Redistributions in binary form must reproduce the above copyright notice,
-  *      this list of conditions and the following disclaimer in the documentation
-  *      and/or other materials provided with the distribution.
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors
-  *      may be used to endorse or promote products derived from this software
-  *      without specific prior written permission.
-  *
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  *
-  ******************************************************************************
-  */
-
-/* Includes ------------------------------------------------------------------*/
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include "wifi_module.h"
-#ifndef __EVENT_BUFFER_H
-#define __EVENT_BUFFER_H
-
-/** @addtogroup BSP
-* @{
-*/ 
-
-
-/** @defgroup  NUCLEO_WIFI_BUFFER_MGMT 
-  * @brief Wi-Fi_driver modules
-  * @{
-  */ 
-
-
-/** @defgroup NUCLEO_WIFI_BUFFER_MGMT_Private_TypesDefinitions
-  * @{
-  */
-
-/**
-  * @}
-  */
-
-/** @defgroup NUCLEO_WIFI_BUFFER_MGMT_Private_Defines
-  * @{
-  */
-
-/**
-  * @}
-  */
-
-/** @defgroup NUCLEO_WIFI_BUFFER_MGMT_Private_Macros
-  * @{
-  */
-
-
-
-/**
-  * @}
-  */
-
-/** @defgroup NUCLEO_WIFI_BUFFER_MGMT_Private_Variables
-  * @{
-  */
-
-typedef enum
-{
-  WIFI_NO_EVENT,
-  WIFI_WIND_EVENT = 0x0001,
-  WIFI_SOCK_ID_EVENT,
-  WIFI_GCFG_EVENT,
-  WIFI_GPIO_EVENT,
-  WIFI_OK_EVENT,
-  WIFI_ERROR_EVENT,
-  WIFI_STANDBY_CONFIG_EVENT,
-  WIFI_RESUME_CONFIG_EVENT,
-  WIFI_HTTP_EVENT,
-  WIFI_CLIENT_SOCKET_WRITE_EVENT,
-  WIFI_FILE_EVENT,
-  WIFI_CLIENT_SOCKET_OPEN_EVENT,
-  WIFI_CLIENT_SOCKET_CLOSE_EVENT,
-  WIFI_FW_UPDATE_EVENT,
-} event_e;
-
-
-typedef struct
-{
-  uint32_t wind;
-  uint32_t data_length;
-  uint16_t socket_id;
-  uint8_t  wind64_pending_packet_no;
-  wifi_bool enc;         
-  wifi_bool ok_eval; 
-  wifi_bool event_pop;
-  event_e event;
-} event_s_TypeDef;
-
-struct event_buffer {    
-    volatile int start;  // position of first data from USART
-    volatile int end;    // position of last data from USART
-    volatile int size;   //Max size in terms of number of data packets (Total Bytes/size of each packet (8 bytes))
-    volatile int count;  // number of currently filled data packets (=size if full & =0 if empty)
-    
-    /*unsigned main buffer pointer*/
-    event_s_TypeDef *element;
-};
- 
-typedef struct event_buffer buffer_e;
-
-void event_init(buffer_e *buffer, int size);
-int event_full(buffer_e *buffer);
-int event_empty(buffer_e *buffer);
-void push_eventbuffer(buffer_e *buffer, event_s_TypeDef data);
-event_s_TypeDef * pop_eventbuffer_queue(buffer_e *buffer);
-void reset_event(event_s_TypeDef *r_event);
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-  
-/**
-  * @}
-  */
-
-
-
-#endif
--- a/X_NUCLEO_IDW01M1/spwf/utils/ring_buffer.c	Wed Apr 13 10:14:35 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,368 +0,0 @@
-/**
- ******************************************************************************
- * @file    ring_buffer.c
- * @author  Central LAB
- * @version V2.0.0
- * @date    10-February-2016
- * @brief   Implements the Circular Buffer management of the Wi-Fi module
- ******************************************************************************
- * @attention
- *
- * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *   1. Redistributions of source code must retain the above copyright notice,
- *      this list of conditions and the following disclaimer.
- *   2. Redistributions in binary form must reproduce the above copyright notice,
- *      this list of conditions and the following disclaimer in the documentation
- *      and/or other materials provided with the distribution.
- *   3. Neither the name of STMicroelectronics nor the names of its contributors
- *      may be used to endorse or promote products derived from this software
- *      without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- ******************************************************************************
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "ring_buffer.h"
-#include "wifi_module.h"
-
-/** @addtogroup MIDDLEWARES
-* @{
-*/ 
-
-
-/** @defgroup  NUCLEO_WIFI_UTILS
-  * @brief Wi-Fi buffer utility
-  * @{
-  */ 
-
-
-/** @defgroup NUCLEO_WIFI_UTILS_Private_Defines
-  * @{
-  */
-
-/**
-  * @}
-  */
-
-/** @defgroup NUCLEO_WIFI_UTILS_Private_Variables
-  * @{
-  */
-
-extern uint8_t ring_buffer[RINGBUF_SIZE];
-extern uint8_t pop_buffer[MAX_BUFFER_GLOBAL];
-extern uint8_t prefetch_buffer[20];
-//extern wifi_bool enable_receive_data_chunk;
-extern volatile Wifi_Status_Var status_flag;
-extern uint32_t pop_buffer_size;
-
-#define ELEMENT_SIZE 1
-
-               
-/**
-  * @}
-  */
-
-/** @defgroup NUCLEO_WIFI_UTILS_Private_Functions
-  * @{
-  */
-
-/**
-  * @brief  init
-  *         Initialize a circular buffer of type buffer_td
-  * @param  None
-  * @retval None
-  */
-void init(buffer_td *buffer, int size) 
-{
-    buffer->size = size;
-    buffer->start = 0;
-    buffer->count = 0;
-    buffer->end = 0;
-    buffer->element = ring_buffer;
-}
-
-/**
-  * @brief  flush_buffer_queue
-  *         flushes the buffer
-  * @param  None
-  * @retval None
-  */ 
-void flush_buffer_queue(buffer_td *buffer) 
-{
-  buffer->start = buffer->end;//the tail goes up to the head and buffer becomes empty
-  buffer->count = 0;
-}
-
-/**
-  * @brief  is_half_full
-  *         checks if the buffer is half full (empty)
-  * @param  None
-  * @retval None
-  */ 
-int is_half_full(buffer_td *buffer)
-{
-  int bufsize = buffer->size;
-  if (buffer->count >= bufsize - 100)
-  {
-    //printf("half full!");
-    return 1;
-  } 
-  else 
-  {
-    return 0;
-  }
-}
-
-/**
-  * @brief  is_half_empty
-  *         checks if the buffer is less than half
-  * @param  None
-  * @retval None
-  */
-int is_half_empty(buffer_td *buffer)
-{
-  //int bufsize = buffer->size;
-  if (buffer->count <= 100)
-  {
-    return 1;
-  }
-  else 
-  {
-    return 0;
-  }
-}
-
-/**
-  * @brief  full
-  *         indicates if the given buffer is full or not
-  * @param  None
-  * @retval None
-  */
-int full(buffer_td *buffer) 
-{
-  int bufsize = buffer->size;
-  if (buffer->count == bufsize) 
-  {
-    return 1;
-  }
-  else 
-  {
-    return 0;
-  }
-}
-
-/**
-  * @brief  empty
-  *         indicates if the given buffer is empty or not
-  * @param  None
-  * @retval None
-  */
-int empty(buffer_td *buffer) {
-    if (buffer->count == 0) {
-        return 1;
-    } else {
-        return 0;
-    }
-}
-
-/**
-  * @brief  prefetch_buffer_queue
-  *         prefetches the pipeline upto xx bytes
-  * @param  None
-  * @retval None
-  */ 
-uint8_t * prefetch_buffer_queue(buffer_td *buffer)
-{
-  //int i = 0;
-  uint8_t * element;
-  int bufsize;
-
-  memset(prefetch_buffer,0x00,20);
-  element = &prefetch_buffer[0];
-  element[4] = '\0';
-
-  if(!empty(buffer))
-      {
-        bufsize = (buffer->count);
-        if(buffer->count <= 20)
-            memcpy(element, &buffer->element[buffer->start], bufsize);
-        else
-            memcpy(element, &buffer->element[buffer->start], 20);
-        return element;
-      }
-  else return NULL;
-}
-
-/*
-  * @brief  push_buffer
-  *         pushes a new item onto the circular buffer (queues it)
-  * @param  None
-  * @retval None
-  */
-void push_buffer(buffer_td *buffer, uint8_t *data) 
-{
-  int bufsize;
-
-  if (full(buffer)) 
-  {     
-    //Buffer overflow and no more space
-    //MPD: No Action taken here; in case of buffer overflow, do we need to overwrite last buffer?
-    //printf("\r\nRing Buffer Full!!\r\n");
-    //printf(data);
-    return;
-  } 
-  else
-  {
-    buffer->count++;    
-    memcpy(&buffer->element[buffer->end], data, ELEMENT_SIZE);
-    buffer->end = buffer->end + ELEMENT_SIZE;
-    
-    //wrap around if max size is reached
-    bufsize = (buffer->size);
-    if (buffer->end >= bufsize) 
-    {
-      buffer->end = 0;
-    }
-  }
-}
- 
-/**
-  * @brief  pop_buffer_queue
-  *         dequeues the circular buffer
-  * @param  None
-  * @retval None
-  */ 
-uint8_t * pop_buffer_queue(buffer_td *buffer) 
-{
-  uint8_t * element;
-  int bufsize;
-
-  element = &pop_buffer[0];
-  if (empty(buffer)) 
-  {
-    //printf("\r\nRing Buffer Empty!!\r\n");
-    return NULL;
-  } 
-  else 
-  {
-      memset(pop_buffer, 0x00 , MAX_BUFFER_GLOBAL);
-      if(status_flag.enable_receive_data_chunk)
-      {
-        int buf_end = buffer->end;
-        // int buf_start = buffer->start;
-        if(buffer->count < 512)
-        {
-            pop_buffer_size = buffer->count;
-            if(buf_end >= buffer->start)
-            {
-                  memcpy(element, &buffer->element[buffer->start], pop_buffer_size);
-            }
-            else
-            {
-                  int buf_start = buffer->start;
-                  memcpy(element, &buffer->element[buffer->start], RINGBUF_SIZE - buf_start);
-                  memcpy(element+(RINGBUF_SIZE-buffer->start), &buffer->element[0], buf_end);
-            }
-            buffer->start = buffer->end;
-            buffer->count = 0;
-        }
-        else
-        {
-            if(buf_end >= buffer->start)
-            {
-                  memcpy(element, &buffer->element[buffer->start], 511);
-                  buffer->start = buffer->start + 511;
-                  buffer->count = buf_end - buffer->start;
-            }
-            else
-            {
-                  if(buffer->start + 511 < RINGBUF_SIZE)
-                  {
-                      memcpy(element, &buffer->element[buffer->start], 511);
-                      buffer->start = buffer->start + 511;
-                      buffer->count = (RINGBUF_SIZE - buffer->start)+ buf_end;
-                  }
-                  else
-                  {
-                      int buf_start = buffer->start;
-                      memcpy(element, &buffer->element[buffer->start], RINGBUF_SIZE-buf_start);
-                      memcpy(element+(RINGBUF_SIZE-buffer->start), &buffer->element[0], buf_start-513);  //(buffer->start + 511) - 1024;
-                      buffer->start = (buffer->start-513);
-                      buffer->count = buf_end - buffer->start;
-                  }
-            }
-            pop_buffer_size = 511;
-        }
-    }
-    else
-    {
-        /* First in First Out*/
-        memcpy(element, &buffer->element[buffer->start], ELEMENT_SIZE);
-        buffer->start = buffer->start + ELEMENT_SIZE;
-        buffer->count--;
-        pop_buffer_size = 1;
-        bufsize = (buffer->size);
-        if (buffer->start >= bufsize)
-        {
-          buffer->start = 0;
-        } 
-    }
-    return element;
-  }
-}
-
-/**
-  * @brief  rewinds_buffer_queue
-  *         rewinds the circular buffer
-  * @param  None
-  * @retval None
-  */ 
-void rewind_buffer_queue(buffer_td *buffer , int count)
-{
-    int buf_end = buffer->end;
-    if(buffer->start - count >= 0)
-    {
-        buffer->start = buffer->start - count;
-        if(buf_end > buffer->start) {
-          buffer->count = buf_end - buffer->start;
-        }
-        else {
-          buffer->count = (RINGBUF_SIZE-buffer->start)+buf_end;
-        }
-    }
-    else
-    {
-        buffer->start = RINGBUF_SIZE - (count - buffer->start);
-        buffer->count = (RINGBUF_SIZE - buffer->start)+ buf_end;
-    }
-}
-
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */ 
-
-
-/**
-  * @}
-  */ 
-
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
--- a/X_NUCLEO_IDW01M1/spwf/utils/ring_buffer.h	Wed Apr 13 10:14:35 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,130 +0,0 @@
-  /**
-  ******************************************************************************
-  * @file    ring_buffer.h
-  * @author  Central LAB
-  * @version V2.0.0
-  * @date    10-February-2016
-  * @brief   Header File for Circular Buffer management of the Wi-Fi module
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
-  *
-  * Redistribution and use in source and binary forms, with or without modification,
-  * are permitted provided that the following conditions are met:
-  *   1. Redistributions of source code must retain the above copyright notice,
-  *      this list of conditions and the following disclaimer.
-  *   2. Redistributions in binary form must reproduce the above copyright notice,
-  *      this list of conditions and the following disclaimer in the documentation
-  *      and/or other materials provided with the distribution.
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors
-  *      may be used to endorse or promote products derived from this software
-  *      without specific prior written permission.
-  *
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  *
-  ******************************************************************************
-  */
-
-/* Includes ------------------------------------------------------------------*/
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-#include <stdlib.h>
-
-#ifndef __RING_BUFFER_H
-#define __RING_BUFFER_H
-
-/** @addtogroup BSP
-* @{
-*/ 
-
-
-/** @defgroup  NUCLEO_WIFI_BUFFER_MGMT 
-  * @brief Wi-Fi_driver modules
-  * @{
-  */ 
-
-
-/** @defgroup NUCLEO_WIFI_BUFFER_MGMT_Private_TypesDefinitions
-  * @{
-  */
-
-/**
-  * @}
-  */
-
-/** @defgroup NUCLEO_WIFI_BUFFER_MGMT_Private_Defines
-  * @{
-  */
-
-/**
-  * @}
-  */
-
-/** @defgroup NUCLEO_WIFI_BUFFER_MGMT_Private_Macros
-  * @{
-  */
-
-
-
-/**
-  * @}
-  */
-
-/** @defgroup NUCLEO_WIFI_BUFFER_MGMT_Private_Variables
-  * @{
-  */
-
-struct buffer {    
-    volatile int start; // position of first data from USART
-    volatile int end;  // position of last data from USART
-    volatile int size; //Max size in terms of number of data packets (Total Bytes/size of each packet (8 bytes))
-    volatile int count; // number of currently filled data packets (=size if full & =0 if empty)
-    
-    /*unsigned main buffer pointer*/
-    uint8_t *element;
-};
- 
-typedef struct buffer buffer_td;
-
-void init(buffer_td *buffer, int size);
-void flush_buffer_queue(buffer_td *buffer);
-int is_half_full(buffer_td *buffer);
-int is_half_empty(buffer_td *buffer);
-int full(buffer_td *buffer);
-int empty(buffer_td *buffer);
-void push_buffer(buffer_td *buffer, uint8_t *data);
-uint8_t * pop_buffer_queue(buffer_td *buffer);
-uint8_t * popstack(buffer_td *buffer);
-uint8_t * prefetch_buffer_queue(buffer_td *buffer);
-void rewind_buffer_queue(buffer_td *buffer , int count);
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-  
-/**
-  * @}
-  */
-
-
-
-#endif
--- a/X_NUCLEO_IDW01M1/spwf/wifi_driver.c	Wed Apr 13 10:14:35 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,187 +0,0 @@
-/**
- ******************************************************************************
- * @file    wifi_driver.c
- * @author  Central LAB
- * @version V2.0.0
- * @date    01-March-2016
- * @brief   Enable Wi-Fi functionality using AT cmd set
- ******************************************************************************
- * @attention
- *
- * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *   1. Redistributions of source code must retain the above copyright notice,
- *      this list of conditions and the following disclaimer.
- *   2. Redistributions in binary form must reproduce the above copyright notice,
- *      this list of conditions and the following disclaimer in the documentation
- *      and/or other materials provided with the distribution.
- *   3. Neither the name of STMicroelectronics nor the names of its contributors
- *      may be used to endorse or promote products derived from this software
- *      without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- ******************************************************************************
- */
-/* Includes ------------------------------------------------------------------*/
-
-#include <stddef.h>
-#include "wifi_module.h"
-#include "ring_buffer.h"
-#include "device.h"
-#include "wait_api.h"
-#include "stdio.h"
-#include "string.h"
-#include "wifi_driver.h"
-
-void Wifi_ticker(void)
-{
-  Wifi_SysTick_Isr();
-}
-
-void Wifi_scheduler(void)
-{ 
-  Wifi_TIM_Handler();
-}
-
-void Rx_irq_handler(void)
-{
-
-          uint8_t data_byte = (uint8_t)callSpwfSADevice_getChar(spwf_dev);
-
-          status_flag.Uartx_Rx_Processing = WIFI_FALSE;
-          
-          Stop_Timer();
-          __disable_irq();
-          push_buffer(&big_buff, &data_byte);
-          __enable_irq();
-          Start_Timer();
-          
-          status_flag.Uartx_Rx_Processing = WIFI_TRUE;
-          
-          /*if(is_half_full(&big_buff))
-          {
-            status_flag.resume_receive_data = WIFI_TRUE;
-            if(callSpwfSADevice_read_rts(spwf_dev))
-            callSpwfSADevice_rts(spwf_dev, GPIO_PIN_SET);
-            //callSpwfSADevice_attach(0);
-          } else
-            {
-              if(status_flag.AT_Cmd_Processing == WIFI_FALSE)
-              {
-                status_flag.Uartx_Rx_Processing = WIFI_TRUE;
-              }  
-            }*/
-} 
-
-
-/**
-* @brief  wifi_reset
-*         Reset WiFi module using PC12 gpio pin
-* @param  None
-* @retval None
-*/
-void wifi_reset(void)
-{  
-  WiFi_Module_State = Process_Event; 
-  WiFi_WIND_State.WiFiHWStarted = WIFI_FALSE;
-  wifi_connected = 0; //reset wifi_connected to get user callback
-  memset((void*)&WiFi_WIND_State,0x00,sizeof(WiFi_WIND_State)); /*reset the WIND State?*/
-
-  /* ===   RESET PIN - PC12   ===*/
-  
-  callSpwfSADevice_reset(spwf_dev, 0); 
-  wait_ms(100);
-
-  callSpwfSADevice_reset(spwf_dev, 1); 
-  wait_ms(100);
-  
-  while(WiFi_WIND_State.WiFiHWStarted != WIFI_TRUE) 
-  {
-        //nothing to do
-        __NOP();
-  }
-}
-
-
-/**
-* @brief  PowerUp_WiFi_Module
-*         Power up Wi-Fi module,SET GPIO PA0 pin 
-* @param  None
-* @retval None
-*/
-void PowerUp_WiFi_Module(void)
-{
-  /* ===   SET PIN - PC12   ===*/
-  callSpwfSADevice_reset(spwf_dev, 1); 
-  wait_ms(50);
-}
-
-/**
-* @brief  Receive_Data
-*         Receive data from UART port
-* @param  uint8_t number of bytes to be received
-* @retval None
-*/
-void Receive_Data(void)
-{
-  callSpwfSADevice_rts(spwf_dev, 0);
-}
-
-
-/**
-* @brief  USART_Transmit_AT_Cmd
-*         send AT cmd on UART port of wifi module.
-* @param  size size of the AT command
-* @retval WiFi_Status_t : status of AT cmd
-*/
-WiFi_Status_t USART_Transmit_AT_Cmd(uint16_t size)
-{
-  //Check for Hardware Started
-  if(status_flag.WiFi_Enabled == WIFI_FALSE) 
-    return WiFi_NOT_READY;
-  //Check for Deep-Sleep or Standby Mode, return error if true
-  if (status_flag.Standby_Enabled == WIFI_TRUE || status_flag.Deep_Sleep_Enabled == WIFI_TRUE)
-    return WiFi_IN_LOW_POWER_ERROR;
-
-  status_flag.AT_Cmd_Processing = WIFI_TRUE;//Stop Any Rx between the TX call
-
-  if (size == 0)
-    {
-        return WiFi_UNHANDLED_IND_ERROR;
-    }
-
-#if defined(USART3_INT_MODE)
-  if(HAL_UART_Transmit_IT(&UartWiFiHandle, (uint8_t *)WiFi_AT_Cmd_Buff, size)!= HAL_OK)
-  {
-    Error_Handler();
-    return WiFi_HAL_UART_ERROR;
-  }
-  while (UartReady != SET);
-  UartReady = RESET; 
-
-#elif defined(USART3_POLLING_MODE)
-
-  callSpwfSADevice_write(spwf_dev, (const char *) WiFi_AT_Cmd_Buff, size);
-
-#else
- #error "Please select USART mode in your application (in wifi_module.h file)"
-#endif
- 
-  status_flag.AT_Cmd_Processing = WIFI_FALSE;//Re-enable Rx for UART
-  if(status_flag.Uartx_Rx_Processing == WIFI_FALSE)
-    Receive_Data();//Start receiving Rx from the UART again, if and only if it was stopped in the previous Uartx_Rx_Handler
-  return WiFi_MODULE_SUCCESS;
-}
-
--- a/X_NUCLEO_IDW01M1/spwf/wifi_interface.c	Wed Apr 13 10:14:35 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1437 +0,0 @@
-/**
- ******************************************************************************
- * @file    wifi_interface.c
- * @author  Central LAB
- * @version V2.0.0
- * @date    10-February-2016
- * @brief   User APIs implementation for X-CUBE-WIFI1
- ******************************************************************************
- * @attention
- *
- * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *   1. Redistributions of source code must retain the above copyright notice,
- *      this list of conditions and the following disclaimer.
- *   2. Redistributions in binary form must reproduce the above copyright notice,
- *      this list of conditions and the following disclaimer in the documentation
- *      and/or other materials provided with the distribution.
- *   3. Neither the name of STMicroelectronics nor the names of its contributors
- *      may be used to endorse or promote products derived from this software
- *      without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "wifi_module.h"
-//#include "stm32_spwf_wifi.h"
-#include "ring_buffer.h"
-#include "stdio.h"
-#include "string.h"
-#include "gpio_irq_api.h"
-#include "gpio_api.h"
-#include "wait_api.h"
-#include "serial_api.h"
-
-/** @addtogroup MIDDLEWARES
-* @{
-*/ 
-
-
-/** @defgroup  NUCLEO_WIFI_INTERFACE
-  * @brief Wi-Fi User API modules
-  * @{
-  */
-
-
-/** @defgroup NUCLEO_WIFI_INTERFACE_Private_Defines
-  * @{
-  */
-
-
-/**
-  * @}
-  */
-
-/** @addtogroup NUCLEO_WIFI_INTERFACE_Private_Variables
-  * @{
-  */
-/* Private variables ---------------------------------------------------------*/
-
-#if defined (USE_STM32F4XX_NUCLEO) || (USE_STM32L4XX_NUCLEO)
-extern uint8_t WiFi_AT_Cmd_Buff[2048];
-#else
-extern uint8_t WiFi_AT_Cmd_Buff[1024];
-#endif
-
-extern volatile Wifi_Status_Var status_flag;
-
-extern char UserDataBuff[MAX_BUFFER_GLOBAL];
-extern wifi_scan *wifi_scanned_list;//[15];
-extern char print_msg_buff[MAX_BUFFER_GLOBAL];
-extern uint8_t user_scan_number;
-extern uint8_t no_of_open_client_sockets;
-extern wifi_bool open_sockets[8];//Max open sockets allowed is 8. Each array element depicts one socket (true=open, false=closed)
-extern WiFi_AT_CMD_Response_t WiFi_Module_State;
-extern volatile uint8_t wifi_client_connected;
-extern uint8_t gpio_value, gpio_direc;
-extern volatile uint8_t wifi_connected;
-extern uint32_t SockON_Data_Length;
-extern uint8_t Socket_Open_ID, sockon_query_id;
-extern volatile uint32_t WIND64_count;
-extern uint32_t process_buffer_index;
-extern uint32_t epoch_time;
-
-/*SPWFSADevice Class functions and variables*/
-void * spwf_device_class;
-extern void callSpwfSADevice_wakeup(void* object, int wake);
-extern  void callSpwfSADevice_debug(void* object, const char * string);
-/**
-  * @}
-  */
-  
-/** @defgroup NUCLEO_WIFI_INTERFACE_Private_Functions
-  * @{
-  */
-#ifdef USART_PRINT_MSG
-#define printf(arg)    {sprintf((char*)print_msg_buff,arg);   \
-HAL_UART_Transmit(&UartMsgHandle, (uint8_t*)print_msg_buff, strlen(print_msg_buff), 1000);}
-#endif   
-
-/**
-    *Changed/introduced functions for MBED implementation:
-
-- WiFi_Status_t wifi_init(wifi_config* config)
-- WiFi_Status_t wifi_wakeup(wifi_bool wakeup)
-- WiFi_Status_t wifi_socket_server_write(uint16_t DataLength,char * pData) 
-- void wifi_reset(void);
-- WiFi_Status_t wifi_enable(wifi_bool enable)
-
-*/
-
-
-/**
-  * @brief  wifi_init
-  *         User API for wifi init
-  * @param  None
-  * @retval None
-  */
-WiFi_Status_t wifi_init(wifi_config* config)
-{
-#ifndef WIFI_USE_VCOM
-  uint8_t tx_level;
-#endif
-
-  WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-
-#if DEBUG_PRINT
-  printf("\r\n[SPWF]Initializing SPWF01SA1 Interface\r\n");
-#endif  
-  //callSpwfSADevice_debug(spwf_device_class, "\r\n[SPWF] Initializing mbed SPWF01SA1 Interface\r\n");
-    
-  WiFi_Module_Init();
-  
-  //callSpwfSADevice_debug(spwf_device_class, "\r\n[SPWF] Module Init done\r\n");
-  
-#ifndef WIFI_USE_VCOM
-  
-  wifi_wakeup(WIFI_TRUE);//Prevent from going to sleep during configuration    
-
-  /* Soft reset the module */
-  wifi_reset();
-
-  //callSpwfSADevice_debug(spwf_device_class, "\r\n[SPWF] Hardware started\r\n");
-  
-  /* Set localecho1 to 0*/  
-  status = SET_Configuration_Value(LOCALECHO1, 0);
-  if(status != WiFi_MODULE_SUCCESS) return status;
-
-  /* Restore default setting*/    
-  Reset_AT_CMD_Buffer();  
-  sprintf((char*)WiFi_AT_Cmd_Buff,AT_RESTORE_DEFAULT_SETTING);  
-  status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-  if(status == WiFi_MODULE_SUCCESS)
-  {
-    status = USART_Receive_AT_Resp(Process_Event);
-    if(status != WiFi_MODULE_SUCCESS) return status;
-  }
-
-  /* Switch on HW Flow Control*/  
-  status = SET_Configuration_Value(CONSOLE1_HWFC, 1);
-  if(status != WiFi_MODULE_SUCCESS) return status; 
-  
-  if(config->wifi_baud_rate)
-  {
-    /* Set USART Speed*/  
-    status = SET_Configuration_Value(CONSOLE1_SPEED, config->wifi_baud_rate);
-    if(status != WiFi_MODULE_SUCCESS) return status; 
-  }
-
-  /* Set wifi_mode to idle*/  
-  status = SET_Configuration_Value(WIFI_MODE, WiFi_IDLE_MODE);
-  if(status != WiFi_MODULE_SUCCESS) return status;   
-
-  switch(config->ht_mode)
-  {
-  case WIFI_FALSE:
-    status = SET_Configuration_Value(WIFI_HT_MODE, 0);
-    if(status != WiFi_MODULE_SUCCESS) return status;
-    status = SET_Configuration_Addr(WIFI_OPR_RATE_MASK, "0x00003FCF");
-    if(status != WiFi_MODULE_SUCCESS) return status;
-    break;
-  case WIFI_TRUE:
-    status = SET_Configuration_Value(WIFI_HT_MODE, 1);
-    if(status != WiFi_MODULE_SUCCESS) return status;
-    status = SET_Configuration_Addr(WIFI_OPR_RATE_MASK, "0x003FFFCF");
-    if(status != WiFi_MODULE_SUCCESS) return status;
-    break;
-  default:
-    break;
-  }
-
-  switch(config->power)
-  {
-  case wifi_active:
-    status = SET_Configuration_Value(WIFI_POWERSAVE, 0);
-    if(status != WiFi_MODULE_SUCCESS) return status;
-    status = SET_Configuration_Value(WIFI_SLEEP_ENABLED, 0);  
-    if(status != WiFi_MODULE_SUCCESS) return status;
-    break;
-  case wifi_reactive:
-    status = SET_Configuration_Value(WIFI_POWERSAVE, 1);
-    if(status != WiFi_MODULE_SUCCESS) return status;
-    status = SET_Configuration_Value(WIFI_OPERATIONAL_MODE, 11);  
-    if(status != WiFi_MODULE_SUCCESS) return status;
-    status = SET_Configuration_Value(WIFI_BEACON_WAKEUP, 0);
-    if(status != WiFi_MODULE_SUCCESS) return status;
-    status = SET_Configuration_Value(WIFI_LISTEN_INTERVAL, 0);
-    if(status != WiFi_MODULE_SUCCESS) return status;
-    status = SET_Configuration_Value(WIFI_SLEEP_ENABLED, 0);  
-    if(status != WiFi_MODULE_SUCCESS) return status;
-    break;
-  case wifi_sleep:
-    status = SET_Configuration_Value(WIFI_POWERSAVE, 1);
-    if(status != WiFi_MODULE_SUCCESS) return status;
-    status = SET_Configuration_Value(WIFI_OPERATIONAL_MODE, 12);  
-    if(status != WiFi_MODULE_SUCCESS) return status;
-    status = SET_Configuration_Value(WIFI_BEACON_WAKEUP, 10);
-    if(status != WiFi_MODULE_SUCCESS) return status;
-    status = SET_Configuration_Value(WIFI_LISTEN_INTERVAL, 1);
-    if(status != WiFi_MODULE_SUCCESS) return status;
-    status = SET_Configuration_Value(WIFI_SLEEP_ENABLED, 1);  
-    if(status != WiFi_MODULE_SUCCESS) return status;
-    break;
-  default:
-    break;
-  }
-
-  switch(config->power_level)
-  {
-  case low:
-  case medium:
-  case high:
-  case max:
-    tx_level=config->power_level*6;
-    status = SET_Configuration_Value(WIFI_TX_POWER, tx_level);
-    if(status != WiFi_MODULE_SUCCESS) return status;
-    break;
-  default:
-    break;
-  }
-
-  switch(config->dhcp)
-  {
-  case off:
-  case on:
-  case custom:
-    status = SET_Configuration_Value(IP_USE_DHCP_SERVER, config->dhcp);
-    if(status != WiFi_MODULE_SUCCESS) return status;
-    break;
-  default:
-    break;
-  }
-
-  /* Set IP address */
-  if(config->ip_addr)
-  {
-    status = SET_Configuration_Addr(WIFI_IP_ADDRESS, config->ip_addr);
-    if(status != WiFi_MODULE_SUCCESS) return status;
-  }
-  /* Set netmask address */
-  if(config->netmask_addr)
-  {
-    status = SET_Configuration_Addr(WIFI_IP_NETMASK, config->netmask_addr);
-    if(status != WiFi_MODULE_SUCCESS) return status;
-  }
-  /* Set default gateway address */
-  if(config->gateway_addr)
-  {
-    status = SET_Configuration_Addr(WIFI_IP_DEFAULT_GATEWAY, config->gateway_addr);
-    if(status != WiFi_MODULE_SUCCESS) return status;
-  }
-  /* Set dns address */
-  if(config->dns_addr)
-  {
-    status = SET_Configuration_Addr(WIFI_IP_DNS, config->dns_addr);
-    if(status != WiFi_MODULE_SUCCESS) return status;
-  }
-  /* Set hostname */
-  if(config->host_name)
-  {
-    status = SET_Configuration_Addr(WIFI_IP_HOSTNAME, config->host_name);  
-    if(status != WiFi_MODULE_SUCCESS) return status;
-  }
-
-  if(config->ap_domain_name)
-  {
-    status = SET_Configuration_Addr(WIFI_IP_APDOMAINNAME, config->ap_domain_name);
-    if(status != WiFi_MODULE_SUCCESS) return status;
-  }
-
-  if(config->ap_config_page_name)
-  {
-    status = SET_Configuration_Addr(WIFI_IP_APREDIRECT, config->ap_config_page_name);
-    if(status != WiFi_MODULE_SUCCESS) return status;
-  }
-
-  if(config->http_timeout)
-  {
-    status = SET_Configuration_Value(WIFI_IP_HTTP_TIMEOUT, config->http_timeout*1000);
-    if(status != WiFi_MODULE_SUCCESS) return status;
-  }
-  if(config->dhcp_timeout)
-  {
-    status = SET_Configuration_Value(WIFI_IP_DHCP_TIMEOUT, config->dhcp_timeout);
-    if(status != WiFi_MODULE_SUCCESS) return status;
-  }   
-
-#ifdef MODULE_VERSION_SPWF01Sx_1y
-  Reset_AT_CMD_Buffer();  
-  sprintf((char*)WiFi_AT_Cmd_Buff,AT_HTTPD, config->web_server);  
-  status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-  if(status == WiFi_MODULE_SUCCESS)
-  {
-    status = USART_Receive_AT_Resp(Process_Event);
-    if(status != WiFi_MODULE_SUCCESS) return status;
-  }  
-#endif  
-  
-  /*AT+S.TLSCERT2=clean,all */
-  Reset_AT_CMD_Buffer();  
-  sprintf((char*)WiFi_AT_Cmd_Buff,"AT+S.TLSCERT2=clean,all\r");        
-  status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-  if(status == WiFi_MODULE_SUCCESS)
-  {
-    status = USART_Receive_AT_Resp(Process_Event);
-    if(status != WiFi_MODULE_SUCCESS) return status;
-  }  
-
-  /* save current setting in flash */
-  Reset_AT_CMD_Buffer();  
-  sprintf((char*)WiFi_AT_Cmd_Buff,AT_SAVE_CURRENT_SETTING);  
-  status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-  if(status == WiFi_MODULE_SUCCESS)
-  {
-    status = USART_Receive_AT_Resp(Process_Event);
-    if(status != WiFi_MODULE_SUCCESS) return status;
-  }   
-
-  if(config->wifi_baud_rate)
-  {
-    UART_Configuration(config->wifi_baud_rate); 
-    Receive_Data();//Restart data reception
-  }
-
-  /* Soft reset the module, Do the second reset after setting all parameters and saving in flash */
-  wifi_reset();
-
-  wifi_wakeup(WIFI_FALSE);//De-assert wakeup signal (PC8) to allow sleep if enabled
-#endif  //WIFI_USE_VCOM
-  
-#if DEBUG_PRINT
-  printf("\r\nEnd of Initialization..\r\n");
-#endif
-  //callSpwfSADevice_debug(spwf_device_class, "\r\n[SPWF] End of mbed Initialization\r\n");
-   
-  return status;
-}
-
-
-/**
-* @brief  wifi_socket_client_security
-*         Set the security certificates and key for secure socket (TLS)
-* @param  None
-* @retval WiFi_Status_t : return status
-*/
-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) 
-{
-  WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-
-  /*AT+S.TLSCERT2=clean,all */
-  Reset_AT_CMD_Buffer();  
-  sprintf((char*)WiFi_AT_Cmd_Buff,"AT+S.TLSCERT2=clean,all\r");        
-  status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-  if(status == WiFi_MODULE_SUCCESS)
-  {
-    status = USART_Receive_AT_Resp(Process_Event);
-    if(status != WiFi_MODULE_SUCCESS) return status;
-  }
-
-  /* AT+S.SETTIME=<seconds> */  
-  Reset_AT_CMD_Buffer();
-  if(tls_epoch_time==0) 
-    epoch_time = EPOCH_TIME;
-  else
-    epoch_time = tls_epoch_time;
-  
-  sprintf((char*)WiFi_AT_Cmd_Buff,"AT+S.SETTIME=%lu\r",(unsigned long)epoch_time);        
-  status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-  if(status == WiFi_MODULE_SUCCESS)
-  {
-    status = USART_Receive_AT_Resp(Process_Event);
-    if(status != WiFi_MODULE_SUCCESS) return status;
-  }
-
-  /*AT+S.TLSCERT=f_ca,<size><CR><data>*/
-  Reset_AT_CMD_Buffer();
-  sprintf((char*)WiFi_AT_Cmd_Buff,"AT+S.TLSCERT=f_ca,%d\r%s",strlen((const char *)root_ca_server) - 1, root_ca_server);        
-
-  status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-  if(status == WiFi_MODULE_SUCCESS)
-  {
-    status = USART_Receive_AT_Resp(Process_Event);
-    if(status != WiFi_MODULE_SUCCESS) return status;
-  }
-
-  /*AT+S.TLSCERT=f_cert,<size><CR><data>*/
-  if(tls_mode[0]=='m')
-  {
-    Reset_AT_CMD_Buffer();
-    sprintf((char*)WiFi_AT_Cmd_Buff,"AT+S.TLSCERT=f_cert,%d\r%s",strlen((const char *)client_cert) - 1, client_cert);
-
-    status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-    if(status == WiFi_MODULE_SUCCESS)
-        {
-            status = USART_Receive_AT_Resp(Process_Event);
-            if(status != WiFi_MODULE_SUCCESS) return status;
-        }
-
-    /*AT+S.TLSCERT=f_key,<size><CR><data>*/
-    Reset_AT_CMD_Buffer();
-    sprintf((char*)WiFi_AT_Cmd_Buff,"AT+S.TLSCERT=f_key,%d\r%s",strlen((const char *)client_key) - 1, client_key);        
-
-    status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-    if(status == WiFi_MODULE_SUCCESS)
-        {
-            status = USART_Receive_AT_Resp(Process_Event);
-            if(status != WiFi_MODULE_SUCCESS) return status;
-        }
-  }
-
-  /*AT+S.TLSDOMAIN=f_domain,<server domain>*/
-  Reset_AT_CMD_Buffer();
-  sprintf((char*)WiFi_AT_Cmd_Buff,"AT+S.TLSDOMAIN=f_domain,%s\r", client_domain);        
-  status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-  if(status == WiFi_MODULE_SUCCESS)
-  {
-    status = USART_Receive_AT_Resp(Process_Event);
-    if(status != WiFi_MODULE_SUCCESS) return status;
-  }  
- 
-  return status; 
-}
-
-/**
-* @brief  wifi_socket_client_open
-*         Open a network socket
-* @param  Hostname hostname to connect to
-*         portnumber portnumber of the Host to connect to
-*         protocol tcp or udp protocol
-*         sock_id socket id of the opened socket returned to the user
-* @retval WiFi_Status_t : return status of socket open request
-*/
-WiFi_Status_t wifi_socket_client_open(uint8_t * hostname, uint32_t port_number, uint8_t * protocol, uint8_t * sock_id) 
-{
-  WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-
-  Queue_Client_Open_Event(hostname,port_number,protocol);
-  status = USART_Receive_AT_Resp(Process_Event);
-
-  *sock_id = Socket_Open_ID; //return the socket id to the user
-
-  return status; 
-}
-
-/**
-* @brief  Open_Serial_Port
-*         Open a network socket
-* @param  None
-* @retval WiFi_Status_t : Wifi status
-*/
-WiFi_Status_t Open_Serial_Port()
-{
-  WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-  /* AT+S.SOCKOS=2<cr> */
-  Reset_AT_CMD_Buffer();
-  //sprintf((char*)WiFi_AT_Cmd_Buff,"\rAT+S.SOCKOS=%d\r",SerialPortNo);        
-  status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-
-  if(status==WiFi_MODULE_SUCCESS)
-  {
-   status = USART_Receive_AT_Resp(Process_Event); 
-  }
-  return status;
-}
-
-/**
-* @brief  wifi_socket_client_write
-*         Write len bytes of data to socket
-* @param  sock_id socket ID of the socket to write to
-*         DataLength: data length to send
-*         pData : pointer of data buffer to be written
-* @retval WiFi_Status_t : return status of socket write request
-*/
-WiFi_Status_t wifi_socket_client_write(uint8_t sock_id, uint16_t DataLength, char * pData)
-{
-  /* AT+S.SOCKW=00,11<cr> */
-  WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-
-  //Check if sock_id is open
-  if(!open_sockets[sock_id])
-    return WiFi_NOT_READY;
-
-  if(DataLength>=1021 || DataLength<=0)
-    return WiFi_NOT_SUPPORTED;
-
-  Queue_Client_Write_Event(sock_id,DataLength,pData);
-  status = USART_Receive_AT_Resp(Process_Event);
-  return status;
-}
-
-/**
-* @brief  Socket_Read
-*         Return len bytes of data from socket
-* @param  DataLength: data length to read
-* @retval WiFi_Status_t : return status of socket read request
-*/
-WiFi_Status_t Socket_Read(uint16_t DataLength)
-{
-  /* AT+S.SOCKR=01,12<cr> */
-  WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-  wait_for_command_mode();
-
-  /* AT+S.SOCKON=myserver,1234,t<cr> */
-  sprintf((char*)WiFi_AT_Cmd_Buff,AT_SOCKET_READ,sockon_query_id,DataLength);
-  status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-  if(status == WiFi_MODULE_SUCCESS)
-  {
-    if(status_flag.stop_event_dequeue == WIFI_FALSE)
-        status_flag.stop_event_dequeue = WIFI_TRUE;
-    SockON_Data_Length = DataLength;
-    status_flag.enable_sock_read = WIFI_TRUE;
-    process_buffer_index =5;
-    status_flag.enable_receive_data_chunk = WIFI_TRUE;
-    WiFi_Module_State = Process_Event;
-    status_flag.Set_AT_Cmd_Response_False = WIFI_TRUE;
-    memset(UserDataBuff, 0x00, MAX_BUFFER_GLOBAL);
-  }
-  return status;
-}
-
-/**
-* @brief  wifi_socket_client_close
-*         The SOCKC command allows to close socket
-* @param  sock_close_id the socket ID of the socket which needs to be closed.
-* @retval WiFi_Status_t : return status of socket close request
-*/
-WiFi_Status_t wifi_socket_client_close(uint8_t sock_close_id)
-{
-  WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-  
-  if(open_sockets[sock_close_id])
-  {
-    Queue_Client_Close_Event(sock_close_id);
-    return status; 
-  }
-  else
-    return WiFi_MODULE_ERROR;
-  
-}
-
-/**
-* @brief  Socket_Pending_Data
-*         Query pending data.It will returns the number of bytes of data waiting on socket
-* @param None
-* @retval uint8_t :number of bytes of data waiting on socket
-*/
-void Socket_Pending_Data()
-{
-  WiFi_Status_t status = WiFi_MODULE_SUCCESS;
- 
-  /* AT+S.SOCKQ=01<cr> */
-  Reset_AT_CMD_Buffer();
-
-  wait_for_command_mode();
-
-  if(open_sockets[sockon_query_id])
-  {
-      if(status_flag.stop_event_dequeue == WIFI_FALSE)
-    status_flag.stop_event_dequeue = WIFI_TRUE;
-  
-  sprintf((char*)WiFi_AT_Cmd_Buff,AT_QUERY_PENDING_DATA,sockon_query_id);        
-  status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-  if(status==WiFi_MODULE_SUCCESS)
-  {
-    /* EQ. Set state to Process_Event */
-    WiFi_Module_State = Process_Event;
-    status_flag.Set_AT_Cmd_Response_False = WIFI_TRUE;
-  }  
-}
-}
-
-/**
-* @brief  wifi_socket_server_open
-*         Open a Server socket
-* @param  None
-* @retval WiFi_Status_t : return status of server socket request
-*/
-WiFi_Status_t wifi_socket_server_open(uint32_t port_number, uint8_t * protocol) 
-{
-WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-Reset_AT_CMD_Buffer();
-
-/* AT+S.SOCKD=portNo,t<cr> */  
-sprintf((char*)WiFi_AT_Cmd_Buff,AT_SERVER_SOCKET_OPEN,(int)port_number,protocol);        
-status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-if(status == WiFi_MODULE_SUCCESS)
-{
-status = USART_Receive_AT_Resp(Process_Event);
-}
-return status; 
-}
-
-/**
-* @brief  wifi_socket_server_write
-*         Write to a Server socket
-* @param  None
-* @retval WiFi_Status_t : return status of server socket request
-*/
-WiFi_Status_t wifi_socket_server_write(uint16_t DataLength,char * pData) 
-{
-WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-/*Can only write if there is a client connected*/
-if(!wifi_client_connected)
-{
-return WiFi_NOT_READY;
-}
- __disable_irq();
-
-status_flag.do_not_reset_push_WIFI_event = WIFI_TRUE;
-status_flag.prevent_push_WIFI_event = WIFI_TRUE;
-__enable_irq();
-
-while(status_flag.sock_read_ongoing || WIND64_count!= 0)//wait till any pending data is read
-{
-    asm("NOP");
-}
-
-wait_for_command_mode();
-
-/*to make sure that by default the mode is not switched to command mode from data mode*/
-status_flag.switch_by_default_to_command_mode = WIFI_FALSE;
-
-/*Switch to Data Mode first*/
-if(!status_flag.data_mode)
-{
-WiFi_switch_to_data_mode();//switch by default
-while(!status_flag.data_mode)
-{
-  //Wait till data_mode is active
-    asm("NOP");
-}
-}  
-
-/*Write the data on the uart*/
-/*if(HAL_UART_Transmit(&UartWiFiHandle, (uint8_t *)pData, DataLength,1000)!= HAL_OK)
-{
-Error_Handler();
-return WiFi_HAL_UART_ERROR;
-}*/
-//HAL_Delay(100);//Wait for tx before switching back to command mode
-
-/*Switch back to Command Mode*/
-if(!status_flag.command_mode)
-{
-WiFi_switch_to_command_mode();//switch by default
-while(!status_flag.command_mode)
-{
-  //Wait till command_mode is active
-    asm("NOP");
-}
-}
-
-status_flag.switch_by_default_to_command_mode = WIFI_TRUE;  /*back to default behaviour*/
-
-__disable_irq();
-status_flag.prevent_push_WIFI_event = WIFI_FALSE;
-status_flag.do_not_reset_push_WIFI_event = WIFI_FALSE;
-__enable_irq();
-
-return status;
-}
-
-/**
-* @brief  Server Socket Close
-*         Close a Server socket
-* @param  None
-* @retval WiFi_Status_t : return status of server socket request
-*/
-WiFi_Status_t wifi_socket_server_close() 
-{
-WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-Reset_AT_CMD_Buffer();
-
-/* AT+S.SOCKD=portNo,t<cr> */  
-sprintf((char*)WiFi_AT_Cmd_Buff,AT_SERVER_SOCKET_CLOSE);        
-status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-if(status == WiFi_MODULE_SUCCESS)
-{
-status = USART_Receive_AT_Resp(Process_Event);
-}
-
-return status; 
-}
-
-
-/**
-* @brief  wait_for_command_mode
-*         Waits till we are in command mode
-* @param  None
-* @retval None
-*/
-void wait_for_command_mode(void)
-{
-while(!status_flag.command_mode)
-    {
-      //Make sure we are in command mode, ideally we should do this in every User API?
-        asm("NOP");
-    }
-}
-
-
-/**
-* @brief  wifi_file_delete
-*         Delete a file
-* @param  pFileName : File Name to be deleted
-* @retval WiFi_Status_t : return status of delete file request
-*/
-WiFi_Status_t wifi_file_delete(char * pFileName)
-{
-/* AT+S.FSD: delete an existing file */  
-WiFi_Status_t status = WiFi_MODULE_SUCCESS;  
-Reset_AT_CMD_Buffer(); 
-/* AT+S.FSL */
-sprintf((char*)WiFi_AT_Cmd_Buff,AT_DELETE_FILE,pFileName);  
-
-status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-if(status == WiFi_MODULE_SUCCESS)
-{
-status = USART_Receive_AT_Resp(Process_Event);
-}
-return status;
-}
-
-/**
-* @brief  wifi_file_list
-*         List existing filename
-* @param  None
-* @retval WiFi_Status_t : return status of AT cmd request
-*/
-
-WiFi_Status_t wifi_file_list()
-{
-WiFi_Status_t status = WiFi_MODULE_SUCCESS;  
-Queue_Wifi_File_Event(NULL,NULL,0);
-status = USART_Receive_AT_Resp(Process_Event);
-return status;
-}
-
-/**
-* @brief  wifi_file_show
-*         Print the contents of an existing file
-* @param  pFileName : pinter of file name
-* @retval WiFi_Status_t : return status of AT cmd request
-*/
-
-WiFi_Status_t wifi_file_show(uint8_t * pFileName)
-{
-if(pFileName==NULL)
-    return WiFi_MODULE_ERROR;
-
-WiFi_Status_t status = WiFi_MODULE_SUCCESS;  
-Queue_Wifi_File_Event(NULL,pFileName,0);
-status = USART_Receive_AT_Resp(Process_Event);
-return status; 
-}
-
-/**
-* @brief  wifi_file_create
-*         Create file for HTTP server
-* @param  pFileName : pointer of file name to be created
-*         alength   : length of file
-* @retval WiFi_Status_t : return status of AT cmd request
-*/
-
-WiFi_Status_t wifi_file_create(char *pFileName, uint16_t alength, char * pUserFileBuff)
-{
-WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-
-if(alength >1024)
-return WiFi_AT_FILE_LENGTH_ERROR;
-
-Reset_AT_CMD_Buffer();
-
-/* AT+S.FSC=/index.html  */
-sprintf((char*)WiFi_AT_Cmd_Buff, AT_CREATE_NEW_HTML_FILE, pFileName, alength);
-
-status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-if(status == WiFi_MODULE_SUCCESS)
-{
-status = USART_Receive_AT_Resp(Process_Event);
-int len = strlen(pUserFileBuff);
-
-if(len >= 1024)
-   return WiFi_AT_FILE_LENGTH_ERROR;
-
-/* AT+S.FSA=/index.html  */
-sprintf((char*)WiFi_AT_Cmd_Buff,AT_APPEND_FILE,pFileName,len);
-
-status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-if(status == WiFi_MODULE_SUCCESS)
-{
-  memset(WiFi_AT_Cmd_Buff, 0x00, sizeof WiFi_AT_Cmd_Buff);
-  memcpy((char*)(char*)WiFi_AT_Cmd_Buff, (char*) pUserFileBuff,len);
-  WiFi_AT_Cmd_Buff[len+1]='\r';
-  status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-  if(status == WiFi_MODULE_SUCCESS)
-  {
-    status = USART_Receive_AT_Resp(Process_Event);
-  }
-}
-}
-return status; 
-}
-
-/**
-* @brief  wifi_http_get
-*         Issue an HTTP GET of the given path to the specified host
-* @param  None
-* @retval WiFi_Status_t : return status of AT cmd response
-*/
-
-WiFi_Status_t wifi_http_get(uint8_t * hostname, uint8_t * path, uint32_t port_number)
-{
-if(hostname == NULL || path == NULL)
-return WiFi_MODULE_ERROR;
-
-WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-
-while(status_flag.sock_read_ongoing || WIND64_count!= 0); //wait till any pending data is read
-{
-    asm("NOP");
-}
-
-// AT+S.HTTPGET=host.example.com,/index.html, port_number<cr>
-//Queue the http-get command
-Queue_Http_Event(hostname, path, port_number,NULL);
-
-//Make the user wait anyway
-status = USART_Receive_AT_Resp(Process_Event);
-
-return status; 
-
-}
-
-/**
-* @brief  wifi_http_post
-*         Issue an HTTP GET of the given path to the specified host
-* @param  None
-* @retval WiFi_Status_t : status of Http Post Request
-*/
-
-WiFi_Status_t wifi_http_post(uint8_t * pURL_path)
-{
-if(pURL_path == NULL)
-return WiFi_MODULE_ERROR;
-
-WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-
-while(status_flag.sock_read_ongoing || WIND64_count!= 0);//wait till any pending data is read
-{
-    asm("NOP");
-}
-
-// AT+S.HTTPPOST = posttestserver.com,/post.php,name=demo&email=mymail&subject=subj&body=message<cr>
-Queue_Http_Event(NULL,NULL,0,pURL_path);
-
-//Make the user wait anyway
-status = USART_Receive_AT_Resp(Process_Event);
-return status;
-}
-
-/**
-* @brief  wifi_file_image_create
-*         Downloads an updated file system via a single HTTP GET request to the
-*         named host and path.
-* @param  None
-* @retval WiFi_Status_t
-*/
-WiFi_Status_t wifi_file_image_create(uint8_t * pHostName, uint8_t * pFileName, uint32_t port_number)
-{
-if(pHostName == NULL || pFileName == NULL ||  port_number ==0)
-return WiFi_MODULE_ERROR;
-
-WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-Queue_Wifi_File_Event(pHostName,pFileName,port_number);
-status = USART_Receive_AT_Resp(Process_Event);
-
-/* Soft reset the module */
-SET_Power_State(PowerSave_State);
-return status;
-}
-
-/**
-* @brief  wifi_file_erase_external_flash
-*         This API allows to erase the content of the external flash
-* @param  None
-* @retval WiFi_Status_t
-*/
-WiFi_Status_t wifi_file_erase_external_flash()
-{
-WiFi_Status_t status = WiFi_MODULE_SUCCESS;  
-
-Reset_AT_CMD_Buffer();
-ResetBuffer();
-
-/* AT+S.HTTPDFSERASE */
-sprintf((char*)WiFi_AT_Cmd_Buff,AT_ERASE_FLASH_MEMORY);  
-status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-
-/* Soft reset the module */
-SET_Power_State(PowerSave_State);
-
-return status;
-}
-
-/**
-* @brief  wifi_fw_update
-*         Issue an HTTP GET of the given path to the specified host and get the firmware updated
-* @param  None
-* @retval None
-*/
-WiFi_Status_t wifi_fw_update(uint8_t * hostname, uint8_t * filename_path, uint32_t port_number)
-{
-WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-Queue_Wifi_FW_Update_Event(hostname,filename_path,port_number);
-status = USART_Receive_AT_Resp(Process_Event);
-/* Soft reset the module */
-SET_Power_State(PowerSave_State);
-return status;
-}
-
-/**
-* @brief  wifi_network_scan
-*         Performs an immediate scan for available network
-* @param  None
-* @retval WiFi_Status_t : WiFi status error
-*/
-WiFi_Status_t wifi_network_scan(wifi_scan *scan_result, uint16_t max_scan_number)
-{
-WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-wifi_scanned_list = scan_result;
-if(max_scan_number>MAX_WIFI_SCAN_NETWORK)
-return WiFi_NOT_SUPPORTED;
-user_scan_number = max_scan_number;
-
-if(status_flag.Scan_Ongoing)
-{
-return WiFi_AT_CMD_BUSY;
-}
-
-status_flag.Scan_Ongoing = WIFI_TRUE;
-
-#if 0   //TBD
-if(WiFi_Param.WiFi_Module_State == WiFi_MiniAP_MODE)
-return WiFi_NOT_SUPPORTED;
-#endif  
-
-/* AT+S.SCAN: performs an immediate scan for available networks */
-Reset_AT_CMD_Buffer();
-sprintf((char*)WiFi_AT_Cmd_Buff,AT_WiFi_SCAN);  
-status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-if(status == WiFi_MODULE_SUCCESS)
-{
-status = USART_Receive_AT_Resp(Process_Event);
-}
-
-/*At this point we have WiFi_Scan_Buffer filled with RSSI and SSID values*/
-return status;
-}
-
-/**
-* @brief  Set_MiniAP_Mode
-*         Configure Wi-Fi module in AP mode.
-      MiniAP is always configured in open mode (WEP not supported)
-* @param  None
-* @retval WiFi_Status_t : status of AT cmd 
-*/
-WiFi_Status_t wifi_ap_start(uint8_t * ssid, uint8_t channel_num)
-{
-WiFi_Status_t status = WiFi_MODULE_SUCCESS;  
-
-/* Set the SSID : AT+S.SSIDTXT=<SSID>*/    
-//if(ssid)
-  status = SET_SSID((char*)ssid);
-
-
-if(status != WiFi_MODULE_SUCCESS)
-return WiFi_SSID_ERROR;
-
-/* Set the network privacy mode : AT+S.SCFG=wifi_priv_mode,0*/ 
-status = SET_Configuration_Value(WIFI_PRIV_MODE, None);
-if(status != WiFi_MODULE_SUCCESS)
-return WiFi_CONFIG_ERROR;
-
-/* Set the network mode (1 = STA, 2 = IBSS, 3 = MiniAP) :: AT+S.SCFG=wifi_mode,3*/  
-status = SET_Configuration_Value(WIFI_MODE, WiFi_MiniAP_MODE);
-if(status != WiFi_MODULE_SUCCESS)
-return WiFi_CONFIG_ERROR;
-
-/* Set the channel number */  
-status = SET_Configuration_Value(WIFI_CHANNEL_NUMBER, channel_num);
-if(status != WiFi_MODULE_SUCCESS)
-return WiFi_CONFIG_ERROR; 
-
-/* Save the settings on the flash memory : AT&W*/ 
-Save_Current_Setting();
-
-status_flag.WiFi_Configuration_Done = WIFI_TRUE;
-WiFi_Module_State = Process_Event;
-
-/* Soft reset the module */
-SET_Power_State(PowerSave_State);
-
-return status; 
-}
-
-
-/**
-* @brief  SET_WiFi_STA_Mode
-*         Configure Wi-Fi module in STA mode
-* @param  SSID     : SSID name
-* @param  sec_key  : security key
-* @param  priv_mode : network privecy mode
-* @retval WiFi_Status_t : status of AT cmd 
-*/
-WiFi_Status_t wifi_connect(char * ssid, char * sec_key, WiFi_Priv_Mode priv_mode)
-{
-WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-if(status_flag.AT_Cmd_Ongoing == WIFI_FALSE)
-status_flag.AT_Cmd_Ongoing = WIFI_TRUE;
-else 
-{
-return WiFi_AT_CMD_BUSY;
-}
-
-if(sec_key) {
-status = SET_WiFi_SecKey((char*)sec_key);
-if(status != WiFi_MODULE_SUCCESS)
-    return WiFi_SecKey_ERROR;
-}
-
-/* Set the SSID : AT+S.SSIDTXT=<SSID>*/    
-
-  status = SET_SSID((char*)ssid);
-
-if(status != WiFi_MODULE_SUCCESS)
-return WiFi_SSID_ERROR;
-
-/* Set the network privacy mode : AT+S.SCFG=wifi_priv_mode,2*/ 
-status = SET_Configuration_Value(WIFI_PRIV_MODE, priv_mode);
-if(status != WiFi_MODULE_SUCCESS)
-return WiFi_CONFIG_ERROR;
-
-/* Set the network mode (1 = STA, 2 = IBSS, 3 = MiniAP) :: AT+S.SCFG=wifi_mode,1*/  
-status = SET_Configuration_Value(WIFI_MODE, WiFi_STA_MODE);
-if(status != WiFi_MODULE_SUCCESS)
-return WiFi_CONFIG_ERROR;
-
-/* Save the settings on the flash memory : AT&W*/ 
-Save_Current_Setting();
-
-status_flag.WiFi_Configuration_Done = WIFI_TRUE;
-//WiFi_Module_State = WiFi_Process_Event;
-
-/* Soft reset the module */
-SET_Power_State(PowerSave_State);
-
-status_flag.AT_Cmd_Ongoing = WIFI_FALSE;
-
-return status; 
-}
-
-/**
-* @brief  SET_WiFi_IBSS_Mode
-*         Configure Wi-Fi module in IBSS mode
-* @param  SSID     : SSID name
-* @param  priv_mode : network privecy mode
-* @retval WiFi_Status_t : status of AT cmd
-*/
-WiFi_Status_t wifi_adhoc_create(uint8_t * ssid, WiFi_Priv_Mode priv_mode)
-{
-WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-
-Attention_Cmd();
-/* Set the SSID : AT+S.SSIDTXT=<SSID>*/    
-status = SET_SSID((char*)ssid);  
-if(status != WiFi_MODULE_SUCCESS)
-return WiFi_SSID_ERROR;
-
-/* Set the network privacy mode : AT+S.SCFG=wifi_priv_mode,0*/ 
-status = SET_Configuration_Value(WIFI_PRIV_MODE, priv_mode);
-if(status != WiFi_MODULE_SUCCESS)
-  return WiFi_CONFIG_ERROR;
-
-
-/* Set the network mode (1 = STA, 2 = IBSS, 3 = MiniAP) :: AT+S.SCFG=wifi_mode,2*/  
-status = SET_Configuration_Value(WIFI_MODE, WiFi_IBSS_MODE);
-if(status != WiFi_MODULE_SUCCESS)
-  return WiFi_CONFIG_ERROR;
-
-/* Set IP address */
-status = SET_Configuration_Addr(WIFI_IP_ADDRESS, WIFI_IBSS_IP_ADDR);
-if(status != WiFi_MODULE_SUCCESS)
-  return WiFi_CONFIG_ERROR;
-
-/* Set IP default gateway */
-status = SET_Configuration_Addr(WIFI_IP_DEFAULT_GATEWAY, WIFI_IBSS_DEFAULT_GATEWAY);
-if(status != WiFi_MODULE_SUCCESS)
-  return WiFi_CONFIG_ERROR;
-
-
-/* Set IP DNS */
-status = SET_Configuration_Addr(WIFI_IP_DNS, WIFI_IBSS_IP_DNS_ADDR);
-if(status != WiFi_MODULE_SUCCESS)
-  return WiFi_CONFIG_ERROR;
-
-/* Set IP netmask */
-status = SET_Configuration_Addr(WIFI_IP_NETMASK, WIFI_IBSS_IP_MASK);
-if(status != WiFi_MODULE_SUCCESS)
-  return WiFi_CONFIG_ERROR;
-
-/* Turn OFF the DHCP */
-SET_Configuration_Value(IP_USE_DHCP_SERVER, WIFI_IP_USE_DHCP);   
-if(status != WiFi_MODULE_SUCCESS)
-  return WiFi_CONFIG_ERROR;
-
-/* Save the settings on the flash memory : AT&W*/ 
-Save_Current_Setting();
-
-/* Soft reset the module */
-SET_Power_State(PowerSave_State); 
-return status;
-}
-
-
-/**
-* @brief  wifi_standby
-*         Configured WiFi module to enter standby
-* @param  arg_standby_time: standby time
-* @retval WiFi_Status_t : status of AT cmd
-*/
-WiFi_Status_t wifi_standby(uint8_t arg_standby_time)
-{
-/*
-For Standby, the presence of Jumpers on JP4 and JP3 has the following behaviour:
-JP3 (middle and bottom): prevents standby and immediately wakes-up module
-JP3 (middle and top): no effect on standby
-JP4 (middle and right): prevents wakeup and standby runs forever
-JP4 (middle and left): no effect on standby
-*/
-
-WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-
-/*if(arg_standby_time<2)
-return WiFi_NOT_SUPPORTED;*/
-  
-SET_Configuration_Value(WIFI_SLEEP_ENABLED, 0);  
-SET_Configuration_Value(WIFI_STANDBY_ENABLED, 1);  
-status = SET_Configuration_Value(WIFI_STANDBY_TIME, arg_standby_time);  
-
-/* save current setting in flash */
-Save_Current_Setting();
-
-/* AT : send AT command */
-sprintf((char*)WiFi_AT_Cmd_Buff,AT_SET_POWER_STATE,1);  //cfun=4
-WiFi_Module_State = Process_Event; //make sure the WiFi module is in this state to receive WINDS after wakeup
-status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-
-if(status == WiFi_MODULE_SUCCESS)//if transmit is success, prepare for resume
-{
-/*
-status_flag.AT_Cmd_Processing = WIFI_TRUE;//We do not want the next UART data_byte fetch to be done
-HAL_NVIC_DisableIRQ(USARTx_IRQn);//Disable UART IRQ  
-status_flag.Standby_Timer_Running=WIFI_TRUE;  
-printf("\r\nGoing into Standby Mode...\r\n");*/
-}
-
-return status;
-
-}
-
-/**
-* @brief  wifi_wakeup
-*         wakeup the module from sleep by setting the GPIO6 through PC13
-*         or allow it to go to sleep
-*         Jumper needed on JP4
-* @param  wakeup wakeup (WIFI_TRUE) or allow sleep(WIFI_FALSE)
-* @retval WiFi_Status_t : status of function call
-*/
-WiFi_Status_t wifi_wakeup(wifi_bool wakeup)
-{
-    WiFi_Status_t status = WiFi_MODULE_SUCCESS;    
-    
-    if(wakeup)
-        callSpwfSADevice_wakeup(spwf_device_class, 1);
-    else
-        callSpwfSADevice_wakeup(spwf_device_class, 0);
-    wait_ms(100);
-    return status;
-}
-
-
-/**
-* @brief  wifi_disconnect
-*         disconnect the module from any AP
-* @param  None
-* @retval WiFi_Status_t : status of AT cmd
-*/
-WiFi_Status_t wifi_disconnect(void)
-{
-WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-
-/* Set wifi_mode to idle*/
-status = SET_Configuration_Value(WIFI_MODE, WiFi_IDLE_MODE);
-
-/*If module was connected, reset the status*/
-if(wifi_connected == 1)
-  {
-    wifi_connected = 0;//this will allow the TIM handler to make the callback on connection(WiFiUp)
-  }  
-
-/* save current setting in flash */
-Save_Current_Setting();
-
-/* Soft reset the module */
-status = SET_Power_State(PowerSave_State);//CFUN=1
-   
-return status;
-}
-
-/**
-* @brief  wifi_enable
-*         Enable/Disable the Wi-Fi interface
-* @param  enable enable Wi-Fi (WIFI_TRUE) disable Wi-Fi (WIFI_FALSE)
-* @retval WiFi_Status_t : status of AT cmd
-*/
-WiFi_Status_t wifi_enable(wifi_bool enable)
-{
-WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-
-/* Enable or Disable wifi interface*/  
-Reset_AT_CMD_Buffer();  
-sprintf((char*)WiFi_AT_Cmd_Buff,AT_WIFI_ENABLE, enable);  
-
-/*if(HAL_UART_Transmit(&UartWiFiHandle, (uint8_t *)WiFi_AT_Cmd_Buff, strlen((char*)WiFi_AT_Cmd_Buff),1000)!= HAL_OK)
-{
-Error_Handler();
-#if DEBUG_PRINT
-printf("HAL_UART_Transmit Error");
-#endif
-return WiFi_HAL_UART_ERROR;
-} */ 
-
-status = USART_Receive_AT_Resp(Process_Event);  
-
-//wait for power down/hw started
-if(enable)
-while(status_flag.WiFi_Enabled != WIFI_TRUE) 
-{
-    asm("NOP");
-}
-else
-while(status_flag.WiFi_Enabled != WIFI_FALSE) 
-{
-    asm("NOP");
-}
-
-return status;
-    
-}
-
-
-
-/**
-* @brief  wifi_restore
-*         Restore the Wi-Fi with default values.
-* @param  None
-* @retval WiFi_Status_t : status of AT cmd
-*/
-WiFi_Status_t wifi_restore()
-{
-WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-
-/* Restore default setting*/
-Restore_Default_Setting();  
-
-/* Set wifi_mode to idle*/
-SET_Configuration_Value(WIFI_MODE, WiFi_IDLE_MODE);
-
-/* set the local echo */
-SET_Configuration_Value(LOCALECHO1, 0);
-
-/* save current setting in flash */
-Save_Current_Setting();
-
-/* Soft reset the module */
-status = SET_Power_State(PowerSave_State);//CFUN=1
-   
-return status;
-}
-
-/*GPIO Configuration Functions*/
-
-/**
-* @brief  wifi_gpio_init
-*         Configure a GPIO pin as in or out with IRQ setting
-* @param  pin GPIO pin number
-* @param  irq configuration of the pin
-* @retval WiFi_Status_t : status of AT cmd
-*/
-uint8_t wifi_gpio_init(GpioPin pin, char* dir, char irq)
-{
-WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-
-/* AT+S.GPIOC=pin,dir,irq */
-Reset_AT_CMD_Buffer();
-
-memset(WiFi_AT_Cmd_Buff, 0x00, sizeof WiFi_AT_Cmd_Buff);
-
-if(irq!=GPIO_Off)
-  sprintf((char*)WiFi_AT_Cmd_Buff,"AT+S.GPIOC=%d,%s,%c\r", pin, dir, irq);
-else
-  sprintf((char*)WiFi_AT_Cmd_Buff,"AT+S.GPIOC=%d,%s\r", pin, dir);
-
-status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-if(status == WiFi_MODULE_SUCCESS)
-  {
-    status = USART_Receive_AT_Resp(Process_Event);
-  }
-
-
-return status; 
-
-}
-
-/**
-* @brief  wifi_gpio_read
-*         Read the configuration of a GPIO pin
-* @param  pin GPIO pin number
-* @param  val value returned
-* @param  dir configuration direction returned
-* @retval WiFi_Status_t : status of AT cmd
-*/
-uint8_t wifi_gpio_read(GpioPin pin, uint8_t *val, uint8_t *dir)
-{
-WiFi_Status_t status = WiFi_MODULE_SUCCESS;    
-
-/* AT+S.GPIOR=pin */
-Reset_AT_CMD_Buffer();  
-
-sprintf((char*)WiFi_AT_Cmd_Buff,"AT+S.GPIOR=%d\r", pin);
-
-status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-if(status == WiFi_MODULE_SUCCESS)
-  {
-    status = USART_Receive_AT_Resp(Process_Event);
-  }
-*val = gpio_value;
-*dir = gpio_direc;
-
-return status;
-}
-
-/**
-* @brief  wifi_gpio_write
-*         Read the value of a GPIO pin
-* @param  pin GPIO pin number
-* @param  val value to be configured
-* @retval WiFi_Status_t : status of AT cmd
-*/
-uint8_t wifi_gpio_write(GpioPin pin, GpioWriteValue value)
-{
-WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-
-/* AT+S.GPIOW=pin,value */
-Reset_AT_CMD_Buffer(); 
-
-sprintf((char*)WiFi_AT_Cmd_Buff,"AT+S.GPIOW=%d,%d\r", pin, value);
-
-status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-if(status == WiFi_MODULE_SUCCESS)
-  {
-    status = USART_Receive_AT_Resp(Process_Event);
-  }
-
-return status;
-}
-
-void UART_Configuration(uint32_t baud_rate)
-{
-}
-
-#ifdef USART_PRINT_MSG
-void USART_PRINT_MSG_Configuration(uint32_t baud_rate)
-{
-}
-#endif
-
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */ 
-
-
-/**
-  * @}
-  */ 
-
-/******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/
-
-
--- a/X_NUCLEO_IDW01M1/spwf/wifi_module.c	Wed Apr 13 10:14:35 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3427 +0,0 @@
-/**
- ******************************************************************************
- * @file    wifi_module.c
- * @author  Central LAB
- * @version V2.0.0
- * @date    10-February-2016
- * @brief   Enable Wi-Fi functionality using AT cmd set
- ******************************************************************************
- * @attention
- *
- * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *   1. Redistributions of source code must retain the above copyright notice,
- *      this list of conditions and the following disclaimer.
- *   2. Redistributions in binary form must reproduce the above copyright notice,
- *      this list of conditions and the following disclaimer in the documentation
- *      and/or other materials provided with the distribution.
- *   3. Neither the name of STMicroelectronics nor the names of its contributors
- *      may be used to endorse or promote products derived from this software
- *      without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- ******************************************************************************
- */
-/* Includes ------------------------------------------------------------------*/
-#include "wifi_module.h"
-//#include "stm32_spwf_wifi.h"
-#include "ring_buffer.h"
-#include "stdio.h"
-#include "string.h"
-#include "event_buffer.h"
-#include "device.h"
-#include "wait_api.h"
-#include <stddef.h>
-
-   
-/** @addtogroup MIDDLEWARES
-* @{
-*/ 
-
-
-/** @defgroup  NUCLEO_WIFI_MODULE
-  * @brief Wi-Fi driver modules
-  * @{
-  */
-
-
-/** @defgroup NUCLEO_WIFI_MODULE_Private_Defines
-  * @{
-  */
-
-
-/**
-  * @}
-  */
-
-
-/** @addtogroup NUCLEO_WIFI_MODULE_Private_Variables
-  * @{
-  */
-/* Private variables ---------------------------------------------------------*/
-
-/*All Buffers*/
-//uint8_t WiFi_AT_Cmd_Buff[1024];
-uint8_t process_buffer[MAX_BUFFER_GLOBAL];
-char UserDataBuff[MAX_BUFFER_GLOBAL];
-uint8_t USART_RxBuffer[64];//This buffer is only used in the Init phase (to receive "\r\nOK\r\n")
-char print_msg_buff[MAX_BUFFER_GLOBAL];
-volatile uint8_t ring_buffer[RINGBUF_SIZE];/* Default size for ring buffer */
-
-#ifdef USE_STM32L0XX_NUCLEO
-event_s_TypeDef event_buffer[10];
-#else
-event_s_TypeDef event_buffer[50];
-#endif
-
-volatile uint8_t pop_buffer[MAX_BUFFER_GLOBAL];
-volatile uint8_t prefetch_buffer[20];
-uint8_t uart_byte[1];
-buffer_td big_buff;
-buffer_e event_buff;
-event_s_TypeDef element;
-uint8_t HTTP_Runway_Buff[6];//Used to store the last 6 bytes in between User Callbacks during HTTP tx
-wifi_scan *wifi_scanned_list; //[MAX_WIFI_SCAN_NETWORK];
-
-volatile Wifi_Status_Var status_flag;
-
-uint32_t wind64_DQ_wait = 0;
-uint32_t UserDataBuff_index;
-volatile uint32_t tickcount;
-uint8_t SocketId;
-uint32_t SockON_Data_Len;
-uint32_t Socket_Data_Length =0;
-uint8_t Socket_Open_ID, sockon_query_id,sockon_id_user;
-uint32_t SockON_Data_Length;
-uint8_t enable_pending_data =0;
-
-volatile WiFi_WIND_State_TypeDef WiFi_WIND_State;//describes the current WIND number in processing
-
-uint8_t WiFi_Resp_OK = 0;
-uint32_t number_of_bytes=0;
-uint32_t interim_number_of_bytes=0;
-uint32_t Interim_SockON_Data_Len=0;
-uint32_t bytes_to_be_read = 0;
-uint32_t sock_total_count=0;
-uint32_t sockD_total_count=0;
-uint32_t ip_fragment_count=0;
-uint32_t chunk_size;
-uint32_t message_size;
-uint32_t WIND55_count=0;
-volatile uint32_t WIND64_count=0;
-uint8_t user_scan_number;
-uint32_t pop_queue_length;
-uint32_t pop_buffer_size=0;
-uint32_t process_buffer_index = 5;
-uint32_t epoch_time = 0;
-
-volatile WiFi_AT_CMD_Response_t WiFi_Module_State;
-
-uint8_t *WiFi_Scan_Buffer;
-uint8_t * curr_hostname;
-uint8_t * curr_path;
-uint8_t * curr_pURL;
-uint8_t * curr_protocol;
-uint32_t  curr_port_number;
-char * curr_data;
-uint8_t curr_sockID;
-uint8_t * curr_filename;
-uint16_t curr_DataLength;
-uint16_t sock_server_write_datalength;
-char *sock_server_write_pdata;
-
-uint8_t socket_closed_id_callback;
-uint8_t remote_socket_closed_id;
-uint8_t client_socket_close_id;
-volatile uint8_t wifi_ready = WIFI_FALSE;//Set once if wifi is ready for first time
-volatile uint8_t wifi_connected = WIFI_FALSE;//Set once if wifi is connected for first time
-volatile uint8_t wifi_client_connected = 0;//Set once if client is connected
-volatile uint8_t wifi_client_disconnected = 0;//Set once if client is dis-connected
-uint8_t gpio_value, gpio_direc, get_cfg_value[64];
-WiFi_Status_t user_error_code = WiFi_MODULE_SUCCESS;
-
-uint8_t no_of_open_client_sockets = 0;
-wifi_bool open_sockets[8];              //Max open sockets allowed is 8. Each array element depicts one socket (true=open, false=closed)
-uint8_t client_MAC_address[17];//current client MAC address store
-
-uint8_t enable_uart_byte_data_receive=1;
-uint8_t uart_data_receive_ready=1;
-
-WiFi_Status_t AT_RESPONSE = WiFi_AT_CMD_RESP_ERROR;
-uint32_t sleep_count = 0;
-uint32_t standby_time = 0;
-uint8_t scanned_ssids = 0;
-char * prefetch_str;
-
-#if defined (USE_STM32F4XX_NUCLEO) || (USE_STM32L4XX_NUCLEO)
-uint8_t WiFi_AT_Cmd_Buff[2048];
-#else
-uint8_t WiFi_AT_Cmd_Buff[1024];
-#endif
-
-#ifdef USART_PRINT_MSG
-#define printf(arg)    {sprintf((char*)print_msg_buff,arg);   \
-HAL_UART_Transmit(&UartMsgHandle, (uint8_t*)print_msg_buff, strlen(print_msg_buff), 1000);}
-#endif  
-
-void * spwf_dev_;
-
-extern void callSpwfSADevice_debug(void* object, const char * string);
-extern void callSpwfSADevice_attach(wifi_bool attach); 
- 
-#if defined (__CC_ARM)
-size_t strnlen (const char* s, size_t maxlen);
-
-size_t strnlen (const char* s, size_t maxlen)
-    {
-    size_t len = 0;
-
-    while ((len <= maxlen) && (*s))
-        {
-            s++;
-            len++;
-        }
-
-    return len;
-    }
-#endif
-
-event_s_TypeDef event_s;
-event_s_TypeDef * event_pop_s;
-
-// [DLI]
-#ifdef WIFI_USE_VCOM
-
-uint8_t console_listen_char[1];
-uint8_t console_input_char[1];
-uint8_t console_send_char[1];
-uint8_t console_echo_char[1];
-uint8_t console_send_ready = 0;
-uint8_t console_echo_ready = 1;
-uint8_t console_push_ready = 0;
-
-// Virtual-COM UART
-void console_input() {
-  //HAL_UART_Receive_IT(&UartMsgHandle, (uint8_t *)console_input_char, 1);
-}
-
-void wifi_vcom() {
-  
-  uint8_t * temp;
-  
-  if (console_push_ready == 1) {
-     push_buffer(&big_buff, uart_byte);
-     console_push_ready = 0;
-     //HAL_UART_Receive_IT(&UartWiFiHandle, (uint8_t *)uart_byte, 1);
-  }
- if(console_echo_ready == 0) {
-    temp = pop_buffer_queue(&big_buff);
-    if(temp != NULL) {
-      console_echo_ready = 1;
-      //HAL_UART_Transmit_IT(&UartMsgHandle, temp, 1);
-    }
- }
-}
-
-#endif
-
-/**
-  * @}
-  */
-  
-/** @defgroup NUCLEO_WIFI_MODULE_Private_Functions
-  * @{
-  */
-
-/**
-    *Changed/introduced functions for MBED implementation:
-
-- void Wifi_TIM_Handler(void); - new fn 
-- void Rx_irq_handler(void); - new fn - in place of HAL_UART_RxCpltCallback
-- Receive_Data(); - modified fn
-- void wifi_reset(void) - modified fn
-- void PowerUp_WiFi_Module(void) - modified fn
-- void RX_EXTI_Isr(uint16_t GPIO_Pin) - removed fn
-- void HAL_UART_TxCpltCallback(UART_HandleTypeDef *UartHandleArg) - removed fn
-- void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandleArg) - removed fn
-- void HAL_UART_ErrorCallback(UART_HandleTypeDef *UartHandle) - removed fn
-- WiFi_Status_t USART_Transmit_AT_Cmd(uint16_t size)- modified fn
-*/
-
-
-
-/**
-  * @brief  WiFi_Module_Init
-  *         Initialize wifi module
-  * @param  None
-  * @retval None
-  */
-void WiFi_Module_Init(void)
-{
-#ifdef WIFI_USE_VCOM
-  console_input();
-#else
-  WiFi_Module_State = Process_Event;
-#endif  
-  
-  initialize_status_flags();
-  init(&big_buff, RINGBUF_SIZE);//Init the ring buffer  
-  wifi_ready = 0; //reset to get user callback on HW started
-  wifi_connected = 0; //reset to get user callback on WiFi UP
-  Receive_Data();
-  
-#ifdef USE_STM32L0XX_NUCLEO
-  event_init(&event_buff, 10); //max 15 events can be Q'ed (Event Buffer is of size 15)
-#else
-  event_init(&event_buff, 50); //max 50 events can be Q'ed (Event Buffer is of size 50)
-#endif
-  
-#ifndef WIFI_USE_VCOM
-  Start_Timer();  
-  memset(open_sockets,0x00, 8); //init the open socket array
-        
-#endif
-}
-
-/**
-* @brief  initialize_status_flags
-*         Default Wifi status values
-* @param  None
-* @retval None
-*/
-void initialize_status_flags()
-{
-    status_flag.Single_Digit_Indication = WIFI_FALSE;
-    status_flag.WiFi_Enabled = WIFI_FALSE;
-    status_flag.http_req_pending = WIFI_FALSE;
-    status_flag.WiFi_Configuration_Done = WIFI_FALSE;
-    status_flag.Timer_Running = WIFI_FALSE;
-    status_flag.resume_receive_data = WIFI_FALSE;
-    status_flag.enable_dequeue = WIFI_TRUE;
-    status_flag.stop_event_dequeue = WIFI_FALSE;
-    status_flag.Standby_Timer_Running = WIFI_FALSE;
-    status_flag.trigger_wakeup_callback = WIFI_FALSE;
-    status_flag.Deep_Sleep_Enabled = WIFI_FALSE;
-    status_flag.Standby_Enabled = WIFI_FALSE;
-    status_flag.Low_Power_Enabled = WIFI_FALSE;
-    status_flag.command_mode=WIFI_TRUE;
-    status_flag.data_mode=WIFI_FALSE;
-    status_flag.Scan_Ongoing = WIFI_FALSE;
-    status_flag.AT_Cmd_Ongoing = WIFI_FALSE;
-    status_flag.AT_Cmd_Processing = WIFI_FALSE;
-    status_flag.Uartx_Rx_Processing = WIFI_FALSE;
-    status_flag.Client_Connected = WIFI_FALSE;
-    status_flag.Client_Disconnected = WIFI_FALSE;
-    status_flag.switch_by_default_to_command_mode = WIFI_TRUE;
-    status_flag.start_sock_read = WIFI_FALSE;
-    status_flag.enable_receive_data_chunk = WIFI_FALSE;
-    status_flag.data_pending_sockD=WIFI_FALSE;
-    status_flag.enable_sock_read = WIFI_FALSE;
-    status_flag.enable_query = WIFI_FALSE;
-    status_flag.Set_AT_Cmd_Response_False = WIFI_FALSE;
-    status_flag.enable_fw_update_read = WIFI_FALSE;
-    status_flag.Q_Contains_Message = WIFI_FALSE;
-    status_flag.Q_Contains_Data = WIFI_FALSE;
-    status_flag.enable_receive_http_response = WIFI_FALSE;
-    status_flag.enable_receive_file_response = WIFI_FALSE;
-    status_flag.enable_receive_wifi_scan_response = WIFI_FALSE;
-    status_flag.prevent_push_OK_event = WIFI_FALSE;
-    status_flag.client_socket_close_ongoing = WIFI_FALSE;
-    status_flag.prevent_push_WIFI_event = WIFI_FALSE;
-    status_flag.sock_read_ongoing = WIFI_FALSE;
-    status_flag.enable_client_socket_write = WIFI_FALSE;
-    status_flag.event_deQ_x_wind64 = WIFI_FALSE;
-    status_flag.do_not_reset_push_WIFI_event = WIFI_FALSE;
-    status_flag.message_pending = WIFI_FALSE;
-    status_flag.Pending_SockON_Callback = WIFI_FALSE;
-    status_flag.Pending_SockD_Callback = WIFI_FALSE;
-    status_flag.SockON_Server_Closed_Callback = WIFI_FALSE;
-    status_flag.Client_Socket_Close_Cmd = WIFI_FALSE;
-    status_flag.standby_resume_callback = WIFI_FALSE;
-    status_flag.HTTP_Data_available = WIFI_FALSE;
-    status_flag.FILE_Data_available = WIFI_FALSE;
-    status_flag.AT_Response_Received = WIFI_FALSE;
-    status_flag.Deep_Sleep_Timer = WIFI_FALSE;
-    status_flag.Deep_Sleep_Callback = WIFI_FALSE;
-}
-
-
-/**
-* @brief  Period elapsed callback in non blocking mode
-*         This timer is used for calling back User registered functions with information
-* @param  htim : TIM handle
-* @retval None
-*/
-
-void Wifi_TIM_Handler(void)
-{ 
-  /**********************************************************************
-  *                                                                     *
-  *       Be careful not to make a blocking                             *
-  *       call from this function, see                                  *
-  *       example Socket_Read() and Socket_Close()                      *
-  *                                                                     *
-  **********************************************************************/
-    WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-
-    if(status_flag.stop_event_dequeue == WIFI_FALSE /*&& !status_flag.enable_receive_data_chunk*/)
-    {
-        __disable_irq();
-        event_pop_s = pop_eventbuffer_queue(&event_buff);
-        __enable_irq();
-
-        if(event_pop_s!=NULL && event_pop_s->event_pop == WIFI_TRUE)
-          {
-            switch(event_pop_s->event)
-              {
-                case WIFI_WIND_EVENT:
-                        Process_WiFi_Indication_Cmd(event_pop_s);
-                        break;
-
-                case WIFI_OK_EVENT:
-                        status_flag.AT_Response_Received = WIFI_TRUE;
-                        AT_RESPONSE = WiFi_MODULE_SUCCESS;
-                        if(status_flag.Set_AT_Cmd_Response_False == WIFI_TRUE)
-                        {
-                          status_flag.Set_AT_Cmd_Response_False = WIFI_FALSE;
-                          status_flag.AT_Response_Received = WIFI_FALSE;
-                        }
-                        if(status_flag.enable_client_socket_write)  //allows the OK received after socket client write to be processed
-                        {
-                          status_flag.AT_Response_Received = WIFI_TRUE;
-                          status_flag.enable_client_socket_write = WIFI_FALSE;
-                        }
-                        break;
-
-                case WIFI_SOCK_ID_EVENT:
-                        /*check ID and update SocketID array*/
-                        no_of_open_client_sockets++;
-
-                        if(no_of_open_client_sockets > 8)  //Max number of clients is 8
-                          {
-                              status_flag.AT_Response_Received = WIFI_TRUE;
-                              AT_RESPONSE = WiFi_NOT_SUPPORTED;     
-                              break;
-                          }
-
-                        open_sockets[event_pop_s->socket_id] = WIFI_TRUE;
-                        Socket_Open_ID = event_pop_s->socket_id;
-                        status_flag.AT_Response_Received = WIFI_TRUE;
-                        AT_RESPONSE = WiFi_MODULE_SUCCESS;
-                        break;
-
-                case WIFI_HTTP_EVENT:
-                        Reset_AT_CMD_Buffer();  
-                        memset(UserDataBuff, 0x00, MAX_BUFFER_GLOBAL);//Flush the buffer
-
-                        if(curr_pURL) {
-                            sprintf((char*)WiFi_AT_Cmd_Buff,AT_HTTPPOST_REQUEST,curr_pURL);
-                        }
-                        else {
-                          if(curr_port_number!=0)
-                            sprintf((char*)WiFi_AT_Cmd_Buff,"AT+S.HTTPGET=%s,%s,%d\r",curr_hostname, curr_path, (int)curr_port_number);
-                          else 
-                            sprintf((char*)WiFi_AT_Cmd_Buff,"AT+S.HTTPGET=%s,%s\r",curr_hostname, curr_path);
-                        }
-
-                        status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-                        if(status == WiFi_MODULE_SUCCESS) {
-                          WiFi_Module_State = Process_Event;
-                          status_flag.stop_event_dequeue = WIFI_TRUE;
-                          status_flag.http_req_pending = WIFI_TRUE;                            
-                        }
-                        else {
-                          #if DEBUG_PRINT
-                            printf("\r\n ERROR IN HTTP \r\n");
-                          #endif
-                          AT_RESPONSE = WiFi_AT_CMD_RESP_ERROR;
-                          status_flag.AT_Response_Received = WIFI_TRUE;
-                        }
-                        break;
-
-                case WIFI_CLIENT_SOCKET_WRITE_EVENT:
-                        Reset_AT_CMD_Buffer();
-                        /* AT+S.SOCKW=00,11<cr> */
-                        sprintf((char*)WiFi_AT_Cmd_Buff,AT_SOCKET_WRITE,curr_sockID,curr_DataLength);
-                        status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-
-                        if(status == WiFi_MODULE_SUCCESS) {
-                          Reset_AT_CMD_Buffer();
-                          memcpy((char*)(char*)WiFi_AT_Cmd_Buff, (char*)curr_data,curr_DataLength);
-                          WiFi_AT_Cmd_Buff[curr_DataLength]='\r';
-
-                          status = USART_Transmit_AT_Cmd(curr_DataLength+2);
-                          if(status == WiFi_MODULE_SUCCESS) {
-                            WiFi_Module_State = Process_Event;
-                          }
-                          else {
-                            #if DEBUG_PRINT
-                              printf("\r\n ERROR IN SOCKET\r\n");
-                            #endif
-                            status_flag.AT_Response_Received = WIFI_TRUE;
-                            AT_RESPONSE = WiFi_AT_CMD_RESP_ERROR;
-                          }
-                        }
-                        else {
-                          #if DEBUG_PRINT
-                            printf("\r\n ERROR In Socket\r\n");
-                          #endif
-                          status_flag.AT_Response_Received = WIFI_TRUE;
-                          AT_RESPONSE = WiFi_AT_CMD_RESP_ERROR;
-                        }
-                        break;
-                 
-                case WIFI_CLIENT_SOCKET_OPEN_EVENT:
-                        Reset_AT_CMD_Buffer();
-
-                        /* AT+S.SOCKON = myserver,1234,t <cr> */  
-                        sprintf((char*)WiFi_AT_Cmd_Buff,AT_SOCKET_OPEN,curr_hostname,(int)curr_port_number,curr_protocol);        
-                        status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-                        if(status != WiFi_MODULE_SUCCESS)
-                        {
-                          #if DEBUG_PRINT
-                            printf("\r\n ERROR During Socket Open \r\n");
-                          #endif
-                          status_flag.AT_Response_Received = WIFI_TRUE;
-                          AT_RESPONSE = WiFi_AT_CMD_RESP_ERROR;
-                        }
-                        break;
-                        
-                case WIFI_CLIENT_SOCKET_CLOSE_EVENT:
-                        Reset_AT_CMD_Buffer();
-
-                         /* AT+S.SOCKC=00<cr> */
-                        sprintf((char*)WiFi_AT_Cmd_Buff,AT_SOCKET_CLOSE,event_pop_s->socket_id);
-                        status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-                        if(status == WiFi_MODULE_SUCCESS)
-                        {
-                          AT_RESPONSE = WiFi_MODULE_SUCCESS;
-                          status_flag.prevent_push_OK_event = WIFI_TRUE;  //prevent the OK received after socket close command to be Q'ed
-                          status_flag.stop_event_dequeue = WIFI_TRUE;
-                          remote_socket_closed_id = event_pop_s->socket_id;
-                          status_flag.client_socket_close_ongoing = WIFI_TRUE; //used for making changes in the value of open_sockets[sock_id] if no error is returned
-//                          status_flag.SockON_Server_Closed_Callback = WIFI_TRUE;
-                        }
-                        else
-                        {
-                          #if DEBUG_PRINT
-                            printf("\r\n ERROR During Socket Close \r\n");
-                          #endif
-                        }
-                        break; 
-
-
-                case WIFI_FILE_EVENT:
-                        Reset_AT_CMD_Buffer();
-
-                        if(curr_filename == NULL)
-                        {
-                            /* AT+S.FSL */
-                            sprintf((char*)WiFi_AT_Cmd_Buff,AT_DISPLAY_FILE_NAME);
-                        }
-                        else if(curr_hostname == NULL)
-                        {
-                            /* AT+S.FSP=/index.html  */
-                            sprintf((char*)WiFi_AT_Cmd_Buff,AT_DISPLAY_FILE_CONTENT,curr_filename);
-                        }
-                        else
-                        {
-                            /* AT+S.HTTPDFSUPDATE=%s,/outfile.img  */
-                            sprintf((char*)WiFi_AT_Cmd_Buff,AT_DOWNLOAD_IMAGE_FILE,curr_hostname,curr_filename,(int)curr_port_number);
-                        }
-                        status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-                        if(status == WiFi_MODULE_SUCCESS)
-                        {
-                            WiFi_Module_State = Process_Event;
-                            status_flag.enable_receive_http_response = WIFI_TRUE;
-                            status_flag.enable_receive_data_chunk = WIFI_TRUE;
-                            status_flag.enable_receive_file_response = WIFI_TRUE;
-                        }
-                        else {
-                          #if DEBUG_PRINT
-                            printf("\r\n ERROR in FILE \r\n");
-                          #endif
-                          status_flag.AT_Response_Received = WIFI_TRUE;
-                          AT_RESPONSE = WiFi_AT_CMD_RESP_ERROR;
-                        }
-                        break;
-
-              case WIFI_FW_UPDATE_EVENT:
-                        Reset_AT_CMD_Buffer();
-                        sprintf((char*)WiFi_AT_Cmd_Buff,"AT+S.FWUPDATE=%s,/%s,%d\r",curr_hostname,curr_filename,(int)curr_port_number);
-                        status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-                        if(status == WiFi_MODULE_SUCCESS)
-                        {
-                          WiFi_Module_State = Process_Event;
-                          status_flag.enable_fw_update_read = WIFI_TRUE;
-                          status_flag.enable_receive_data_chunk = WIFI_TRUE;
-                        }
-                        else 
-                        {
-                          #if DEBUG_PRINT
-                            printf("\r\n ERROR in Firmware \r\n");
-                          #endif
-                          status_flag.AT_Response_Received = WIFI_TRUE;
-                          AT_RESPONSE = WiFi_AT_CMD_RESP_ERROR;
-                        }
-                        break;
-
-                case WIFI_ERROR_EVENT:
-                        #if DEBUG_PRINT
-                          printf("\r\n ERROR!\r\n");
-                        #endif
-                        status_flag.AT_Response_Received = WIFI_TRUE;
-                        AT_RESPONSE = WiFi_AT_CMD_RESP_ERROR;
-                        break;
-
-                case WIFI_GCFG_EVENT:
-                case WIFI_GPIO_EVENT:
-                        status_flag.AT_Response_Received = WIFI_TRUE;
-                        AT_RESPONSE = WiFi_MODULE_SUCCESS; 
-                        break;
-
-                case WIFI_STANDBY_CONFIG_EVENT:
-                        #if DEBUG_PRINT
-                            printf("\r\nGoing into standby..\r\n");  
-                        #endif
-                        WiFi_Module_State = Process_Event;
-                        break;
-
-                case WIFI_RESUME_CONFIG_EVENT:
-                        #if DEBUG_PRINT
-                            printf("\r\nResuming from standby..\r\n");
-                        #endif
-                        status_flag.AT_Response_Received = WIFI_TRUE;//let main run-on
-                        break;
-                        
-                 case WIFI_NO_EVENT:
-                    break;
-             }
-          }
-    }            
-            /* If data is pending on client socket SOCKON, make read requests*/
-            if(status_flag.start_sock_read == WIFI_TRUE)
-                    {
-                        //flush_buffer_queue(&big_buff);
-                        Socket_Read(Socket_Data_Length);
-                        status_flag.start_sock_read = WIFI_FALSE;
-                    }
-
-            /* Call Query, after notification for TLS is received */
-            else if(status_flag.enable_query == WIFI_TRUE && status_flag.enable_dequeue == WIFI_TRUE)
-                    {
-                        //@TBD: Flushing the buffer may be detrimental if we have genuine follow on WIND55?
-                        //flush_buffer_queue(&big_buff);  //Flush the buffer to remove WIND:55 in pipeline (This maybe a problem)
-                        Socket_Pending_Data();
-                        status_flag.enable_query = WIFI_FALSE;
-                    }
-
-            else if(status_flag.Pending_SockON_Callback==WIFI_TRUE)//for client socket
-                    {
-                        //Now callback to user with user_data pointer <UserDataBuff>              
-                        ind_wifi_socket_data_received(sockon_id_user, (uint8_t *)UserDataBuff, message_size, chunk_size);
-                        memset(UserDataBuff, 0x00, MAX_BUFFER_GLOBAL);//Flush the buffer
-                        Resume_Dequeue();
-                        status_flag.Pending_SockON_Callback=WIFI_FALSE;
-                    }
-
-            else if(status_flag.Pending_SockD_Callback == WIFI_TRUE)//for server socket
-                    {
-                        //if(status_flag.command_mode)//if command_mode is achieved then callback else loop in this state
-                        {
-                        //Now callback to user with user_data pointer <UserDataBuff>
-                        ind_wifi_socket_data_received(9, (uint8_t *)UserDataBuff, message_size, chunk_size);
-                        memset(UserDataBuff, 0x00, MAX_BUFFER_GLOBAL);//Flush the buffer
-                        Resume_Dequeue();
-                        status_flag.Pending_SockD_Callback=WIFI_FALSE;      
-                        }
-                    }
-
-            else if(status_flag.Client_Socket_Close_Cmd==WIFI_TRUE)//for client socket
-                    {
-                        //Close the socket
-                        //Change State to AT_Cmd_Response before calling socket_close()
-                        WiFi_Module_State = Process_Event;
-                        wifi_socket_client_close(client_socket_close_id);
-                        status_flag.Client_Socket_Close_Cmd = WIFI_FALSE;
-//                        status_flag.SockON_Server_Closed_Callback = WIFI_TRUE;
-                    }
-
-            else if(status_flag.SockON_Server_Closed_Callback==WIFI_TRUE)//for client socket
-                    {
-                        //callback the user
-                        ind_wifi_socket_client_remote_server_closed(&socket_closed_id_callback);
-                        status_flag.SockON_Server_Closed_Callback = WIFI_FALSE;
-                    }
-
-            else if(status_flag.HTTP_Data_available == WIFI_TRUE)
-                    {
-                        ind_wifi_http_data_available((uint8_t *)UserDataBuff,UserDataBuff_index);
-                        memset(UserDataBuff, 0x00, MAX_BUFFER_GLOBAL);//Flush the buffer
-//                        memcpy(&UserDataBuff, &HTTP_Runway_Buff, 6);
-//                        memset(HTTP_Runway_Buff, 0x00, 6);
-                        Resume_Dequeue();
-                        status_flag.HTTP_Data_available=WIFI_FALSE;
-                    }
-
-            else if (status_flag.FILE_Data_available == WIFI_TRUE)
-                    {
-                        ind_wifi_file_data_available((uint8_t *) UserDataBuff);
-                        memset(UserDataBuff, 0x00, MAX_BUFFER_GLOBAL);//Flush the buffer
-                        Resume_Dequeue();
-                        status_flag.FILE_Data_available = WIFI_FALSE;
-                    }
-            else if(status_flag.Client_Connected == WIFI_TRUE)
-                    {
-                            ind_socket_server_client_joined();
-                            status_flag.Client_Connected = WIFI_FALSE;
-                    }
-
-            else if(status_flag.Client_Disconnected == WIFI_TRUE)
-                    {
-                        ind_socket_server_client_left();
-                        status_flag.Client_Disconnected = WIFI_FALSE;
-                    }
-
-            //Make callbacks from here to user for pending events
-            
-            if(WiFi_WIND_State.WiFiHWStarted==WIFI_TRUE)
-                {
-                    if(wifi_ready == 2)//Twice reset for User Callback
-                        {
-                            wifi_ready++;
-                            ind_wifi_on();//Call this once only...This if for wifi_on (instead of console active
-                        }
-                }
-
-            if(WiFi_WIND_State.WiFiUp == WIFI_TRUE)
-                {
-                    if(wifi_connected == 0)
-                        {
-                            wifi_connected = 1;
-                            ind_wifi_connected();//wifi connected
-                        }    
-                    WiFi_WIND_State.WiFiUp = WIFI_FALSE;
-                }
-
-            else if(WiFi_WIND_State.WiFiStarted_MiniAPMode == WIFI_TRUE)
-                {
-                    ind_wifi_ap_ready();
-                    WiFi_WIND_State.WiFiStarted_MiniAPMode = WIFI_FALSE;
-                }
-
-            else if(WiFi_WIND_State.WiFiAPClientJoined == WIFI_TRUE)
-                {
-                      ind_wifi_ap_client_joined(client_MAC_address);
-                      WiFi_WIND_State.WiFiAPClientJoined = WIFI_FALSE;
-                }
-
-            else if(WiFi_WIND_State.WiFiAPClientLeft == WIFI_TRUE)
-                {
-                      ind_wifi_ap_client_left(client_MAC_address);
-                      WiFi_WIND_State.WiFiAPClientLeft = WIFI_FALSE;
-                }
-
-            else if(status_flag.Deep_Sleep_Callback == WIFI_TRUE)
-                {
-                      ind_wifi_resuming();
-                      status_flag.Deep_Sleep_Callback = WIFI_FALSE;
-                }
-
-            else if(status_flag.standby_resume_callback == WIFI_TRUE)
-                {
-                      ind_wifi_resuming();
-                      status_flag.standby_resume_callback = WIFI_FALSE;
-                }
-
-            else if(WiFi_WIND_State.WiFiHWFailure==WIFI_TRUE)
-                {      
-                      WiFi_WIND_State.WiFiHWFailure=WIFI_FALSE;
-                      ind_wifi_error(WiFi_HW_FAILURE_ERROR);//call with error number      
-                }
-
-            else if(WiFi_WIND_State.HardFault==WIFI_TRUE)
-                {      
-                      WiFi_WIND_State.HardFault=WIFI_FALSE;
-                      ind_wifi_error(WiFi_HARD_FAULT_ERROR);//call with error number      
-                }
-
-            else if(WiFi_WIND_State.StackOverflow==WIFI_TRUE)
-                {      
-                      WiFi_WIND_State.StackOverflow=WIFI_FALSE;
-                      ind_wifi_error(WiFi_STACK_OVERFLOW_ERROR);//call with error number      
-                }
-
-            else if(WiFi_WIND_State.MallocFailed==WIFI_TRUE)
-                {      
-                      WiFi_WIND_State.MallocFailed=WIFI_FALSE;
-                      ind_wifi_error(WiFi_MALLOC_FAILED_ERROR);//call with error number      
-                }
-
-            else if(WiFi_WIND_State.InitFailure==WIFI_TRUE)
-                {      
-                      WiFi_WIND_State.InitFailure=WIFI_FALSE;
-                      ind_wifi_error(WiFi_INIT_ERROR);//call with error number      
-                }
-
-            else if(WiFi_WIND_State.StartFailed==WIFI_TRUE)
-                {      
-                      WiFi_WIND_State.StartFailed=WIFI_FALSE;
-                      ind_wifi_error(WiFi_START_FAILED_ERROR);//call with error number      
-                }
-            
-            else if(WiFi_WIND_State.WiFiException==WIFI_TRUE)
-                {      
-                      WiFi_WIND_State.WiFiException=WIFI_FALSE;
-                      ind_wifi_error(WiFi_EXCEPTION_ERROR);//call with error number      
-                }
-
-            else if(WiFi_WIND_State.PS_Mode_Failure==WIFI_TRUE)
-                {      
-                      WiFi_WIND_State.PS_Mode_Failure=WIFI_FALSE;
-                      ind_wifi_warning(WiFi_POWER_SAVE_WARNING);//call with error number      
-                }
-
-            else if(WiFi_WIND_State.HeapTooSmall==WIFI_TRUE)
-                {      
-                      WiFi_WIND_State.HeapTooSmall=WIFI_FALSE;
-                      ind_wifi_warning(WiFi_HEAP_TOO_SMALL_WARNING);//call with error number      
-                }
-            
-            else if(WiFi_WIND_State.WiFiSignalLOW==WIFI_TRUE)
-                {      
-                      WiFi_WIND_State.WiFiSignalLOW=WIFI_FALSE;
-                      ind_wifi_warning(WiFi_SIGNAL_LOW_WARNING);//call with error number      
-                }    
-            
-            else if(WiFi_WIND_State.WiFiDeauthentication == WIFI_TRUE)
-                {
-                      WiFi_WIND_State.WiFiDeauthentication = WIFI_FALSE;
-                      ind_wifi_connection_error(WiFi_DE_AUTH);
-                }
-            
-            else if(WiFi_WIND_State.WiFiDisAssociation == WIFI_TRUE)
-                {
-                      WiFi_WIND_State.WiFiDisAssociation = WIFI_FALSE;
-                      ind_wifi_connection_error(WiFi_DISASSOCIATION);
-                }
-            
-            else if(WiFi_WIND_State.WiFiJoinFailed == WIFI_TRUE)
-                {
-                      WiFi_WIND_State.WiFiJoinFailed = WIFI_FALSE;
-                      ind_wifi_connection_error(WiFi_JOIN_FAILED);
-                }
-            
-            else if(WiFi_WIND_State.WiFiScanBlewUp == WIFI_TRUE)
-                {
-                      WiFi_WIND_State.WiFiScanBlewUp = WIFI_FALSE;
-                      ind_wifi_connection_error(WiFi_SCAN_BLEWUP);  //@TBD to check if user made call, so not call callback if true
-                }
-            
-            else if(WiFi_WIND_State.WiFiScanFailed == WIFI_TRUE)
-                {
-                      WiFi_WIND_State.WiFiScanFailed = WIFI_FALSE;
-                      ind_wifi_connection_error(WiFi_SCAN_FAILED);  //@TBD to check if user made call, so not call callback if true
-                }
-            
-            else if(WiFi_WIND_State.WiFiUnHandledInd == WIFI_TRUE)
-                {
-                      WiFi_WIND_State.WiFiUnHandledInd = WIFI_FALSE;
-                      ind_wifi_packet_lost(WiFi_UNHANDLED_IND_ERROR);  //@TBD to check if user made call, so not call callback if true
-                }
-            
-            else if(WiFi_WIND_State.WiFiRXMgmt == WIFI_TRUE)
-                {
-                      WiFi_WIND_State.WiFiRXMgmt = WIFI_FALSE;
-                      ind_wifi_packet_lost(WiFi_RX_MGMT);  //@TBD to check if user made call, so not call callback if true
-                }
-            
-            else if(WiFi_WIND_State.WiFiRXData == WIFI_TRUE)
-                {
-                      WiFi_WIND_State.WiFiRXData = WIFI_FALSE;
-                      ind_wifi_packet_lost(WiFi_RX_DATA);  //@TBD to check if user made call, so not call callback if true
-                }  
-            
-            else if(WiFi_WIND_State.WiFiRxUnk == WIFI_TRUE)
-                {
-                      WiFi_WIND_State.WiFiRxUnk = WIFI_FALSE;
-                      ind_wifi_packet_lost(WiFi_RX_UNK);  //@TBD to check if user made call, so not call callback if true
-                }  
-            
-            else if(WiFi_WIND_State.WiFiSockdDataLost == WIFI_TRUE)
-                {
-                      WiFi_WIND_State.WiFiSockdDataLost = WIFI_FALSE;
-                      ind_wifi_socket_server_data_lost();  //@TBD to check if user made call, so not call callback if true
-                }
-      
-}
-
-
-/**
-* @brief  Start_Timer
-*         Start Timer 
-* @param  None
-* @retval None
-*/
-void Start_Timer()
-{
-  //tickcount = WIFI_FALSE;
-  status_flag.Timer_Running = WIFI_TRUE;
-}
-
-/**
-* @brief  Stop_Timer
-*         Stop Timer request
-* @param  None
-* @retval None
-*/
-void Stop_Timer()
-{  
-  //tickcount = WIFI_FALSE;  
-  status_flag.Timer_Running = WIFI_FALSE;    
-  //UartReady = SET;
-}
-
-/**
-* @brief  Stop_Dequeue
-*         Stop dequeuing data from the ring buffer
-* @param  None
-* @retval None
-*/
-void Stop_Dequeue()
-{
-  status_flag.enable_dequeue = WIFI_FALSE;
-}
-
-/**
-* @brief  Resume_Dequeue
-*         Resume dequeuing data from the ring buffer
-* @param  None
-* @retval None
-*/
-void Resume_Dequeue()
-{
-  status_flag.enable_dequeue = WIFI_TRUE;
-}
-
-/**
-* @brief  Wifi_SysTick_Isr
-*         Function called every SysTick to process buffer
-* @param  None
-* @retval None
-*/
-void Wifi_SysTick_Isr()
-{
-    //Check if Data is Paused
-    if((status_flag.Timer_Running) && (status_flag.enable_dequeue==WIFI_TRUE))
-        {    
-            Process_WiFi();
-        }
-    
-    if(status_flag.Timeout_Timer) tickcount++;
-    
-    /*if(status_flag.resume_receive_data == WIFI_TRUE)
-        {
-            if(is_half_empty(&big_buff))
-                {
-                    status_flag.resume_receive_data = WIFI_FALSE;
-                    //callSpwfSADevice_attach(1);
-                    Receive_Data();
-                    
-                }
-        }*/
-    
- 
-    if(status_flag.Standby_Timer_Running) // module is in sleep and after expiry RX will be conf as EXTI
-    {
-        if((standby_time++) >= EXTI_CONF_TIMER)
-            {
-                status_flag.Standby_Timer_Running=WIFI_FALSE;
-                standby_time = 0;
-                //configure_to_exti();
-            }
-    }
-
-    /*A Resume WIND:70 has come and triggered this
-    So checking here if after that resume we fall back to sleep (another WIND69) within SLEEP_RESUME_PREVENT time.
-    If yes, we assume it is a false resume and hence do nothing and go back to sleep
-    If no WIND69 (going into sleep) has come, we can assume the resume was genuine and then enable the callback
-    */
-    if((status_flag.Deep_Sleep_Timer) && ( sleep_count++) >= SLEEP_RESUME_PREVENT)
-        {
-            if(status_flag.Deep_Sleep_Enabled == WIFI_TRUE)//which means we have received another WIND69 in the 2 seconds
-                {
-                    //do nothing, go back to sleep
-                    status_flag.Deep_Sleep_Enabled = WIFI_TRUE;
-                    status_flag.Deep_Sleep_Callback = WIFI_FALSE;
-                }
-    else if (status_flag.Deep_Sleep_Enabled == WIFI_FALSE) //which means we have not received any WIND69 during the last 2 seconds
-        {
-            //enable the user callback as it is a genuine WIND70
-            status_flag.Deep_Sleep_Callback = WIFI_TRUE;
-        }
-    Stop_DeepSleep_Timer();
-    }
-}
-
-
-/**
-* @brief  USART_Receive_AT_Resp
-*         Receive and check AT cmd response
-* @param  WiFi_AT_CMD_Response_t : WIFi module next state 
-* @retval WiFi_Status_t : Response of AT cmd  
-*/
-
-WiFi_Status_t USART_Receive_AT_Resp(WiFi_AT_CMD_Response_t state)
-{
-  WiFi_Module_State = state;
-  tickcount=0;//reset timer
-  status_flag.Timeout_Timer = WIFI_TRUE;
-  while(status_flag.AT_Response_Received != WIFI_TRUE) {
-        if(tickcount >=20000)//20 sec wait
-        {
-            AT_RESPONSE = WiFi_AT_CMD_RESP_ERROR;
-            break;
-        }
-        __NOP();
-    }
-  status_flag.Timeout_Timer = WIFI_FALSE;
-  status_flag.AT_Response_Received = WIFI_FALSE;
-  return AT_RESPONSE;
-}
-
-
-/**
-* @brief  Process_WiFi
-*         Pop a byte from the circular buffer and send the byte for processing
-*         This function should be called from main or should be run with a periodic timer
-* @param  None
-* @retval None
-*/
-void Process_WiFi(void)
-{
-    uint8_t * temp;//pop buffer temporary
-    
-    __disable_irq();
-    temp=pop_buffer_queue(&big_buff);   //contents of temp(pop_buffer) will not change till another de-queue is made
-    __enable_irq();
-
-    if(temp!=NULL) 
-    {
-      Process_Buffer(temp);
-    }
-    
-   if(status_flag.event_deQ_x_wind64)//if de-Q is stopped due to WIND64 wait
-   {
-     wind64_DQ_wait++;//1ms for each count
-     if(wind64_DQ_wait>200)//wait for 50ms for example
-     {
-       wind64_DQ_wait=0;
-       status_flag.event_deQ_x_wind64 = WIFI_FALSE;
-       //re-enable event Q after 200ms
-       status_flag.stop_event_dequeue = WIFI_FALSE;
-     }
-   }
-}
-
-/**
-* @brief  Process_Buffer
-*         Process and construct a Wind Line buffer
-* @param  ptr: pointer to one single byte
-* @retval None
-*/
-
-void Process_Buffer(uint8_t * ptr)
-{
-  static uint32_t Fillptr=0;//count=0;
-  static uint8_t index, chan_value;
-  unsigned char rxdata = 0;
-  int rssi_value = 0;
-  char SocketId_No[2];
-  char databytes_No[4];
-  char * pStr;
-
-  rxdata =  *(ptr+0);  
-  //printf(&rxdata);//check prints for debug...to be removed or kept in DEBUG statement
-  if(status_flag.enable_receive_data_chunk == WIFI_FALSE)
-    process_buffer[Fillptr++] = rxdata;
-   reset_event(&event_s);
-    switch (WiFi_Module_State)
-    {
-    case Process_Event:
-
-          if((process_buffer[Fillptr-2]==0xD) && (process_buffer[Fillptr-1]==0xA) && !status_flag.enable_receive_http_response && !status_flag.sock_read_ongoing)
-            {
-                if((strstr((const char *)process_buffer,"WIND:")) != NULL)
-                {
-                    if((strstr((const char *)process_buffer,"+WIND:67:")) !=NULL)
-                        event_s.event = WIFI_STANDBY_CONFIG_EVENT;
-
-                    else if ((strstr((const char *)process_buffer,"+WIND:68:"))!= NULL)
-                        event_s.event = WIFI_RESUME_CONFIG_EVENT;
-
-                    else
-                        {
-                            //end of msg received. Will not receive any other msg till we process this.
-                            //Stop_Timer();
-                            //#if defined (USE_STM32L0XX_NUCLEO) || (USE_STM32F4XX_NUCLEO) || (USE_STM32L4XX_NUCLEO)
-                            //__disable_irq();
-                            //#endif
-                            Process_Wind_Indication(&process_buffer[0]);
-                            //#if defined (USE_STM32L0XX_NUCLEO) || (USE_STM32F4XX_NUCLEO) || (USE_STM32L4XX_NUCLEO)
-                            //__enable_irq();
-                            //#endif
-                            //Start_Timer();
-                            sock_total_count=0;
-                        }
-
-                    if(!status_flag.prevent_push_WIFI_event)
-                        {
-                            __disable_irq();
-                            push_eventbuffer(&event_buff, event_s);
-                             __enable_irq();
-                            reset_event(&event_s);
-                        }
-
-                    if (!status_flag.do_not_reset_push_WIFI_event) status_flag.prevent_push_WIFI_event = WIFI_FALSE;
-                    if(status_flag.enable_sock_read)
-                        {
-                            status_flag.sock_read_ongoing = WIFI_FALSE;//we finished processing a message and now sock read will commence
-                            status_flag.Q_Contains_Message = WIFI_FALSE;
-                        }
-                    Fillptr=0;
-                    memset(process_buffer, 0x00, strlen((const char*)process_buffer));
-                }
-
-                else if((strstr((const char *)process_buffer,"\r\nOK\r\n")) != NULL)
-                {
-                    /*Now Check to which AT Cmd response this OK belongs to so that correct parsing can be done*/
-
-                    // SOCKON ID (Open a client socket)
-                    if(((pStr=(strstr((const char *)process_buffer,"ID: "))) != NULL))      
-                    {
-                            SocketId_No[0]    = *(pStr + 4) ;
-                            SocketId_No[1]    = *(pStr + 5) ;
-                            SocketId          = (((SocketId_No[0] - '0') * 10 ) + (SocketId_No[1] - '0'));
-                            event_s.socket_id = SocketId;
-                            event_s.event     =  WIFI_SOCK_ID_EVENT;
-                            __disable_irq();
-                            push_eventbuffer(&event_buff, event_s);
-                             __enable_irq();
-                            reset_event(&event_s);
-                            if(status_flag.enable_sock_read)
-                            {
-                                status_flag.sock_read_ongoing = WIFI_FALSE;  //we finished processing a message and now sock read will commence
-                                status_flag.Q_Contains_Message = WIFI_FALSE;
-                            }
-                            Fillptr=0;
-                            sock_total_count=0;
-                            memset(process_buffer, 0x00, MAX_BUFFER_GLOBAL);
-                     }
-
-                      // DATALEN from SOCKQ
-                     else if((pStr=(strstr((const char *)process_buffer,"DATALEN: "))) != NULL)
-                     {
-                            //Find the DataLength and do a socket read
-                            databytes_No[0] = *(pStr + 9);
-                            databytes_No[1] = *(pStr + 10);
-                            databytes_No[2] = *(pStr + 11);
-                            databytes_No[3] = *(pStr + 12);
-
-                            if( databytes_No[1] == '\r')
-                            {
-                                SockON_Data_Len = databytes_No[0] - '0'; 
-                            }
-                            else if( databytes_No[2] == '\r')
-                            {
-                                SockON_Data_Len = (((databytes_No[0] - '0') * 10 ) + (databytes_No[1] - '0'));
-                            }
-                            else if( databytes_No[3] == '\r')
-                            {
-                                SockON_Data_Len = (((databytes_No[0] - '0') * 100 ) + ((databytes_No[1] - '0') * 10 ) + (databytes_No[2] - '0'));
-                            }
-                            else //it's a 4-digit number
-                            {
-                               SockON_Data_Len  = ((databytes_No[0] - '0') * 1000 ) + ((databytes_No[1] - '0') * 100 ) + ((databytes_No[2] - '0') * 10) + (databytes_No[3] - '0');
-                            }
-                            Socket_Data_Length = SockON_Data_Len;
-                            if(Socket_Data_Length != 0)
-                            {
-                                  status_flag.start_sock_read = WIFI_TRUE;
-                            }
-                            else if(Socket_Data_Length == 0)
-                            {
-                                status_flag.stop_event_dequeue = WIFI_FALSE;      //continue popping events if nothing to read
-                                status_flag.Set_AT_Cmd_Response_False = WIFI_FALSE;
-                            }
-                            Fillptr = 0;
-                            sock_total_count = 0;
-                            if(status_flag.enable_sock_read)
-                            {
-                                status_flag.sock_read_ongoing = WIFI_FALSE;  //we finished processing a message and now sock read will commence
-                                status_flag.Q_Contains_Message = WIFI_FALSE;
-                                pop_buffer_size = 0;
-                                pop_buffer[0]='\0';     // required as this byte is already used in process_buffer
-                            }
-                            memset(process_buffer, 0x00, MAX_BUFFER_GLOBAL);
-                     }
-
-                      else if((((strstr((const char *)process_buffer," = "))) != NULL))
-                      {
-                            // AT command GCFG
-                            pStr = (char *) strstr((const char *)process_buffer," = ");
-                            event_s.event = WIFI_GCFG_EVENT;
-                            memcpy(get_cfg_value, pStr+2, (strlen(pStr)-2));
-                            __disable_irq();
-                            push_eventbuffer(&event_buff, event_s);
-                             __enable_irq();
-                            reset_event(&event_s);
-                            if(status_flag.enable_sock_read)
-                              {
-                                  status_flag.sock_read_ongoing = WIFI_FALSE;    //we finished processing a message and now sock read will commence
-                                  status_flag.Q_Contains_Message = WIFI_FALSE;
-                              }
-                            Fillptr=0;
-                            memset(process_buffer, 0x00, MAX_BUFFER_GLOBAL);
-                      }
-
-                      else
-                      {
-                            //This is a standalone OK
-                            /*Cases possible
-                            - TLSCERT,TLSCERT2, TLSDOMAIN, SETTIME
-                            - S.SOCKW, SOCKR, S.SOCKC, S.SOCKD (open a server socket)
-                            - File Operations
-                            - S.GPIOC and S.GPIOW
-                            */
-                            //Push a simple OK Event, if this is an OK event required to be pushed to Q 
-                            if(status_flag.prevent_push_OK_event)
-                                {
-                                    //This OK is not to be handled, hence the pop action on OK completion to be done here
-                                    //since pop will not happen
-//                                  stop_event_dequeue=WIFI_FALSE;
-                                    
-                                    if(status_flag.client_socket_close_ongoing)
-                                      {
-                                          if(no_of_open_client_sockets > 0)
-                                            no_of_open_client_sockets--;
-                                          status_flag.prevent_push_OK_event = WIFI_FALSE;
-                                          open_sockets[remote_socket_closed_id] = WIFI_FALSE;
-                                          socket_closed_id_callback = remote_socket_closed_id;
-                                          status_flag.Set_AT_Cmd_Response_False = WIFI_FALSE;
-                                          status_flag.client_socket_close_ongoing = WIFI_FALSE;
-                                          status_flag.SockON_Server_Closed_Callback = WIFI_TRUE;
-                                          status_flag.stop_event_dequeue=WIFI_FALSE;
-                                      }
-                                    
-                                }
-
-                            else
-                                {
-                                        event_s.ok_eval = WIFI_TRUE;
-                                        event_s.event = WIFI_OK_EVENT;
-                                        __disable_irq();
-                                        push_eventbuffer(&event_buff, event_s);
-                                         __enable_irq();
-                                        reset_event(&event_s);
-                                }
-                            status_flag.prevent_push_OK_event = WIFI_FALSE;
-                            memset(process_buffer, 0x00, Fillptr);
-                            Fillptr=0;
-                            sock_total_count=0;
-                            if(status_flag.enable_sock_read)
-                                {
-                                    status_flag.sock_read_ongoing = WIFI_FALSE;//we finished processing a message and now sock read will commence
-                                    status_flag.Q_Contains_Message = WIFI_FALSE;
-                                }
-                            break;
-                        }
-                }
-
-               else if((((strstr((const char *)process_buffer,"ERROR"))) != NULL))
-                {
-                    //This is an ERROR
-                    //There can be only ONE outstanding AT command and hence this ERROR belongs to that
-                    //HTTP -> ERROR: host not found
-                    //@TBD: Check all Errors Possible here???
-                    if((strstr((const char *)process_buffer,"\r\nERROR: Pending data\r\n")) != NULL)    //if Error after sock close command and not 'OK'
-                    {
-                        printf("\r\nERROR: Socket could not be closed..PENDING DATA\r\n");
-                        status_flag.prevent_push_OK_event = WIFI_FALSE;     //prevent the OK received after socket close command to be Q'ed
-                        status_flag.client_socket_close_ongoing = WIFI_FALSE;
-                        status_flag.stop_event_dequeue = WIFI_FALSE;
-                    }
-                    else
-                    {
-                        event_s.event = WIFI_ERROR_EVENT;
-                        __disable_irq();
-                        push_eventbuffer(&event_buff, event_s);
-                         __enable_irq();
-                        reset_event(&event_s);
-                        if(status_flag.stop_event_dequeue)
-                          /*ERROR:Illegal Socket ID*/
-                        status_flag.stop_event_dequeue= WIFI_FALSE;//continue popping events if nothing to read
-                    }
-                    Fillptr=0;
-                    sock_total_count=0;
-                    if(status_flag.enable_sock_read)
-                    {
-                        status_flag.sock_read_ongoing = WIFI_FALSE;//we finished processing a message and now sock read will commence
-                        status_flag.Q_Contains_Message = WIFI_FALSE;
-                    }
-                    memset(process_buffer, 0x00, MAX_BUFFER_GLOBAL);
-                }
-
-               else if((((strstr((const char *)process_buffer,"GPIO "))) != NULL)) 
-                {
-                      // Receive GPIO Read
-                      pStr = (char *) strstr((const char *)process_buffer,"= 0,");                                  
-                      if(pStr != NULL)
-                          {
-                              gpio_value = 0;
-                          } 
-                      else 
-                          gpio_value = 1;   
-                      
-                      pStr = (char *) strstr((const char *)process_buffer,"out");                                  
-                      if(pStr != NULL)
-                        {
-                            gpio_direc= 0;    //out
-                        }
-                      else
-                        {
-                            gpio_direc= 1;    //in
-                        }
-                      //Push GPIO Read Event on Event_Queue
-                      event_s.event = WIFI_GPIO_EVENT;
-                      __disable_irq();
-                      push_eventbuffer(&event_buff, event_s);
-                       __enable_irq();
-                      reset_event(&event_s);
-                      if(status_flag.enable_sock_read)
-                        {
-                            status_flag.sock_read_ongoing = WIFI_FALSE;     //we finished processing a message and now sock read will commence
-                            status_flag.Q_Contains_Message = WIFI_FALSE;
-                        }
-                      Fillptr = 0;
-                      memset(process_buffer, 0x00, strlen((const char*)process_buffer));
-                      break;
-                }
-
-               else
-               {
-                  if(status_flag.enable_sock_read && status_flag.Q_Contains_Message && !status_flag.message_pending)
-                  {
-                      printf((const char*)&process_buffer[0]);
-                      status_flag.Q_Contains_Message = WIFI_FALSE;
-                      status_flag.Q_Contains_Data = WIFI_TRUE;
-                      //status_flag.enable_sock_read = WIFI_FALSE;
-                      //status_flag.stop_event_dequeue= WIFI_FALSE;
-                  }
-
-                  //if in data mode, reset on \r\n
-                  if(!status_flag.sock_read_ongoing && status_flag.data_mode)
-                  {
-                    Fillptr = 0;
-                    memset(process_buffer, 0x00, strlen((const char*)process_buffer));
-                  }
-               }
-            }
-
-            else if (status_flag.http_req_pending)   //HTTP Response Check
-            {
-                 if((strstr((const char *)&process_buffer[0],"200 OK\r")) != NULL || (strstr((const char *)&process_buffer[0],"400 Bad Request\r")) != NULL 
-                        || (strstr((const char *)&process_buffer[0],"401 Unauthorized\r")) != NULL || (strstr((const char *)&process_buffer[0],"403 Forbidden\r")) != NULL 
-                        || (strstr((const char *)&process_buffer[0],"404 Not Found\r")) != NULL || (strstr((const char *)&process_buffer[0],"408 Request Timeout\r")) != NULL 
-                        || (strstr((const char *)&process_buffer[0],"500 Internal Server Error\r")) != NULL  || (strstr((const char *)&process_buffer[0],"502 Bad Gateway\r")) != NULL 
-                        || (strstr((const char *)&process_buffer[0],"504 Gateway Timeout\r")) != NULL)
-                {
-                    status_flag.enable_receive_http_response = WIFI_TRUE;
-                    status_flag.enable_receive_data_chunk = WIFI_TRUE;
-                    status_flag.http_req_pending = WIFI_FALSE;
-                    pop_buffer[0]='\0';
-                    pop_buffer_size=0;
-                    process_buffer_index =6;
-                }
-            }
-
-          else if ((process_buffer[Fillptr-1]==0x09) && (process_buffer[Fillptr-2]==':') && (process_buffer[Fillptr-3]=='1'))//<ht> Horizontal Tab for Scan Result?
-            {
-                status_flag.enable_receive_wifi_scan_response = WIFI_TRUE;
-            }
-
-          if(!status_flag.Pending_SockON_Callback && !status_flag.HTTP_Data_available && !status_flag.FILE_Data_available)
-          {
-              //Check Process Buffer for any pending message
-              if(status_flag.enable_receive_data_chunk)
-                {
-                    if(!status_flag.Q_Contains_Data && pop_buffer_size)
-                    {
-                      pop_queue_length = pop_buffer_size;
-                      if(Fillptr + pop_queue_length > 511)
-                      {
-                         uint32_t length = (Fillptr + pop_queue_length) - 511;
-                        __disable_irq();
-                         rewind_buffer_queue(&big_buff,length);
-                         __enable_irq();
-                         memset(ptr+(511 - Fillptr), 0x00, length);
-                         pop_queue_length = 511 - Fillptr;
-                      }
-                      memcpy(process_buffer+Fillptr,(char const *)pop_buffer, pop_queue_length);
-                      Fillptr = Fillptr + pop_queue_length;
-
-                      if(Fillptr > 512)
-                      {
-                          printf("\r\nFillptr corrupted!!\r\n");
-                      }
-
-                      if((strstr((const char *)process_buffer,"ERROR: ")) != NULL)
-                      {
-                           status_flag.Q_Contains_Message = WIFI_FALSE;
-                           status_flag.message_pending = WIFI_FALSE;
-                      }
-                      else if(!status_flag.sock_read_ongoing && !status_flag.enable_receive_http_response) 
-                      {
-                          if(process_buffer[0]!='\0') 
-                          {
-                            if(((process_buffer[0]==0xD) && (process_buffer[1]==0xA)) && process_buffer[2] != 0xD) 
-                            {
-                              status_flag.message_pending = WIFI_TRUE;
-                              if((pStr = (strstr((const char *)process_buffer+2,"\r\n"))) != NULL) 
-                              {                    // process buffer has complete message
-                                    int wind_length = ((uint8_t *)pStr - (uint8_t *)process_buffer)+2;  
-
-                                    if(strstr((const char *)process_buffer+2,"DATALEN:")) 
-                                    {
-                                          pStr = strstr((const char *)process_buffer + wind_length,"\r\nOK\r\n"); //find OK, as DATALEN has to be terminated by OK
-                                          if(pStr!=NULL)
-                                          {
-                                              wind_length = ((uint8_t *)pStr-(uint8_t *)process_buffer)+6;
-                                          }
-                                    }
-
-                                    if(Fillptr-wind_length)
-                                    {
-                                          __disable_irq();
-                                        rewind_buffer_queue(&big_buff, Fillptr - wind_length);             
-                                        __enable_irq();
-                                        memset(process_buffer + wind_length,0x00,Fillptr - wind_length);
-                                        Fillptr = wind_length;
-                                    }
-                                    status_flag.message_pending = WIFI_FALSE;
-                                }
-                                status_flag.Q_Contains_Message = WIFI_TRUE;
-                              }
-                          }
-                      }
-                   }
-                }
-
-              if(!status_flag.Q_Contains_Message && status_flag.enable_sock_read && pop_buffer_size)     /*read is enabled*/
-              {
-                  status_flag.sock_read_ongoing = WIFI_TRUE;
-                  sock_total_count = sock_total_count + pop_queue_length;
-
-                  /* Check for "ERROR: Not enough data in buffer " */
-                  pStr = (char *) strstr((const char *)&process_buffer,"ERROR: ");
-
-                  if (pStr != NULL)
-                  {
-                      if((process_buffer[Fillptr-2]==0xD) && (process_buffer[Fillptr-1]==0xA))
-                      {
-                        if((pStr = (char *)strstr((const char *)&process_buffer,"\r\nERROR: Too many sockets\r\n")) !=NULL)
-                        {
-                           #if DEBUG_PRINT
-                             printf("\r\nERROR: TOO MANY SOCKETS \r\n");
-                           #endif
-                          
-                            if(*(pStr+27)!='\0')
-                            {
-                                int len = (uint8_t *)pStr - (uint8_t *)process_buffer;
-                                int extra_bytes = Fillptr - (len+27);
-                                __disable_irq();
-                                rewind_buffer_queue(&big_buff, extra_bytes);
-                                __enable_irq();
-                            }
-                            Fillptr=0;
-                            sock_total_count =0;
-                            memset(process_buffer, 0x00, MAX_BUFFER_GLOBAL);
-                            status_flag.AT_Response_Received = WIFI_TRUE;
-                            AT_RESPONSE = WiFi_AT_CMD_RESP_ERROR;
-                            break;
-                        }
-                        else if((pStr = (char *)strstr((const char *)&process_buffer,"\r\nERROR: Pending data\r\n")) !=NULL)
-                        {
-                           #if DEBUG_PRINT
-                             printf("\r\nERROR: PENDING DATA \r\n");
-                           #endif
-                          
-                            if(*(pStr+23)!='\0')
-                            {
-                                int len = (uint8_t *)pStr - (uint8_t *)process_buffer;
-                                int extra_bytes = Fillptr - (len+23);
-                                __disable_irq();
-                                rewind_buffer_queue(&big_buff, extra_bytes);
-                                __enable_irq();
-                            }
-                            Fillptr=0;
-                            sock_total_count =0;
-                            memset(process_buffer, 0x00, MAX_BUFFER_GLOBAL);
-                            status_flag.AT_Response_Received = WIFI_TRUE;
-                            AT_RESPONSE = WiFi_AT_CMD_RESP_ERROR;
-                            break;
-                        }
-
-                        printf("\rERROR DURING SOCK READ\r\n");
-                        sock_total_count=0;
-                        SockON_Data_Len=0;
-                        SockON_Data_Length=0;
-                        status_flag.enable_sock_read = WIFI_FALSE;
-                        status_flag.stop_event_dequeue = WIFI_FALSE;
-                        status_flag.Q_Contains_Message = WIFI_FALSE;
-                        status_flag.Q_Contains_Data = WIFI_FALSE;
-                        enable_pending_data = 0;
-                        status_flag.enable_receive_data_chunk = WIFI_FALSE;
-                        WIND64_count=0;
-                        process_buffer_index =5;
-                        //status_flag.enable_query = TRUE;  //do we have more data?
-                        Fillptr=0;
-                        status_flag.sock_read_ongoing = WIFI_FALSE;
-                        if(status_flag.data_pending_sockD)
-                        {
-                            status_flag.data_pending_sockD=WIFI_FALSE;
-                            number_of_bytes=0;
-                            status_flag.switch_by_default_to_command_mode=WIFI_TRUE;
-                            WiFi_switch_to_command_mode(); //switch by default
-                        }
-
-                        memset(process_buffer, 0x00, MAX_BUFFER_GLOBAL);
-                        break;
-                     }
-                  }
-                  
-                  /*now check if end of msg received*/
-                  if(sock_total_count >= SockON_Data_Length)
-                  {
-                    #if DEBUG_PRINT
-                     printf("\nReached SockON_Data_Len \r\n");
-                    #endif
-
-                    if(sock_total_count > SockON_Data_Length)
-                    {
-                        int databytes = sock_total_count - SockON_Data_Length;
-                        __disable_irq();
-                        rewind_buffer_queue(&big_buff, databytes);
-                        __enable_irq();
-                        memset(process_buffer+(Fillptr - databytes), 0x00, databytes);
-                        Fillptr = Fillptr - databytes;
-                    }
-                    chunk_size = Fillptr;
-                    message_size = SockON_Data_Length;
-                    memcpy(UserDataBuff, process_buffer, Fillptr);
-                    Fillptr = 0;
-                    sock_total_count = 0;
-                    SockON_Data_Len = 0;
-                    status_flag.Q_Contains_Data = WIFI_FALSE;
-                    status_flag.Q_Contains_Message = WIFI_FALSE;
-                    status_flag.enable_receive_data_chunk = WIFI_FALSE;
-                    enable_pending_data = 0;
-
-                    if(status_flag.data_pending_sockD)
-                    {
-//                        status_flag.data_pending_sockD=WIFI_FALSE;
-                        number_of_bytes=0;
-                        sockon_id_user = 0;
-                        if(WIND64_count>0)
-                            WIND64_count--;                         //decrease the number of pending WIND:64 Events
-                        if(WIND64_count==0) {
-                        status_flag.switch_by_default_to_command_mode=WIFI_TRUE;
-                        WiFi_switch_to_command_mode();              //switch by default
-                        }
-                        status_flag.enable_query = WIFI_FALSE;
-                    }
-                    else
-                    {
-                        status_flag.enable_query = WIFI_TRUE;
-                        sockon_id_user = sockon_query_id;
-                        /*@TODO: Do not need to prevent OK push in case of server socket*/
-                        status_flag.prevent_push_OK_event = WIFI_TRUE;    //prevent the qeueuing of the OK after this read operation
-                    }
-
-                    status_flag.enable_sock_read = WIFI_FALSE;
-                    status_flag.sock_read_ongoing = WIFI_FALSE;
-                    Stop_Dequeue();                           //Stop dequeue till user callback returns
-                    status_flag.Pending_SockON_Callback = WIFI_TRUE;      //set this to callback to user with User Buffer pointer
-                                  //do we have more data?
-                    if(status_flag.data_pending_sockD)
-                    {
-                      status_flag.stop_event_dequeue = WIFI_FALSE;
-                      status_flag.data_pending_sockD = WIFI_FALSE;
-                    }
-                    memset(process_buffer, 0x00, MAX_BUFFER_GLOBAL);
-                    break;
-                  }
-
-                  if(Fillptr >= MAX_BUFFER_GLOBAL-1)
-                  {
-                    message_size = SockON_Data_Length;
-                    chunk_size = 511;
-                    memcpy(UserDataBuff, process_buffer, Fillptr);
-                    Fillptr = 0;
-                    process_buffer_index = 5;
-                    Stop_Dequeue();
-                    memset(process_buffer, 0x00, MAX_BUFFER_GLOBAL); 
-                    status_flag.Pending_SockON_Callback = WIFI_TRUE;      //set this to callback to user with User Buffer pointer
-                  }
-                  break;
-              }
-
-              if (status_flag.enable_receive_http_response && pop_buffer_size) // http response enabled
-              {
-                  status_flag.sock_read_ongoing = WIFI_TRUE;
-                  if((pStr = (strstr((const char *)process_buffer + process_buffer_index - 6,"\r\nOK\r\n"))) != NULL)  
-                    {
-                        #if DEBUG_PRINT
-                          printf("\r\nOK\r\n");         //http response completed
-                        #endif
-
-                        if(*(pStr+7) != '\0')
-                        {
-                            int len = (uint8_t *)pStr - (uint8_t *)process_buffer;
-                            int extra_bytes = Fillptr - (len+6);
-                            __disable_irq();
-                            rewind_buffer_queue(&big_buff, extra_bytes);
-                            __enable_irq();
-                            
-                            memset(process_buffer+len+7, 0x00, extra_bytes);
-                            Fillptr = Fillptr - extra_bytes;
-                        }
-
-                        memcpy(UserDataBuff, process_buffer, Fillptr);
-                        UserDataBuff_index = Fillptr;
-                        status_flag.AT_Response_Received = WIFI_TRUE;
-                        status_flag.enable_receive_data_chunk = WIFI_FALSE;
-                        status_flag.enable_receive_http_response = WIFI_FALSE;
-                        Stop_Dequeue();
-                        AT_RESPONSE = WiFi_MODULE_SUCCESS;
-                        status_flag.sock_read_ongoing = WIFI_FALSE;
-                        status_flag.Q_Contains_Data = WIFI_FALSE;
-                        status_flag.Q_Contains_Message = WIFI_FALSE;
-                        status_flag.stop_event_dequeue = WIFI_FALSE;
-                        process_buffer_index = 6;
-                        memset(process_buffer, 0x00, Fillptr);
-                        Fillptr=0;
-
-                        if(status_flag.enable_receive_file_response)
-                          status_flag.FILE_Data_available = WIFI_TRUE;
-                        else
-                          status_flag.HTTP_Data_available=WIFI_TRUE;
-                    }
-
-                    else if(((strstr((const char *)process_buffer + process_buffer_index-6,"ERROR"))) != NULL)
-                    {
-                        #if DEBUG_PRINT
-                        printf("\r\nERROR\r\n");
-                        #endif
-                        status_flag.AT_Response_Received = WIFI_TRUE;
-                        AT_RESPONSE = WiFi_AT_CMD_RESP_ERROR;
-                        status_flag.sock_read_ongoing = WIFI_FALSE;
-                        status_flag.enable_receive_data_chunk = WIFI_FALSE;
-                        status_flag.Q_Contains_Data = WIFI_FALSE;
-                        status_flag.Q_Contains_Message = WIFI_FALSE;
-                        Fillptr=0;
-                        process_buffer_index=6;
-                        status_flag.enable_receive_http_response = WIFI_FALSE;
-                        memset(process_buffer, 0x00, MAX_BUFFER_GLOBAL);
-
-                        if(status_flag.enable_receive_file_response)
-                          status_flag.FILE_Data_available = WIFI_FALSE;
-                        else
-                          status_flag.HTTP_Data_available=WIFI_FALSE;
-                    }
-
-                    process_buffer_index = Fillptr;
-                    if(Fillptr == MAX_BUFFER_GLOBAL-1 )
-                    {
-                          memcpy(UserDataBuff, process_buffer, Fillptr);
-                          memcpy(&HTTP_Runway_Buff, &UserDataBuff[505], 6);
-                          memset(&UserDataBuff[505], 0x00, 6);
-                          memset(process_buffer, 0x00, MAX_BUFFER_GLOBAL);
-                          memcpy(&process_buffer, &HTTP_Runway_Buff, 6);
-                          memset(HTTP_Runway_Buff, 0x00, 6);
-                          Fillptr = 6;
-                          process_buffer_index = 6;
-                          UserDataBuff_index = 505;
-                          Stop_Dequeue();
-                          
-                          if(status_flag.enable_receive_file_response)
-                            status_flag.FILE_Data_available = WIFI_TRUE;
-                          else
-                            status_flag.HTTP_Data_available=WIFI_TRUE;
-                    }
-                    break;
-              }
-          }
-          if((!status_flag.Q_Contains_Message) && status_flag.enable_receive_wifi_scan_response)
-          {
-                /*now check if end of msg received*/
-                if((process_buffer[Fillptr-2]==0xD) && (process_buffer[Fillptr-1]==0xA))
-                {       
-                  if(scanned_ssids < user_scan_number)
-                    {
-                        pStr = (char *) strstr((const char *)&process_buffer,"CHAN:");            
-                        if(pStr != NULL)
-                            {
-                                databytes_No[0] = *(pStr + 6) ;
-                                databytes_No[1] = *(pStr + 7) ;
-                      
-                                chan_value = (((databytes_No[0] - '0') * 10 ) + (databytes_No[1] - '0'));
-                            }
-
-                        wifi_scanned_list[scanned_ssids].channel_num = chan_value;
-
-                        pStr = (char *) strstr((const char *)&process_buffer,"RSSI:");            
-                        if(pStr != NULL)
-                            {
-                                databytes_No[0] = *(pStr + 7) ;
-                                databytes_No[1] = *(pStr + 8) ;
-                      
-                                rssi_value = (((databytes_No[0] - '0') * 10 ) + (databytes_No[1] - '0'));
-                            }
-
-                        wifi_scanned_list[scanned_ssids].rssi = -(rssi_value);
-
-                        pStr = (char *) strstr((const char *)&process_buffer,"SSID:");
-                        if(pStr != NULL)
-                            {
-                                index = 7;
-                                while(*(pStr + index) != 0x27)
-                                    {
-                                        wifi_scanned_list[scanned_ssids].ssid[index-7] = *(pStr + index);
-                                        index++;
-                                        if(index==35) break; //max ssid lenght is 30 characters
-                                    }                                
-                            }
-
-                        pStr = (char *) strstr((const char *)&process_buffer,"WPA ");            
-                        if(pStr != NULL)
-                            {
-                                wifi_scanned_list[scanned_ssids].sec_type.wpa = WIFI_TRUE;
-                            } else
-                                wifi_scanned_list[scanned_ssids].sec_type.wpa = WIFI_FALSE;
-                        
-                        pStr = (char *) strstr((const char *)&process_buffer,"WPA2 ");            
-                        if(pStr != NULL)
-                            {
-                                wifi_scanned_list[scanned_ssids].sec_type.wpa2 = WIFI_TRUE;
-                            } else
-                                wifi_scanned_list[scanned_ssids].sec_type.wpa2 = WIFI_FALSE;
-                        
-                        pStr = (char *) strstr((const char *)&process_buffer,"WPS ");            
-                        if(pStr != NULL)
-                            {
-                                wifi_scanned_list[scanned_ssids].sec_type.wps = WIFI_TRUE;
-                            } else
-                                wifi_scanned_list[scanned_ssids].sec_type.wps = WIFI_FALSE;
-
-                        scanned_ssids++;//increment total_networks
-                        //callSpwfSADevice_debug(spwf_dev_,(const char*)scanned_ssids);
-                    }
-
-                  //end of one line from SCAN result       
-                  pStr = (char *) strstr((const char *)&process_buffer,"ERROR");
-                  if(pStr != NULL)
-                  {
-                   #if DEBUG_PRINT
-                   printf("ERROR Scan Failed"); 
-                   #endif
-                   memset(process_buffer, 0x00, MAX_BUFFER_GLOBAL);
-                   Fillptr=0;
-                   status_flag.AT_Response_Received = WIFI_TRUE;
-                   status_flag.enable_receive_wifi_scan_response = WIFI_FALSE;
-                   status_flag.Scan_Ongoing = WIFI_FALSE; //Enable next scan
-                   AT_RESPONSE = WiFi_AT_CMD_RESP_ERROR;     
-                   break;
-                  }
-
-                  #if DEBUG_PRINT
-                  printf((const char*)process_buffer);
-                  #endif
-                    
-                  callSpwfSADevice_debug(spwf_dev_,(const char*)process_buffer);
-                  
-                  if(((strstr((const char *)process_buffer,"OK\r\n"))) != NULL /*|| scanned_ssids==10*/)/*Max 10 networks supported*/
-                  {
-                    //print and go for next line
-                    //If Any part of scan line contains "OK" this will exit!!
-                    #if DEBUG_PRINT
-                      printf("\nOK\r\n");   
-                    #endif
-                    status_flag.Scan_Ongoing = WIFI_FALSE; //Enable next scan             
-                    scanned_ssids=0;                       
-                    Fillptr=0;
-                    status_flag.AT_Response_Received = WIFI_TRUE;
-                    status_flag.enable_receive_wifi_scan_response = WIFI_FALSE;
-                    AT_RESPONSE = WiFi_MODULE_SUCCESS;
-                    memset(process_buffer, 0x00, MAX_BUFFER_GLOBAL);    
-                    break;
-                  }
-
-                  Fillptr=0;
-                  memset(process_buffer, 0x00, MAX_BUFFER_GLOBAL);          
-                }
-
-                if(Fillptr>=MAX_BUFFER_GLOBAL-1)
-                {
-                  #if DEBUG_PRINT
-                  printf("\rHTTP: process_buffer Max Buffer Size reached\r\n");
-                  #endif          
-                  Fillptr=0;          
-                  memset(process_buffer, 0x00, MAX_BUFFER_GLOBAL); 
-                }
-          }
-
-          if((!status_flag.Q_Contains_Message) && status_flag.enable_fw_update_read)
-          {
-                  #ifdef DEBUG_PRINT
-                  printf("*");     //print * till finish    
-                  #endif
-
-                  pStr = (char *) strstr((const char *)process_buffer,"Complete!");
-
-                  if(pStr != NULL)
-                  {
-                        #ifdef DEBUG_PRINT
-                        printf("\r\nUpdate complete\r\n");
-                        #endif
-                        status_flag.AT_Response_Received = WIFI_TRUE;
-                        AT_RESPONSE = WiFi_MODULE_SUCCESS;
-                        status_flag.enable_fw_update_read = WIFI_FALSE;
-                        Fillptr=0;
-                        memset(process_buffer, 0x00, strlen((char const *)process_buffer));
-                  } 
-                  if(Fillptr>=MAX_BUFFER_GLOBAL)
-                  {
-                      Fillptr=0;
-                      memset(process_buffer, 0x00, strlen((char const *)process_buffer));
-                  }
-
-                  //No change of state till we get "+WIND:17:F/W update complete!"
-          }
-
-          /*else no other case is satisfied at least do the following*/
-          {
-                if(Fillptr>=MAX_BUFFER_GLOBAL-1)
-                  {
-                      Fillptr=0;
-                      memset(process_buffer, 0x00,MAX_BUFFER_GLOBAL-1);
-                  }
-          }
-  }
-}
-
-/**
-* @brief  Process_Wind_Indication_Cmd
-*         Process Wind indication command
-* @param  process_buff_ptr: pointer of WiFi indication buffer
-* @retval None
-*/
-
-void Process_Wind_Indication(uint8_t *process_buff_ptr)
-{
-  char * pStr = (char*)process_buff_ptr;
-  char Indication_No[2]; 
-  char databytes_No[4]; 
-  #if DEBUG_PRINT
-  printf((const char*)process_buff_ptr);
-  #endif
-  //callSpwfSADevice_debug(spwf_dev_,(const char*)process_buff_ptr);
-  
-  char * ptr_offset;
-  int i;
-
-  uint32_t wind55_data_len=0;
-  WiFi_Indication_t Wind_No = Undefine_Indication;
-  
-  if(pStr != NULL)
-  {
-      pStr = (char *) strstr((const char *)(pStr),"WIND:");///////
-      
-      if(pStr != NULL)
-      {
-          Indication_No[0] = *(pStr + 5) ;
-          Indication_No[1] = *(pStr + 6) ;
-          
-          if( Indication_No[1] == ':')
-          {
-            status_flag.Single_Digit_Indication = WIFI_TRUE;
-            /*  Convert char to integer */
-            Wind_No = (WiFi_Indication_t)(Indication_No[0] - '0'); 
-          }
-          else
-          {
-            status_flag.Single_Digit_Indication = WIFI_FALSE;
-            /* Convert char to integer */   
-            Wind_No = (WiFi_Indication_t)(((Indication_No[0] - '0') * 10 ) + (Indication_No[1] - '0'));
-          }
-          
-          event_s.wind = Wind_No;
-          event_s.event = WIFI_WIND_EVENT;
-          
-          switch (Wind_No)
-          {
-          case SockON_Data_Pending: /*WIND:55*/
-              
-                  /*+WIND:55:Pending Data:%d:%d*/   
-                  ptr_offset = (char *) strstr((const char *)&process_buffer,"Data:");
-            
-                  /*Need to find out which socket ID has data pending*/
-                  databytes_No[0] = *(ptr_offset + 5);
-                  
-                  SocketId = (databytes_No[0] - '0');//Max number of sockets is 8 (so single digit)
-                  event_s.socket_id = SocketId; 
-                  enable_pending_data = 1;
-            
-                  /* EQ. Check for ENC string to identify TLS case. Set enable_query */ 
-                  if ( (*(ptr_offset + 7) == 'E') && (*(ptr_offset + 8) == 'N') && (*(ptr_offset + 9) == 'C') )
-                  {
-                        event_s.enc = WIFI_TRUE;
-                  }
-                  else
-                  {                
-                        //And find the length of the data
-                        databytes_No[0] = *(ptr_offset + 7);
-                        databytes_No[1] = *(ptr_offset + 8);
-                        databytes_No[2] = *(ptr_offset + 9);
-                        databytes_No[3] = *(ptr_offset + 10);
-            
-                         if( databytes_No[1] == '\r')
-                         {      
-                                        wind55_data_len = databytes_No[0] - '0'; 
-                         }
-                         else if( databytes_No[2] == '\r')
-                         {
-                                        wind55_data_len = (((databytes_No[0] - '0') * 10 ) + (databytes_No[1] - '0'));
-                         }
-                         else if( databytes_No[3] == '\r') //it's a 3-digit number
-                         {
-                                        wind55_data_len = (((databytes_No[0] - '0') * 100 ) + ((databytes_No[1] - '0') * 10 ) + (databytes_No[2] - '0'));
-                         }
-                         else   //it's a 4-digit number
-                         {
-                                        wind55_data_len = ((databytes_No[0] - '0') * 1000 ) + ((databytes_No[1] - '0') * 100 ) + ((databytes_No[2] - '0') * 10) + (databytes_No[3] - '0');            
-                         }                
-                         
-                           event_s.data_length = wind55_data_len;
-                           wind55_data_len = 0;
-                   }
-                   break;
-
-              case SockON_Server_Socket_Closed:
-                    //Find the id of the socket closed
-                    //ptr_offset = (char *) strstr((const char *)pStr,"+WIND:58");
-                    databytes_No[0] = *(pStr + 22) ;
-                    databytes_No[1] = *(pStr + 23) ;
-                    if( databytes_No[1] == '\r')
-                    {
-                          remote_socket_closed_id = databytes_No[0] - '0'; 
-                    }
-                    else
-                    {
-                          remote_socket_closed_id = (((databytes_No[0] - '0') * 10 ) + (databytes_No[1] - '0'));
-                    }
-                    event_s.socket_id = remote_socket_closed_id;
-                    break;      
-                    
-              case SockD_Pending_Data:
-                    if(status_flag.prevent_push_WIFI_event) 
-                    {
-                      #ifdef DEBUG_PRINT
-                      printf(">>IG\r\n");
-                      #endif
-                      return; ///exit if push is prevented
-                    }
-
-                  /* @TODO: Do something to delay the de-Q of pending packets so that any further
-                            pending WIND64 packets are allowed to arrive and get Q-ed */
-
-                    if(status_flag.event_deQ_x_wind64)      //which means there is already a previous WIND64
-                    {
-                      wind64_DQ_wait=0;         //reset the timer
-                    }
-                    else
-                    {
-                      status_flag.stop_event_dequeue = WIFI_TRUE;//Stop the event de-Q
-                      status_flag.event_deQ_x_wind64 = WIFI_TRUE;//Set the flag
-                    }
-                    //Start Reading data from Client Here.    
-                    // +WIND:64:Sockd Pending Data:1:130:130
-                    ptr_offset = (char *) strstr((const char *)&process_buffer,"Data:");
-
-                    //Store the packet number
-                    databytes_No[0] = *(ptr_offset + 5) ;
-                    event_s.wind64_pending_packet_no = databytes_No[0] - '0';
-
-                    //And now find the data length
-                    databytes_No[0] = *(ptr_offset + 8) ;//points to number just after 2nd colon
-                    databytes_No[1] = *(ptr_offset + 9) ;
-                    databytes_No[2] = *(ptr_offset + 10) ;
-                    databytes_No[3] = *(ptr_offset + 11) ;
-          
-                    if( databytes_No[0] == ':')//then it is a 1 digit number
-                    {
-                      databytes_No[0] = *(ptr_offset + 7) ;
-                      databytes_No[1] = *(ptr_offset + 8) ;
-                    }
-                    else if(databytes_No[1] == ':')//two digit number
-                    {
-                      databytes_No[0] = *(ptr_offset + 7) ;
-                      databytes_No[1] = *(ptr_offset + 8) ;
-                      databytes_No[2] = *(ptr_offset + 9) ;
-                      //databytes_No[3] = *(ptr_offset + 13) ;
-                    }
-                    else if(databytes_No[2] == ':')//three digit number
-                    {
-                      databytes_No[0] = *(ptr_offset + 7) ;
-                      databytes_No[1] = *(ptr_offset + 8) ;
-                      databytes_No[2] = *(ptr_offset + 9) ;
-                      databytes_No[3] = *(ptr_offset + 10) ;
-                    }
-                    else if(databytes_No[3] == ':')//four digit number
-                    {
-                      databytes_No[0] = *(ptr_offset + 7) ;
-                      databytes_No[1] = *(ptr_offset + 8) ;
-                      databytes_No[2] = *(ptr_offset + 9) ;
-                      databytes_No[3] = *(ptr_offset + 10) ;
-                    }
-
-                    if( databytes_No[1] == ':')
-                    {
-                      interim_number_of_bytes = databytes_No[0] - '0'; 
-                    }
-                    else if( databytes_No[2] == ':')
-                    {
-                      interim_number_of_bytes = (((databytes_No[0] - '0') * 10 ) + (databytes_No[1] - '0'));
-                    }
-                    else if( databytes_No[3] == ':')
-                    {
-                      interim_number_of_bytes = (((databytes_No[0] - '0') * 100 ) + ((databytes_No[1] - '0') * 10 ) + (databytes_No[2] - '0'));
-                    }
-                    else //it's a 4-digit number
-                    {
-                      interim_number_of_bytes = (((databytes_No[0] - '0') * 1000 ) + ((databytes_No[1] - '0') * 100 ) + ((databytes_No[2] - '0') * 10 ) + (databytes_No[3] - '0'));
-                    }            
-
-                    if(WIND64_count >= 1) /*WIND:64 came after pop of previous event and switch to data mode was issued*/
-                                       /*WIND:64 came before pop of previous event and switch to data mode was issued*/
-                        {
-                            event_s.data_length = interim_number_of_bytes;// - (730*WIND64_count);
-                            WIND64_count++;           //Count of the number of queued WIND:64 Events
-                            interim_number_of_bytes = 0;
-                            break;
-                        }
-                    else
-                        {
-                            event_s.data_length = interim_number_of_bytes;
-                            WIND64_count++; //Count of the number of queued WIND:64 Events
-                            interim_number_of_bytes = 0;
-                        }
-                    break;
-
-                case In_Command_Mode:
-                    status_flag.command_mode= WIFI_TRUE;
-                    status_flag.data_mode= WIFI_FALSE;
-                    WIND64_count=0;     //reset the WIND64 count since the previous data mode would have consumed all data
-                    break;
-
-                case In_Data_Mode:
-                    status_flag.command_mode = WIFI_FALSE;
-                    status_flag.data_mode = WIFI_TRUE;
-
-                    if(status_flag.switch_by_default_to_command_mode == WIFI_TRUE)
-                    {
-                      if(!status_flag.command_mode)
-                      {
-                        WiFi_switch_to_command_mode();//switch by default
-                      }    
-                    }
-                    if(status_flag.data_pending_sockD == WIFI_TRUE)
-                      {
-                          
-                         process_buffer_index =5;
-                         status_flag.enable_sock_read = WIFI_TRUE;//now data will start coming
-                        //Set the data-length to read
-                        SockON_Data_Length = number_of_bytes;
-                      }
-                    break;
-                    
-                case WiFi__MiniAP_Associated:
-                    //Find out which client joined by parsing the WIND //+WIND:28
-                    ptr_offset = (char *) strstr((const char *)&process_buffer,"+WIND:28");
-                    for(i=17;i<=33;i++)
-                    client_MAC_address[i-17] = *(ptr_offset + i) ;    
-                    WiFi_WIND_State.WiFiAPClientJoined = WIFI_TRUE;
-                    break;
-                    
-                case WiFi_MiniAP_Disassociated:
-                    //Find out which client left by parsing the WIND //+WIND:72
-                    ptr_offset = (char *) strstr((const char *)&process_buffer,"+WIND:72");
-                    for(i=17;i<=33;i++)
-                    client_MAC_address[i-17] = *(ptr_offset + i) ;
-                    WiFi_WIND_State.WiFiAPClientLeft = WIFI_TRUE;
-                    break;
-
-                case Console_Active:
-                case Poweron :
-                case WiFi_Reset:
-                case Watchdog_Running:
-                case Heap_Too_Small:
-                case WiFi_Hardware_Dead:
-                case Watchdog_Terminating:
-                case SysTickConfigure:
-                case Hard_Fault:
-                case StackOverflow:
-                case MallocFailed:
-                case Error:
-                case WiFi_PS_Mode_Failure:
-                case CopyrightInfo:
-                case WiFi_BSS_Regained:
-                case WiFi_Signal_LOW:
-                case WiFi_Signal_OK:
-                case FW_update:
-                case Encryption_key_Not_Recognized:
-                case WiFi_Join:
-                case JOINFAILED:
-                case WiFi_Scanning:
-                case SCANBLEWUP:
-                case SCANFAILED:
-                case WiFi_Up:
-                case WiFi_Association_Successful:
-                case WiFi_Started_MiniAP_Mode:
-                case Start_Failed :
-                case WiFi_EXCEPTION :
-                case WiFi_Hardware_Started :
-                case WiFi_BSS_LOST:
-                case WiFi_Unhandled_Event:
-                case Scan_Complete:
-                case WiFi_UNHANDLED_IND:
-                case WiFi_UNHANDLED:
-                case WiFi_Powered_Down:
-                case WiFi_MiniAP_Mode :
-                case WiFi_Deauthentication:
-                case WiFi_Disassociation:
-                case RX_MGMT:
-                case RX_DATA:
-                case RX_UNK:
-                case DOT11_AUTHILLEGAL:
-                case Creating_PSK:
-                case WPA_Terminated :
-                case WPA_Supplicant_Failed:
-                case WPA_Handshake_Complete:
-                case GPIO_line:
-                case Wakeup:
-                case Factory_debug:
-                case Remote_Configuration:
-                     break;
-                default:
-                     break;
-            }
-         memset(process_buffer, 0x00, MAX_BUFFER_GLOBAL);
-      }
-   }
-}
-
-/**
-* @brief  Process_Dequeued_Wind_Indication
-*         Process Wind Indication after popping from Queue
-* @param  event_pop_s1 popped event contents
-* @retval None
-*/
-
-void Process_WiFi_Indication_Cmd(event_s_TypeDef * event_pop_s1)
-{
-  switch(event_pop_s1->wind)
-  { 
-    case Console_Active:
-        WiFi_WIND_State.ConsoleActive = WIFI_TRUE;
-      break;
-    case Poweron :
-        WiFi_WIND_State.WiFiPowerON = WIFI_TRUE;
-      break;
-    case WiFi_Reset:
-        WiFi_WIND_State.WiFiReset = WIFI_TRUE;
-      break;
-    case Watchdog_Running:
-      break;
-    case Heap_Too_Small:
-          WiFi_WIND_State.HeapTooSmall=WIFI_TRUE;
-      break;
-    case WiFi_Hardware_Dead:
-        WiFi_WIND_State.WiFiHWFailure = WIFI_TRUE;
-      break;
-    case Watchdog_Terminating:
-      break;
-    case SysTickConfigure:
-      break;
-    case Hard_Fault:
-        WiFi_WIND_State.HardFault = WIFI_TRUE;
-      break;   
-    case StackOverflow:
-      WiFi_WIND_State.StackOverflow = WIFI_TRUE;
-      break;
-    case MallocFailed:
-      WiFi_WIND_State.MallocFailed = WIFI_TRUE;
-      break;
-    case Error:
-      WiFi_WIND_State.InitFailure = WIFI_TRUE;
-      break;
-    case WiFi_PS_Mode_Failure:
-      WiFi_WIND_State.PS_Mode_Failure = WIFI_TRUE;
-      break;
-    case CopyrightInfo:
-      break;
-    case WiFi_BSS_Regained:
-      break;
-    case WiFi_Signal_LOW:
-          WiFi_WIND_State.WiFiSignalLOW = WIFI_TRUE;
-      break;
-    case WiFi_Signal_OK :
-      break;
-    case FW_update:
-      break;
-    case Encryption_key_Not_Recognized:
-      break;
-    case WiFi_Join :
-        WiFi_WIND_State.WiFiJoin = WIFI_TRUE;
-      break;
-    case JOINFAILED :
-      WiFi_WIND_State.WiFiJoinFailed = WIFI_TRUE;
-      break;
-    case WiFi_Scanning :
-        WiFi_WIND_State.WiFiScanning = WIFI_TRUE;
-      break;
-    case SCANBLEWUP:
-      WiFi_WIND_State.WiFiScanBlewUp = WIFI_TRUE;
-      break;
-    case SCANFAILED:
-      WiFi_WIND_State.WiFiScanFailed = WIFI_TRUE;
-      break;
-    case WiFi_Up:
-        WiFi_WIND_State.WiFiUp = WIFI_TRUE;
-      break;
-    case WiFi_Association_Successful:
-        WiFi_WIND_State.WiFiAssociation = WIFI_TRUE;
-      break;
-    case WiFi_Started_MiniAP_Mode:
-        WiFi_WIND_State.WiFiStarted_MiniAPMode = WIFI_TRUE;
-      break;
-    case Start_Failed :
-        WiFi_WIND_State.StartFailed = WIFI_TRUE;  
-      break;
-    case WiFi_EXCEPTION :
-        WiFi_WIND_State.WiFiException = WIFI_TRUE;
-      break;
-    case WiFi_Hardware_Started :
-        wifi_ready++;
-        status_flag.WiFi_Enabled = WIFI_TRUE;
-        WiFi_WIND_State.WiFiHWStarted = WIFI_TRUE;
-        /*If this is a start-up after standby*/
-        if(status_flag.trigger_wakeup_callback == WIFI_TRUE)
-          {
-            status_flag.trigger_wakeup_callback = WIFI_FALSE;
-            status_flag.Standby_Enabled = WIFI_FALSE;
-            status_flag.standby_resume_callback = WIFI_TRUE;
-          }      
-      break;
-    case WiFi_BSS_LOST:
-      break;
-    case WiFi_Unhandled_Event:
-      break;
-    case Scan_Complete:
-        WiFi_WIND_State.WiFiScanComplete = WIFI_TRUE;
-        status_flag.Scan_Ongoing = WIFI_FALSE;
-      break;
-    case WiFi_UNHANDLED_IND:
-      WiFi_WIND_State.WiFiUnHandledInd = WIFI_TRUE;
-      break;
-    case WiFi_UNHANDLED:
-      break;
-    case WiFi_Powered_Down:
-        status_flag.WiFi_Enabled = WIFI_FALSE;      
-        //wifi_ready = 0;
-        WiFi_WIND_State.WiFiHWStarted = WIFI_FALSE;
-        WiFi_WIND_State.WiFiPowerDown = WIFI_TRUE;
-      break;
-    case WiFi_MiniAP_Mode :
-        WiFi_WIND_State.WiFiMiniAPMode = WIFI_TRUE;
-      break;
-    case WiFi_Deauthentication:
-        WiFi_WIND_State.WiFiDeauthentication = WIFI_TRUE;
-      break;    
-    case WiFi_Disassociation:
-      WiFi_WIND_State.WiFiDisAssociation = WIFI_TRUE;
-      break;
-    case RX_MGMT:
-      WiFi_WIND_State.WiFiRXMgmt = WIFI_TRUE;
-      break;
-    case RX_DATA:
-      WiFi_WIND_State.WiFiRXData = WIFI_TRUE;
-      break;
-    case RX_UNK:
-      WiFi_WIND_State.WiFiRxUnk = WIFI_TRUE;
-      break;
-    case DOT11_AUTHILLEGAL:
-      break;
-    case Creating_PSK:
-      break; 
-    case WPA_Terminated :
-      break;
-    case WPA_Supplicant_Failed:
-      break;
-    case WPA_Handshake_Complete:
-      break;
-    case GPIO_line:
-      break;
-    case Wakeup:
-      break;
-    case Factory_debug:
-      break;  
-
-    case SockON_Data_Pending:
-
-      /* +WIND:55:Pending Data:%d:%d */
-      if (status_flag.enable_sock_read == WIFI_TRUE)
-      {       
-          #if DEBUG_PRINT
-            printf ("\nAlert!\r\n");
-          #endif
-          status_flag.enable_sock_read = WIFI_FALSE;
-          status_flag.enable_receive_data_chunk = WIFI_FALSE;
-          //break;
-      }
-      sockon_query_id = event_pop_s1->socket_id;
-      if(open_sockets[sockon_query_id])
-      {
-          status_flag.enable_query = WIFI_TRUE;
-          status_flag.stop_event_dequeue = WIFI_TRUE;
-      }
-
-       break;
-
-    case SockON_Server_Socket_Closed:
-      client_socket_close_id = event_pop_s1->socket_id;
-      status_flag.Client_Socket_Close_Cmd = WIFI_TRUE;
-      break;
-
-    case SockD_Pending_Data:
-      number_of_bytes = event_pop_s1->data_length;
-      status_flag.data_pending_sockD = WIFI_TRUE;
-      status_flag.stop_event_dequeue = WIFI_TRUE;             //Stop any more event de-queue
-      status_flag.enable_receive_data_chunk = WIFI_TRUE;       // read data in chunk now from ring buffer
-
-      if(!status_flag.data_mode)
-        {
-          if(event_pop_s1->wind64_pending_packet_no == 1) { //If this is the first WIND64 pending event de-Q'ed
-              status_flag.switch_by_default_to_command_mode = WIFI_FALSE; //we don't want to switch back to command mode after changing to data mode here
-              WiFi_switch_to_data_mode();     //switch by default
-          }
-        }
-      else //already data is coming from previous WIND:64
-      {
-          process_buffer_index =5;
-          status_flag.enable_sock_read = WIFI_TRUE;//n
-          SockON_Data_Length = number_of_bytes;
-      }
-      break;
-
-    case Incoming_socket_client:
-      status_flag.Client_Connected = WIFI_TRUE;
-      wifi_client_connected=1;  //Set this so that the callback can be made to the user
-      break;
-
-    case Outgoing_socket_client:
-      status_flag.Client_Disconnected = WIFI_TRUE;
-      wifi_client_disconnected=0;//Set this so that the callback can be made to the user
-      wifi_client_connected = 0;
-      break;
-
-    case SockD_Dropping_Data:
-      WiFi_WIND_State.WiFiSockdDataLost = WIFI_TRUE;
-      break;
-
-    case Low_Power_Mode_Enabled:
-      status_flag.Low_Power_Enabled = WIFI_TRUE;
-      break;
-
-    case Going_Into_Standby:
-      status_flag.Standby_Enabled = WIFI_TRUE;
-      break;
-
-    case Resuming_From_Standby:
-      status_flag.Standby_Enabled = WIFI_FALSE;
-      status_flag.standby_resume_callback = WIFI_TRUE;
-      break;    
-    case Going_Into_DeepSleep:
-      status_flag.Deep_Sleep_Enabled = WIFI_TRUE;    
-      break;
-    case Resuming_From_DeepSleep:
-      status_flag.Deep_Sleep_Enabled = WIFI_FALSE;
-      Start_DeepSleep_Timer();
-      break;
-    default:
-      break;
-  }
-}
-
-/**
-* @brief  Queue_Http_Get_ Event
-*         Queue an HTTP-Request Event (GET/POST)
-* @param  hostname hostname for HTTP-GET/POST
-* @param  path path for HTTP-GET
-* @param  port_number port_number for HTTP-GET
-* @param  pURL_path full URL for HTTP-POST
-* @retval None
-*/
-
-void Queue_Http_Event(uint8_t * hostname, uint8_t * path, uint32_t port_number, uint8_t * pURL_path) 
-{
-   Wait_For_Sock_Read_To_Complete();
-   if(pURL_path == NULL)
-    {
-      curr_hostname = hostname;
-      curr_path = path;
-      curr_port_number = port_number;
-    }
-    else
-      curr_pURL = pURL_path;
-
-    event_s.event = WIFI_HTTP_EVENT;
-    __disable_irq();
-    push_eventbuffer(&event_buff, event_s);
-     __enable_irq();
-    
-    reset_event(&event_s);
-}
-
-/**
-* @brief  Queue_Client_Write_Event
-*         Queues a Client Socket write event.
-* @param  sock_id socket ID to write to
-* @param  DataLength length of the data to be written
-* @param  pData pointer to data
-* @retval None
-*/
-void Queue_Client_Write_Event(uint8_t sock_id, uint16_t DataLength, char * pData)
-{
-    Wait_For_Sock_Read_To_Complete();
-    curr_DataLength = DataLength;
-    curr_data = pData;
-    curr_sockID = sock_id;
-    status_flag.enable_client_socket_write = WIFI_TRUE;
-
-    event_s.event = WIFI_CLIENT_SOCKET_WRITE_EVENT;
-    __disable_irq();
-    push_eventbuffer(&event_buff, event_s);
-    __enable_irq();
-
-    reset_event(&event_s);
-}
-
-/**
-* @brief Queue_Wifi_File_Image_Create_Event
-*        Queue a File Image Create Event
-* @param pHostName hostname
-* @param pFileName filename within host
-* @param port_number port number to connect to
-* @retval None
-*/
-void Queue_Wifi_File_Event(uint8_t * pHostName, uint8_t * pFileName, uint32_t port_number)
-{
-    Wait_For_Sock_Read_To_Complete();
-    event_s.event = WIFI_FILE_EVENT;
-    curr_filename = pFileName;
-    curr_hostname = pHostName;
-    curr_port_number = port_number;
-
-    __disable_irq();
-    push_eventbuffer(&event_buff, event_s);
-    __enable_irq();
-
-    reset_event(&event_s);
-}
-
-/**
-* @brief Queue_Wifi_FW_Update_Event
-*        Queue a Firmware update Event
-* @param hostname hostname
-* @param filename_path filename and path within host
-* @param port_number port number to connect to
-* @retval None
-*/
-void Queue_Wifi_FW_Update_Event(uint8_t * hostname, uint8_t * filename_path, uint32_t port_number)
-{
-    Wait_For_Sock_Read_To_Complete();
-    event_s.event = WIFI_FW_UPDATE_EVENT;
-    curr_filename = filename_path;
-    curr_hostname = hostname;
-    curr_port_number = port_number;
-
-    __disable_irq();
-    push_eventbuffer(&event_buff, event_s);
-    __enable_irq();
-
-    reset_event(&event_s);
-}
-
-void Queue_Client_Open_Event(uint8_t * hostname, uint32_t port_number, uint8_t * protocol)
-{
-    Wait_For_Sock_Read_To_Complete();
-    curr_hostname = hostname;
-    curr_port_number = port_number;
-    curr_protocol = protocol;
-    
-    event_s.event = WIFI_CLIENT_SOCKET_OPEN_EVENT;
-     __disable_irq();
-    push_eventbuffer(&event_buff, event_s);
-    __enable_irq();
-
-    reset_event(&event_s);
-}
-
-void Queue_Client_Close_Event(uint8_t sock_id)
-{
-    Wait_For_Sock_Read_To_Complete();
-
-    event_s.event = WIFI_CLIENT_SOCKET_CLOSE_EVENT;
-    event_s.socket_id = sock_id;
-     __disable_irq();
-    push_eventbuffer(&event_buff, event_s);
-    __enable_irq();
-
-    reset_event(&event_s);
-}
-
-/**
-* @brief Wait_For_Sock_Read_To_Complete
-*        Wait till sock is over and the OK of read arrives
-* @param None
-* @retval None
-*/
-void Wait_For_Sock_Read_To_Complete(void)
-{
-  //wait if read is ongoing or read OK is yet to arrive
-  while(status_flag.sock_read_ongoing==WIFI_TRUE || status_flag.prevent_push_OK_event==WIFI_TRUE)
-  {
-        asm("NOP");
-  }
-}
-
-/**
-* @brief  Reset_AT_CMD_Buffer
-*         Clear USART2 Rx buffer and Wi-Fi AT cmd buffer
-* @param  None
-* @retval None
-*/
-void Reset_AT_CMD_Buffer()
-{
-  memset(WiFi_AT_Cmd_Buff, 0x00, sizeof WiFi_AT_Cmd_Buff); 
-}
-
-#ifdef  USE_FULL_ASSERT
-
-/**
-* @brief  Reports the name of the source file and the source line number
-*         where the assert_param error has occurred.
-* @param  file: pointer to the source file name
-* @param  line: assert_param error line source number
-* @retval None
-*/
-void assert_failed(uint8_t* file, uint32_t line)
-{
-  /* User can add his own implementation to report the file name and line number,
-  ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
-  
-  /* Infinite loop */
-  while (1)
-  {
-  }
-}
-
-#endif
-
-
-/**
-* @brief  search_buffer
-*         search for substring in a buffer that contains null
-* @param  pSourceBuff   : pointer of source buffer
-*         sourceBuffLen : length of string buffer
-*         pSearchStringBuff : pointer of search string buffer
-*         seartchStringLen  : length of search string buffer
-* @retval pointer of source buffer
-*/
-char *search_buffer(char *pSourceBuff, uint16_t sourceBuffLen, char *pSearchStringBuff, uint16_t seartchStringLen)
-{   /* warning: O(n^2) */
-    int searchlen = sourceBuffLen - seartchStringLen + 1;
-    for ( ; searchlen-- > 0; pSourceBuff++)
-        if (!memcmp(pSourceBuff, pSearchStringBuff, seartchStringLen))
-            return pSourceBuff;
-    return NULL;
-}
-
-/**
-* @brief  Delete_Colon
-*         delete colon from input buffer
-* @param  input : pointer of input buffer
-* @retval return pointer of updated buffer
-*/
-char* Delete_Colon(char* input)                                         
-{
-    int i,j;
-    char *output=input;
-    
-    /* Delete Colon */
-    for (i = 0, j = 0; i<strlen(input); i++,j++)          
-    {
-#if 0     
-      if (input[i]!=':') && (input[i]!='\r')&& (input[i]!='\n')&& (input[i]!='O')&& (input[i]!='K'))
-            output[j]=input[i];                     
-        else
-            j--;                                     
-#else
-      if ((input[i] ==':') || (input[i]=='\r')|| (input[i]=='\n')|| (input[i]=='O')|| (input[i]=='K'))
-            j--;                                     
-        else
-          output[j]=input[i];                            
-    }
-    //output[j]=NULL;    
-#endif  
-    return output;
-}
-
-/**
-* @brief  Read_WiFi_SSID
-*         Read SSID of WiFi module store in flash 
-* @param  string : pointer of SSID
-* @retval return status of AT cmd request
-*/
-WiFi_Status_t Read_WiFi_SSID(char *string)
-{
-  WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-  char * ssid = "wifi_ssid";
-  char * pStr;
-  /* AT+S.GCFG=wifi_ssid read SSID */
-  Reset_AT_CMD_Buffer();
-
-  /* AT : send AT command */  
-  sprintf((char*)WiFi_AT_Cmd_Buff,AT_GET_CONFIGURATION_VALUE,ssid);   
-
-  /* 
-    Response :
-    # wifi_ssid = 41:6E:53:53:49:44:00:00:00:00:00:00:00:00:00:00:00:00:00:
-    00:00:00:00:00:00:00:00:00:00:00:00:00<cr><lf>
-    <cr><lf>OK<cr><lf>
-    */
-
-  status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-  if(status == WiFi_MODULE_SUCCESS)
-  {
-    status = USART_Receive_AT_Resp(Process_Event);
-  }
-
-    /* find a substring (# wifi_ssid = )inside a USART2_RxBuffer that may contain nulls */
-    uint16_t sourceBuffLen = sizeof(get_cfg_value)-1; /* exclude null terminator from length */
-    char searchStringBuff[] = "#  wifi_ssid = ";
-    uint16_t stringBuffLen = sizeof(searchStringBuff)-1; /* exclude null terminator from length */    
-    char *res = search_buffer((char *)&get_cfg_value, sourceBuffLen, searchStringBuff, stringBuffLen);
-
-    pStr = (char *) (strstr((const char *)res,"= "));
-    if(pStr != NULL)
-    {
-      strcat( string, (pStr + 2));      
-      /* Remove colon,\r,\n,OK strings */
-      memcpy(string, Delete_Colon(string) , 32); 
-    }
-  return status;    
-}
-
-/**
-* @brief  Read_WiFi_SecKey
-*         Read Security key of WiFi module store in flash 
-* @param  string : pointer of Security key
-* @retval return status of AT cmd request
-*/
-WiFi_Status_t Read_WiFi_SecKey(char *string)
-{
-  WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-  char *seckey = "wifi_wpa_psk_text";
-  char *pStr;
-  
-  /* AT+S.GCFG=wifi_ssid read SSID */
-  Reset_AT_CMD_Buffer();
-  
-  /* AT : send AT command */  
-  sprintf((char*)WiFi_AT_Cmd_Buff,AT_GET_CONFIGURATION_VALUE,seckey);  
-  
-  status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-  if(status == WiFi_MODULE_SUCCESS)
-  {
-    status = USART_Receive_AT_Resp(Process_Event);
-  }
-
-
-    /* find a substring (wifi_wpa_psk_text = )inside a USART2_RxBuffer that may contain nulls */
-    uint16_t sourceBuffLen = sizeof(get_cfg_value)-1; /* exclude null terminator from length */
-    char searchStringBuff[] = "wifi_wpa_psk_text = ";
-    uint16_t stringBuffLen = sizeof(searchStringBuff)-1; /* exclude null terminator from length */    
-    char *res = search_buffer((char *)&get_cfg_value, sourceBuffLen, searchStringBuff, stringBuffLen);
-    
-    pStr = (char *) (strstr((const char *)res,"= "));
-    if(pStr != NULL)
-    {
-      strcat( string, (pStr + 2));      
-      /* Remove colon,\r,\n,OK strings */
-      memcpy(string, Delete_Colon(string) , 32); 
-    }
-    
-  return status;    
-}
-
-/**
-* @brief  Read_WiFi_Mode
-*         Read Wi-Fi mode 0: idle,1 =STA,2 =IBSS,3 =MiniAP
-* @param  string : return wifi mode type
-* @retval return status of AT cmd request
-*/
-WiFi_Status_t Read_WiFi_Mode(char *string)
-{
-  WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-  char *mode = "wifi_mode";
-  char *pStr;
-  
-    /* AT+S.GCFG=wifi_mode */
-  Reset_AT_CMD_Buffer();
-  
-  /* AT : send AT command */  
-  sprintf((char*)WiFi_AT_Cmd_Buff,AT_GET_CONFIGURATION_VALUE,mode);  
-  
-  status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-  if(status == WiFi_MODULE_SUCCESS)
-  {
-    status = USART_Receive_AT_Resp(Process_Event);
-  }
-  
-  pStr = (char *) strstr((const char *)&get_cfg_value,"wifi_mode = ");
-  if(pStr != NULL)
-  {
-    string[0] = *(pStr + 12) ;
-  }
-
-  return status ;
-}
-
-/**
-* @brief  Write_WiFi_SSID
-*         Store SSID in flash memory of WiFi module
-* @param  string : pointer of SSID
-* @retval return status of AT cmd request
-*/
-WiFi_Status_t Write_WiFi_SSID(char *string)
-{
-  WiFi_Status_t status = WiFi_MODULE_SUCCESS;  
-  Reset_AT_CMD_Buffer(); 
-  
-  /* AT+S.SSIDTXT=abcd <ExampleSSID> //set SSID */
-  sprintf((char*)WiFi_AT_Cmd_Buff,AT_SET_SSID,string);  
-  
-  status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-  if(status == WiFi_MODULE_SUCCESS)
-  {
-    status = USART_Receive_AT_Resp(Process_Event);
-  }
-  
-  /* AT&W :Save the settings on the flash memory */
-  Reset_AT_CMD_Buffer();
-  Save_Current_Setting();
-  
-  return status; 
-  
-}
-
-
-/**
-* @brief  Write_WiFi_SecKey
-*         Store security key in flash memory of WiFi module
-* @param  string : pointer of security key
-* @retval return status of AT cmd request
-*/
-WiFi_Status_t Write_WiFi_SecKey(char *string)
-{
-  WiFi_Status_t status = WiFi_MODULE_SUCCESS;  
-  Reset_AT_CMD_Buffer(); 
-  
-  /* AT+S.SCFG=wifi_wpa_psk_text,helloworld : set password */
-  sprintf((char*)WiFi_AT_Cmd_Buff,"AT+S.SCFG=wifi_wpa_psk_text,%s\r",string);
-  
-  status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-  if(status == WiFi_MODULE_SUCCESS)
-  {
-    status = USART_Receive_AT_Resp(Process_Event);
-  }
-  
-  /* AT&W :Save the settings on the flash memory */
-  Reset_AT_CMD_Buffer();
-  Save_Current_Setting();
-  
-  return status;     
-}
-
-
-
-/**
-* @brief  PrintErrorMsg
-*         Print error message on UART terminal
-* @param  None
-* @retval None
-*/
-void PrintErrorMsg (void)
-{
-  Print_Msg("error in AT cmd",sizeof("error in AT cmd"));
-}
-
-/**
-  * @brief  Print_Msg
-  *         Print messages on UART terminal
-  * @param  msgBuff : Contains data that need to be print
-  * @param  length  : leghth of the data
-  * @retval None
-  */
-void Print_Msg(char * msgBuff,uint8_t length)
-{
-
-}
-
-/**
-* @brief  Error_Handler
-*         This function is executed in case of error occurrence.
-* @param  None
-* @retval None
-*/
-void Error_Handler(void)
-{
-  /* Turn LED2 on */
-  //BSP_LED_On(LED2);
-  //The following while(1) is commented as it prevents standby functionality
-  /*while(1)
-  {
-    //Error if LED2 is slowly blinking (1 sec. period)
-    BSP_LED_Toggle(LED2); 
-    HAL_Delay(1000); 
-  } */ 
-  Receive_Data();
-}
-
-
-/**
-* @brief  Start_DeepSleep_Timer
-*         start the deep sleep timer.
-* @param  None
-* @retval void
-*/
-void Start_DeepSleep_Timer(void)
-{
-  status_flag.Deep_Sleep_Timer = WIFI_TRUE;
-  sleep_count = 0;
-}
-
-/**
-* @brief  Stop_DeepSleep_Timer
-*         stop the deep sleep timer.
-* @param  None
-* @retval void
-*/
-void Stop_DeepSleep_Timer()
-{
-  status_flag.Deep_Sleep_Timer = WIFI_FALSE;
-  sleep_count = 0;
-}
-
-#if 0
-/**
-* @brief  configure_to_exti
-*         Configured the USART Rx pin to EXTI pin to capture standby wakeup interrupt
-* @param  None
-* @retval None
-*/
-void configure_to_exti()
-{
-  /*configure the pin*/
-  
-  HAL_NVIC_DisableIRQ(USARTx_IRQn);//Disable UART IRQ
-  
-  /* USART_RX Pin as EXTI IRQ*/
-  GPIO_InitTypeDef  GPIO_InitStruct;
-  GPIO_InitStruct.Pin = WiFi_USART_RX_PIN;
-  GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
-  GPIO_InitStruct.Pull = GPIO_NOPULL;
-  GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
-#if defined (USE_STM32L0XX_NUCLEO) || (USE_STM32F4XX_NUCLEO) 
-  GPIO_InitStruct.Alternate = 0;
-#endif
-  HAL_GPIO_Init(WiFi_USART_RX_GPIO_PORT, &GPIO_InitStruct);
-  
-  /* Configure the NVIC for EXTI */  
-  HAL_NVIC_SetPriority(USARTx_EXTI_IRQn, 3, 0);    
-  HAL_NVIC_EnableIRQ(USARTx_EXTI_IRQn);
-}
-#endif
-
-/**
-* @brief  WiFi_switch_to_command_mode
-*         switch to command mode from data mode
-* @param  None
-* @retval None
-*/
-void WiFi_switch_to_command_mode(void)
-{
-  WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-
-  /* AT+S.*/  
-  Reset_AT_CMD_Buffer();  
-
-  sprintf((char*)WiFi_AT_Cmd_Buff,AT_DATA_TO_CMD_MODE);   //Notice the lower case
-
-  status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-  if(status == WiFi_MODULE_SUCCESS)
-  {
-    //nothing to do
-  }
-}
-
-
-/**
-* @brief  WiFi_switch_to_data_mode
-*         switch to data mode from command mode
-* @param  None
-* @retval None
-*/
-void WiFi_switch_to_data_mode(void)
-{
-  WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-  
-  /* AT+S.*/  
-  Reset_AT_CMD_Buffer();    
-  
-  sprintf((char*)WiFi_AT_Cmd_Buff,AT_CMD_TO_DATA_MODE);   //Notice the upper case
-  
-  status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-  
-  if(status == WiFi_MODULE_SUCCESS)
-  {
-    //nothing to do
-  }
-   
-}
-
-
-/**
-* @brief  Attention_Cmd
-*         Attention command
-* @param  None
-* @retval WiFi_Status_t : status of AT cmd Request
-*/
-WiFi_Status_t Attention_Cmd()
-{
-  WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-  
-  Reset_AT_CMD_Buffer(); 
-  
-  /* AT : send AT command */
-  sprintf((char*)WiFi_AT_Cmd_Buff,AT_ATTENTION);  
-
-  status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-  if(status == WiFi_MODULE_SUCCESS)
-  {
-    status = USART_Receive_AT_Resp(Process_Event);
-  }
-  return status; 
-}
-
-
-/**
-* @brief  SET_Power_State
-*         SET power mode of wifi module
-* @param  state : power mode of wi-fi module i.e active,sleep,standby,powersave
-* @retval WiFi_Status_t : status of AT cmd Request
-*/
-WiFi_Status_t SET_Power_State(WiFi_Power_State_t state)
-{
-  WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-  
-#if DEBUG_PRINT  
-  printf("\r\n >>Soft Reset Wi-Fi module\r\n");
-#endif
-  
-  Reset_AT_CMD_Buffer();
-  
-  /* AT : send AT command */
-  sprintf((char*)WiFi_AT_Cmd_Buff,AT_SET_POWER_STATE,state);  
-//  WiFi_Module_State = Process_Event; 
-//  WiFi_WIND_State.WiFiReset = WIFI_FALSE;
-  WiFi_WIND_State.WiFiHWStarted = WIFI_FALSE;
-  status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-  if(status != WiFi_MODULE_SUCCESS) 
-    return status;
-  memset((void*)&WiFi_WIND_State,0x00,sizeof(WiFi_WIND_State)); /*reset the WIND State?*/
-  /* AT+CFUN=1 //Soft reset */
-  while(WiFi_WIND_State.WiFiHWStarted != WIFI_TRUE)
-  {
-        asm("NOP");
-  }
-  return status;
-}
-  
-
-/**
-* @brief  Display_Help_Text
-*         this function will print a list of all commands supported with a brief help text for each cmd
-* @param  None
-* @retval WiFi_Status_t : status of AT cmd Request
-*/
-WiFi_Status_t Display_Help_Text()
-{
-  WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-  Reset_AT_CMD_Buffer();
-
-  /* AT : send AT command */
-  sprintf((char*)WiFi_AT_Cmd_Buff,AT_HELP_TEXT);  
-
-  status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-  if(status == WiFi_MODULE_SUCCESS)
-  {
-    status = USART_Receive_AT_Resp(Process_Event);
-  }
-  return status; 
-}
-
-/**
-* @brief  WiFi_Get_IP_address
-*         Get the ip address
-* @param  ip_addr : pointer to ip address
-* @retval status  : status of AT cmd request
-*/
-
-WiFi_Status_t WiFi_Get_IP_Address(uint8_t *ip_addr)
-{
-  WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-  int cfg_value_length, i;
-
-   /* AT : send AT command */
-  sprintf((char*)WiFi_AT_Cmd_Buff,AT_GET_STATUS_VALUE,"ip_ipaddr");
-  status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-  if(status == WiFi_MODULE_SUCCESS)
-  {
-    status = USART_Receive_AT_Resp(Process_Event);
-    cfg_value_length = strlen((const char*)get_cfg_value);
-    
-    //Optimise the following loop??
-    for(i=7; i<=16; i++)//0th index is always ' ' which we ignore
-      if(get_cfg_value[i] == '\r')//find the first '\r'
-        {
-            get_cfg_value[i] = '\0'; //Terminate the string by NULL
-            break;
-        }
-        
-    /* copy user pointer to get_cfg_value */
-    memcpy(ip_addr,&get_cfg_value[1],i);//IP address will have max lenght fixed at 16 bytes (null terminated included).   
-    memset(get_cfg_value, 0x00,cfg_value_length);
-  }
-  return status;
-}
-
-/**
-* @brief  WiFi_Get_MAC_address
-*         Get the MAC address
-* @param  ip_addr : pointer to MAC address
-* @retval status  : status of AT cmd request
-*/
-
-WiFi_Status_t WiFi_Get_MAC_Address(uint8_t *mac_addr)
-{
-  WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-  int cfg_value_length;
-
-   /* AT : send AT command */
-  sprintf((char*)WiFi_AT_Cmd_Buff,AT_GET_CONFIGURATION_VALUE,"nv_wifi_macaddr");
-  status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-  if(status == WiFi_MODULE_SUCCESS)
-  {
-    status = USART_Receive_AT_Resp(Process_Event);
-    cfg_value_length = strlen((const char*)get_cfg_value);
-    get_cfg_value[18] = '\0';//Terminate by NULL
-    /* copy user pointer to get_cfg_value */
-    memcpy(mac_addr,&get_cfg_value[1],18);//IP address will have max lenght fixed at 18 bytes.   
-    memset(get_cfg_value, 0x00,cfg_value_length);
-  }
-  return status;
-}
-
-/**
-* @brief  GET_Configuration_Value
-*         Get a wifi configuration value from the module
-* @param  sVar_name : Name of the config variable
-*         aValue    : value of config variable to be returned to user
-* @retval WiFi_Status_t : status of AT cmd Request
-*/
-WiFi_Status_t GET_Configuration_Value(char* sVar_name,uint32_t *aValue)
-{
-  int cfg_value_length;
-  WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-
-  Reset_AT_CMD_Buffer(); 
-
-  /* AT : send AT command */  
-  sprintf((char*)WiFi_AT_Cmd_Buff,AT_GET_CONFIGURATION_VALUE,sVar_name);   
-
-  status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-  if(status == WiFi_MODULE_SUCCESS)
-  {
-    status = USART_Receive_AT_Resp(Process_Event);
-    cfg_value_length = strlen((const char*)get_cfg_value);
-    memcpy(aValue,get_cfg_value,cfg_value_length);   //copy user pointer to get_cfg_value
-    memset(get_cfg_value, 0x00,cfg_value_length);
-  }
-  return status; 
-}
-
-/**
-* @brief  SET_Configuration_Addr
-*         Get a wifi configuration address from the module
-* @param  sVar_name : Name of the config variable
-*         addr    : value of config address to be returned to user
-* @retval WiFi_Status_t : status of AT cmd Request
-*/
-WiFi_Status_t SET_Configuration_Addr(char* sVar_name,char* addr)
-{
-  WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-
-  Reset_AT_CMD_Buffer(); 
-
-  /* AT : send AT command */
-  sprintf((char*)WiFi_AT_Cmd_Buff,AT_SET_CONFIGURATION_ADDRESS,sVar_name,addr);  
-
-  status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-  if(status == WiFi_MODULE_SUCCESS)
-  {
-    status = USART_Receive_AT_Resp(Process_Event);
-  }
-  return status;
-}
-
-/**
-* @brief  SET_Configuration_Value
-*         SET the value of configuration variable
-* @param  sVar_name : Name of the config variable
-*         aValue    : value of config variable
-* @retval WiFi_Status_t : status of AT cmd Request
-*/
-WiFi_Status_t SET_Configuration_Value(char* sVar_name,uint32_t aValue)
-{
-  WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-
-  Reset_AT_CMD_Buffer(); 
-
-  /* AT : send AT command */
-  sprintf((char*)WiFi_AT_Cmd_Buff,AT_SET_CONFIGURATION_VALUE,sVar_name,(int)aValue);  
-
-  status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-  if(status == WiFi_MODULE_SUCCESS)
-  {
-    status = USART_Receive_AT_Resp(Process_Event);
-  }
-  return status; 
-}
-
-/**
-* @brief  SET_SSID
-*         SET SSID in flash memory of Wi-Fi module
-* @param  ssid : pointer of SSID
-* @retval WiFi_Status_t : status of AT cmd Request
-*/
-WiFi_Status_t SET_SSID(char* ssid)
-{
-  WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-  
-  Reset_AT_CMD_Buffer(); 
-  
-  /* AT+S.SSIDTXT=abcd <ExampleSSID>  */
-  sprintf((char*)WiFi_AT_Cmd_Buff,AT_SET_SSID,ssid);  
-
-  status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-  if(status == WiFi_MODULE_SUCCESS)
-  {
-    status = USART_Receive_AT_Resp(Process_Event);
-  }
-  return status; 
-}
-
-
-/**
-* @brief  SET_WiFi_SecKey
-*         SET wifi security key
-* @param  seckey : pointer of security key
-* @retval WiFi_Status_t : status of AT cmd Request
-*/
-WiFi_Status_t SET_WiFi_SecKey(char* seckey)
-{
-  WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-  
-  Reset_AT_CMD_Buffer(); 
-  
-  /* AT+S.SCFG=wifi_wpa_psk_text,helloworld : set password */
-  sprintf((char*)WiFi_AT_Cmd_Buff,AT_SET_SEC_KEY,seckey);  
-
-  status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-  if(status == WiFi_MODULE_SUCCESS)
-  {
-    status = USART_Receive_AT_Resp(Process_Event);
-  }
-  return status;    
-}
-
-
-/**
-* @brief  Restore_Default_Setting
-*         Restore the factory default values of the configuration variables 
-*         and writes them to non volatile storage
-* @param  None
-* @retval WiFi_Status_t : status of AT cmd Request
-*/
-WiFi_Status_t Restore_Default_Setting()
-{
-  WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-  
-  //Reset_AT_CMD_Buffer(); 
-  
-  /* AT&F: restore default setting */
-  sprintf((char*)WiFi_AT_Cmd_Buff,AT_RESTORE_DEFAULT_SETTING);  
-
-  status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-  
-  if(status == WiFi_MODULE_SUCCESS)
-  {
-    status = USART_Receive_AT_Resp(Process_Event);
-  }
-  return status; 
-  
-}
-
-/**
-* @brief  Save_Current_Setting
-*         Store the current RAM-based setting to non-volatile storage
-* @param  None
-* @retval WiFi_Status_t : status of AT cmd Request
-*/
-WiFi_Status_t Save_Current_Setting()
-{
-  WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-  
-  Reset_AT_CMD_Buffer(); 
-  
-  /* AT&W :Save the settings on the flash memory */
-  sprintf((char*)WiFi_AT_Cmd_Buff,AT_SAVE_CURRENT_SETTING);  
-
-  status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
-  if(status == WiFi_MODULE_SUCCESS)
-  {
-    status = USART_Receive_AT_Resp(Process_Event);
-  }
-  return status; 
-}
-
-
-/**
-* @brief  ResetBuffer
-*         Reset receive data/indication msg buffer
-* @param  None
-* @retval None
-*/
-void ResetBuffer()
-{  
-  
-}
-
-
-/**
-* @brief  config_init_value
-*         initalize config values before reset
-* @param  sVar_name : Name of the config variable
-*         aValue    : value of config variable
-* @retval None
-*/
-WiFi_Status_t config_init_value(char* sVar_name,uint8_t aValue)
-{
-  WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-  Reset_AT_CMD_Buffer();   
-  sprintf((char*)WiFi_AT_Cmd_Buff,AT_SET_CONFIGURATION_VALUE,sVar_name,aValue);
-  /*if(HAL_UART_Transmit(&UartWiFiHandle, (uint8_t *)WiFi_AT_Cmd_Buff, strlen((char*)WiFi_AT_Cmd_Buff),1000)!= HAL_OK)
-  {
-    Error_Handler();    
-    return WiFi_HAL_UART_ERROR;
-  }*/
-  
-  status = WaitForResponse(AT_RESP_LEN_OK);
-  return status;
-}
-
-/**
-* @brief  config_init_addr
-*         initalize config strings/addresses before reset
-* @param  sVar_name : Name of the config variable
-*         addr    : value of config address to be returned to user
-* @retval None
-*/
-WiFi_Status_t config_init_addr(char* sVar_name,char* addr)
-{
-  WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-  Reset_AT_CMD_Buffer();   
-  sprintf((char*)WiFi_AT_Cmd_Buff,AT_SET_CONFIGURATION_ADDRESS,sVar_name,addr);
-  /*if(HAL_UART_Transmit(&UartWiFiHandle, (uint8_t *)WiFi_AT_Cmd_Buff, strlen((char*)WiFi_AT_Cmd_Buff),1000)!= HAL_OK)
-  {
-    Error_Handler();    
-    return WiFi_HAL_UART_ERROR;
-  }*/
-  
-  status = WaitForResponse(AT_RESP_LEN_OK);
-  return status;
-
-}
-
-
-/**
-* @brief  WaitForResponse
-*         Wait for OK response
-* @param  alength length of the data to be received
-* @retval None
-*/
-WiFi_Status_t WaitForResponse(uint16_t alength)
-{
-  WiFi_Status_t status = WiFi_MODULE_SUCCESS;
-  
-  if(alength <= RxBufferSize)
-  {
-    /*if(HAL_UART_Receive(&UartWiFiHandle, (uint8_t *)USART_RxBuffer, alength,5000)!= HAL_OK)
-    {
-      Error_Handler();
-      return WiFi_HAL_UART_ERROR;
-    }*/
-    
-    if(((strstr((const char *)&USART_RxBuffer,"OK"))) == NULL)
-    {
-      return WiFi_AT_CMD_RESP_ERROR;
-    }
-    
-  }
-  
-  return status;  
-}
-/**** Wi-Fi indication call back *************/
-__weak void ind_wifi_warning(WiFi_Status_t warning_code)
-{
-}
-    
-__weak void ind_wifi_error(WiFi_Status_t error_code)
-{
-}
-
-__weak void ind_wifi_connection_error(WiFi_Status_t status_code)
-{
-}
-
-__weak void ind_wifi_connected(void)
-{
-}
-    
-__weak void ind_wifi_ap_ready(void)
-{
-}
-
-__weak void ind_wifi_ap_client_joined(uint8_t * client_mac_address)
-{
-}
-
-__weak void ind_wifi_ap_client_left(uint8_t * client_mac_address)
-{
-}
-
-__weak void ind_wifi_on(void)
-{
-}
-
-__weak void ind_wifi_packet_lost(WiFi_Status_t status_code)
-{
-}
-
-__weak void ind_wifi_gpio_changed(void)
-{
-}
-
-__weak void ind_wifi_socket_data_received(uint8_t socket_id, uint8_t * data_ptr, uint32_t message_size, uint32_t chunk_size)
-{
-}
-
-__weak void ind_wifi_socket_client_remote_server_closed(uint8_t * socketID)
-{
-}
-
-__weak void ind_wifi_socket_server_data_lost(void)
-{
-}
-
-__weak void ind_socket_server_client_joined(void)
-{
-}
-
-__weak void ind_socket_server_client_left(void)
-{
-}
-
-__weak void ind_wifi_http_data_available(uint8_t * data_ptr,uint32_t message_size)
-{
-}
-
-__weak void ind_wifi_file_data_available(uint8_t * data_ptr)
-{
-}
-__weak void ind_wifi_resuming(void)
-{
-}
-
-
-
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */ 
-
-
-/**
-  * @}
-  */ 
-
-/******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/
-
--- a/main.cpp	Wed Apr 13 10:14:35 2016 +0000
+++ b/main.cpp	Thu Apr 14 06:20:36 2016 +0000
@@ -24,7 +24,7 @@
 //------------------------------------
 
 Serial pc(SERIAL_TX, SERIAL_RX);
-
+DigitalOut myled(LED1);
 SpwfSAInterface *spwf;
  
 int main()
@@ -33,6 +33,8 @@
     char * ssid = "STM";
     char * seckey = "STMdemoPWD";
       
+    pc.printf("\r\nSpwf Interface NSAPI Tests\r\n");
+      
     spwf = createSPWFInstance();
     err = spwf->init();
     if(err!=0)
@@ -40,7 +42,7 @@
         pc.printf("\r\nerror initializing.\r\n");
         return -1;
     }
-    
+
     pc.printf("\r\nconnecting to AP\r\n");
             
     err = spwf->connect(ssid, seckey, NS_SECURITY_WPA);
@@ -51,5 +53,10 @@
         nsapi_tests("SPWF Tests", spwf, "192.168.1.5", 32001);
         spwf->disconnect();
     }
-    while(1);
+
+    while(1)
+    {
+        wait(1);
+        myled = !myled;
+    }
 }
\ No newline at end of file