X-NUCLEO-IDW01M1 Wi-Fi expansion board mbed OS 2 ("Classic") library. mbed OS 5 library also available (see below).

Dependencies:   SPWF01SA

Dependents:   SpwfInterface_NSAPI_Testsv2 Nucleo_read_a0_thingspace Nucleo_read_a0_thingspace_mems Cayenne-X-NUCLEO-IDW01M1 ... more

Fork of X_NUCLEO_IDW01M1v2 by ST Expansion SW Team

Introduction

X_NUCLEO_IDW01M1 is a mbed library for the Wi-Fi expansion board X-NUCLEO-IDW01M1 compatible with STM32 Nucleo.

The software can be used for building Wi-Fi applications with the SPWF01SA module. It is an implementation of the NetworkSocketAPI library from mbed OS 2 ("Classic").
mbed OS 5 library can instead be found at this link.

Firmware Library

The X_NUCLEO_IDW01M1 library comes with a sample application (HelloWorld_IDW01M1v2) and a NSAPI test suite application (SpwfInterface_NSAPI_Testsv2).

This library is only supported on NUCLEO platforms and any platforms with Arduino connector. However connection to arduino needs to be done manually using 4 wires for Vdd, Gnd, Rx and Tx. Example applications have more specific details on exact connections to be used.

The features of the library are :

  • Supports mbed OS 2 ("Classic") NetworkSocketAPI
  • Supports both client sockets
  • Configuration of USART pins to be used

Class SpwfSAInterface is intended to represent the X-NUCLEO-IDW01M1 expansion board with the SPWF module.

The expansion board is basically featuring the component:

  1. a SPWF01SA Serial-to-Wi-Fi module

Example Applications

NSAPI Test Suite

Committer:
mridup
Date:
Thu Jul 07 13:21:57 2016 +0000
Revision:
4:2f3f156a3b0b
Parent:
3:4c2cbca19031
Child:
5:8ee8698d19e3
1ms delay in NSAPI socket_recv when socket recv returns -1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mridup 0:907910bfb0b5 1 /* mbed Microcontroller Library
mridup 0:907910bfb0b5 2 * Copyright (c) 20015 ARM Limited
mridup 0:907910bfb0b5 3 *
mridup 0:907910bfb0b5 4 * Licensed under the Apache License, Version 2.0 (the "License");
mridup 0:907910bfb0b5 5 * you may not use this file except in compliance with the License.
mridup 0:907910bfb0b5 6 * You may obtain a copy of the License at
mridup 0:907910bfb0b5 7 *
mridup 0:907910bfb0b5 8 * http://www.apache.org/licenses/LICENSE-2.0
mridup 0:907910bfb0b5 9 *
mridup 0:907910bfb0b5 10 * Unless required by applicable law or agreed to in writing, software
mridup 0:907910bfb0b5 11 * distributed under the License is distributed on an "AS IS" BASIS,
mridup 0:907910bfb0b5 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
mridup 0:907910bfb0b5 13 * See the License for the specific language governing permissions and
mridup 0:907910bfb0b5 14 * limitations under the License.
mridup 0:907910bfb0b5 15 */
mridup 0:907910bfb0b5 16
mridup 0:907910bfb0b5 17 /**
mridup 0:907910bfb0b5 18 ******************************************************************************
mridup 0:907910bfb0b5 19 * @file SpwfInterface.cpp
mridup 0:907910bfb0b5 20 * @author STMicroelectronics
mridup 0:907910bfb0b5 21 * @brief Implementation of the NetworkStack for the SPWF Device
mridup 0:907910bfb0b5 22 ******************************************************************************
mridup 0:907910bfb0b5 23 * @copy
mridup 0:907910bfb0b5 24 *
mridup 0:907910bfb0b5 25 * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
mridup 0:907910bfb0b5 26 * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
mridup 0:907910bfb0b5 27 * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
mridup 0:907910bfb0b5 28 * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
mridup 0:907910bfb0b5 29 * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
mridup 0:907910bfb0b5 30 * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
mridup 0:907910bfb0b5 31 *
mridup 0:907910bfb0b5 32 * <h2><center>&copy; COPYRIGHT 2016 STMicroelectronics</center></h2>
mridup 0:907910bfb0b5 33 ******************************************************************************
mridup 0:907910bfb0b5 34 */
mridup 0:907910bfb0b5 35
mridup 0:907910bfb0b5 36 #include "SpwfInterface.h"
mridup 0:907910bfb0b5 37
mridup 0:907910bfb0b5 38 // Various timeouts for different SPWF operations
mridup 0:907910bfb0b5 39 #define SPWF_CONNECT_TIMEOUT 20000
mridup 0:907910bfb0b5 40 #define SPWF_SEND_TIMEOUT 500
mridup 0:907910bfb0b5 41 #define SPWF_RECV_TIMEOUT 1500
mridup 0:907910bfb0b5 42 #define SPWF_MISC_TIMEOUT 15000
mridup 0:907910bfb0b5 43
mridup 0:907910bfb0b5 44 /** spwf_socket class
mridup 0:907910bfb0b5 45 * Implementation of SPWF socket structure
mridup 0:907910bfb0b5 46 */
mridup 0:907910bfb0b5 47 struct spwf_socket {
mridup 0:907910bfb0b5 48 int id;
mridup 0:907910bfb0b5 49 int server_port;
mridup 0:907910bfb0b5 50 nsapi_protocol_t proto;
mridup 0:907910bfb0b5 51 bool connected;
mridup 0:907910bfb0b5 52 };
mridup 0:907910bfb0b5 53
mridup 0:907910bfb0b5 54
mridup 0:907910bfb0b5 55 /**
mridup 0:907910bfb0b5 56 * @brief SpwfSAInterface constructor
mridup 0:907910bfb0b5 57 * @param tx: Pin USART TX
mridup 0:907910bfb0b5 58 * rx: Pin USART RX
mridup 0:907910bfb0b5 59 * rst: reset pin for Spwf module
mridup 0:907910bfb0b5 60 * wkup: reset pin for Spwf module
mridup 0:907910bfb0b5 61 * rts: Pin USART RTS
mridup 0:907910bfb0b5 62 * debug : not used
mridup 0:907910bfb0b5 63 * @retval none
mridup 0:907910bfb0b5 64 */
mridup 0:907910bfb0b5 65 SpwfSAInterface::SpwfSAInterface(PinName tx, PinName rx, bool debug)
mridup 0:907910bfb0b5 66 : _spwf(tx, rx, debug)
mridup 0:907910bfb0b5 67 {
mridup 0:907910bfb0b5 68 memset(_ids, 0, sizeof(_ids));
mridup 0:907910bfb0b5 69 isInitialized = false;
mridup 0:907910bfb0b5 70 isListening = false;
mridup 0:907910bfb0b5 71 }
mridup 0:907910bfb0b5 72
mridup 0:907910bfb0b5 73 /**
mridup 0:907910bfb0b5 74 * @brief SpwfSAInterface destructor
mridup 0:907910bfb0b5 75 * @param none
mridup 0:907910bfb0b5 76 * @retval none
mridup 0:907910bfb0b5 77 */
mridup 0:907910bfb0b5 78 SpwfSAInterface::~SpwfSAInterface()
mridup 0:907910bfb0b5 79 {
mridup 0:907910bfb0b5 80 }
mridup 0:907910bfb0b5 81
mridup 0:907910bfb0b5 82 /**
mridup 0:907910bfb0b5 83 * @brief init function
mridup 0:907910bfb0b5 84 initializes SPWF FW and module
mridup 0:907910bfb0b5 85 * @param none
mridup 0:907910bfb0b5 86 * @retval error value
mridup 0:907910bfb0b5 87 */
mridup 0:907910bfb0b5 88 int SpwfSAInterface::init(void)
mridup 0:907910bfb0b5 89 {
mridup 0:907910bfb0b5 90 _spwf.setTimeout(SPWF_MISC_TIMEOUT);
mridup 1:fd7b3df18dd7 91 if(_spwf.startup(0)) {
mridup 1:fd7b3df18dd7 92 isInitialized=true;
mridup 1:fd7b3df18dd7 93 return true;
mridup 1:fd7b3df18dd7 94 }
mridup 1:fd7b3df18dd7 95 else return NSAPI_ERROR_DEVICE_ERROR;
mridup 0:907910bfb0b5 96 }
mridup 0:907910bfb0b5 97
mridup 0:907910bfb0b5 98 /**
mridup 0:907910bfb0b5 99 * @brief network connect
mridup 0:907910bfb0b5 100 connects to Access Point
mridup 0:907910bfb0b5 101 * @param ap: Access Point (AP) Name String
mridup 0:907910bfb0b5 102 * pass_phrase: Password String for AP
mridup 0:907910bfb0b5 103 * security: type of NSAPI security supported
mridup 0:907910bfb0b5 104 * @retval NSAPI Error Type
mridup 0:907910bfb0b5 105 */
mridup 0:907910bfb0b5 106 int SpwfSAInterface::connect(const char *ap,
mridup 0:907910bfb0b5 107 const char *pass_phrase,
mridup 0:907910bfb0b5 108 nsapi_security_t security)
mridup 0:907910bfb0b5 109 {
mridup 0:907910bfb0b5 110 int mode;
mridup 0:907910bfb0b5 111
mridup 0:907910bfb0b5 112 //initialize the device before connecting
mridup 0:907910bfb0b5 113 if(!isInitialized)
mridup 0:907910bfb0b5 114 {
mridup 1:fd7b3df18dd7 115 if(!init())
mridup 1:fd7b3df18dd7 116 return NSAPI_ERROR_DEVICE_ERROR;
mridup 0:907910bfb0b5 117 }
mridup 2:610672ed2e9f 118
mridup 0:907910bfb0b5 119 _spwf.setTimeout(SPWF_CONNECT_TIMEOUT);
mridup 0:907910bfb0b5 120
mridup 0:907910bfb0b5 121 switch(security)
mridup 0:907910bfb0b5 122 {
mridup 0:907910bfb0b5 123 case NSAPI_SECURITY_NONE:
mridup 0:907910bfb0b5 124 mode = 0;
mridup 0:907910bfb0b5 125 pass_phrase = NULL;
mridup 0:907910bfb0b5 126 break;
mridup 0:907910bfb0b5 127 case NSAPI_SECURITY_WEP:
mridup 0:907910bfb0b5 128 mode = 1;
mridup 0:907910bfb0b5 129 break;
mridup 0:907910bfb0b5 130 case NSAPI_SECURITY_WPA:
mridup 0:907910bfb0b5 131 case NSAPI_SECURITY_WPA2:
mridup 0:907910bfb0b5 132 mode = 2;
mridup 0:907910bfb0b5 133 break;
mridup 0:907910bfb0b5 134 default:
mridup 0:907910bfb0b5 135 mode = 2;
mridup 0:907910bfb0b5 136 break;
mridup 0:907910bfb0b5 137 }
mridup 0:907910bfb0b5 138 return (_spwf.connect((char*)ap, (char*)pass_phrase, mode));
mridup 0:907910bfb0b5 139 }
mridup 0:907910bfb0b5 140
mridup 0:907910bfb0b5 141 /**
mridup 0:907910bfb0b5 142 * @brief network disconnect
mridup 0:907910bfb0b5 143 disconnects from Access Point
mridup 0:907910bfb0b5 144 * @param none
mridup 0:907910bfb0b5 145 * @retval NSAPI Error Type
mridup 0:907910bfb0b5 146 */
mridup 0:907910bfb0b5 147 int SpwfSAInterface::disconnect()
mridup 0:907910bfb0b5 148 {
mridup 0:907910bfb0b5 149 return (_spwf.disconnect());
mridup 0:907910bfb0b5 150 }
mridup 0:907910bfb0b5 151
mridup 0:907910bfb0b5 152 /**
mridup 0:907910bfb0b5 153 * @brief Get the local IP address
mridup 0:907910bfb0b5 154 * @param none
mridup 0:907910bfb0b5 155 * @retval Null-terminated representation of the local IP address
mridup 0:907910bfb0b5 156 * or null if not yet connected
mridup 0:907910bfb0b5 157 */
mridup 0:907910bfb0b5 158 const char *SpwfSAInterface::get_ip_address()
mridup 0:907910bfb0b5 159 {
mridup 0:907910bfb0b5 160 return _spwf.getIPAddress();
mridup 0:907910bfb0b5 161 }
mridup 0:907910bfb0b5 162
mridup 0:907910bfb0b5 163 /**
mridup 0:907910bfb0b5 164 * @brief Get the MAC address
mridup 0:907910bfb0b5 165 * @param none
mridup 0:907910bfb0b5 166 * @retval Null-terminated representation of the MAC address
mridup 0:907910bfb0b5 167 * or null if not yet connected
mridup 0:907910bfb0b5 168 */
mridup 0:907910bfb0b5 169 const char *SpwfSAInterface::get_mac_address()
mridup 0:907910bfb0b5 170 {
mridup 0:907910bfb0b5 171 return _spwf.getMACAddress();
mridup 0:907910bfb0b5 172 }
mridup 0:907910bfb0b5 173
mridup 0:907910bfb0b5 174 /**
mridup 0:907910bfb0b5 175 * @brief open a socket handle
mridup 0:907910bfb0b5 176 * @param handle: Pointer to handle
mridup 0:907910bfb0b5 177 * proto: TCP/UDP protocol
mridup 0:907910bfb0b5 178 * @retval NSAPI Error Type
mridup 0:907910bfb0b5 179 */
mridup 0:907910bfb0b5 180 int SpwfSAInterface::socket_open(void **handle, nsapi_protocol_t proto)
mridup 0:907910bfb0b5 181 {
mridup 0:907910bfb0b5 182 int id = -1;
mridup 0:907910bfb0b5 183
mridup 0:907910bfb0b5 184 struct spwf_socket *socket = new struct spwf_socket;
mridup 0:907910bfb0b5 185 if (!socket) {
mridup 0:907910bfb0b5 186 return NSAPI_ERROR_NO_SOCKET;
mridup 0:907910bfb0b5 187 }
mridup 0:907910bfb0b5 188
mridup 0:907910bfb0b5 189 socket->id = id;
mridup 0:907910bfb0b5 190 socket->server_port = id;
mridup 0:907910bfb0b5 191 socket->proto = proto;
mridup 0:907910bfb0b5 192 socket->connected = false;
mridup 0:907910bfb0b5 193 *handle = socket;
mridup 0:907910bfb0b5 194 return 0;
mridup 0:907910bfb0b5 195 }
mridup 0:907910bfb0b5 196
mridup 0:907910bfb0b5 197 /**
mridup 0:907910bfb0b5 198 * @brief connect to a remote socket
mridup 0:907910bfb0b5 199 * @param handle: Pointer to socket handle
mridup 0:907910bfb0b5 200 * addr: Address to connect to
mridup 0:907910bfb0b5 201 * @retval NSAPI Error Type
mridup 0:907910bfb0b5 202 */
mridup 0:907910bfb0b5 203 int SpwfSAInterface::socket_connect(void *handle, const SocketAddress &addr)
mridup 0:907910bfb0b5 204 {
mridup 0:907910bfb0b5 205 int sock_id = 99;
mridup 0:907910bfb0b5 206 struct spwf_socket *socket = (struct spwf_socket *)handle;
mridup 0:907910bfb0b5 207
mridup 0:907910bfb0b5 208 const char *proto = (socket->proto == NSAPI_UDP) ? "u" : "t";//"s" for secure socket?
mridup 0:907910bfb0b5 209
mridup 1:fd7b3df18dd7 210 if (!_spwf.open(proto, &sock_id, addr.get_ip_address(), addr.get_port())) {;//sock ID is allocated NOW
mridup 1:fd7b3df18dd7 211 return NSAPI_ERROR_DEVICE_ERROR;
mridup 1:fd7b3df18dd7 212 }
mridup 0:907910bfb0b5 213
mridup 0:907910bfb0b5 214 //TODO: Maintain a socket table to map socket ID to host & port
mridup 0:907910bfb0b5 215 //TODO: lookup on client table to see if already socket is allocated to same host/port
mridup 0:907910bfb0b5 216 //multimap <char *, vector <uint16_t> > ::iterator i = c_table.find((char*)ip);
mridup 0:907910bfb0b5 217
mridup 0:907910bfb0b5 218 if(sock_id <= SPWFSA_SOCKET_COUNT)
mridup 0:907910bfb0b5 219 {
mridup 0:907910bfb0b5 220 socket->id = sock_id;//the socket ID of this Socket instance
mridup 0:907910bfb0b5 221 _ids[socket->id] = true;
mridup 0:907910bfb0b5 222 socket->connected = true;
mridup 0:907910bfb0b5 223 }
mridup 0:907910bfb0b5 224 else
mridup 0:907910bfb0b5 225 return NSAPI_ERROR_NO_SOCKET;
mridup 0:907910bfb0b5 226
mridup 0:907910bfb0b5 227 return 0;
mridup 0:907910bfb0b5 228 }
mridup 0:907910bfb0b5 229
mridup 0:907910bfb0b5 230 /**
mridup 0:907910bfb0b5 231 * @brief bind to a port number and address
mridup 0:907910bfb0b5 232 * @param handle: Pointer to socket handle
mridup 0:907910bfb0b5 233 * proto: address to bind to
mridup 0:907910bfb0b5 234 * @retval NSAPI Error Type
mridup 0:907910bfb0b5 235 */
mridup 0:907910bfb0b5 236 int SpwfSAInterface::socket_bind(void *handle, const SocketAddress &address)
mridup 0:907910bfb0b5 237 {
mridup 0:907910bfb0b5 238 struct spwf_socket *socket = (struct spwf_socket *)handle;
mridup 0:907910bfb0b5 239 socket->server_port = address.get_port();
mridup 0:907910bfb0b5 240 return 0;
mridup 0:907910bfb0b5 241 }
mridup 0:907910bfb0b5 242
mridup 0:907910bfb0b5 243 /**
mridup 0:907910bfb0b5 244 * @brief start listening on a port and address
mridup 0:907910bfb0b5 245 * @param handle: Pointer to handle
mridup 0:907910bfb0b5 246 * backlog: not used (always value is 1)
mridup 0:907910bfb0b5 247 * @retval NSAPI Error Type
mridup 0:907910bfb0b5 248 */
mridup 0:907910bfb0b5 249 int SpwfSAInterface::socket_listen(void *handle, int backlog)
mridup 0:907910bfb0b5 250 {
mridup 0:907910bfb0b5 251 return NSAPI_ERROR_UNSUPPORTED;
mridup 0:907910bfb0b5 252 }
mridup 0:907910bfb0b5 253
mridup 0:907910bfb0b5 254 /**
mridup 0:907910bfb0b5 255 * @brief accept connections from remote sockets
mridup 0:907910bfb0b5 256 * @param handle: Pointer to handle of client socket (connecting)
mridup 0:907910bfb0b5 257 * proto: handle of server socket which will accept connections
mridup 0:907910bfb0b5 258 * @retval NSAPI Error Type
mridup 0:907910bfb0b5 259 */
mridup 0:907910bfb0b5 260 int SpwfSAInterface::socket_accept(void **handle, void *server)
mridup 0:907910bfb0b5 261 {
mridup 0:907910bfb0b5 262 return NSAPI_ERROR_UNSUPPORTED;
mridup 0:907910bfb0b5 263 }
mridup 0:907910bfb0b5 264
mridup 0:907910bfb0b5 265 /**
mridup 0:907910bfb0b5 266 * @brief close a socket
mridup 0:907910bfb0b5 267 * @param handle: Pointer to handle
mridup 0:907910bfb0b5 268 * @retval NSAPI Error Type
mridup 0:907910bfb0b5 269 */
mridup 0:907910bfb0b5 270 int SpwfSAInterface::socket_close(void *handle)
mridup 0:907910bfb0b5 271 {
mridup 0:907910bfb0b5 272 struct spwf_socket *socket = (struct spwf_socket *)handle;
mridup 0:907910bfb0b5 273 int err = 0;
mridup 0:907910bfb0b5 274 _spwf.setTimeout(SPWF_MISC_TIMEOUT);
mridup 0:907910bfb0b5 275
mridup 0:907910bfb0b5 276 if(socket->id!=-1)
mridup 0:907910bfb0b5 277 {
mridup 1:fd7b3df18dd7 278 if (_spwf.close(socket->id)) {
mridup 1:fd7b3df18dd7 279 if(socket->id==SERVER_SOCKET_NO)
mridup 1:fd7b3df18dd7 280 isListening = false;
mridup 1:fd7b3df18dd7 281 else
mridup 1:fd7b3df18dd7 282 _ids[socket->id] = false;
mridup 0:907910bfb0b5 283 }
mridup 1:fd7b3df18dd7 284 else err = NSAPI_ERROR_DEVICE_ERROR;
mridup 0:907910bfb0b5 285 }
mridup 0:907910bfb0b5 286
mridup 0:907910bfb0b5 287 delete socket;
mridup 0:907910bfb0b5 288 return err;
mridup 0:907910bfb0b5 289 }
mridup 0:907910bfb0b5 290
mridup 0:907910bfb0b5 291 /**
mridup 0:907910bfb0b5 292 * @brief write to a socket
mridup 0:907910bfb0b5 293 * @param handle: Pointer to handle
mridup 0:907910bfb0b5 294 * data: pointer to data
mridup 0:907910bfb0b5 295 * size: size of data
mridup 0:907910bfb0b5 296 * @retval no of bytes sent
mridup 0:907910bfb0b5 297 */
mridup 0:907910bfb0b5 298 int SpwfSAInterface::socket_send(void *handle, const void *data, unsigned size)
mridup 0:907910bfb0b5 299 {
mridup 0:907910bfb0b5 300 struct spwf_socket *socket = (struct spwf_socket *)handle;
mridup 3:4c2cbca19031 301 //int err;
mridup 0:907910bfb0b5 302
mridup 1:fd7b3df18dd7 303 /*if(socket->id==SERVER_SOCKET_NO)
mridup 0:907910bfb0b5 304 {
mridup 0:907910bfb0b5 305 if(socket->server_port==-1 || !isListening)
mridup 0:907910bfb0b5 306 return NSAPI_ERROR_NO_SOCKET; //server socket not bound or not listening
mridup 0:907910bfb0b5 307
mridup 1:fd7b3df18dd7 308 err = _spwf.socket_server_write((uint16_t)size, (char*)data);
mridup 0:907910bfb0b5 309 }
mridup 0:907910bfb0b5 310 else
mridup 3:4c2cbca19031 311 {
mridup 1:fd7b3df18dd7 312 err = _spwf.send(socket->id, (char*)data, (uint32_t)size);
mridup 3:4c2cbca19031 313 }*/
mridup 3:4c2cbca19031 314 if (!_spwf.send(socket->id, (char*)data, (uint32_t)size)) {
mridup 3:4c2cbca19031 315 return NSAPI_ERROR_DEVICE_ERROR;
mridup 3:4c2cbca19031 316 }
mridup 3:4c2cbca19031 317
mridup 3:4c2cbca19031 318 return size;
mridup 0:907910bfb0b5 319 }
mridup 0:907910bfb0b5 320
mridup 0:907910bfb0b5 321 /**
mridup 0:907910bfb0b5 322 * @brief receive data on a socket
mridup 0:907910bfb0b5 323 * @param handle: Pointer to handle
mridup 0:907910bfb0b5 324 * data: pointer to data
mridup 0:907910bfb0b5 325 * size: size of data
mridup 0:907910bfb0b5 326 * @retval no of bytes read
mridup 0:907910bfb0b5 327 */
mridup 0:907910bfb0b5 328 int SpwfSAInterface::socket_recv(void *handle, void *data, unsigned size)
mridup 0:907910bfb0b5 329 {
mridup 0:907910bfb0b5 330 struct spwf_socket *socket = (struct spwf_socket *)handle;
mridup 0:907910bfb0b5 331 int32_t recv;
mridup 0:907910bfb0b5 332
mridup 0:907910bfb0b5 333 _spwf.setTimeout(SPWF_RECV_TIMEOUT);
mridup 0:907910bfb0b5 334
mridup 0:907910bfb0b5 335 //CHECK:Receive for both Client and Server Sockets same?
mridup 1:fd7b3df18dd7 336 recv = _spwf.recv(socket->id, (char*)data, (uint32_t)size);
mridup 1:fd7b3df18dd7 337 if (recv < 0) {
mridup 4:2f3f156a3b0b 338 wait_ms(1);//delay of 1ms <for F4>??
mridup 4:2f3f156a3b0b 339 return NSAPI_ERROR_WOULD_BLOCK;//send this if we want to block call (else timeout will happen)
mridup 1:fd7b3df18dd7 340 }
mridup 0:907910bfb0b5 341 return recv;
mridup 0:907910bfb0b5 342
mridup 0:907910bfb0b5 343 }
mridup 0:907910bfb0b5 344
mridup 0:907910bfb0b5 345 /**
mridup 0:907910bfb0b5 346 * @brief send data to a udp socket
mridup 0:907910bfb0b5 347 * @param handle: Pointer to handle
mridup 0:907910bfb0b5 348 * addr: address of udp socket
mridup 0:907910bfb0b5 349 * data: pointer to data
mridup 0:907910bfb0b5 350 * size: size of data
mridup 0:907910bfb0b5 351 * @retval no of bytes sent
mridup 0:907910bfb0b5 352 */
mridup 0:907910bfb0b5 353 int SpwfSAInterface::socket_sendto(void *handle, const SocketAddress &addr, const void *data, unsigned size)
mridup 0:907910bfb0b5 354 {
mridup 0:907910bfb0b5 355 struct spwf_socket *socket = (struct spwf_socket *)handle;
mridup 0:907910bfb0b5 356 if (!socket->connected) {
mridup 0:907910bfb0b5 357 int err = socket_connect(socket, addr);
mridup 0:907910bfb0b5 358 if (err < 0) {
mridup 0:907910bfb0b5 359 return err;
mridup 0:907910bfb0b5 360 }
mridup 0:907910bfb0b5 361 }
mridup 0:907910bfb0b5 362
mridup 0:907910bfb0b5 363 return socket_send(socket, data, size);
mridup 0:907910bfb0b5 364 }
mridup 0:907910bfb0b5 365
mridup 0:907910bfb0b5 366 /**
mridup 0:907910bfb0b5 367 * @brief receive data on a udp socket
mridup 0:907910bfb0b5 368 * @param handle: Pointer to handle
mridup 0:907910bfb0b5 369 * addr: address of udp socket
mridup 0:907910bfb0b5 370 * data: pointer to data
mridup 0:907910bfb0b5 371 * size: size of data
mridup 0:907910bfb0b5 372 * @retval no of bytes read
mridup 0:907910bfb0b5 373 */
mridup 0:907910bfb0b5 374 int SpwfSAInterface::socket_recvfrom(void *handle, SocketAddress *addr, void *data, unsigned size)
mridup 0:907910bfb0b5 375 {
mridup 0:907910bfb0b5 376 struct spwf_socket *socket = (struct spwf_socket *)handle;
mridup 0:907910bfb0b5 377 return socket_recv(socket, data, size);
mridup 0:907910bfb0b5 378 }
mridup 0:907910bfb0b5 379
mridup 0:907910bfb0b5 380 /**
mridup 0:907910bfb0b5 381 * @brief attach function/callback to the socket
mridup 0:907910bfb0b5 382 * Not used
mridup 0:907910bfb0b5 383 * @param handle: Pointer to handle
mridup 0:907910bfb0b5 384 * callback: callback function pointer
mridup 0:907910bfb0b5 385 * data: pointer to data
mridup 0:907910bfb0b5 386 * @retval none
mridup 0:907910bfb0b5 387 */
mridup 0:907910bfb0b5 388 void SpwfSAInterface::socket_attach(void *handle, void (*callback)(void *), void *data)
mridup 0:907910bfb0b5 389 {
mridup 0:907910bfb0b5 390 //No implementation yet
mridup 0:907910bfb0b5 391 }
mridup 0:907910bfb0b5 392
mridup 0:907910bfb0b5 393 /**
mridup 0:907910bfb0b5 394 * @brief utility debug function for printing to serial terminal
mridup 0:907910bfb0b5 395 * @param string: Pointer to data
mridup 0:907910bfb0b5 396 * @retval none
mridup 0:907910bfb0b5 397 */
mridup 0:907910bfb0b5 398 void SpwfSAInterface::debug(const char * string)
mridup 0:907910bfb0b5 399 {
mridup 0:907910bfb0b5 400 //_spwf.debug_print(string);
mridup 0:907910bfb0b5 401 }