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
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:
- a SPWF01SA Serial-to-Wi-Fi module
Example Applications
NSAPI Test Suite
Revision 13:0368732b5b9d, committed 2016-11-22
- Comitter:
- mapellil
- Date:
- Tue Nov 22 14:38:43 2016 +0000
- Parent:
- 12:1f2aba8a1b00
- Child:
- 14:4ec13009341c
- Commit message:
- Added constructor with reset and wakup gpio exposed.
Changed in this revision
--- a/SPWF01SA.lib Thu Nov 03 06:57:03 2016 +0000 +++ b/SPWF01SA.lib Tue Nov 22 14:38:43 2016 +0000 @@ -1,1 +1,1 @@ -https://developer.mbed.org/teams/ST/code/SPWF01SA/#0b01aa59bb6f +https://developer.mbed.org/teams/ST/code/SPWF01SA/#419285201dba
--- a/SpwfInterface.cpp Thu Nov 03 06:57:03 2016 +0000 +++ b/SpwfInterface.cpp Tue Nov 22 14:38:43 2016 +0000 @@ -62,13 +62,21 @@ * debug : not used * @retval none */ -SpwfSAInterface::SpwfSAInterface(PinName tx, PinName rx, bool debug) - : _spwf(tx, rx, debug) +SpwfSAInterface::SpwfSAInterface(PinName tx, PinName rx, bool debug) + : _spwf(tx, rx, PC_12, PC_8, debug) +{ + memset(_ids, 0, sizeof(_ids)); + isInitialized = false; + isListening = false; +} + +SpwfSAInterface::SpwfSAInterface(PinName tx, PinName rx, PinName reset, PinName wakeup, bool debug) + : _spwf(tx, rx, reset, wakeup, debug) { memset(_ids, 0, sizeof(_ids)); isInitialized = false; isListening = false; -} +} /** * @brief SpwfSAInterface destructor @@ -87,7 +95,6 @@ */ int SpwfSAInterface::init(void) { - _spwf.setTimeout(SPWF_MISC_TIMEOUT); if(_spwf.startup(0)) { isInitialized=true; return true; @@ -115,9 +122,7 @@ if(!init()) return NSAPI_ERROR_DEVICE_ERROR; } - - _spwf.setTimeout(SPWF_CONNECT_TIMEOUT); - + switch(security) { case NSAPI_SECURITY_NONE: @@ -181,7 +186,7 @@ { int id = -1; - struct spwf_socket *socket = new struct spwf_socket; + struct spwf_socket *socket = new struct spwf_socket; if (!socket) { return NSAPI_ERROR_NO_SOCKET; } @@ -271,7 +276,6 @@ { struct spwf_socket *socket = (struct spwf_socket *)handle; int err = 0; - _spwf.setTimeout(SPWF_MISC_TIMEOUT); if(socket->id!=-1) { @@ -330,19 +334,16 @@ struct spwf_socket *socket = (struct spwf_socket *)handle; int32_t recv; - _spwf.setTimeout(SPWF_RECV_TIMEOUT); - //CHECK:Receive for both Client and Server Sockets same? recv = _spwf.recv(socket->id, (char*)data, (uint32_t)size); if (recv < 0) { //wait_ms(1);//delay of 1ms <for F4>?? //printf("."); if (recv == -1) return NSAPI_ERROR_WOULD_BLOCK;//send this if we want to block call (else timeout will happen) - else return NSAPI_ERROR_DEVICE_ERROR; + else if (recv == -2)return NSAPI_ERROR_DEVICE_ERROR; + else if (recv == -3)return NSAPI_ERROR_NO_CONNECTION; } - - return recv; - + return recv; } /** @@ -356,7 +357,7 @@ int SpwfSAInterface::socket_sendto(void *handle, const SocketAddress &addr, const void *data, unsigned size) { struct spwf_socket *socket = (struct spwf_socket *)handle; - if (!socket->connected) { + if (!socket->connected) { int err = socket_connect(socket, addr); if (err < 0) { return err; @@ -402,3 +403,45 @@ { //_spwf.debug_print(string); } + +/** +* @brief Set the socket options +* Not used +* @param handle: Pointer to handle +* level: SOL_SOCKET +* optname: option name +* optval: pointer to option value +* optlen: option length +@retval NSAPI Error Type +*/ +int SpwfSAInterface::setsockopt(void *handle, int level, int optname, const void *optval, unsigned optlen) +{ +// struct spwf_socket *socket = (struct spwf_socket *)handle; + + switch (optname) { + case NSAPI_REUSEADDR: /*!< Allow bind to reuse local addresses */ + case NSAPI_KEEPALIVE: /*!< Enables sending of keepalive messages */ + case NSAPI_LINGER: /*!< Keeps close from returning until queues empty */ + case NSAPI_SNDBUF: /*!< Sets send buffer size */ + case NSAPI_RCVBUF: /*!< Sets recv buffer size */ + default: + printf("SpwfSAInterface::setsockopt> ERROR!!!! Unknown optname: %d \r\n", optname); + return -1; + } + return NSAPI_ERROR_UNSUPPORTED; +} + +/** +* @brief Get the socket options +* Not used +* @param handle: Pointer to handle +* level: SOL_SOCKET +* optname: option name +* optval: pointer to option value +* optlen: pointer to option length +@retval NSAPI Error Type +*/ +int SpwfSAInterface::getsockopt(void *handle, int level, int optname, void *optval, unsigned *optlen) +{ + return NSAPI_ERROR_UNSUPPORTED; +}
--- a/SpwfInterface.h Thu Nov 03 06:57:03 2016 +0000 +++ b/SpwfInterface.h Tue Nov 22 14:38:43 2016 +0000 @@ -48,8 +48,8 @@ class SpwfSAInterface : public NetworkStack, public WiFiInterface { public: - - SpwfSAInterface(PinName tx, PinName rx, bool debug = false); + SpwfSAInterface(PinName tx, PinName rx, bool debug); + SpwfSAInterface(PinName tx, PinName rx, PinName reset = PC_12, PinName wakeup = PC_8, bool debug = false); virtual ~SpwfSAInterface(); // Implementation of WiFiInterface @@ -77,6 +77,8 @@ virtual int socket_sendto(void *handle, const SocketAddress &address, const void *data, unsigned size); virtual int socket_recvfrom(void *handle, SocketAddress *address, void *buffer, unsigned size); virtual void socket_attach(void *handle, void (*callback)(void *), void *data); + virtual int setsockopt(void *handle, int level, int optname, const void *optval, unsigned optlen); + virtual int getsockopt(void *handle, int level, int optname, void *optval, unsigned *optlen); private: int init(void); @@ -84,7 +86,7 @@ SPWFSA01 _spwf; bool _ids[SPWFSA_SOCKET_COUNT]; bool isListening; - bool isInitialized; + bool isInitialized; };