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

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;
 };