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

Dependents:   X_NUCLEO_IDW01M1_AP_Test

Fork of X_NUCLEO_IDW01M1 by ST

Committer:
mridup
Date:
Wed May 11 06:12:16 2016 +0000
Revision:
7:0fdd186a7d90
Parent:
6:e7a3fca2df10
Child:
8:0f302a13e21b
fix recv, server sock, \r\n..\r\n issue in FW.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mridup 0:dc55f40eb04f 1 /* mbed Microcontroller Library
mridup 0:dc55f40eb04f 2 * Copyright (c) 2006-2013 ARM Limited
mridup 0:dc55f40eb04f 3 *
mridup 0:dc55f40eb04f 4 * Licensed under the Apache License, Version 2.0 (the "License");
mridup 0:dc55f40eb04f 5 * you may not use this file except in compliance with the License.
mridup 0:dc55f40eb04f 6 * You may obtain a copy of the License at
mridup 0:dc55f40eb04f 7 *
mridup 0:dc55f40eb04f 8 * http://www.apache.org/licenses/LICENSE-2.0
mridup 0:dc55f40eb04f 9 *
mridup 0:dc55f40eb04f 10 * Unless required by applicable law or agreed to in writing, software
mridup 0:dc55f40eb04f 11 * distributed under the License is distributed on an "AS IS" BASIS,
mridup 0:dc55f40eb04f 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
mridup 0:dc55f40eb04f 13 * See the License for the specific language governing permissions and
mridup 0:dc55f40eb04f 14 * limitations under the License.
mridup 0:dc55f40eb04f 15 */
mridup 0:dc55f40eb04f 16
mridup 0:dc55f40eb04f 17 /**
mridup 0:dc55f40eb04f 18 ******************************************************************************
mridup 0:dc55f40eb04f 19 * @file SpwfSADevice.cpp
mridup 0:dc55f40eb04f 20 * @author STMicroelectronics
mridup 0:dc55f40eb04f 21 * @brief Implementation of SpwfSADevice class for Wi-Fi mbed
mridup 0:dc55f40eb04f 22 ******************************************************************************
mridup 0:dc55f40eb04f 23 * @copy
mridup 0:dc55f40eb04f 24 *
mridup 0:dc55f40eb04f 25 * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
mridup 0:dc55f40eb04f 26 * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
mridup 0:dc55f40eb04f 27 * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
mridup 0:dc55f40eb04f 28 * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
mridup 0:dc55f40eb04f 29 * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
mridup 0:dc55f40eb04f 30 * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
mridup 0:dc55f40eb04f 31 *
mridup 0:dc55f40eb04f 32 * <h2><center>&copy; COPYRIGHT 2016 STMicroelectronics</center></h2>
mridup 0:dc55f40eb04f 33 ******************************************************************************
mridup 0:dc55f40eb04f 34 */
mridup 0:dc55f40eb04f 35
mridup 0:dc55f40eb04f 36
mridup 0:dc55f40eb04f 37 #include "SpwfSADevice.h"
mridup 0:dc55f40eb04f 38
mridup 0:dc55f40eb04f 39
mridup 0:dc55f40eb04f 40 #ifdef __cplusplus
mridup 0:dc55f40eb04f 41 extern "C" {
mridup 0:dc55f40eb04f 42 #endif
mridup 0:dc55f40eb04f 43
mridup 0:dc55f40eb04f 44 void Rx_irq_handler(void);
mridup 0:dc55f40eb04f 45 void Wifi_scheduler(void);
mridup 0:dc55f40eb04f 46 void Wifi_ticker(void);
mridup 0:dc55f40eb04f 47
mridup 0:dc55f40eb04f 48 #ifdef __cplusplus
mridup 0:dc55f40eb04f 49 }
mridup 0:dc55f40eb04f 50 #endif
mridup 0:dc55f40eb04f 51
mridup 0:dc55f40eb04f 52 extern void setSpwfSADevice(SpwfSADevice * dev);
mridup 0:dc55f40eb04f 53
mridup 0:dc55f40eb04f 54 SpwfSADevice::SpwfSADevice(PinName tx, PinName rx, PinName rst, PinName wkup, PinName rts):
mridup 0:dc55f40eb04f 55 uart_(tx,rx),
mridup 0:dc55f40eb04f 56 term_(SERIAL_TX, SERIAL_RX),
mridup 0:dc55f40eb04f 57 wakeup_(wkup, PIN_INPUT, PullNone, 0),
mridup 1:bd9db471d47d 58 rst_(rst, PIN_INPUT, PullNone, 1),
mridup 0:dc55f40eb04f 59 rts_(rts, PIN_INPUT, PullUp, 0)
mridup 0:dc55f40eb04f 60 {
mridup 0:dc55f40eb04f 61 setSpwfSADevice(this);
mridup 0:dc55f40eb04f 62 sync_wait_signal = false;
mridup 6:e7a3fca2df10 63 wait_for_incoming_client = false;
mridup 7:0fdd186a7d90 64 wait_for_socket_data = false;
mridup 0:dc55f40eb04f 65 }
mridup 0:dc55f40eb04f 66
mridup 0:dc55f40eb04f 67 SpwfSADevice::~SpwfSADevice(void)
mridup 0:dc55f40eb04f 68 {
mridup 0:dc55f40eb04f 69 //de-constructor
mridup 0:dc55f40eb04f 70 }
mridup 0:dc55f40eb04f 71
mridup 5:c83ffd44f40a 72 int SpwfSADevice::init(void)
mridup 0:dc55f40eb04f 73 {
mridup 0:dc55f40eb04f 74 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 75 Timer timer;
mridup 0:dc55f40eb04f 76
mridup 0:dc55f40eb04f 77 timer.start();
mridup 0:dc55f40eb04f 78 rst_.output();
mridup 0:dc55f40eb04f 79 wakeup_.output();
mridup 0:dc55f40eb04f 80 rts_.output();
mridup 0:dc55f40eb04f 81
mridup 0:dc55f40eb04f 82 term_.baud(9600);
mridup 0:dc55f40eb04f 83 term_.format(8, SerialBase::None, 1);
mridup 0:dc55f40eb04f 84
mridup 0:dc55f40eb04f 85 uart_.baud(115200);
mridup 0:dc55f40eb04f 86 uart_.format(8, SerialBase::None, 1);
mridup 0:dc55f40eb04f 87 uart_.set_flow_control(SerialBase::RTS, PA_12, NC);//RTSCTS
mridup 0:dc55f40eb04f 88 uart_.attach(Rx_irq_handler, SerialBase::RxIrq);
mridup 0:dc55f40eb04f 89
mridup 0:dc55f40eb04f 90 config.power=wifi_active;
mridup 0:dc55f40eb04f 91 config.power_level=high;
mridup 0:dc55f40eb04f 92 config.dhcp=on;//use DHCP IP address
mridup 0:dc55f40eb04f 93
mridup 0:dc55f40eb04f 94 /*Initialize the tickers*/
mridup 0:dc55f40eb04f 95 wifi_isr.attach_us(Wifi_ticker, 1000); //decreasing the time period to 1ms may be causing overrun issue with UART?\
mridup 0:dc55f40eb04f 96 //UART error not evident but characters are sometimes missing in pipeline(ring_buffer)\
mridup 0:dc55f40eb04f 97 //specifically in the +WIND:25:WiFi Association with 'STM' successful WIND (why specifically this?)
mridup 0:dc55f40eb04f 98
mridup 0:dc55f40eb04f 99 wifi_callback.attach_us(Wifi_scheduler, 2000);//How low can we go?
mridup 0:dc55f40eb04f 100
mridup 0:dc55f40eb04f 101 sync_wait_signal = false;
mridup 0:dc55f40eb04f 102 status = wifi_init(&config);
mridup 0:dc55f40eb04f 103 if(status!=WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 104 {
mridup 0:dc55f40eb04f 105 return -1;
mridup 0:dc55f40eb04f 106 }
mridup 0:dc55f40eb04f 107
mridup 0:dc55f40eb04f 108 while(!sync_wait_signal)
mridup 0:dc55f40eb04f 109 {
mridup 0:dc55f40eb04f 110 if (timer.read_ms() > _timeout) {
mridup 0:dc55f40eb04f 111 return -1;
mridup 0:dc55f40eb04f 112 }
mridup 0:dc55f40eb04f 113 __NOP();
mridup 0:dc55f40eb04f 114 }
mridup 0:dc55f40eb04f 115
mridup 0:dc55f40eb04f 116 return 0;
mridup 0:dc55f40eb04f 117 }
mridup 0:dc55f40eb04f 118
mridup 5:c83ffd44f40a 119 int SpwfSADevice::connect(char * ssid, char * sec_key, WiFi_Priv_Mode priv_mode)
mridup 0:dc55f40eb04f 120 {
mridup 0:dc55f40eb04f 121 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 122 Timer timer;
mridup 0:dc55f40eb04f 123
mridup 0:dc55f40eb04f 124 timer.start();
mridup 0:dc55f40eb04f 125 sync_wait_signal = false;
mridup 0:dc55f40eb04f 126 status = wifi_connect(ssid, sec_key, priv_mode);
mridup 0:dc55f40eb04f 127 if(status!=WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 128 {
mridup 0:dc55f40eb04f 129 return -1;
mridup 0:dc55f40eb04f 130 }
mridup 0:dc55f40eb04f 131
mridup 0:dc55f40eb04f 132 while(!sync_wait_signal)
mridup 0:dc55f40eb04f 133 {
mridup 0:dc55f40eb04f 134 if (timer.read_ms() > _timeout) {
mridup 0:dc55f40eb04f 135 return -1;
mridup 0:dc55f40eb04f 136 }
mridup 0:dc55f40eb04f 137 __NOP();
mridup 0:dc55f40eb04f 138 }
mridup 0:dc55f40eb04f 139
mridup 0:dc55f40eb04f 140 return 0;
mridup 0:dc55f40eb04f 141 }
mridup 0:dc55f40eb04f 142
mridup 5:c83ffd44f40a 143 int SpwfSADevice::disconnect()
mridup 0:dc55f40eb04f 144 {
mridup 0:dc55f40eb04f 145 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 146
mridup 0:dc55f40eb04f 147 status = wifi_disconnect();//will set to Idle Mode
mridup 0:dc55f40eb04f 148 if(status!=WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 149 {
mridup 0:dc55f40eb04f 150 return -1;
mridup 0:dc55f40eb04f 151 }
mridup 0:dc55f40eb04f 152
mridup 0:dc55f40eb04f 153 return 0;
mridup 0:dc55f40eb04f 154 }
mridup 0:dc55f40eb04f 155
mridup 0:dc55f40eb04f 156 const char *SpwfSADevice::getIPAddress()
mridup 0:dc55f40eb04f 157 {
mridup 0:dc55f40eb04f 158 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 159
mridup 0:dc55f40eb04f 160 status = WiFi_Get_IP_Address((uint8_t *)_ip_buffer);
mridup 0:dc55f40eb04f 161
mridup 0:dc55f40eb04f 162 if(status!=WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 163 {
mridup 0:dc55f40eb04f 164 return NULL;
mridup 0:dc55f40eb04f 165 } else
mridup 0:dc55f40eb04f 166 return _ip_buffer;
mridup 0:dc55f40eb04f 167 }
mridup 0:dc55f40eb04f 168
mridup 0:dc55f40eb04f 169 const char *SpwfSADevice::getMACAddress()
mridup 0:dc55f40eb04f 170 {
mridup 0:dc55f40eb04f 171 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 172
mridup 0:dc55f40eb04f 173 status = WiFi_Get_MAC_Address((uint8_t *)_mac_buffer);
mridup 0:dc55f40eb04f 174
mridup 0:dc55f40eb04f 175 if(status!=WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 176 {
mridup 0:dc55f40eb04f 177 return NULL;
mridup 0:dc55f40eb04f 178 } else
mridup 0:dc55f40eb04f 179 return _mac_buffer;
mridup 0:dc55f40eb04f 180 }
mridup 0:dc55f40eb04f 181
mridup 5:c83ffd44f40a 182 int SpwfSADevice::socket_client_open(uint8_t * hostname, uint32_t port_number, uint8_t * protocol, uint8_t * sock_id)
mridup 0:dc55f40eb04f 183 {
mridup 0:dc55f40eb04f 184 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 185
mridup 0:dc55f40eb04f 186 //Timeout of synchronous functions?
mridup 0:dc55f40eb04f 187 status = wifi_socket_client_open(hostname, port_number, protocol, sock_id);
mridup 0:dc55f40eb04f 188 if(status!=WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 189 {
mridup 7:0fdd186a7d90 190 *sock_id = 99;//make sure socket id is not set(set to out of bounds of SPWFSA_SOCKET_COUNT range)
mridup 0:dc55f40eb04f 191 return -1;
mridup 0:dc55f40eb04f 192 }
mridup 0:dc55f40eb04f 193
mridup 0:dc55f40eb04f 194 return 0;
mridup 0:dc55f40eb04f 195 }
mridup 0:dc55f40eb04f 196
mridup 0:dc55f40eb04f 197
mridup 5:c83ffd44f40a 198 int SpwfSADevice::socket_client_write(uint8_t sock_id, uint16_t DataLength,char * pData)
mridup 0:dc55f40eb04f 199 {
mridup 0:dc55f40eb04f 200 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 201
mridup 0:dc55f40eb04f 202 status = wifi_socket_client_write(sock_id, DataLength, pData);
mridup 0:dc55f40eb04f 203 //map error to enum ns_error_t
mridup 0:dc55f40eb04f 204
mridup 0:dc55f40eb04f 205 if(status!=WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 206 {
mridup 0:dc55f40eb04f 207 return -1;
mridup 0:dc55f40eb04f 208 }
mridup 0:dc55f40eb04f 209 return 0;
mridup 0:dc55f40eb04f 210 }
mridup 0:dc55f40eb04f 211
mridup 0:dc55f40eb04f 212
mridup 5:c83ffd44f40a 213 int SpwfSADevice::socket_client_recv(uint8_t sock_id, uint16_t RecvLength,char * pData)
mridup 0:dc55f40eb04f 214 {
mridup 7:0fdd186a7d90 215 static Timer recv_timer;
mridup 7:0fdd186a7d90 216 //char debug_str[10];
mridup 7:0fdd186a7d90 217 static bool recv_call = true;
mridup 7:0fdd186a7d90 218
mridup 7:0fdd186a7d90 219 if(recv_call)
mridup 0:dc55f40eb04f 220 {
mridup 7:0fdd186a7d90 221 __disable_irq();
mridup 7:0fdd186a7d90 222 wait_for_socket_data = false;
mridup 7:0fdd186a7d90 223 if(_timeout>0)
mridup 7:0fdd186a7d90 224 recv_timer.start();
mridup 7:0fdd186a7d90 225 recv_call = false;
mridup 7:0fdd186a7d90 226 bytes_to_read = RecvLength;
mridup 7:0fdd186a7d90 227 bytes_read=0;
mridup 7:0fdd186a7d90 228 recv_buff = (uint8_t*)pData;
mridup 7:0fdd186a7d90 229 __enable_irq();
mridup 7:0fdd186a7d90 230 }
mridup 7:0fdd186a7d90 231
mridup 7:0fdd186a7d90 232
mridup 7:0fdd186a7d90 233 if(wait_for_socket_data || recv_timer.read_ms() >= _timeout)
mridup 7:0fdd186a7d90 234 {
mridup 7:0fdd186a7d90 235 recv_call = true;
mridup 7:0fdd186a7d90 236 _timeout = 0;
mridup 7:0fdd186a7d90 237 wait_for_socket_data = true;
mridup 7:0fdd186a7d90 238 recv_timer.stop();
mridup 7:0fdd186a7d90 239 recv_timer.reset();
mridup 7:0fdd186a7d90 240 if(bytes_read == 0) //<bytes_to_read??
mridup 7:0fdd186a7d90 241 return -1;//return error if no bytes are read!
mridup 7:0fdd186a7d90 242 else
mridup 0:dc55f40eb04f 243 return bytes_read;//return amount of data arrived so far
mridup 0:dc55f40eb04f 244 }
mridup 7:0fdd186a7d90 245
mridup 7:0fdd186a7d90 246 return -1;
mridup 7:0fdd186a7d90 247 }
mridup 0:dc55f40eb04f 248
mridup 0:dc55f40eb04f 249
mridup 0:dc55f40eb04f 250 void SpwfSADevice::network_scan(wifi_scan *scan_result, uint16_t max_scan_number)
mridup 0:dc55f40eb04f 251 {
mridup 0:dc55f40eb04f 252 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 253
mridup 0:dc55f40eb04f 254 status = wifi_network_scan(scan_result, max_scan_number);
mridup 0:dc55f40eb04f 255 if(status!=WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 256 {
mridup 0:dc55f40eb04f 257 return;
mridup 0:dc55f40eb04f 258 }
mridup 0:dc55f40eb04f 259 }
mridup 0:dc55f40eb04f 260
mridup 0:dc55f40eb04f 261 void SpwfSADevice::http_get(uint8_t * hostname, uint8_t * path, uint32_t port_number)
mridup 0:dc55f40eb04f 262 {
mridup 0:dc55f40eb04f 263 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 264
mridup 0:dc55f40eb04f 265 status = wifi_http_get((uint8_t *)hostname, (uint8_t *)path, port_number);
mridup 0:dc55f40eb04f 266 if(status!=WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 267 {
mridup 0:dc55f40eb04f 268 return;
mridup 0:dc55f40eb04f 269 }
mridup 0:dc55f40eb04f 270 }
mridup 0:dc55f40eb04f 271
mridup 0:dc55f40eb04f 272 void SpwfSADevice::http_post(uint8_t * url_path)
mridup 0:dc55f40eb04f 273 {
mridup 0:dc55f40eb04f 274 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 275
mridup 0:dc55f40eb04f 276 status = wifi_http_post(url_path);
mridup 0:dc55f40eb04f 277 if(status!=WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 278 {
mridup 0:dc55f40eb04f 279 return;
mridup 0:dc55f40eb04f 280 }
mridup 0:dc55f40eb04f 281 }
mridup 0:dc55f40eb04f 282
mridup 0:dc55f40eb04f 283 void SpwfSADevice::signal_data_receive(uint8_t socket_id, uint8_t * data_ptr, uint32_t message_size, uint32_t chunk_size)
mridup 0:dc55f40eb04f 284 {
mridup 0:dc55f40eb04f 285 char debug_str[10];
mridup 0:dc55f40eb04f 286 //Data will be copied or returned to user only if there is a pending request
mridup 0:dc55f40eb04f 287 //Copy data to pData
mridup 5:c83ffd44f40a 288 //sprintf((char*)debug_str,"sock_id: %d, size: %d\r\n",socket_id, message_size);
mridup 5:c83ffd44f40a 289
mridup 7:0fdd186a7d90 290 if(recv_buff && !wait_for_socket_data)
mridup 0:dc55f40eb04f 291 {
mridup 0:dc55f40eb04f 292 if((bytes_read + message_size)<= bytes_to_read)
mridup 0:dc55f40eb04f 293 {
mridup 0:dc55f40eb04f 294 memcpy(recv_buff + bytes_read, data_ptr, message_size);//only copy bytes_to_read asked by user//rest of the data is lost!!
mridup 0:dc55f40eb04f 295 bytes_read += message_size;
mridup 0:dc55f40eb04f 296 }
mridup 0:dc55f40eb04f 297 else
mridup 0:dc55f40eb04f 298 {
mridup 0:dc55f40eb04f 299 uint32_t x_size = (bytes_read + message_size) - bytes_to_read;
mridup 0:dc55f40eb04f 300 memcpy(recv_buff + bytes_read, data_ptr, message_size-x_size);
mridup 0:dc55f40eb04f 301 bytes_read += (message_size-x_size);
mridup 0:dc55f40eb04f 302 }
mridup 0:dc55f40eb04f 303
mridup 0:dc55f40eb04f 304 if(bytes_read >= bytes_to_read)
mridup 0:dc55f40eb04f 305 {
mridup 0:dc55f40eb04f 306 __disable_irq();
mridup 7:0fdd186a7d90 307 wait_for_socket_data = true;
mridup 0:dc55f40eb04f 308 __enable_irq();
mridup 0:dc55f40eb04f 309 }
mridup 0:dc55f40eb04f 310 }
mridup 0:dc55f40eb04f 311 else
mridup 0:dc55f40eb04f 312 {
mridup 0:dc55f40eb04f 313 debug_print("\r\n Socket:: Data Dropped: ");
mridup 0:dc55f40eb04f 314 sprintf((char*)debug_str,"%d\r\n",message_size);
mridup 0:dc55f40eb04f 315 debug_print(debug_str);
mridup 0:dc55f40eb04f 316 __disable_irq();
mridup 7:0fdd186a7d90 317 wait_for_socket_data = true;
mridup 0:dc55f40eb04f 318 __enable_irq();
mridup 0:dc55f40eb04f 319 }
mridup 0:dc55f40eb04f 320
mridup 0:dc55f40eb04f 321 }
mridup 0:dc55f40eb04f 322
mridup 0:dc55f40eb04f 323 void SpwfSADevice::signal_synch_wait(WiFi_Status_t code)
mridup 0:dc55f40eb04f 324 {
mridup 0:dc55f40eb04f 325 if(code == WiFi_DISASSOCIATION)
mridup 0:dc55f40eb04f 326 {
mridup 0:dc55f40eb04f 327 //do nothing
mridup 0:dc55f40eb04f 328 }
mridup 0:dc55f40eb04f 329 else
mridup 0:dc55f40eb04f 330 {
mridup 0:dc55f40eb04f 331 __disable_irq();
mridup 0:dc55f40eb04f 332 sync_wait_signal = true;
mridup 0:dc55f40eb04f 333 __enable_irq();
mridup 0:dc55f40eb04f 334 }
mridup 0:dc55f40eb04f 335 }
mridup 0:dc55f40eb04f 336
mridup 5:c83ffd44f40a 337 int SpwfSADevice::socket_client_close(uint8_t sock_close_id)
mridup 0:dc55f40eb04f 338 {
mridup 0:dc55f40eb04f 339 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 340
mridup 0:dc55f40eb04f 341 status = wifi_socket_client_close(sock_close_id);
mridup 0:dc55f40eb04f 342 //map error to enum ns_error_t
mridup 0:dc55f40eb04f 343 if(status!=WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 344 {
mridup 0:dc55f40eb04f 345 return -1;
mridup 0:dc55f40eb04f 346 }
mridup 0:dc55f40eb04f 347
mridup 0:dc55f40eb04f 348 return 0;
mridup 0:dc55f40eb04f 349 }
mridup 0:dc55f40eb04f 350
mridup 0:dc55f40eb04f 351
mridup 6:e7a3fca2df10 352 int SpwfSADevice::socket_server_open(uint32_t port_number, uint8_t * protocol)
mridup 6:e7a3fca2df10 353 {
mridup 6:e7a3fca2df10 354 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 6:e7a3fca2df10 355
mridup 6:e7a3fca2df10 356 status = wifi_socket_server_open(port_number, protocol);
mridup 6:e7a3fca2df10 357 //map error to enum ns_error_t
mridup 6:e7a3fca2df10 358 if(status!=WiFi_MODULE_SUCCESS)
mridup 6:e7a3fca2df10 359 {
mridup 6:e7a3fca2df10 360 return -1;
mridup 6:e7a3fca2df10 361 }
mridup 6:e7a3fca2df10 362
mridup 6:e7a3fca2df10 363 return 0;
mridup 6:e7a3fca2df10 364 }
mridup 6:e7a3fca2df10 365
mridup 6:e7a3fca2df10 366 int SpwfSADevice::socket_server_write(uint16_t data_length,char * pdata)
mridup 6:e7a3fca2df10 367 {
mridup 6:e7a3fca2df10 368 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 6:e7a3fca2df10 369
mridup 6:e7a3fca2df10 370 status = wifi_socket_server_write(data_length, pdata);
mridup 6:e7a3fca2df10 371 //map error to enum ns_error_t
mridup 6:e7a3fca2df10 372 if(status!=WiFi_MODULE_SUCCESS)
mridup 6:e7a3fca2df10 373 {
mridup 6:e7a3fca2df10 374 return -1;
mridup 6:e7a3fca2df10 375 }
mridup 6:e7a3fca2df10 376
mridup 6:e7a3fca2df10 377 return 0;
mridup 6:e7a3fca2df10 378 }
mridup 6:e7a3fca2df10 379
mridup 6:e7a3fca2df10 380 int SpwfSADevice::socket_server_close(void)
mridup 6:e7a3fca2df10 381 {
mridup 6:e7a3fca2df10 382 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 6:e7a3fca2df10 383
mridup 6:e7a3fca2df10 384 status = wifi_socket_server_close();
mridup 6:e7a3fca2df10 385 //map error to enum ns_error_t
mridup 6:e7a3fca2df10 386 if(status!=WiFi_MODULE_SUCCESS)
mridup 6:e7a3fca2df10 387 {
mridup 6:e7a3fca2df10 388 return -1;
mridup 6:e7a3fca2df10 389 }
mridup 6:e7a3fca2df10 390
mridup 6:e7a3fca2df10 391 return 0;
mridup 6:e7a3fca2df10 392 }
mridup 6:e7a3fca2df10 393
mridup 0:dc55f40eb04f 394 void SpwfSADevice::spwf_attach_irq(wifi_bool attach)
mridup 0:dc55f40eb04f 395 {
mridup 0:dc55f40eb04f 396 if(attach)
mridup 0:dc55f40eb04f 397 {
mridup 0:dc55f40eb04f 398 uart_.attach(Rx_irq_handler, SerialBase::RxIrq);
mridup 0:dc55f40eb04f 399 }
mridup 0:dc55f40eb04f 400 else
mridup 0:dc55f40eb04f 401 {
mridup 0:dc55f40eb04f 402 uart_.attach(NULL, SerialBase::RxIrq);
mridup 0:dc55f40eb04f 403 }
mridup 0:dc55f40eb04f 404 }
mridup 0:dc55f40eb04f 405
mridup 0:dc55f40eb04f 406 void SpwfSADevice::spwf_send(const char * cmd, uint16_t size)
mridup 0:dc55f40eb04f 407 {
mridup 0:dc55f40eb04f 408 Timer timer;
mridup 0:dc55f40eb04f 409 int i;
mridup 0:dc55f40eb04f 410 //timer.start();
mridup 0:dc55f40eb04f 411
mridup 0:dc55f40eb04f 412 //uart_.puts(cmd);//string may contain '\0' character in between hence not used
mridup 0:dc55f40eb04f 413
mridup 0:dc55f40eb04f 414 for(i=0;i<size;i++)
mridup 0:dc55f40eb04f 415 {
mridup 0:dc55f40eb04f 416 uart_.putc(cmd[i]);
mridup 0:dc55f40eb04f 417 //if (timer.read_ms() > _timeout) {
mridup 0:dc55f40eb04f 418 //return -1;
mridup 0:dc55f40eb04f 419 //}
mridup 0:dc55f40eb04f 420 }
mridup 0:dc55f40eb04f 421 }
mridup 0:dc55f40eb04f 422
mridup 0:dc55f40eb04f 423 char SpwfSADevice::spwf_get(void)
mridup 0:dc55f40eb04f 424 {
mridup 0:dc55f40eb04f 425 return(uart_.getc());
mridup 0:dc55f40eb04f 426 }
mridup 0:dc55f40eb04f 427
mridup 0:dc55f40eb04f 428 void SpwfSADevice::spwf_wakeup(int wake)
mridup 0:dc55f40eb04f 429 {
mridup 0:dc55f40eb04f 430 wakeup_.write(wake);
mridup 0:dc55f40eb04f 431 }
mridup 0:dc55f40eb04f 432
mridup 0:dc55f40eb04f 433 void SpwfSADevice::spwf_reset(int reset)
mridup 0:dc55f40eb04f 434 {
mridup 0:dc55f40eb04f 435 rst_.write(reset);
mridup 0:dc55f40eb04f 436 }
mridup 0:dc55f40eb04f 437
mridup 0:dc55f40eb04f 438 void SpwfSADevice::spwf_rts(int rts)
mridup 0:dc55f40eb04f 439 {
mridup 0:dc55f40eb04f 440 rts_.write(rts);
mridup 0:dc55f40eb04f 441 }
mridup 0:dc55f40eb04f 442
mridup 0:dc55f40eb04f 443 int SpwfSADevice::spwf_read_rts()
mridup 0:dc55f40eb04f 444 {
mridup 0:dc55f40eb04f 445 return(rts_.read());
mridup 0:dc55f40eb04f 446 }
mridup 0:dc55f40eb04f 447
mridup 0:dc55f40eb04f 448 void SpwfSADevice::debug_print(const char * string)
mridup 0:dc55f40eb04f 449 {
mridup 0:dc55f40eb04f 450 term_.puts(string);
mridup 0:dc55f40eb04f 451 }
mridup 0:dc55f40eb04f 452
mridup 6:e7a3fca2df10 453 void SpwfSADevice::set_wait_for_incoming_client(bool set)
mridup 6:e7a3fca2df10 454 {
mridup 6:e7a3fca2df10 455 wait_for_incoming_client = set;
mridup 6:e7a3fca2df10 456 }
mridup 6:e7a3fca2df10 457
mridup 6:e7a3fca2df10 458 bool SpwfSADevice::get_wait_for_incoming_client()
mridup 6:e7a3fca2df10 459 {
mridup 6:e7a3fca2df10 460 return wait_for_incoming_client;
mridup 6:e7a3fca2df10 461 }
mridup 6:e7a3fca2df10 462