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:
Mon May 09 10:38:22 2016 +0000
Revision:
6:e7a3fca2df10
Parent:
5:c83ffd44f40a
Child:
7:0fdd186a7d90
Socket Server support.

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 0:dc55f40eb04f 64 }
mridup 0:dc55f40eb04f 65
mridup 0:dc55f40eb04f 66 SpwfSADevice::~SpwfSADevice(void)
mridup 0:dc55f40eb04f 67 {
mridup 0:dc55f40eb04f 68 //de-constructor
mridup 0:dc55f40eb04f 69 }
mridup 0:dc55f40eb04f 70
mridup 5:c83ffd44f40a 71 int SpwfSADevice::init(void)
mridup 0:dc55f40eb04f 72 {
mridup 0:dc55f40eb04f 73 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 74 Timer timer;
mridup 0:dc55f40eb04f 75
mridup 0:dc55f40eb04f 76 timer.start();
mridup 0:dc55f40eb04f 77 rst_.output();
mridup 0:dc55f40eb04f 78 wakeup_.output();
mridup 0:dc55f40eb04f 79 rts_.output();
mridup 0:dc55f40eb04f 80
mridup 0:dc55f40eb04f 81 term_.baud(9600);
mridup 0:dc55f40eb04f 82 term_.format(8, SerialBase::None, 1);
mridup 0:dc55f40eb04f 83
mridup 0:dc55f40eb04f 84 uart_.baud(115200);
mridup 0:dc55f40eb04f 85 uart_.format(8, SerialBase::None, 1);
mridup 0:dc55f40eb04f 86 uart_.set_flow_control(SerialBase::RTS, PA_12, NC);//RTSCTS
mridup 0:dc55f40eb04f 87 uart_.attach(Rx_irq_handler, SerialBase::RxIrq);
mridup 0:dc55f40eb04f 88
mridup 0:dc55f40eb04f 89 config.power=wifi_active;
mridup 0:dc55f40eb04f 90 config.power_level=high;
mridup 0:dc55f40eb04f 91 config.dhcp=on;//use DHCP IP address
mridup 0:dc55f40eb04f 92
mridup 0:dc55f40eb04f 93 /*Initialize the tickers*/
mridup 0:dc55f40eb04f 94 wifi_isr.attach_us(Wifi_ticker, 1000); //decreasing the time period to 1ms may be causing overrun issue with UART?\
mridup 0:dc55f40eb04f 95 //UART error not evident but characters are sometimes missing in pipeline(ring_buffer)\
mridup 0:dc55f40eb04f 96 //specifically in the +WIND:25:WiFi Association with 'STM' successful WIND (why specifically this?)
mridup 0:dc55f40eb04f 97
mridup 0:dc55f40eb04f 98 wifi_callback.attach_us(Wifi_scheduler, 2000);//How low can we go?
mridup 0:dc55f40eb04f 99
mridup 0:dc55f40eb04f 100 sync_wait_signal = false;
mridup 0:dc55f40eb04f 101 status = wifi_init(&config);
mridup 0:dc55f40eb04f 102 if(status!=WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 103 {
mridup 0:dc55f40eb04f 104 return -1;
mridup 0:dc55f40eb04f 105 }
mridup 0:dc55f40eb04f 106
mridup 0:dc55f40eb04f 107 while(!sync_wait_signal)
mridup 0:dc55f40eb04f 108 {
mridup 0:dc55f40eb04f 109 if (timer.read_ms() > _timeout) {
mridup 0:dc55f40eb04f 110 return -1;
mridup 0:dc55f40eb04f 111 }
mridup 0:dc55f40eb04f 112 __NOP();
mridup 0:dc55f40eb04f 113 }
mridup 0:dc55f40eb04f 114
mridup 0:dc55f40eb04f 115 return 0;
mridup 0:dc55f40eb04f 116 }
mridup 0:dc55f40eb04f 117
mridup 5:c83ffd44f40a 118 int SpwfSADevice::connect(char * ssid, char * sec_key, WiFi_Priv_Mode priv_mode)
mridup 0:dc55f40eb04f 119 {
mridup 0:dc55f40eb04f 120 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 121 Timer timer;
mridup 0:dc55f40eb04f 122
mridup 0:dc55f40eb04f 123 timer.start();
mridup 0:dc55f40eb04f 124 sync_wait_signal = false;
mridup 0:dc55f40eb04f 125 status = wifi_connect(ssid, sec_key, priv_mode);
mridup 0:dc55f40eb04f 126 if(status!=WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 127 {
mridup 0:dc55f40eb04f 128 return -1;
mridup 0:dc55f40eb04f 129 }
mridup 0:dc55f40eb04f 130
mridup 0:dc55f40eb04f 131 while(!sync_wait_signal)
mridup 0:dc55f40eb04f 132 {
mridup 0:dc55f40eb04f 133 if (timer.read_ms() > _timeout) {
mridup 0:dc55f40eb04f 134 return -1;
mridup 0:dc55f40eb04f 135 }
mridup 0:dc55f40eb04f 136 __NOP();
mridup 0:dc55f40eb04f 137 }
mridup 0:dc55f40eb04f 138
mridup 0:dc55f40eb04f 139 return 0;
mridup 0:dc55f40eb04f 140 }
mridup 0:dc55f40eb04f 141
mridup 5:c83ffd44f40a 142 int SpwfSADevice::disconnect()
mridup 0:dc55f40eb04f 143 {
mridup 0:dc55f40eb04f 144 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 145
mridup 0:dc55f40eb04f 146 status = wifi_disconnect();//will set to Idle Mode
mridup 0:dc55f40eb04f 147 if(status!=WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 148 {
mridup 0:dc55f40eb04f 149 return -1;
mridup 0:dc55f40eb04f 150 }
mridup 0:dc55f40eb04f 151
mridup 0:dc55f40eb04f 152 return 0;
mridup 0:dc55f40eb04f 153 }
mridup 0:dc55f40eb04f 154
mridup 0:dc55f40eb04f 155 const char *SpwfSADevice::getIPAddress()
mridup 0:dc55f40eb04f 156 {
mridup 0:dc55f40eb04f 157 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 158
mridup 0:dc55f40eb04f 159 status = WiFi_Get_IP_Address((uint8_t *)_ip_buffer);
mridup 0:dc55f40eb04f 160
mridup 0:dc55f40eb04f 161 if(status!=WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 162 {
mridup 0:dc55f40eb04f 163 return NULL;
mridup 0:dc55f40eb04f 164 } else
mridup 0:dc55f40eb04f 165 return _ip_buffer;
mridup 0:dc55f40eb04f 166 }
mridup 0:dc55f40eb04f 167
mridup 0:dc55f40eb04f 168 const char *SpwfSADevice::getMACAddress()
mridup 0:dc55f40eb04f 169 {
mridup 0:dc55f40eb04f 170 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 171
mridup 0:dc55f40eb04f 172 status = WiFi_Get_MAC_Address((uint8_t *)_mac_buffer);
mridup 0:dc55f40eb04f 173
mridup 0:dc55f40eb04f 174 if(status!=WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 175 {
mridup 0:dc55f40eb04f 176 return NULL;
mridup 0:dc55f40eb04f 177 } else
mridup 0:dc55f40eb04f 178 return _mac_buffer;
mridup 0:dc55f40eb04f 179 }
mridup 0:dc55f40eb04f 180
mridup 5:c83ffd44f40a 181 int SpwfSADevice::socket_client_open(uint8_t * hostname, uint32_t port_number, uint8_t * protocol, uint8_t * sock_id)
mridup 0:dc55f40eb04f 182 {
mridup 0:dc55f40eb04f 183 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 184
mridup 0:dc55f40eb04f 185 //Timeout of synchronous functions?
mridup 0:dc55f40eb04f 186 status = wifi_socket_client_open(hostname, port_number, protocol, sock_id);
mridup 0:dc55f40eb04f 187 if(status!=WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 188 {
mridup 0:dc55f40eb04f 189 *sock_id = 9;//make sure socket id is not set(set to out of bounds of SPWFSA_SOCKET_COUNT range)
mridup 0:dc55f40eb04f 190 return -1;
mridup 0:dc55f40eb04f 191 }
mridup 0:dc55f40eb04f 192
mridup 0:dc55f40eb04f 193 return 0;
mridup 0:dc55f40eb04f 194 }
mridup 0:dc55f40eb04f 195
mridup 0:dc55f40eb04f 196
mridup 5:c83ffd44f40a 197 int SpwfSADevice::socket_client_write(uint8_t sock_id, uint16_t DataLength,char * pData)
mridup 0:dc55f40eb04f 198 {
mridup 0:dc55f40eb04f 199 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 200
mridup 0:dc55f40eb04f 201 status = wifi_socket_client_write(sock_id, DataLength, pData);
mridup 0:dc55f40eb04f 202 //map error to enum ns_error_t
mridup 0:dc55f40eb04f 203
mridup 0:dc55f40eb04f 204 if(status!=WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 205 {
mridup 0:dc55f40eb04f 206 return -1;
mridup 0:dc55f40eb04f 207 }
mridup 0:dc55f40eb04f 208 return 0;
mridup 0:dc55f40eb04f 209 }
mridup 0:dc55f40eb04f 210
mridup 0:dc55f40eb04f 211
mridup 5:c83ffd44f40a 212 int SpwfSADevice::socket_client_recv(uint8_t sock_id, uint16_t RecvLength,char * pData)
mridup 0:dc55f40eb04f 213 {
mridup 0:dc55f40eb04f 214 Timer timer;
mridup 5:c83ffd44f40a 215 //char debug_str[10];
mridup 0:dc55f40eb04f 216 timer.start();
mridup 0:dc55f40eb04f 217 bytes_to_read = RecvLength;
mridup 0:dc55f40eb04f 218
mridup 0:dc55f40eb04f 219 __disable_irq();
mridup 0:dc55f40eb04f 220 bytes_read=0;
mridup 0:dc55f40eb04f 221 sync_wait_signal = false;
mridup 0:dc55f40eb04f 222 recv_buff = (uint8_t*)pData;
mridup 0:dc55f40eb04f 223 __enable_irq();
mridup 5:c83ffd44f40a 224
mridup 0:dc55f40eb04f 225 while(!sync_wait_signal)
mridup 0:dc55f40eb04f 226 {
mridup 0:dc55f40eb04f 227 if (timer.read_ms() > _timeout) {
mridup 0:dc55f40eb04f 228 //debug_print("\r\n SpwfSADevice:: Timeout!\r\n");
mridup 0:dc55f40eb04f 229 sync_wait_signal = true;
mridup 0:dc55f40eb04f 230 //if(bytes_read==0) return -1;//return error if no bytes are read!
mridup 5:c83ffd44f40a 231 //sprintf((char*)debug_str,"bytes_read: %d\r\n",bytes_read);
mridup 5:c83ffd44f40a 232 //debug_print(debug_str);
mridup 0:dc55f40eb04f 233 return bytes_read;//return amount of data arrived so far
mridup 0:dc55f40eb04f 234 //when do we return NS_ERROR_WOULD_BLOCK??
mridup 0:dc55f40eb04f 235 }
mridup 0:dc55f40eb04f 236 __NOP();
mridup 0:dc55f40eb04f 237 }
mridup 0:dc55f40eb04f 238
mridup 0:dc55f40eb04f 239 return bytes_read;
mridup 0:dc55f40eb04f 240
mridup 0:dc55f40eb04f 241 }
mridup 0:dc55f40eb04f 242
mridup 0:dc55f40eb04f 243 void SpwfSADevice::network_scan(wifi_scan *scan_result, uint16_t max_scan_number)
mridup 0:dc55f40eb04f 244 {
mridup 0:dc55f40eb04f 245 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 246
mridup 0:dc55f40eb04f 247 status = wifi_network_scan(scan_result, max_scan_number);
mridup 0:dc55f40eb04f 248 if(status!=WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 249 {
mridup 0:dc55f40eb04f 250 return;
mridup 0:dc55f40eb04f 251 }
mridup 0:dc55f40eb04f 252 }
mridup 0:dc55f40eb04f 253
mridup 0:dc55f40eb04f 254 void SpwfSADevice::http_get(uint8_t * hostname, uint8_t * path, uint32_t port_number)
mridup 0:dc55f40eb04f 255 {
mridup 0:dc55f40eb04f 256 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 257
mridup 0:dc55f40eb04f 258 status = wifi_http_get((uint8_t *)hostname, (uint8_t *)path, port_number);
mridup 0:dc55f40eb04f 259 if(status!=WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 260 {
mridup 0:dc55f40eb04f 261 return;
mridup 0:dc55f40eb04f 262 }
mridup 0:dc55f40eb04f 263 }
mridup 0:dc55f40eb04f 264
mridup 0:dc55f40eb04f 265 void SpwfSADevice::http_post(uint8_t * url_path)
mridup 0:dc55f40eb04f 266 {
mridup 0:dc55f40eb04f 267 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 268
mridup 0:dc55f40eb04f 269 status = wifi_http_post(url_path);
mridup 0:dc55f40eb04f 270 if(status!=WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 271 {
mridup 0:dc55f40eb04f 272 return;
mridup 0:dc55f40eb04f 273 }
mridup 0:dc55f40eb04f 274 }
mridup 0:dc55f40eb04f 275
mridup 0:dc55f40eb04f 276 void SpwfSADevice::signal_data_receive(uint8_t socket_id, uint8_t * data_ptr, uint32_t message_size, uint32_t chunk_size)
mridup 0:dc55f40eb04f 277 {
mridup 0:dc55f40eb04f 278 char debug_str[10];
mridup 0:dc55f40eb04f 279 //Data will be copied or returned to user only if there is a pending request
mridup 0:dc55f40eb04f 280 //Copy data to pData
mridup 5:c83ffd44f40a 281 //sprintf((char*)debug_str,"sock_id: %d, size: %d\r\n",socket_id, message_size);
mridup 5:c83ffd44f40a 282
mridup 0:dc55f40eb04f 283 if(recv_buff && !sync_wait_signal)
mridup 0:dc55f40eb04f 284 {
mridup 0:dc55f40eb04f 285 if((bytes_read + message_size)<= bytes_to_read)
mridup 0:dc55f40eb04f 286 {
mridup 0:dc55f40eb04f 287 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 288 bytes_read += message_size;
mridup 0:dc55f40eb04f 289 }
mridup 0:dc55f40eb04f 290 else
mridup 0:dc55f40eb04f 291 {
mridup 0:dc55f40eb04f 292 uint32_t x_size = (bytes_read + message_size) - bytes_to_read;
mridup 0:dc55f40eb04f 293 memcpy(recv_buff + bytes_read, data_ptr, message_size-x_size);
mridup 0:dc55f40eb04f 294 bytes_read += (message_size-x_size);
mridup 0:dc55f40eb04f 295 }
mridup 0:dc55f40eb04f 296
mridup 0:dc55f40eb04f 297 if(bytes_read >= bytes_to_read)
mridup 0:dc55f40eb04f 298 {
mridup 0:dc55f40eb04f 299 __disable_irq();
mridup 0:dc55f40eb04f 300 sync_wait_signal = true;
mridup 0:dc55f40eb04f 301 __enable_irq();
mridup 0:dc55f40eb04f 302 }
mridup 0:dc55f40eb04f 303 }
mridup 0:dc55f40eb04f 304 else
mridup 0:dc55f40eb04f 305 {
mridup 0:dc55f40eb04f 306 debug_print("\r\n Socket:: Data Dropped: ");
mridup 0:dc55f40eb04f 307 sprintf((char*)debug_str,"%d\r\n",message_size);
mridup 0:dc55f40eb04f 308 debug_print(debug_str);
mridup 0:dc55f40eb04f 309 __disable_irq();
mridup 0:dc55f40eb04f 310 sync_wait_signal = true;
mridup 0:dc55f40eb04f 311 __enable_irq();
mridup 0:dc55f40eb04f 312 }
mridup 0:dc55f40eb04f 313
mridup 0:dc55f40eb04f 314 }
mridup 0:dc55f40eb04f 315
mridup 0:dc55f40eb04f 316 void SpwfSADevice::signal_synch_wait(WiFi_Status_t code)
mridup 0:dc55f40eb04f 317 {
mridup 0:dc55f40eb04f 318 if(code == WiFi_DISASSOCIATION)
mridup 0:dc55f40eb04f 319 {
mridup 0:dc55f40eb04f 320 //do nothing
mridup 0:dc55f40eb04f 321 }
mridup 0:dc55f40eb04f 322 else
mridup 0:dc55f40eb04f 323 {
mridup 0:dc55f40eb04f 324 __disable_irq();
mridup 0:dc55f40eb04f 325 sync_wait_signal = true;
mridup 0:dc55f40eb04f 326 __enable_irq();
mridup 0:dc55f40eb04f 327 }
mridup 0:dc55f40eb04f 328 }
mridup 0:dc55f40eb04f 329
mridup 5:c83ffd44f40a 330 int SpwfSADevice::socket_client_close(uint8_t sock_close_id)
mridup 0:dc55f40eb04f 331 {
mridup 0:dc55f40eb04f 332 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 0:dc55f40eb04f 333
mridup 0:dc55f40eb04f 334 status = wifi_socket_client_close(sock_close_id);
mridup 0:dc55f40eb04f 335 //map error to enum ns_error_t
mridup 0:dc55f40eb04f 336 if(status!=WiFi_MODULE_SUCCESS)
mridup 0:dc55f40eb04f 337 {
mridup 0:dc55f40eb04f 338 return -1;
mridup 0:dc55f40eb04f 339 }
mridup 0:dc55f40eb04f 340
mridup 0:dc55f40eb04f 341 return 0;
mridup 0:dc55f40eb04f 342 }
mridup 0:dc55f40eb04f 343
mridup 0:dc55f40eb04f 344
mridup 6:e7a3fca2df10 345 int SpwfSADevice::socket_server_open(uint32_t port_number, uint8_t * protocol)
mridup 6:e7a3fca2df10 346 {
mridup 6:e7a3fca2df10 347 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 6:e7a3fca2df10 348
mridup 6:e7a3fca2df10 349 status = wifi_socket_server_open(port_number, protocol);
mridup 6:e7a3fca2df10 350 //map error to enum ns_error_t
mridup 6:e7a3fca2df10 351 if(status!=WiFi_MODULE_SUCCESS)
mridup 6:e7a3fca2df10 352 {
mridup 6:e7a3fca2df10 353 return -1;
mridup 6:e7a3fca2df10 354 }
mridup 6:e7a3fca2df10 355
mridup 6:e7a3fca2df10 356 return 0;
mridup 6:e7a3fca2df10 357 }
mridup 6:e7a3fca2df10 358
mridup 6:e7a3fca2df10 359 int SpwfSADevice::socket_server_write(uint16_t data_length,char * pdata)
mridup 6:e7a3fca2df10 360 {
mridup 6:e7a3fca2df10 361 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 6:e7a3fca2df10 362
mridup 6:e7a3fca2df10 363 status = wifi_socket_server_write(data_length, pdata);
mridup 6:e7a3fca2df10 364 //map error to enum ns_error_t
mridup 6:e7a3fca2df10 365 if(status!=WiFi_MODULE_SUCCESS)
mridup 6:e7a3fca2df10 366 {
mridup 6:e7a3fca2df10 367 return -1;
mridup 6:e7a3fca2df10 368 }
mridup 6:e7a3fca2df10 369
mridup 6:e7a3fca2df10 370 return 0;
mridup 6:e7a3fca2df10 371 }
mridup 6:e7a3fca2df10 372
mridup 6:e7a3fca2df10 373 int SpwfSADevice::socket_server_close(void)
mridup 6:e7a3fca2df10 374 {
mridup 6:e7a3fca2df10 375 WiFi_Status_t status = WiFi_MODULE_SUCCESS;
mridup 6:e7a3fca2df10 376
mridup 6:e7a3fca2df10 377 status = wifi_socket_server_close();
mridup 6:e7a3fca2df10 378 //map error to enum ns_error_t
mridup 6:e7a3fca2df10 379 if(status!=WiFi_MODULE_SUCCESS)
mridup 6:e7a3fca2df10 380 {
mridup 6:e7a3fca2df10 381 return -1;
mridup 6:e7a3fca2df10 382 }
mridup 6:e7a3fca2df10 383
mridup 6:e7a3fca2df10 384 return 0;
mridup 6:e7a3fca2df10 385 }
mridup 6:e7a3fca2df10 386
mridup 0:dc55f40eb04f 387 void SpwfSADevice::spwf_attach_irq(wifi_bool attach)
mridup 0:dc55f40eb04f 388 {
mridup 0:dc55f40eb04f 389 if(attach)
mridup 0:dc55f40eb04f 390 {
mridup 0:dc55f40eb04f 391 uart_.attach(Rx_irq_handler, SerialBase::RxIrq);
mridup 0:dc55f40eb04f 392 }
mridup 0:dc55f40eb04f 393 else
mridup 0:dc55f40eb04f 394 {
mridup 0:dc55f40eb04f 395 uart_.attach(NULL, SerialBase::RxIrq);
mridup 0:dc55f40eb04f 396 }
mridup 0:dc55f40eb04f 397 }
mridup 0:dc55f40eb04f 398
mridup 0:dc55f40eb04f 399 void SpwfSADevice::spwf_send(const char * cmd, uint16_t size)
mridup 0:dc55f40eb04f 400 {
mridup 0:dc55f40eb04f 401 Timer timer;
mridup 0:dc55f40eb04f 402 int i;
mridup 0:dc55f40eb04f 403 //timer.start();
mridup 0:dc55f40eb04f 404
mridup 0:dc55f40eb04f 405 //uart_.puts(cmd);//string may contain '\0' character in between hence not used
mridup 0:dc55f40eb04f 406
mridup 0:dc55f40eb04f 407 for(i=0;i<size;i++)
mridup 0:dc55f40eb04f 408 {
mridup 0:dc55f40eb04f 409 uart_.putc(cmd[i]);
mridup 0:dc55f40eb04f 410 //if (timer.read_ms() > _timeout) {
mridup 0:dc55f40eb04f 411 //return -1;
mridup 0:dc55f40eb04f 412 //}
mridup 0:dc55f40eb04f 413 }
mridup 0:dc55f40eb04f 414 }
mridup 0:dc55f40eb04f 415
mridup 0:dc55f40eb04f 416 char SpwfSADevice::spwf_get(void)
mridup 0:dc55f40eb04f 417 {
mridup 0:dc55f40eb04f 418 return(uart_.getc());
mridup 0:dc55f40eb04f 419 }
mridup 0:dc55f40eb04f 420
mridup 0:dc55f40eb04f 421 void SpwfSADevice::spwf_wakeup(int wake)
mridup 0:dc55f40eb04f 422 {
mridup 0:dc55f40eb04f 423 wakeup_.write(wake);
mridup 0:dc55f40eb04f 424 }
mridup 0:dc55f40eb04f 425
mridup 0:dc55f40eb04f 426 void SpwfSADevice::spwf_reset(int reset)
mridup 0:dc55f40eb04f 427 {
mridup 0:dc55f40eb04f 428 rst_.write(reset);
mridup 0:dc55f40eb04f 429 }
mridup 0:dc55f40eb04f 430
mridup 0:dc55f40eb04f 431 void SpwfSADevice::spwf_rts(int rts)
mridup 0:dc55f40eb04f 432 {
mridup 0:dc55f40eb04f 433 rts_.write(rts);
mridup 0:dc55f40eb04f 434 }
mridup 0:dc55f40eb04f 435
mridup 0:dc55f40eb04f 436 int SpwfSADevice::spwf_read_rts()
mridup 0:dc55f40eb04f 437 {
mridup 0:dc55f40eb04f 438 return(rts_.read());
mridup 0:dc55f40eb04f 439 }
mridup 0:dc55f40eb04f 440
mridup 0:dc55f40eb04f 441 void SpwfSADevice::debug_print(const char * string)
mridup 0:dc55f40eb04f 442 {
mridup 0:dc55f40eb04f 443 term_.puts(string);
mridup 0:dc55f40eb04f 444 }
mridup 0:dc55f40eb04f 445
mridup 6:e7a3fca2df10 446 void SpwfSADevice::set_wait_for_incoming_client(bool set)
mridup 6:e7a3fca2df10 447 {
mridup 6:e7a3fca2df10 448 wait_for_incoming_client = set;
mridup 6:e7a3fca2df10 449 }
mridup 6:e7a3fca2df10 450
mridup 6:e7a3fca2df10 451 bool SpwfSADevice::get_wait_for_incoming_client()
mridup 6:e7a3fca2df10 452 {
mridup 6:e7a3fca2df10 453 return wait_for_incoming_client;
mridup 6:e7a3fca2df10 454 }
mridup 6:e7a3fca2df10 455