Christopher Haster / ESP8266Interface

Dependencies:   ESP8266

Fork of ESP8266Interface by NetworkSocketAPI

Revision:
55:c0808849cb89
Parent:
53:8ded612adb96
--- a/ESP8266Interface.h	Fri Apr 01 17:28:04 2016 +0000
+++ b/ESP8266Interface.h	Wed Apr 06 13:49:41 2016 +0000
@@ -28,50 +28,184 @@
 class ESP8266Interface : public WiFiInterface
 {
 public:
-
+    /** ESP8266Interface lifetime
+    /param tx       TX pin
+    /param rx       RX pin
+    /param debug    Enable debugging
+    */
     ESP8266Interface(PinName tx, PinName rx, bool debug = false);
-    virtual ~ESP8266Interface();
 
-    // Implementation of WiFiInterface
-    virtual int32_t connect(
+    /** Start the interface
+    /param ssid     Name of the network to connect to
+    /param pass     Security passphrase to connect to the network
+    /param security Type of encryption for connection
+    /return         0 on success, negative on failure
+    */
+    virtual int connect(
         const char *ssid,
         const char *pass,
-        ns_security_t security = NS_SECURITY_NONE);
+        nsapi_security_t security = NSAPI_SECURITY_NONE);
+
+    /** Stop the interface
+     *  @return     0 on success, negative on failure
+     */
+    virtual int disconnect();
+
+    /** Get the internally stored IP address
+    /return     IP address of the interface or null if not yet connected
+    */
+    virtual const char *get_ip_address();
+
+    /** Get the internally stored MAC address
+    /return     MAC address of the interface
+    */
+    virtual const char *get_mac_address();
+
+protected:
+    /** Create a socket
+    /param proto    The type of socket to open, TCP or UDP
+    /return         The alocated socket or null on failure
+    */
+    virtual void *socket_create(nsapi_protocol_t proto);
+
+    /** Destroy a socket
+    /param socket   Previously allocated socket
+    */
+    virtual void socket_destroy(void *handle);
 
-    virtual int32_t disconnect();
+    /** Set socket options
+    \param handle   Socket handle
+    \param optname  Option ID
+    \param optval   Option value
+    \param optlen   Length of the option value
+    \return         0 on success, negative on failure
+    */    
+    virtual int socket_set_option(void *handle, int optname, const void *optval, unsigned int optlen);
+
+    /** Get socket options
+    \param handle   Socket handle
+    \param optname  Option ID
+    \param optval   Buffer pointer where to write the option value
+    \param optlen   Length of the option value
+    \return         0 on success, negative on failure
+    */
+    virtual int socket_get_option(void *handle, int optname, void *optval, unsigned int *optlen);
+
+    /** Bind a server socket to a specific port
+    \param handle   Socket handle
+    \param port     The port to listen for incoming connections on
+    \return         0 on success, negative on failure.
+    */
+    virtual int socket_bind(void *handle, int port);
+
+    /** Start listening for incoming connections
+    \param handle   Socket handle
+    \param backlog  Number of pending connections that can be queued up at any
+                    one time [Default: 1]
+    \return         0 on success, negative on failure
+    */
+    virtual int socket_listen(void *handle, int backlog);
+
+    /** Connects this TCP socket to the server
+    \param handle   Socket handle
+    \param address  SocketAddress to connect to
+    \return         0 on success, negative on failure
+    */
+    virtual int socket_connect(void *handle, const SocketAddress &address);
+    
+    /** Check if the socket is connected
+    \param handle   Socket handle
+    \return         true if connected, false otherwise
+    */
+    virtual bool socket_is_connected(void *handle);
 
-    // Implementation of NetworkInterface
-    virtual const char *getIPAddress();
-    virtual const char *getMACAddress();
+    /** Accept a new connection.
+    \param handle   Socket handle
+    \param socket   A TCPSocket instance that will handle the incoming connection.
+    \return         0 on success, negative on failure.
+    \note This call is not-blocking, if this call would block, must
+          immediately return NSAPI_ERROR_WOULD_WAIT
+    */
+    virtual int socket_accept(void *handle, void **connection);
+
+    /** Send data to the remote host
+    \param handle   Socket handle
+    \param data     The buffer to send to the host
+    \param size     The length of the buffer to send
+    \return         Number of written bytes on success, negative on failure
+    \note This call is not-blocking, if this call would block, must
+          immediately return NSAPI_ERROR_WOULD_WAIT
+    */
+    virtual int socket_send(void *handle, const void *data, unsigned size);
+
+    /** Receive data from the remote host
+    \param handle   Socket handle
+    \param data     The buffer in which to store the data received from the host
+    \param size     The maximum length of the buffer
+    \return         Number of received bytes on success, negative on failure
+    \note This call is not-blocking, if this call would block, must
+          immediately return NSAPI_ERROR_WOULD_WAIT
+    */
+    virtual int socket_recv(void *handle, void *data, unsigned size);
+
+    /** Send a packet to a remote endpoint
+    \param handle   Socket handle
+    \param address  The remote SocketAddress
+    \param data     The packet to be sent
+    \param size     The length of the packet to be sent
+    \return the number of written bytes on success, negative on failure
+    \note This call is not-blocking, if this call would block, must
+          immediately return NSAPI_ERROR_WOULD_WAIT
+    */
+    virtual int socket_sendto(void *handle, const SocketAddress &address, const void *data, unsigned size);
 
-    virtual SocketInterface *createSocket(ns_protocol_t proto);
-    virtual void destroySocket(SocketInterface *socket);
+    /** Receive a packet from a remote endpoint
+    \param handle   Socket handle
+    \param address  Destination for the remote SocketAddress or null
+    \param buffer   The buffer for storing the incoming packet data
+                    If a packet is too long to fit in the supplied buffer,
+                    excess bytes are discarded
+    \param size     The length of the buffer
+    \return the number of received bytes on success, negative on failure
+    \note This call is not-blocking, if this call would block, must
+          immediately return NSAPI_ERROR_WOULD_WAIT
+    */
+    virtual int socket_recvfrom(void *handle, SocketAddress *address, void *buffer, unsigned size);
+
+    /** Close the socket
+    \param handle   Socket handle
+    \param shutdown  free the left-over data in message queues
+    */
+    virtual int socket_close(void *handle, bool shutdown);
 
+    /** Register a callback on when a new connection is ready
+    \param handle   Socket handle
+    \param callback Function to call when accept will succeed, may be called in
+                    interrupt context.
+    \param id       Argument to pass to callback
+    */
+    virtual void socket_attach_accept(void *handle, void (*callback)(void *), void *id);
+
+    /** Register a callback on when send is ready
+    \param handle   Socket handle
+    \param callback Function to call when accept will succeed, may be called in
+                    interrupt context.
+    \param id       Argument to pass to callback
+    */
+    virtual void socket_attach_send(void *handle, void (*callback)(void *), void *id);
+
+    /** Register a callback on when recv is ready
+    \param handle   Socket handle
+    \param callback Function to call when accept will succeed, may be called in
+                    interrupt context.
+    \param id       Argument to pass to callback
+    */
+    virtual void socket_attach_recv(void *handle, void (*callback)(void *), void *id);
+    
 private:
-
     ESP8266 _esp;
     bool _ids[ESP8266_SOCKET_COUNT];
-    
-    // Implementation of the SocketInterface for the ESP8266
-    class ESP8266Socket : public SocketInterface
-    {
-    public:
-    
-        // ESP8266 specific details
-        ESP8266 *_esp;
-        ns_protocol_t _proto;
-        int _id;
-        
-        ESP8266Socket(ESP8266 *esp, ns_protocol_t proto, int id)
-            : _esp(esp), _proto(proto), _id(id) {}
-    
-        // Implementation of SocketInterface
-        virtual int32_t open(const char *ip, uint16_t port);
-        virtual int32_t close();
-    
-        virtual int32_t send(const void *data, uint32_t size);
-        virtual int32_t recv(void *data, uint32_t size);
-    };
 };
 
 #endif
+