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.
Dependents: http-webserver-example mbed-os-example-sockets
Fork of W5500Interface by
Diff: W5500Interface.h
- Revision:
- 6:e2ab76b2be07
- Parent:
- 2:06b6f9f7c071
- Child:
- 8:c71c66d43703
diff -r 41393623ead4 -r e2ab76b2be07 W5500Interface.h
--- a/W5500Interface.h Thu Jul 06 05:46:17 2017 +0000
+++ b/W5500Interface.h Thu Aug 09 08:10:27 2018 +0000
@@ -1,265 +1,271 @@
-/* W5500 implementation of NetworkInterfaceAPI
- * Copyright (c) 2015 ARM Limited
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef W5500_INTERFACE_H
-#define W5500_INTERFACE_H
-
-#include "NetworkStack.h"
-#include "EthInterface.h"
-
-#include "rtos.h"
-#include "WIZnet/W5500.h"
-
-/** w5500_socket struct
- * W5500 socket
- */
-
-struct w5500_socket {
- int fd;
- nsapi_protocol_t proto;
- void (*callback)(void *);
- void *callback_data;
- bool connected;
-};
-
-/** W5500Interface class
- * Implementation of the NetworkStack for the W5500
- */
-
-class W5500Interface : public NetworkStack, public EthInterface, public WIZnet_Chip
-{
-public:
- W5500Interface(SPI* spi, PinName cs, PinName reset);
- W5500Interface(PinName mosi, PinName miso, PinName sclk, PinName cs, PinName reset);
-
- int init();
- int init(uint8_t * mac);
- int init(const char* ip, const char* mask, const char* gateway);
- int init(uint8_t * mac, const char* ip, const char* mask, const char* gateway);
-
- /** Start the interface
- * @return 0 on success, negative on failure
- */
- virtual int connect();
-
- /** 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 MAC address and fill mac with it.
- */
- void get_mac(uint8_t mac[6]) ;
-
- /** Get the internally stored MAC address
- * @return MAC address of the interface
- */
- virtual const char *get_mac_address();
-
-protected:
- /** Opens a socket
- *
- * Creates a network socket and stores it in the specified handle.
- * The handle must be passed to following calls on the socket.
- *
- * A stack may have a finite number of sockets, in this case
- * NSAPI_ERROR_NO_SOCKET is returned if no socket is available.
- *
- * @param handle Destination for the handle to a newly created socket
- * @param proto Protocol of socket to open, NSAPI_TCP or NSAPI_UDP
- * @return 0 on success, negative error code on failure
- */
- virtual nsapi_error_t socket_open(nsapi_socket_t *handle, nsapi_protocol_t proto);
-
- /** Close the socket
- *
- * Closes any open connection and deallocates any memory associated
- * with the socket.
- *
- * @param handle Socket handle
- * @return 0 on success, negative error code on failure
- */
- virtual nsapi_error_t socket_close(nsapi_socket_t handle);
-
- /** Bind a specific address to a socket
- *
- * Binding a socket specifies the address and port on which to recieve
- * data. If the IP address is zeroed, only the port is bound.
- *
- * @param handle Socket handle
- * @param address Local address to bind
- * @return 0 on success, negative error code on failure.
- */
- virtual nsapi_error_t socket_bind(nsapi_socket_t handle, const SocketAddress &address);
-
- /** Listen for connections on a TCP socket
- *
- * Marks the socket as a passive socket that can be used to accept
- * incoming connections.
- *
- * @param handle Socket handle
- * @param backlog Number of pending connections that can be queued
- * simultaneously
- * @return 0 on success, negative error code on failure
- */
- virtual nsapi_error_t socket_listen(nsapi_socket_t handle, int backlog);
-
- /** Connects TCP socket to a remote host
- *
- * Initiates a connection to a remote server specified by the
- * indicated address.
- *
- * @param handle Socket handle
- * @param address The SocketAddress of the remote host
- * @return 0 on success, negative error code on failure
- */
- virtual nsapi_error_t socket_connect(nsapi_socket_t handle, const SocketAddress &address);
-
- /** Accepts a connection on a TCP socket
- *
- * The server socket must be bound and set to listen for connections.
- * On a new connection, creates a network socket and stores it in the
- * specified handle. The handle must be passed to following calls on
- * the socket.
- *
- * A stack may have a finite number of sockets, in this case
- * NSAPI_ERROR_NO_SOCKET is returned if no socket is available.
- *
- * This call is non-blocking. If accept would block,
- * NSAPI_ERROR_WOULD_BLOCK is returned immediately.
- *
- * @param server Socket handle to server to accept from
- * @param handle Destination for a handle to the newly created socket
- * @param address Destination for the remote address or NULL
- * @return 0 on success, negative error code on failure
- */
- virtual nsapi_error_t socket_accept(nsapi_socket_t server,
- nsapi_socket_t *handle, SocketAddress *address=0);
-
- /** Send data over a TCP socket
- *
- * The socket must be connected to a remote host. Returns the number of
- * bytes sent from the buffer.
- *
- * This call is non-blocking. If send would block,
- * NSAPI_ERROR_WOULD_BLOCK is returned immediately.
- *
- * @param handle Socket handle
- * @param data Buffer of data to send to the host
- * @param size Size of the buffer in bytes
- * @return Number of sent bytes on success, negative error
- * code on failure
- */
- virtual nsapi_size_or_error_t socket_send(nsapi_socket_t handle,
- const void *data, nsapi_size_t size);
-
- /** Receive data over a TCP socket
- *
- * The socket must be connected to a remote host. Returns the number of
- * bytes received into the buffer.
- *
- * This call is non-blocking. If recv would block,
- * NSAPI_ERROR_WOULD_BLOCK is returned immediately.
- *
- * @param handle Socket handle
- * @param data Destination buffer for data received from the host
- * @param size Size of the buffer in bytes
- * @return Number of received bytes on success, negative error
- * code on failure
- */
- virtual nsapi_size_or_error_t socket_recv(nsapi_socket_t handle,
- void *data, nsapi_size_t size);
-
- /** Send a packet over a UDP socket
- *
- * Sends data to the specified address. Returns the number of bytes
- * sent from the buffer.
- *
- * This call is non-blocking. If sendto would block,
- * NSAPI_ERROR_WOULD_BLOCK is returned immediately.
- *
- * @param handle Socket handle
- * @param address The SocketAddress of the remote host
- * @param data Buffer of data to send to the host
- * @param size Size of the buffer in bytes
- * @return Number of sent bytes on success, negative error
- * code on failure
- */
- virtual nsapi_size_or_error_t socket_sendto(nsapi_socket_t handle, const SocketAddress &address,
- const void *data, nsapi_size_t size);
-
- /** Receive a packet over a UDP socket
- *
- * Receives data and stores the source address in address if address
- * is not NULL. Returns the number of bytes received into the buffer.
- *
- * This call is non-blocking. If recvfrom would block,
- * NSAPI_ERROR_WOULD_BLOCK is returned immediately.
- *
- * @param handle Socket handle
- * @param address Destination for the source address or NULL
- * @param data Destination buffer for data received from the host
- * @param size Size of the buffer in bytes
- * @return Number of received bytes on success, negative error
- * code on failure
- */
- virtual nsapi_size_or_error_t socket_recvfrom(nsapi_socket_t handle, SocketAddress *address,
- void *buffer, nsapi_size_t size);
-
- /** Register a callback on state change of the socket
- *
- * The specified callback will be called on state changes such as when
- * the socket can recv/send/accept successfully and on when an error
- * occurs. The callback may also be called spuriously without reason.
- *
- * The callback may be called in an interrupt context and should not
- * perform expensive operations such as recv/send calls.
- *
- * @param handle Socket handle
- * @param callback Function to call on state change
- * @param data Argument to pass to callback
- */
- virtual void socket_attach(nsapi_socket_t handle, void (*callback)(void *), void *data);
-
- virtual NetworkStack* get_stack() {return this;}
-
-private:
- char ip_string[20];
- char mask_string[20];
- char gw_string[20];
- char mac_string[20];
- bool ip_set;
-
- int listen_port;
-
- void signal_event(nsapi_socket_t handle);
-
- //w5500 socket management
- struct w5500_socket w5500_sockets[MAX_SOCK_NUM];
- w5500_socket* get_sock(int fd);
- void init_socks();
-
- Thread *_daemon;
- void daemon();
-
-};
-
-#endif
+/**
+ ******************************************************************************
+ * @file W5500Interface.h
+ * @author Bongjun Hur (modified version from Sergei G (https://os.mbed.com/users/sgnezdov/))
+ * @brief Header file of the NetworkStack for the W5500 Device
+ ******************************************************************************
+ * @attention
+ *
+ * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+ * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
+ * TIME. AS A RESULT, WIZnet SHALL NOT BE HELD LIABLE FOR ANY
+ * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
+ * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
+ * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+ *
+ * <h2><center>© COPYRIGHT 2017,2018 WIZnet Co.,Ltd.</center></h2>
+ ******************************************************************************
+ */
+
+#ifndef W5500_INTERFACE_H
+#define W5500_INTERFACE_H
+
+#include "mbed.h"
+#include "W5500.h"
+//#include "rtos.h"
+
+/** w5500_socket struct
+ * W5500 socket
+ */
+
+struct w5500_socket {
+ int fd;
+ nsapi_protocol_t proto;
+ bool connected;
+ void (*callback)(void *);
+ void *callback_data;
+};
+
+/** W5500Interface class
+ * Implementation of the NetworkStack for the W5500
+ */
+
+class W5500Interface : public NetworkStack, public EthInterface
+{
+public:
+ W5500Interface(SPI* spi, PinName cs, PinName reset);
+ W5500Interface(PinName mosi, PinName miso, PinName sclk, PinName cs, PinName reset);
+
+ int init();
+ int init(uint8_t * mac);
+ int init(const char* ip, const char* mask, const char* gateway);
+ int init(uint8_t * mac, const char* ip, const char* mask, const char* gateway);
+
+ /** Start the interface
+ * @return 0 on success, negative on failure
+ */
+ virtual int connect();
+
+ /** 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 MAC address and fill mac with it.
+ */
+ void get_mac(uint8_t mac[6]) ;
+
+ /** Get the internally stored MAC address
+ * @return MAC address of the interface
+ */
+ virtual const char *get_mac_address();
+
+protected:
+ /** Opens a socket
+ *
+ * Creates a network socket and stores it in the specified handle.
+ * The handle must be passed to following calls on the socket.
+ *
+ * A stack may have a finite number of sockets, in this case
+ * NSAPI_ERROR_NO_SOCKET is returned if no socket is available.
+ *
+ * @param handle Destination for the handle to a newly created socket
+ * @param proto Protocol of socket to open, NSAPI_TCP or NSAPI_UDP
+ * @return 0 on success, negative error code on failure
+ */
+ virtual nsapi_error_t socket_open(nsapi_socket_t *handle, nsapi_protocol_t proto);
+// virtual int socket_open(void **handle, nsapi_protocol_t proto);
+
+ /** Close the socket
+ *
+ * Closes any open connection and deallocates any memory associated
+ * with the socket.
+ *
+ * @param handle Socket handle
+ * @return 0 on success, negative error code on failure
+ */
+ virtual nsapi_error_t socket_close(nsapi_socket_t handle);
+
+ /** Bind a specific address to a socket
+ *
+ * Binding a socket specifies the address and port on which to recieve
+ * data. If the IP address is zeroed, only the port is bound.
+ *
+ * @param handle Socket handle
+ * @param address Local address to bind
+ * @return 0 on success, negative error code on failure.
+ */
+ virtual nsapi_error_t socket_bind(nsapi_socket_t handle, const SocketAddress &address);
+
+ /** Listen for connections on a TCP socket
+ *
+ * Marks the socket as a passive socket that can be used to accept
+ * incoming connections.
+ *
+ * @param handle Socket handle
+ * @param backlog Number of pending connections that can be queued
+ * simultaneously
+ * @return 0 on success, negative error code on failure
+ */
+ virtual nsapi_error_t socket_listen(nsapi_socket_t handle, int backlog);
+
+ /** Connects TCP socket to a remote host
+ *
+ * Initiates a connection to a remote server specified by the
+ * indicated address.
+ *
+ * @param handle Socket handle
+ * @param address The SocketAddress of the remote host
+ * @return 0 on success, negative error code on failure
+ */
+ virtual nsapi_error_t socket_connect(nsapi_socket_t handle, const SocketAddress &address);
+
+ /** Accepts a connection on a TCP socket
+ *
+ * The server socket must be bound and set to listen for connections.
+ * On a new connection, creates a network socket and stores it in the
+ * specified handle. The handle must be passed to following calls on
+ * the socket.
+ *
+ * A stack may have a finite number of sockets, in this case
+ * NSAPI_ERROR_NO_SOCKET is returned if no socket is available.
+ *
+ * This call is non-blocking. If accept would block,
+ * NSAPI_ERROR_WOULD_BLOCK is returned immediately.
+ *
+ * @param server Socket handle to server to accept from
+ * @param handle Destination for a handle to the newly created socket
+ * @param address Destination for the remote address or NULL
+ * @return 0 on success, negative error code on failure
+ */
+ virtual nsapi_error_t socket_accept(nsapi_socket_t server,
+ nsapi_socket_t *handle, SocketAddress *address=0);
+
+ /** Send data over a TCP socket
+ *
+ * The socket must be connected to a remote host. Returns the number of
+ * bytes sent from the buffer.
+ *
+ * This call is non-blocking. If send would block,
+ * NSAPI_ERROR_WOULD_BLOCK is returned immediately.
+ *
+ * @param handle Socket handle
+ * @param data Buffer of data to send to the host
+ * @param size Size of the buffer in bytes
+ * @return Number of sent bytes on success, negative error
+ * code on failure
+ */
+ virtual nsapi_size_or_error_t socket_send(nsapi_socket_t handle,
+ const void *data, nsapi_size_t size);
+
+ /** Receive data over a TCP socket
+ *
+ * The socket must be connected to a remote host. Returns the number of
+ * bytes received into the buffer.
+ *
+ * This call is non-blocking. If recv would block,
+ * NSAPI_ERROR_WOULD_BLOCK is returned immediately.
+ *
+ * @param handle Socket handle
+ * @param data Destination buffer for data received from the host
+ * @param size Size of the buffer in bytes
+ * @return Number of received bytes on success, negative error
+ * code on failure
+ */
+ virtual nsapi_size_or_error_t socket_recv(nsapi_socket_t handle,
+ void *data, nsapi_size_t size);
+
+ /** Send a packet over a UDP socket
+ *
+ * Sends data to the specified address. Returns the number of bytes
+ * sent from the buffer.
+ *
+ * This call is non-blocking. If sendto would block,
+ * NSAPI_ERROR_WOULD_BLOCK is returned immediately.
+ *
+ * @param handle Socket handle
+ * @param address The SocketAddress of the remote host
+ * @param data Buffer of data to send to the host
+ * @param size Size of the buffer in bytes
+ * @return Number of sent bytes on success, negative error
+ * code on failure
+ */
+ virtual nsapi_size_or_error_t socket_sendto(nsapi_socket_t handle, const SocketAddress &address,
+ const void *data, nsapi_size_t size);
+
+ /** Receive a packet over a UDP socket
+ *
+ * Receives data and stores the source address in address if address
+ * is not NULL. Returns the number of bytes received into the buffer.
+ *
+ * This call is non-blocking. If recvfrom would block,
+ * NSAPI_ERROR_WOULD_BLOCK is returned immediately.
+ *
+ * @param handle Socket handle
+ * @param address Destination for the source address or NULL
+ * @param data Destination buffer for data received from the host
+ * @param size Size of the buffer in bytes
+ * @return Number of received bytes on success, negative error
+ * code on failure
+ */
+ virtual nsapi_size_or_error_t socket_recvfrom(nsapi_socket_t handle, SocketAddress *address,
+ void *buffer, nsapi_size_t size);
+
+ /** Register a callback on state change of the socket
+ *
+ * The specified callback will be called on state changes such as when
+ * the socket can recv/send/accept successfully and on when an error
+ * occurs. The callback may also be called spuriously without reason.
+ *
+ * The callback may be called in an interrupt context and should not
+ * perform expensive operations such as recv/send calls.
+ *
+ * @param handle Socket handle
+ * @param callback Function to call on state change
+ * @param data Argument to pass to callback
+ */
+ virtual void socket_attach(nsapi_socket_t handle, void (*callback)(void *), void *data);
+
+ virtual NetworkStack* get_stack() {return this;}
+
+private:
+ WIZnet_Chip _w5500;
+
+ char ip_string[20];
+ char mask_string[20];
+ char gw_string[20];
+ char mac_string[20];
+ bool ip_set;
+
+ int listen_port;
+
+ //void signal_event(nsapi_socket_t handle);
+ //void event();
+
+ //w5500 socket management
+ struct w5500_socket w5500_sockets[MAX_SOCK_NUM];
+ w5500_socket* get_sock(int fd);
+ void init_socks();
+/*
+ Thread *_daemon;
+ void daemon();
+*/
+
+};
+
+#endif
