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:
Thu Apr 14 06:14:14 2016 +0000
Revision:
1:bd9db471d47d
Parent:
WIFI_API/SpwfSADevice.cpp@0:dc55f40eb04f
Child:
5:c83ffd44f40a
increasing reset delay to 200ms due to problem with L4 reset

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