Host library for controlling a WiConnect enabled Wi-Fi module.
Dependents: wiconnect-ota_example wiconnect-web_setup_example wiconnect-test-console wiconnect-tcp_server_example ... more
Diff: SocketInterface.h
- Revision:
- 21:17bb3eddcbae
- Parent:
- 17:7268f365676b
--- a/SocketInterface.h Sat Aug 23 05:57:52 2014 -0700 +++ b/SocketInterface.h Tue Aug 26 16:38:19 2014 -0700 @@ -1,30 +1,30 @@ -/** - * ACKme WiConnect Host Library is licensed under the BSD licence: - * - * Copyright (c)2014 ACKme Networks. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. +/** + * ACKme WiConnect Host Library is licensed under the BSD licence: + * + * Copyright (c)2014 ACKme Networks. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. */ #pragma once @@ -138,7 +138,48 @@ * @param[in] irqPin Optional, Data available external interrupt pin. See registerSocketIrqHandler() for more info * @return Result of method. See @ref WiconnectResult */ - WiconnectResult tcpConnect(WiconnectSocket &socket, const char *host, uint16_t remortPort, Pin irqPin = NC); + WiconnectResult tcpConnect(WiconnectSocket &socket, const char *host, uint16_t remortPort, Pin irqPin = PIN_NC); + + + // ------------------------------------------------------------------------ + + /** + * @ingroup api_socket_tcp + * + * @brief Start internal TCP server and listen on specified port. + * + * @param[in] listeningPort The local port the server should listen on + * @param[in] maxClients Optional, the maximum simultaneous connected clients, 0 is default, 1-8 valid range + * @param[in] irqPin Optional, Data available external interrupt pin. See registerSocketIrqHandler() for more info + * @return Result of method. See @ref WiconnectResult + */ + WiconnectResult tcpListen(uint16_t listeningPort, int maxClients = 0, Pin irqPin = PIN_NC); + + + // ------------------------------------------------------------------------ + + /** + * @ingroup api_socket_tcp + * + * @brief Wait for next client to connect to TCP server. + * + * @param[in] socket Socket to connected client + * @param[in] timeoutMs Optional, specifiy maximum amount of time in ms to wait for a client + * @return Result of method. See @ref WiconnectResult + */ + WiconnectResult tcpAccept(WiconnectSocket &socket, int timeoutMs = WICONNECT_WAIT_FOREVER); + + + // ------------------------------------------------------------------------ + + /** + * @ingroup api_socket_tcp + * + * @brief Stop TCP server from listening on port. Close all connected clients. + * + * @return Result of method. See @ref WiconnectResult + */ + WiconnectResult tcpServerStop(void); // ------------------------------------------------------------------------ @@ -155,7 +196,7 @@ * @param[in] irqPin Optional, Data available external interrupt pin. See registerSocketIrqHandler() for more info * @return Result of method. See @ref WiconnectResult */ - WiconnectResult tlsConnect(WiconnectSocket &socket, const char *host, uint16_t remortPort, const char *certFilename = NULL, Pin irqPin = NC); + WiconnectResult tlsConnect(WiconnectSocket &socket, const char *host, uint16_t remortPort, const char *certFilename = NULL, Pin irqPin = PIN_NC); // ------------------------------------------------------------------------ @@ -172,7 +213,7 @@ * @param[in] irqPin Optional, Data available external interrupt pin. See registerSocketIrqHandler() for more info * @return Result of method. See @ref WiconnectResult */ - WiconnectResult udpConnect(WiconnectSocket &socket, const char *host, uint16_t remortPort, uint16_t localPort = SOCKET_ANY_PORT, Pin irqPin = NC); + WiconnectResult udpConnect(WiconnectSocket &socket, const char *host, uint16_t remortPort, uint16_t localPort = SOCKET_ANY_PORT, Pin irqPin = PIN_NC); // ------------------------------------------------------------------------ @@ -287,9 +328,16 @@ protected: SocketInterface(Wiconnect *wiconnect); + ~SocketInterface(); SocketIrqHandlerMap irqHandlers; + bool serverConnectedClientList[WICONNECT_MAX_SOCKETS]; + + WiconnectResult pollForServerClient(uint8_t *handle = NULL, uint16_t *localPort = NULL, uint16_t *remotePort = NULL, uint32_t *ipAddress = NULL); + + void socketClosedCallback(const WiconnectSocket *socket); + private: Wiconnect *wiconnect; };