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:
Tue Jul 05 09:36:47 2016 +0000
Revision:
0:907910bfb0b5
Child:
1:fd7b3df18dd7
SPWF NSAPI v2

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 0:907910bfb0b5 91 return (_spwf.startup(0));
mridup 0:907910bfb0b5 92 }
mridup 0:907910bfb0b5 93
mridup 0:907910bfb0b5 94 /**
mridup 0:907910bfb0b5 95 * @brief network connect
mridup 0:907910bfb0b5 96 connects to Access Point
mridup 0:907910bfb0b5 97 * @param ap: Access Point (AP) Name String
mridup 0:907910bfb0b5 98 * pass_phrase: Password String for AP
mridup 0:907910bfb0b5 99 * security: type of NSAPI security supported
mridup 0:907910bfb0b5 100 * @retval NSAPI Error Type
mridup 0:907910bfb0b5 101 */
mridup 0:907910bfb0b5 102 int SpwfSAInterface::connect(const char *ap,
mridup 0:907910bfb0b5 103 const char *pass_phrase,
mridup 0:907910bfb0b5 104 nsapi_security_t security)
mridup 0:907910bfb0b5 105 {
mridup 0:907910bfb0b5 106 int mode;
mridup 0:907910bfb0b5 107
mridup 0:907910bfb0b5 108 //initialize the device before connecting
mridup 0:907910bfb0b5 109 if(!isInitialized)
mridup 0:907910bfb0b5 110 {
mridup 0:907910bfb0b5 111 if(init()==0)
mridup 0:907910bfb0b5 112 isInitialized=true;
mridup 0:907910bfb0b5 113 else return NSAPI_ERROR_DEVICE_ERROR;
mridup 0:907910bfb0b5 114 }
mridup 0:907910bfb0b5 115
mridup 0:907910bfb0b5 116 _spwf.setTimeout(SPWF_CONNECT_TIMEOUT);
mridup 0:907910bfb0b5 117
mridup 0:907910bfb0b5 118 switch(security)
mridup 0:907910bfb0b5 119 {
mridup 0:907910bfb0b5 120 case NSAPI_SECURITY_NONE:
mridup 0:907910bfb0b5 121 mode = 0;
mridup 0:907910bfb0b5 122 pass_phrase = NULL;
mridup 0:907910bfb0b5 123 break;
mridup 0:907910bfb0b5 124 case NSAPI_SECURITY_WEP:
mridup 0:907910bfb0b5 125 mode = 1;
mridup 0:907910bfb0b5 126 break;
mridup 0:907910bfb0b5 127 case NSAPI_SECURITY_WPA:
mridup 0:907910bfb0b5 128 case NSAPI_SECURITY_WPA2:
mridup 0:907910bfb0b5 129 mode = 2;
mridup 0:907910bfb0b5 130 break;
mridup 0:907910bfb0b5 131 default:
mridup 0:907910bfb0b5 132 mode = 2;
mridup 0:907910bfb0b5 133 break;
mridup 0:907910bfb0b5 134 }
mridup 0:907910bfb0b5 135 return (_spwf.connect((char*)ap, (char*)pass_phrase, mode));
mridup 0:907910bfb0b5 136 }
mridup 0:907910bfb0b5 137
mridup 0:907910bfb0b5 138 /**
mridup 0:907910bfb0b5 139 * @brief network disconnect
mridup 0:907910bfb0b5 140 disconnects from Access Point
mridup 0:907910bfb0b5 141 * @param none
mridup 0:907910bfb0b5 142 * @retval NSAPI Error Type
mridup 0:907910bfb0b5 143 */
mridup 0:907910bfb0b5 144 int SpwfSAInterface::disconnect()
mridup 0:907910bfb0b5 145 {
mridup 0:907910bfb0b5 146 return (_spwf.disconnect());
mridup 0:907910bfb0b5 147 }
mridup 0:907910bfb0b5 148
mridup 0:907910bfb0b5 149 /**
mridup 0:907910bfb0b5 150 * @brief Get the local IP address
mridup 0:907910bfb0b5 151 * @param none
mridup 0:907910bfb0b5 152 * @retval Null-terminated representation of the local IP address
mridup 0:907910bfb0b5 153 * or null if not yet connected
mridup 0:907910bfb0b5 154 */
mridup 0:907910bfb0b5 155 const char *SpwfSAInterface::get_ip_address()
mridup 0:907910bfb0b5 156 {
mridup 0:907910bfb0b5 157 return _spwf.getIPAddress();
mridup 0:907910bfb0b5 158 }
mridup 0:907910bfb0b5 159
mridup 0:907910bfb0b5 160 /**
mridup 0:907910bfb0b5 161 * @brief Get the MAC address
mridup 0:907910bfb0b5 162 * @param none
mridup 0:907910bfb0b5 163 * @retval Null-terminated representation of the MAC address
mridup 0:907910bfb0b5 164 * or null if not yet connected
mridup 0:907910bfb0b5 165 */
mridup 0:907910bfb0b5 166 const char *SpwfSAInterface::get_mac_address()
mridup 0:907910bfb0b5 167 {
mridup 0:907910bfb0b5 168 return _spwf.getMACAddress();
mridup 0:907910bfb0b5 169 }
mridup 0:907910bfb0b5 170
mridup 0:907910bfb0b5 171 /**
mridup 0:907910bfb0b5 172 * @brief open a socket handle
mridup 0:907910bfb0b5 173 * @param handle: Pointer to handle
mridup 0:907910bfb0b5 174 * proto: TCP/UDP protocol
mridup 0:907910bfb0b5 175 * @retval NSAPI Error Type
mridup 0:907910bfb0b5 176 */
mridup 0:907910bfb0b5 177 int SpwfSAInterface::socket_open(void **handle, nsapi_protocol_t proto)
mridup 0:907910bfb0b5 178 {
mridup 0:907910bfb0b5 179 int id = -1;
mridup 0:907910bfb0b5 180
mridup 0:907910bfb0b5 181 struct spwf_socket *socket = new struct spwf_socket;
mridup 0:907910bfb0b5 182 if (!socket) {
mridup 0:907910bfb0b5 183 return NSAPI_ERROR_NO_SOCKET;
mridup 0:907910bfb0b5 184 }
mridup 0:907910bfb0b5 185
mridup 0:907910bfb0b5 186 socket->id = id;
mridup 0:907910bfb0b5 187 socket->server_port = id;
mridup 0:907910bfb0b5 188 socket->proto = proto;
mridup 0:907910bfb0b5 189 socket->connected = false;
mridup 0:907910bfb0b5 190 *handle = socket;
mridup 0:907910bfb0b5 191 return 0;
mridup 0:907910bfb0b5 192 }
mridup 0:907910bfb0b5 193
mridup 0:907910bfb0b5 194 /**
mridup 0:907910bfb0b5 195 * @brief connect to a remote socket
mridup 0:907910bfb0b5 196 * @param handle: Pointer to socket handle
mridup 0:907910bfb0b5 197 * addr: Address to connect to
mridup 0:907910bfb0b5 198 * @retval NSAPI Error Type
mridup 0:907910bfb0b5 199 */
mridup 0:907910bfb0b5 200 int SpwfSAInterface::socket_connect(void *handle, const SocketAddress &addr)
mridup 0:907910bfb0b5 201 {
mridup 0:907910bfb0b5 202 int sock_id = 99;
mridup 0:907910bfb0b5 203 struct spwf_socket *socket = (struct spwf_socket *)handle;
mridup 0:907910bfb0b5 204
mridup 0:907910bfb0b5 205 const char *proto = (socket->proto == NSAPI_UDP) ? "u" : "t";//"s" for secure socket?
mridup 0:907910bfb0b5 206
mridup 0:907910bfb0b5 207 _spwf.open(proto, &sock_id, addr.get_ip_address(), addr.get_port());//sock ID is allocated NOW
mridup 0:907910bfb0b5 208
mridup 0:907910bfb0b5 209 //TODO: Maintain a socket table to map socket ID to host & port
mridup 0:907910bfb0b5 210 //TODO: lookup on client table to see if already socket is allocated to same host/port
mridup 0:907910bfb0b5 211 //multimap <char *, vector <uint16_t> > ::iterator i = c_table.find((char*)ip);
mridup 0:907910bfb0b5 212
mridup 0:907910bfb0b5 213 if(sock_id <= SPWFSA_SOCKET_COUNT)
mridup 0:907910bfb0b5 214 {
mridup 0:907910bfb0b5 215 socket->id = sock_id;//the socket ID of this Socket instance
mridup 0:907910bfb0b5 216 _ids[socket->id] = true;
mridup 0:907910bfb0b5 217 socket->connected = true;
mridup 0:907910bfb0b5 218 }
mridup 0:907910bfb0b5 219 else
mridup 0:907910bfb0b5 220 return NSAPI_ERROR_NO_SOCKET;
mridup 0:907910bfb0b5 221
mridup 0:907910bfb0b5 222 return 0;
mridup 0:907910bfb0b5 223 }
mridup 0:907910bfb0b5 224
mridup 0:907910bfb0b5 225 /**
mridup 0:907910bfb0b5 226 * @brief bind to a port number and address
mridup 0:907910bfb0b5 227 * @param handle: Pointer to socket handle
mridup 0:907910bfb0b5 228 * proto: address to bind to
mridup 0:907910bfb0b5 229 * @retval NSAPI Error Type
mridup 0:907910bfb0b5 230 */
mridup 0:907910bfb0b5 231 int SpwfSAInterface::socket_bind(void *handle, const SocketAddress &address)
mridup 0:907910bfb0b5 232 {
mridup 0:907910bfb0b5 233 struct spwf_socket *socket = (struct spwf_socket *)handle;
mridup 0:907910bfb0b5 234 socket->server_port = address.get_port();
mridup 0:907910bfb0b5 235 return 0;
mridup 0:907910bfb0b5 236 }
mridup 0:907910bfb0b5 237
mridup 0:907910bfb0b5 238 /**
mridup 0:907910bfb0b5 239 * @brief start listening on a port and address
mridup 0:907910bfb0b5 240 * @param handle: Pointer to handle
mridup 0:907910bfb0b5 241 * backlog: not used (always value is 1)
mridup 0:907910bfb0b5 242 * @retval NSAPI Error Type
mridup 0:907910bfb0b5 243 */
mridup 0:907910bfb0b5 244 int SpwfSAInterface::socket_listen(void *handle, int backlog)
mridup 0:907910bfb0b5 245 {
mridup 0:907910bfb0b5 246 return NSAPI_ERROR_UNSUPPORTED;
mridup 0:907910bfb0b5 247 }
mridup 0:907910bfb0b5 248
mridup 0:907910bfb0b5 249 /**
mridup 0:907910bfb0b5 250 * @brief accept connections from remote sockets
mridup 0:907910bfb0b5 251 * @param handle: Pointer to handle of client socket (connecting)
mridup 0:907910bfb0b5 252 * proto: handle of server socket which will accept connections
mridup 0:907910bfb0b5 253 * @retval NSAPI Error Type
mridup 0:907910bfb0b5 254 */
mridup 0:907910bfb0b5 255 int SpwfSAInterface::socket_accept(void **handle, void *server)
mridup 0:907910bfb0b5 256 {
mridup 0:907910bfb0b5 257 return NSAPI_ERROR_UNSUPPORTED;
mridup 0:907910bfb0b5 258 }
mridup 0:907910bfb0b5 259
mridup 0:907910bfb0b5 260 /**
mridup 0:907910bfb0b5 261 * @brief close a socket
mridup 0:907910bfb0b5 262 * @param handle: Pointer to handle
mridup 0:907910bfb0b5 263 * @retval NSAPI Error Type
mridup 0:907910bfb0b5 264 */
mridup 0:907910bfb0b5 265 int SpwfSAInterface::socket_close(void *handle)
mridup 0:907910bfb0b5 266 {
mridup 0:907910bfb0b5 267 struct spwf_socket *socket = (struct spwf_socket *)handle;
mridup 0:907910bfb0b5 268 int err = 0;
mridup 0:907910bfb0b5 269 _spwf.setTimeout(SPWF_MISC_TIMEOUT);
mridup 0:907910bfb0b5 270
mridup 0:907910bfb0b5 271 if(socket->id!=-1)
mridup 0:907910bfb0b5 272 {
mridup 0:907910bfb0b5 273 if(socket->id==SERVER_SOCKET_NO)
mridup 0:907910bfb0b5 274 {
mridup 0:907910bfb0b5 275 //if (_spwf.socket_server_close()==-1) {
mridup 0:907910bfb0b5 276 //err = NSAPI_ERROR_DEVICE_ERROR;
mridup 0:907910bfb0b5 277 //}
mridup 0:907910bfb0b5 278 isListening = false;
mridup 0:907910bfb0b5 279 }
mridup 0:907910bfb0b5 280 else
mridup 0:907910bfb0b5 281 {
mridup 0:907910bfb0b5 282 //if (_spwf.socket_client_close(socket->id)==-1) {
mridup 0:907910bfb0b5 283 //err = NSAPI_ERROR_DEVICE_ERROR;
mridup 0:907910bfb0b5 284 //}
mridup 0:907910bfb0b5 285 _ids[socket->id] = false;
mridup 0:907910bfb0b5 286 }
mridup 0:907910bfb0b5 287 }
mridup 0:907910bfb0b5 288
mridup 0:907910bfb0b5 289 delete socket;
mridup 0:907910bfb0b5 290 return err;
mridup 0:907910bfb0b5 291 }
mridup 0:907910bfb0b5 292
mridup 0:907910bfb0b5 293 /**
mridup 0:907910bfb0b5 294 * @brief write to a socket
mridup 0:907910bfb0b5 295 * @param handle: Pointer to handle
mridup 0:907910bfb0b5 296 * data: pointer to data
mridup 0:907910bfb0b5 297 * size: size of data
mridup 0:907910bfb0b5 298 * @retval no of bytes sent
mridup 0:907910bfb0b5 299 */
mridup 0:907910bfb0b5 300 int SpwfSAInterface::socket_send(void *handle, const void *data, unsigned size)
mridup 0:907910bfb0b5 301 {
mridup 0:907910bfb0b5 302 struct spwf_socket *socket = (struct spwf_socket *)handle;
mridup 0:907910bfb0b5 303 int err;
mridup 0:907910bfb0b5 304
mridup 0:907910bfb0b5 305 if(socket->id==SERVER_SOCKET_NO)
mridup 0:907910bfb0b5 306 {
mridup 0:907910bfb0b5 307 if(socket->server_port==-1 || !isListening)
mridup 0:907910bfb0b5 308 return NSAPI_ERROR_NO_SOCKET; //server socket not bound or not listening
mridup 0:907910bfb0b5 309
mridup 0:907910bfb0b5 310 //err = _spwf.socket_server_write((uint16_t)size, (char*)data);
mridup 0:907910bfb0b5 311 }
mridup 0:907910bfb0b5 312 else
mridup 0:907910bfb0b5 313 {
mridup 0:907910bfb0b5 314 //err = _spwf.socket_client_write((uint8_t)socket->id, (uint16_t)size, (char*)data);
mridup 0:907910bfb0b5 315 }
mridup 0:907910bfb0b5 316
mridup 0:907910bfb0b5 317 return err;
mridup 0:907910bfb0b5 318 }
mridup 0:907910bfb0b5 319
mridup 0:907910bfb0b5 320 /**
mridup 0:907910bfb0b5 321 * @brief receive data on a socket
mridup 0:907910bfb0b5 322 * @param handle: Pointer to handle
mridup 0:907910bfb0b5 323 * data: pointer to data
mridup 0:907910bfb0b5 324 * size: size of data
mridup 0:907910bfb0b5 325 * @retval no of bytes read
mridup 0:907910bfb0b5 326 */
mridup 0:907910bfb0b5 327 int SpwfSAInterface::socket_recv(void *handle, void *data, unsigned size)
mridup 0:907910bfb0b5 328 {
mridup 0:907910bfb0b5 329 struct spwf_socket *socket = (struct spwf_socket *)handle;
mridup 0:907910bfb0b5 330 int32_t recv;
mridup 0:907910bfb0b5 331
mridup 0:907910bfb0b5 332 _spwf.setTimeout(SPWF_RECV_TIMEOUT);
mridup 0:907910bfb0b5 333
mridup 0:907910bfb0b5 334 //CHECK:Receive for both Client and Server Sockets same?
mridup 0:907910bfb0b5 335 //recv = _spwf.socket_client_recv((uint8_t)socket->id, (uint16_t)size, (char*)data);
mridup 0:907910bfb0b5 336 //if (recv < 0) {
mridup 0:907910bfb0b5 337 //return NSAPI_ERROR_WOULD_BLOCK;
mridup 0:907910bfb0b5 338 //}
mridup 0:907910bfb0b5 339 return recv;
mridup 0:907910bfb0b5 340
mridup 0:907910bfb0b5 341 }
mridup 0:907910bfb0b5 342
mridup 0:907910bfb0b5 343 /**
mridup 0:907910bfb0b5 344 * @brief send data to a udp socket
mridup 0:907910bfb0b5 345 * @param handle: Pointer to handle
mridup 0:907910bfb0b5 346 * addr: address of udp socket
mridup 0:907910bfb0b5 347 * data: pointer to data
mridup 0:907910bfb0b5 348 * size: size of data
mridup 0:907910bfb0b5 349 * @retval no of bytes sent
mridup 0:907910bfb0b5 350 */
mridup 0:907910bfb0b5 351 int SpwfSAInterface::socket_sendto(void *handle, const SocketAddress &addr, const void *data, unsigned size)
mridup 0:907910bfb0b5 352 {
mridup 0:907910bfb0b5 353 struct spwf_socket *socket = (struct spwf_socket *)handle;
mridup 0:907910bfb0b5 354 if (!socket->connected) {
mridup 0:907910bfb0b5 355 int err = socket_connect(socket, addr);
mridup 0:907910bfb0b5 356 if (err < 0) {
mridup 0:907910bfb0b5 357 return err;
mridup 0:907910bfb0b5 358 }
mridup 0:907910bfb0b5 359 }
mridup 0:907910bfb0b5 360
mridup 0:907910bfb0b5 361 return socket_send(socket, data, size);
mridup 0:907910bfb0b5 362 }
mridup 0:907910bfb0b5 363
mridup 0:907910bfb0b5 364 /**
mridup 0:907910bfb0b5 365 * @brief receive data on a udp socket
mridup 0:907910bfb0b5 366 * @param handle: Pointer to handle
mridup 0:907910bfb0b5 367 * addr: address of udp socket
mridup 0:907910bfb0b5 368 * data: pointer to data
mridup 0:907910bfb0b5 369 * size: size of data
mridup 0:907910bfb0b5 370 * @retval no of bytes read
mridup 0:907910bfb0b5 371 */
mridup 0:907910bfb0b5 372 int SpwfSAInterface::socket_recvfrom(void *handle, SocketAddress *addr, void *data, unsigned size)
mridup 0:907910bfb0b5 373 {
mridup 0:907910bfb0b5 374 struct spwf_socket *socket = (struct spwf_socket *)handle;
mridup 0:907910bfb0b5 375 return socket_recv(socket, data, size);
mridup 0:907910bfb0b5 376 }
mridup 0:907910bfb0b5 377
mridup 0:907910bfb0b5 378 /**
mridup 0:907910bfb0b5 379 * @brief attach function/callback to the socket
mridup 0:907910bfb0b5 380 * Not used
mridup 0:907910bfb0b5 381 * @param handle: Pointer to handle
mridup 0:907910bfb0b5 382 * callback: callback function pointer
mridup 0:907910bfb0b5 383 * data: pointer to data
mridup 0:907910bfb0b5 384 * @retval none
mridup 0:907910bfb0b5 385 */
mridup 0:907910bfb0b5 386 void SpwfSAInterface::socket_attach(void *handle, void (*callback)(void *), void *data)
mridup 0:907910bfb0b5 387 {
mridup 0:907910bfb0b5 388 //No implementation yet
mridup 0:907910bfb0b5 389 }
mridup 0:907910bfb0b5 390
mridup 0:907910bfb0b5 391 /**
mridup 0:907910bfb0b5 392 * @brief utility debug function for printing to serial terminal
mridup 0:907910bfb0b5 393 * @param string: Pointer to data
mridup 0:907910bfb0b5 394 * @retval none
mridup 0:907910bfb0b5 395 */
mridup 0:907910bfb0b5 396 void SpwfSAInterface::debug(const char * string)
mridup 0:907910bfb0b5 397 {
mridup 0:907910bfb0b5 398 //_spwf.debug_print(string);
mridup 0:907910bfb0b5 399 }