takashi kadono / Mbed OS Nucleo446_SSD1331

Dependencies:   ssd1331

Committer:
kadonotakashi
Date:
Wed Oct 10 00:33:53 2018 +0000
Revision:
0:8fdf9a60065b
how to make mbed librry

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kadonotakashi 0:8fdf9a60065b 1
kadonotakashi 0:8fdf9a60065b 2 /** \addtogroup netsocket */
kadonotakashi 0:8fdf9a60065b 3 /** @{*/
kadonotakashi 0:8fdf9a60065b 4 /* UDPSocket
kadonotakashi 0:8fdf9a60065b 5 * Copyright (c) 2015 ARM Limited
kadonotakashi 0:8fdf9a60065b 6 *
kadonotakashi 0:8fdf9a60065b 7 * Licensed under the Apache License, Version 2.0 (the "License");
kadonotakashi 0:8fdf9a60065b 8 * you may not use this file except in compliance with the License.
kadonotakashi 0:8fdf9a60065b 9 * You may obtain a copy of the License at
kadonotakashi 0:8fdf9a60065b 10 *
kadonotakashi 0:8fdf9a60065b 11 * http://www.apache.org/licenses/LICENSE-2.0
kadonotakashi 0:8fdf9a60065b 12 *
kadonotakashi 0:8fdf9a60065b 13 * Unless required by applicable law or agreed to in writing, software
kadonotakashi 0:8fdf9a60065b 14 * distributed under the License is distributed on an "AS IS" BASIS,
kadonotakashi 0:8fdf9a60065b 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
kadonotakashi 0:8fdf9a60065b 16 * See the License for the specific language governing permissions and
kadonotakashi 0:8fdf9a60065b 17 * limitations under the License.
kadonotakashi 0:8fdf9a60065b 18 */
kadonotakashi 0:8fdf9a60065b 19
kadonotakashi 0:8fdf9a60065b 20 #ifndef UDPSOCKET_H
kadonotakashi 0:8fdf9a60065b 21 #define UDPSOCKET_H
kadonotakashi 0:8fdf9a60065b 22
kadonotakashi 0:8fdf9a60065b 23 #include "netsocket/InternetSocket.h"
kadonotakashi 0:8fdf9a60065b 24 #include "netsocket/NetworkStack.h"
kadonotakashi 0:8fdf9a60065b 25 #include "netsocket/NetworkInterface.h"
kadonotakashi 0:8fdf9a60065b 26 #include "rtos/EventFlags.h"
kadonotakashi 0:8fdf9a60065b 27
kadonotakashi 0:8fdf9a60065b 28
kadonotakashi 0:8fdf9a60065b 29 /** UDP socket
kadonotakashi 0:8fdf9a60065b 30 */
kadonotakashi 0:8fdf9a60065b 31 class UDPSocket : public InternetSocket {
kadonotakashi 0:8fdf9a60065b 32 public:
kadonotakashi 0:8fdf9a60065b 33 /** Create an uninitialized socket
kadonotakashi 0:8fdf9a60065b 34 *
kadonotakashi 0:8fdf9a60065b 35 * Must call open to initialize the socket on a network stack.
kadonotakashi 0:8fdf9a60065b 36 */
kadonotakashi 0:8fdf9a60065b 37 UDPSocket();
kadonotakashi 0:8fdf9a60065b 38
kadonotakashi 0:8fdf9a60065b 39 /** Create a socket on a network interface
kadonotakashi 0:8fdf9a60065b 40 *
kadonotakashi 0:8fdf9a60065b 41 * Creates and opens a socket on the network stack of the given
kadonotakashi 0:8fdf9a60065b 42 * network interface.
kadonotakashi 0:8fdf9a60065b 43 *
kadonotakashi 0:8fdf9a60065b 44 * @param stack Network stack as target for socket
kadonotakashi 0:8fdf9a60065b 45 */
kadonotakashi 0:8fdf9a60065b 46 template <typename S>
kadonotakashi 0:8fdf9a60065b 47 UDPSocket(S *stack)
kadonotakashi 0:8fdf9a60065b 48 {
kadonotakashi 0:8fdf9a60065b 49 open(stack);
kadonotakashi 0:8fdf9a60065b 50 }
kadonotakashi 0:8fdf9a60065b 51
kadonotakashi 0:8fdf9a60065b 52 /** Destroy a socket
kadonotakashi 0:8fdf9a60065b 53 *
kadonotakashi 0:8fdf9a60065b 54 * Closes socket if the socket is still open
kadonotakashi 0:8fdf9a60065b 55 */
kadonotakashi 0:8fdf9a60065b 56 virtual ~UDPSocket();
kadonotakashi 0:8fdf9a60065b 57
kadonotakashi 0:8fdf9a60065b 58 /** Send a packet over a UDP socket
kadonotakashi 0:8fdf9a60065b 59 *
kadonotakashi 0:8fdf9a60065b 60 * Sends data to the specified address specified by either a domain name
kadonotakashi 0:8fdf9a60065b 61 * or an IP address and port. Returns the number of bytes sent from the
kadonotakashi 0:8fdf9a60065b 62 * buffer.
kadonotakashi 0:8fdf9a60065b 63 *
kadonotakashi 0:8fdf9a60065b 64 * By default, sendto blocks until data is sent. If socket is set to
kadonotakashi 0:8fdf9a60065b 65 * non-blocking or times out, NSAPI_ERROR_WOULD_BLOCK is returned
kadonotakashi 0:8fdf9a60065b 66 * immediately.
kadonotakashi 0:8fdf9a60065b 67 *
kadonotakashi 0:8fdf9a60065b 68 * @param host Hostname of the remote host
kadonotakashi 0:8fdf9a60065b 69 * @param port Port of the remote host
kadonotakashi 0:8fdf9a60065b 70 * @param data Buffer of data to send to the host
kadonotakashi 0:8fdf9a60065b 71 * @param size Size of the buffer in bytes
kadonotakashi 0:8fdf9a60065b 72 * @return Number of sent bytes on success, negative error
kadonotakashi 0:8fdf9a60065b 73 * code on failure
kadonotakashi 0:8fdf9a60065b 74 */
kadonotakashi 0:8fdf9a60065b 75 virtual nsapi_size_or_error_t sendto(const char *host, uint16_t port,
kadonotakashi 0:8fdf9a60065b 76 const void *data, nsapi_size_t size);
kadonotakashi 0:8fdf9a60065b 77
kadonotakashi 0:8fdf9a60065b 78 /** Send a packet over a UDP socket
kadonotakashi 0:8fdf9a60065b 79 *
kadonotakashi 0:8fdf9a60065b 80 * Sends data to the specified address. Returns the number of bytes
kadonotakashi 0:8fdf9a60065b 81 * sent from the buffer.
kadonotakashi 0:8fdf9a60065b 82 *
kadonotakashi 0:8fdf9a60065b 83 * By default, sendto blocks until data is sent. If socket is set to
kadonotakashi 0:8fdf9a60065b 84 * non-blocking or times out, NSAPI_ERROR_WOULD_BLOCK is returned
kadonotakashi 0:8fdf9a60065b 85 * immediately.
kadonotakashi 0:8fdf9a60065b 86 *
kadonotakashi 0:8fdf9a60065b 87 * @param address The SocketAddress of the remote host
kadonotakashi 0:8fdf9a60065b 88 * @param data Buffer of data to send to the host
kadonotakashi 0:8fdf9a60065b 89 * @param size Size of the buffer in bytes
kadonotakashi 0:8fdf9a60065b 90 * @return Number of sent bytes on success, negative error
kadonotakashi 0:8fdf9a60065b 91 * code on failure
kadonotakashi 0:8fdf9a60065b 92 */
kadonotakashi 0:8fdf9a60065b 93 virtual nsapi_size_or_error_t sendto(const SocketAddress &address,
kadonotakashi 0:8fdf9a60065b 94 const void *data, nsapi_size_t size);
kadonotakashi 0:8fdf9a60065b 95
kadonotakashi 0:8fdf9a60065b 96 /** Receive a datagram over a UDP socket
kadonotakashi 0:8fdf9a60065b 97 *
kadonotakashi 0:8fdf9a60065b 98 * Receives a datagram and stores the source address in address if address
kadonotakashi 0:8fdf9a60065b 99 * is not NULL. Returns the number of bytes written into the buffer. If the
kadonotakashi 0:8fdf9a60065b 100 * datagram is larger than the buffer, the excess data is silently discarded.
kadonotakashi 0:8fdf9a60065b 101 *
kadonotakashi 0:8fdf9a60065b 102 * If socket is connected, only packets coming from connected peer address
kadonotakashi 0:8fdf9a60065b 103 * are accepted.
kadonotakashi 0:8fdf9a60065b 104 *
kadonotakashi 0:8fdf9a60065b 105 * @note recvfrom() is allowed write to address and data buffers even if error occurs.
kadonotakashi 0:8fdf9a60065b 106 *
kadonotakashi 0:8fdf9a60065b 107 * By default, recvfrom blocks until a datagram is received. If socket is set to
kadonotakashi 0:8fdf9a60065b 108 * non-blocking or times out with no datagram, NSAPI_ERROR_WOULD_BLOCK
kadonotakashi 0:8fdf9a60065b 109 * is returned.
kadonotakashi 0:8fdf9a60065b 110 *
kadonotakashi 0:8fdf9a60065b 111 * @param address Destination for the source address or NULL
kadonotakashi 0:8fdf9a60065b 112 * @param data Destination buffer for datagram received from the host
kadonotakashi 0:8fdf9a60065b 113 * @param size Size of the buffer in bytes
kadonotakashi 0:8fdf9a60065b 114 * @return Number of received bytes on success, negative error
kadonotakashi 0:8fdf9a60065b 115 * code on failure
kadonotakashi 0:8fdf9a60065b 116 */
kadonotakashi 0:8fdf9a60065b 117 virtual nsapi_size_or_error_t recvfrom(SocketAddress *address,
kadonotakashi 0:8fdf9a60065b 118 void *data, nsapi_size_t size);
kadonotakashi 0:8fdf9a60065b 119
kadonotakashi 0:8fdf9a60065b 120 /** Set remote peer address
kadonotakashi 0:8fdf9a60065b 121 *
kadonotakashi 0:8fdf9a60065b 122 * Set the remote address for next send() call and filtering
kadonotakashi 0:8fdf9a60065b 123 * for incomming packets. To reset the address, zero initialised
kadonotakashi 0:8fdf9a60065b 124 * SocketAddress must be in the address parameter.
kadonotakashi 0:8fdf9a60065b 125 *
kadonotakashi 0:8fdf9a60065b 126 * @param address The SocketAddress of the remote host
kadonotakashi 0:8fdf9a60065b 127 * @return 0 on success, negative error code on failure
kadonotakashi 0:8fdf9a60065b 128 */
kadonotakashi 0:8fdf9a60065b 129 virtual nsapi_error_t connect(const SocketAddress &address);
kadonotakashi 0:8fdf9a60065b 130
kadonotakashi 0:8fdf9a60065b 131 /** Send a datagram to pre-specified remote.
kadonotakashi 0:8fdf9a60065b 132 *
kadonotakashi 0:8fdf9a60065b 133 * The socket must be connected to a remote host before send() call.
kadonotakashi 0:8fdf9a60065b 134 * Returns the number of bytes sent from the buffer.
kadonotakashi 0:8fdf9a60065b 135 *
kadonotakashi 0:8fdf9a60065b 136 * By default, send blocks until all data is sent. If socket is set to
kadonotakashi 0:8fdf9a60065b 137 * non-blocking or times out, a partial amount can be written.
kadonotakashi 0:8fdf9a60065b 138 * NSAPI_ERROR_WOULD_BLOCK is returned if no data was written.
kadonotakashi 0:8fdf9a60065b 139 *
kadonotakashi 0:8fdf9a60065b 140 * @param data Buffer of data to send to the host
kadonotakashi 0:8fdf9a60065b 141 * @param size Size of the buffer in bytes
kadonotakashi 0:8fdf9a60065b 142 * @return Number of sent bytes on success, negative error
kadonotakashi 0:8fdf9a60065b 143 * code on failure.
kadonotakashi 0:8fdf9a60065b 144 */
kadonotakashi 0:8fdf9a60065b 145 virtual nsapi_size_or_error_t send(const void *data, nsapi_size_t size);
kadonotakashi 0:8fdf9a60065b 146
kadonotakashi 0:8fdf9a60065b 147 /** Receive data from a socket.
kadonotakashi 0:8fdf9a60065b 148 *
kadonotakashi 0:8fdf9a60065b 149 * This is equivalent of calling recvfrom(NULL, data, size).
kadonotakashi 0:8fdf9a60065b 150 *
kadonotakashi 0:8fdf9a60065b 151 * If socket is connected, only packets coming from connected peer address
kadonotakashi 0:8fdf9a60065b 152 * are accepted.
kadonotakashi 0:8fdf9a60065b 153 *
kadonotakashi 0:8fdf9a60065b 154 * @note recv() is allowed write to data buffer even if error occurs.
kadonotakashi 0:8fdf9a60065b 155 *
kadonotakashi 0:8fdf9a60065b 156 * By default, recv blocks until some data is received. If socket is set to
kadonotakashi 0:8fdf9a60065b 157 * non-blocking or times out, NSAPI_ERROR_WOULD_BLOCK can be returned to
kadonotakashi 0:8fdf9a60065b 158 * indicate no data.
kadonotakashi 0:8fdf9a60065b 159 *
kadonotakashi 0:8fdf9a60065b 160 * @param data Destination buffer for data received from the host
kadonotakashi 0:8fdf9a60065b 161 * @param size Size of the buffer in bytes
kadonotakashi 0:8fdf9a60065b 162 * @return Number of received bytes on success, negative error
kadonotakashi 0:8fdf9a60065b 163 * code on failure.
kadonotakashi 0:8fdf9a60065b 164 */
kadonotakashi 0:8fdf9a60065b 165 virtual nsapi_size_or_error_t recv(void *data, nsapi_size_t size);
kadonotakashi 0:8fdf9a60065b 166
kadonotakashi 0:8fdf9a60065b 167 /** Not implemented for UDP
kadonotakashi 0:8fdf9a60065b 168 *
kadonotakashi 0:8fdf9a60065b 169 * @param error unused
kadonotakashi 0:8fdf9a60065b 170 * @return NSAPI_ERROR_UNSUPPORTED
kadonotakashi 0:8fdf9a60065b 171 */
kadonotakashi 0:8fdf9a60065b 172 virtual Socket *accept(nsapi_error_t *error = NULL);
kadonotakashi 0:8fdf9a60065b 173
kadonotakashi 0:8fdf9a60065b 174 /** Not implemented for UDP
kadonotakashi 0:8fdf9a60065b 175 *
kadonotakashi 0:8fdf9a60065b 176 * @param backlog unused
kadonotakashi 0:8fdf9a60065b 177 * @return NSAPI_ERROR_UNSUPPORTED
kadonotakashi 0:8fdf9a60065b 178 */
kadonotakashi 0:8fdf9a60065b 179 virtual nsapi_error_t listen(int backlog = 1);
kadonotakashi 0:8fdf9a60065b 180
kadonotakashi 0:8fdf9a60065b 181 protected:
kadonotakashi 0:8fdf9a60065b 182 virtual nsapi_protocol_t get_proto();
kadonotakashi 0:8fdf9a60065b 183 };
kadonotakashi 0:8fdf9a60065b 184
kadonotakashi 0:8fdf9a60065b 185
kadonotakashi 0:8fdf9a60065b 186 #endif
kadonotakashi 0:8fdf9a60065b 187
kadonotakashi 0:8fdf9a60065b 188 /** @}*/