Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: lwip-eth lwip-sys lwip
Fork of LWIPInterface by
Diff: LWIPInterface.h
- Revision:
- 12:899403b675fe
- Parent:
- 8:cef01e812975
- Child:
- 13:57d9e1721826
diff -r 82796df87b0a -r 899403b675fe LWIPInterface.h
--- a/LWIPInterface.h Fri Apr 01 17:18:39 2016 +0000
+++ b/LWIPInterface.h Tue Apr 05 19:20:42 2016 +0000
@@ -14,7 +14,8 @@
* limitations under the License.
*/
-#ifndef LWIP_INTERFACE_H
+#if 0
+//#ifndef LWIP_INTERFACE_H
#define LWIP_INTERFACE_H
#include "EthernetInterface.h"
@@ -28,36 +29,185 @@
class LWIPInterface : public EthernetInterface
{
public:
+ virtual ~NetworkInterface() {};
- // Implementation of EthernetInterface
- virtual int32_t connect();
- virtual int32_t 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() = 0;
+
+ /** Get the internally stored MAC address
+ /return MAC address of the interface
+ */
+ virtual const char *get_mac_address() = 0;
+
+ /** Get the current status of the interface
+ /return true if connected
+ */
+ virtual bool is_connected() {
+ return get_ip_address() != NULL;
+ }
+
+ /** Looks up the specified host's IP address
+ /param name Hostname to lookup
+ /param dest Destination for IP address, must have space for SocketAddress::IP_SIZE
+ /return 0 on success, negative on failure
+ */
+ virtual int gethostbyname(const char *name, char *dest);
+
+protected:
+ friend class Socket;
+ friend class UDPSocket;
+ friend class TCPSocket;
+ friend class TCPServer;
+
+ /** Enum of socket protocols
+ /enum protocol_t
+ */
+ enum protocol_t {
+ TCP, /*!< Socket is of TCP type */
+ UDP, /*!< Socket is of UDP type */
+ };
- // Implementation of NetworkInterface
- virtual const char *getIPAddress();
- virtual const char *getMACAddress();
+ /** 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(protocol_t proto) = 0;
+
+ /** Destroy a socket
+ /param socket Previously allocated socket
+ */
+ virtual void socket_destroy(void *handle) = 0;
+
+ /** 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) = 0;
- virtual SocketInterface *createSocket(ns_protocol_t proto);
- virtual void destroySocket(SocketInterface *socket);
+ /** 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) = 0;
-private:
+ /** 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) = 0;
+
+ /** 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) = 0;
- // Implementation of the TCP SocketInterface for LWIP
- class LWIPSocket : public SocketInterface
- {
- public:
+ /** 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) = 0;
+
+ /** Check if the socket is connected
+ \param handle Socket handle
+ \return true if connected, false otherwise
+ */
+ virtual bool socket_is_connected(void *handle) = 0;
- LWIPSocket(int fd) : fd(fd) {}
- int fd;
+ /** 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) = 0;
+
+ /** 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) = 0;
+
+ /** 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) = 0;
- // Implementation of SocketInterface
- virtual int32_t open(const char *ip, uint16_t port);
- virtual int32_t close();
+ /** 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) = 0;
+
+ /** 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) = 0;
- virtual int32_t send(const void *data, uint32_t size);
- virtual int32_t recv(void *data, uint32_t 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) = 0;
+
+ /** 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) = 0;
+
+ /** 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) = 0;
+
+ /** 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) = 0;
};
-
#endif
