Nathan Yonkee / Mbed 2 deprecated Nucleo_sinewave_output_copy

Dependencies:   mbed

Committer:
Nathan Yonkee
Date:
Fri Mar 02 07:12:37 2018 -0700
Revision:
9:d58e77ebd769
add mbed-os library

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Nathan Yonkee 9:d58e77ebd769 1 /*
Nathan Yonkee 9:d58e77ebd769 2 * Copyright (c) 2016-2017, Arm Limited and affiliates.
Nathan Yonkee 9:d58e77ebd769 3 * SPDX-License-Identifier: Apache-2.0
Nathan Yonkee 9:d58e77ebd769 4 *
Nathan Yonkee 9:d58e77ebd769 5 * Licensed under the Apache License, Version 2.0 (the "License");
Nathan Yonkee 9:d58e77ebd769 6 * you may not use this file except in compliance with the License.
Nathan Yonkee 9:d58e77ebd769 7 * You may obtain a copy of the License at
Nathan Yonkee 9:d58e77ebd769 8 *
Nathan Yonkee 9:d58e77ebd769 9 * http://www.apache.org/licenses/LICENSE-2.0
Nathan Yonkee 9:d58e77ebd769 10 *
Nathan Yonkee 9:d58e77ebd769 11 * Unless required by applicable law or agreed to in writing, software
Nathan Yonkee 9:d58e77ebd769 12 * distributed under the License is distributed on an "AS IS" BASIS,
Nathan Yonkee 9:d58e77ebd769 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Nathan Yonkee 9:d58e77ebd769 14 * See the License for the specific language governing permissions and
Nathan Yonkee 9:d58e77ebd769 15 * limitations under the License.
Nathan Yonkee 9:d58e77ebd769 16 */
Nathan Yonkee 9:d58e77ebd769 17
Nathan Yonkee 9:d58e77ebd769 18 #ifndef NANOSTACK_INTERFACE_H_
Nathan Yonkee 9:d58e77ebd769 19 #define NANOSTACK_INTERFACE_H_
Nathan Yonkee 9:d58e77ebd769 20
Nathan Yonkee 9:d58e77ebd769 21 #include "mbed.h"
Nathan Yonkee 9:d58e77ebd769 22 #include "NetworkStack.h"
Nathan Yonkee 9:d58e77ebd769 23 #include "MeshInterface.h"
Nathan Yonkee 9:d58e77ebd769 24 // Include here for backward compatibility
Nathan Yonkee 9:d58e77ebd769 25 #include "LoWPANNDInterface.h"
Nathan Yonkee 9:d58e77ebd769 26 #include "ThreadInterface.h"
Nathan Yonkee 9:d58e77ebd769 27 #include "NanostackEthernetInterface.h"
Nathan Yonkee 9:d58e77ebd769 28 #include "MeshInterfaceNanostack.h"
Nathan Yonkee 9:d58e77ebd769 29
Nathan Yonkee 9:d58e77ebd769 30 struct ns_address;
Nathan Yonkee 9:d58e77ebd769 31
Nathan Yonkee 9:d58e77ebd769 32 class NanostackInterface : public NetworkStack {
Nathan Yonkee 9:d58e77ebd769 33 public:
Nathan Yonkee 9:d58e77ebd769 34 static NanostackInterface *get_stack();
Nathan Yonkee 9:d58e77ebd769 35
Nathan Yonkee 9:d58e77ebd769 36 protected:
Nathan Yonkee 9:d58e77ebd769 37
Nathan Yonkee 9:d58e77ebd769 38 /** Get the local IP address
Nathan Yonkee 9:d58e77ebd769 39 *
Nathan Yonkee 9:d58e77ebd769 40 * @return Null-terminated representation of the local IP address
Nathan Yonkee 9:d58e77ebd769 41 * or null if not yet connected
Nathan Yonkee 9:d58e77ebd769 42 */
Nathan Yonkee 9:d58e77ebd769 43 virtual const char *get_ip_address();
Nathan Yonkee 9:d58e77ebd769 44
Nathan Yonkee 9:d58e77ebd769 45 /** Opens a socket
Nathan Yonkee 9:d58e77ebd769 46 *
Nathan Yonkee 9:d58e77ebd769 47 * Creates a network socket and stores it in the specified handle.
Nathan Yonkee 9:d58e77ebd769 48 * The handle must be passed to following calls on the socket.
Nathan Yonkee 9:d58e77ebd769 49 *
Nathan Yonkee 9:d58e77ebd769 50 * A stack may have a finite number of sockets, in this case
Nathan Yonkee 9:d58e77ebd769 51 * NSAPI_ERROR_NO_SOCKET is returned if no socket is available.
Nathan Yonkee 9:d58e77ebd769 52 *
Nathan Yonkee 9:d58e77ebd769 53 * @param handle Destination for the handle to a newly created socket
Nathan Yonkee 9:d58e77ebd769 54 * @param proto Protocol of socket to open, NSAPI_TCP or NSAPI_UDP
Nathan Yonkee 9:d58e77ebd769 55 * @return 0 on success, negative error code on failure
Nathan Yonkee 9:d58e77ebd769 56 */
Nathan Yonkee 9:d58e77ebd769 57 virtual nsapi_error_t socket_open(void **handle, nsapi_protocol_t proto);
Nathan Yonkee 9:d58e77ebd769 58
Nathan Yonkee 9:d58e77ebd769 59 /** Close the socket
Nathan Yonkee 9:d58e77ebd769 60 *
Nathan Yonkee 9:d58e77ebd769 61 * Closes any open connection and deallocates any memory associated
Nathan Yonkee 9:d58e77ebd769 62 * with the socket.
Nathan Yonkee 9:d58e77ebd769 63 *
Nathan Yonkee 9:d58e77ebd769 64 * @param handle Socket handle
Nathan Yonkee 9:d58e77ebd769 65 * @return 0 on success, negative error code on failure
Nathan Yonkee 9:d58e77ebd769 66 */
Nathan Yonkee 9:d58e77ebd769 67 virtual nsapi_error_t socket_close(void *handle);
Nathan Yonkee 9:d58e77ebd769 68
Nathan Yonkee 9:d58e77ebd769 69 /** Bind a specific address to a socket
Nathan Yonkee 9:d58e77ebd769 70 *
Nathan Yonkee 9:d58e77ebd769 71 * Binding a socket specifies the address and port on which to recieve
Nathan Yonkee 9:d58e77ebd769 72 * data. If the IP address is zeroed, only the port is bound.
Nathan Yonkee 9:d58e77ebd769 73 *
Nathan Yonkee 9:d58e77ebd769 74 * @param handle Socket handle
Nathan Yonkee 9:d58e77ebd769 75 * @param address Local address to bind
Nathan Yonkee 9:d58e77ebd769 76 * @return 0 on success, negative error code on failure.
Nathan Yonkee 9:d58e77ebd769 77 */
Nathan Yonkee 9:d58e77ebd769 78 virtual nsapi_error_t socket_bind(void *handle, const SocketAddress &address);
Nathan Yonkee 9:d58e77ebd769 79
Nathan Yonkee 9:d58e77ebd769 80 /** Listen for connections on a TCP socket
Nathan Yonkee 9:d58e77ebd769 81 *
Nathan Yonkee 9:d58e77ebd769 82 * Marks the socket as a passive socket that can be used to accept
Nathan Yonkee 9:d58e77ebd769 83 * incoming connections.
Nathan Yonkee 9:d58e77ebd769 84 *
Nathan Yonkee 9:d58e77ebd769 85 * @param handle Socket handle
Nathan Yonkee 9:d58e77ebd769 86 * @param backlog Number of pending connections that can be queued
Nathan Yonkee 9:d58e77ebd769 87 * simultaneously
Nathan Yonkee 9:d58e77ebd769 88 * @return 0 on success, negative error code on failure
Nathan Yonkee 9:d58e77ebd769 89 */
Nathan Yonkee 9:d58e77ebd769 90 virtual nsapi_error_t socket_listen(void *handle, int backlog);
Nathan Yonkee 9:d58e77ebd769 91
Nathan Yonkee 9:d58e77ebd769 92 /** Connects TCP socket to a remote host
Nathan Yonkee 9:d58e77ebd769 93 *
Nathan Yonkee 9:d58e77ebd769 94 * Initiates a connection to a remote server specified by the
Nathan Yonkee 9:d58e77ebd769 95 * indicated address.
Nathan Yonkee 9:d58e77ebd769 96 *
Nathan Yonkee 9:d58e77ebd769 97 * @param handle Socket handle
Nathan Yonkee 9:d58e77ebd769 98 * @param address The SocketAddress of the remote host
Nathan Yonkee 9:d58e77ebd769 99 * @return 0 on success, negative error code on failure
Nathan Yonkee 9:d58e77ebd769 100 */
Nathan Yonkee 9:d58e77ebd769 101 virtual nsapi_error_t socket_connect(void *handle, const SocketAddress &address);
Nathan Yonkee 9:d58e77ebd769 102
Nathan Yonkee 9:d58e77ebd769 103 /** Accepts a connection on a TCP socket
Nathan Yonkee 9:d58e77ebd769 104 *
Nathan Yonkee 9:d58e77ebd769 105 * The server socket must be bound and set to listen for connections.
Nathan Yonkee 9:d58e77ebd769 106 * On a new connection, creates a network socket and stores it in the
Nathan Yonkee 9:d58e77ebd769 107 * specified handle. The handle must be passed to following calls on
Nathan Yonkee 9:d58e77ebd769 108 * the socket.
Nathan Yonkee 9:d58e77ebd769 109 *
Nathan Yonkee 9:d58e77ebd769 110 * A stack may have a finite number of sockets, in this case
Nathan Yonkee 9:d58e77ebd769 111 * NSAPI_ERROR_NO_SOCKET is returned if no socket is available.
Nathan Yonkee 9:d58e77ebd769 112 *
Nathan Yonkee 9:d58e77ebd769 113 * This call is non-blocking. If accept would block,
Nathan Yonkee 9:d58e77ebd769 114 * NSAPI_ERROR_WOULD_BLOCK is returned immediately.
Nathan Yonkee 9:d58e77ebd769 115 *
Nathan Yonkee 9:d58e77ebd769 116 * @param server Socket handle to server to accept from
Nathan Yonkee 9:d58e77ebd769 117 * @param handle Destination for a handle to the newly created socket
Nathan Yonkee 9:d58e77ebd769 118 * @param address Destination for the remote address or NULL
Nathan Yonkee 9:d58e77ebd769 119 * @return 0 on success, negative error code on failure
Nathan Yonkee 9:d58e77ebd769 120 */
Nathan Yonkee 9:d58e77ebd769 121 virtual nsapi_error_t socket_accept(void *handle, void **server, SocketAddress *address);
Nathan Yonkee 9:d58e77ebd769 122
Nathan Yonkee 9:d58e77ebd769 123 /** Send data over a TCP socket
Nathan Yonkee 9:d58e77ebd769 124 *
Nathan Yonkee 9:d58e77ebd769 125 * The socket must be connected to a remote host. Returns the number of
Nathan Yonkee 9:d58e77ebd769 126 * bytes sent from the buffer.
Nathan Yonkee 9:d58e77ebd769 127 *
Nathan Yonkee 9:d58e77ebd769 128 * This call is non-blocking. If send would block,
Nathan Yonkee 9:d58e77ebd769 129 * NSAPI_ERROR_WOULD_BLOCK is returned immediately.
Nathan Yonkee 9:d58e77ebd769 130 *
Nathan Yonkee 9:d58e77ebd769 131 * @param handle Socket handle
Nathan Yonkee 9:d58e77ebd769 132 * @param data Buffer of data to send to the host
Nathan Yonkee 9:d58e77ebd769 133 * @param size Size of the buffer in bytes
Nathan Yonkee 9:d58e77ebd769 134 * @return Number of sent bytes on success, negative error
Nathan Yonkee 9:d58e77ebd769 135 * code on failure
Nathan Yonkee 9:d58e77ebd769 136 */
Nathan Yonkee 9:d58e77ebd769 137 virtual nsapi_size_or_error_t socket_send(void *handle, const void *data, nsapi_size_t size);
Nathan Yonkee 9:d58e77ebd769 138
Nathan Yonkee 9:d58e77ebd769 139 /** Receive data over a TCP socket
Nathan Yonkee 9:d58e77ebd769 140 *
Nathan Yonkee 9:d58e77ebd769 141 * The socket must be connected to a remote host. Returns the number of
Nathan Yonkee 9:d58e77ebd769 142 * bytes received into the buffer.
Nathan Yonkee 9:d58e77ebd769 143 *
Nathan Yonkee 9:d58e77ebd769 144 * This call is non-blocking. If recv would block,
Nathan Yonkee 9:d58e77ebd769 145 * NSAPI_ERROR_WOULD_BLOCK is returned immediately.
Nathan Yonkee 9:d58e77ebd769 146 *
Nathan Yonkee 9:d58e77ebd769 147 * @param handle Socket handle
Nathan Yonkee 9:d58e77ebd769 148 * @param data Destination buffer for data received from the host
Nathan Yonkee 9:d58e77ebd769 149 * @param size Size of the buffer in bytes
Nathan Yonkee 9:d58e77ebd769 150 * @return Number of received bytes on success, negative error
Nathan Yonkee 9:d58e77ebd769 151 * code on failure
Nathan Yonkee 9:d58e77ebd769 152 */
Nathan Yonkee 9:d58e77ebd769 153 virtual nsapi_size_or_error_t socket_recv(void *handle, void *data, nsapi_size_t size);
Nathan Yonkee 9:d58e77ebd769 154
Nathan Yonkee 9:d58e77ebd769 155 /** Send a packet over a UDP socket
Nathan Yonkee 9:d58e77ebd769 156 *
Nathan Yonkee 9:d58e77ebd769 157 * Sends data to the specified address. Returns the number of bytes
Nathan Yonkee 9:d58e77ebd769 158 * sent from the buffer.
Nathan Yonkee 9:d58e77ebd769 159 *
Nathan Yonkee 9:d58e77ebd769 160 * This call is non-blocking. If sendto would block,
Nathan Yonkee 9:d58e77ebd769 161 * NSAPI_ERROR_WOULD_BLOCK is returned immediately.
Nathan Yonkee 9:d58e77ebd769 162 *
Nathan Yonkee 9:d58e77ebd769 163 * @param handle Socket handle
Nathan Yonkee 9:d58e77ebd769 164 * @param address The SocketAddress of the remote host
Nathan Yonkee 9:d58e77ebd769 165 * @param data Buffer of data to send to the host
Nathan Yonkee 9:d58e77ebd769 166 * @param size Size of the buffer in bytes
Nathan Yonkee 9:d58e77ebd769 167 * @return Number of sent bytes on success, negative error
Nathan Yonkee 9:d58e77ebd769 168 * code on failure
Nathan Yonkee 9:d58e77ebd769 169 */
Nathan Yonkee 9:d58e77ebd769 170 virtual nsapi_size_or_error_t socket_sendto(void *handle, const SocketAddress &address, const void *data, nsapi_size_t size);
Nathan Yonkee 9:d58e77ebd769 171
Nathan Yonkee 9:d58e77ebd769 172 /** Receive a packet over a UDP socket
Nathan Yonkee 9:d58e77ebd769 173 *
Nathan Yonkee 9:d58e77ebd769 174 * Receives data and stores the source address in address if address
Nathan Yonkee 9:d58e77ebd769 175 * is not NULL. Returns the number of bytes received into the buffer.
Nathan Yonkee 9:d58e77ebd769 176 *
Nathan Yonkee 9:d58e77ebd769 177 * This call is non-blocking. If recvfrom would block,
Nathan Yonkee 9:d58e77ebd769 178 * NSAPI_ERROR_WOULD_BLOCK is returned immediately.
Nathan Yonkee 9:d58e77ebd769 179 *
Nathan Yonkee 9:d58e77ebd769 180 * @param handle Socket handle
Nathan Yonkee 9:d58e77ebd769 181 * @param address Destination for the source address or NULL
Nathan Yonkee 9:d58e77ebd769 182 * @param data Destination buffer for data received from the host
Nathan Yonkee 9:d58e77ebd769 183 * @param size Size of the buffer in bytes
Nathan Yonkee 9:d58e77ebd769 184 * @return Number of received bytes on success, negative error
Nathan Yonkee 9:d58e77ebd769 185 * code on failure
Nathan Yonkee 9:d58e77ebd769 186 */
Nathan Yonkee 9:d58e77ebd769 187 virtual nsapi_size_or_error_t socket_recvfrom(void *handle, SocketAddress *address, void *buffer, nsapi_size_t size);
Nathan Yonkee 9:d58e77ebd769 188
Nathan Yonkee 9:d58e77ebd769 189 /** Register a callback on state change of the socket
Nathan Yonkee 9:d58e77ebd769 190 *
Nathan Yonkee 9:d58e77ebd769 191 * The specified callback will be called on state changes such as when
Nathan Yonkee 9:d58e77ebd769 192 * the socket can recv/send/accept successfully and on when an error
Nathan Yonkee 9:d58e77ebd769 193 * occurs. The callback may also be called spuriously without reason.
Nathan Yonkee 9:d58e77ebd769 194 *
Nathan Yonkee 9:d58e77ebd769 195 * The callback may be called in an interrupt context and should not
Nathan Yonkee 9:d58e77ebd769 196 * perform expensive operations such as recv/send calls.
Nathan Yonkee 9:d58e77ebd769 197 *
Nathan Yonkee 9:d58e77ebd769 198 * @param handle Socket handle
Nathan Yonkee 9:d58e77ebd769 199 * @param callback Function to call on state change
Nathan Yonkee 9:d58e77ebd769 200 * @param data Argument to pass to callback
Nathan Yonkee 9:d58e77ebd769 201 */
Nathan Yonkee 9:d58e77ebd769 202 virtual void socket_attach(void *handle, void (*callback)(void *), void *data);
Nathan Yonkee 9:d58e77ebd769 203
Nathan Yonkee 9:d58e77ebd769 204 /* Set stack-specific socket options
Nathan Yonkee 9:d58e77ebd769 205 *
Nathan Yonkee 9:d58e77ebd769 206 * The setsockopt allow an application to pass stack-specific hints
Nathan Yonkee 9:d58e77ebd769 207 * to the underlying stack. For unsupported options,
Nathan Yonkee 9:d58e77ebd769 208 * NSAPI_ERROR_UNSUPPORTED is returned and the socket is unmodified.
Nathan Yonkee 9:d58e77ebd769 209 *
Nathan Yonkee 9:d58e77ebd769 210 * @param handle Socket handle
Nathan Yonkee 9:d58e77ebd769 211 * @param level Stack-specific protocol level
Nathan Yonkee 9:d58e77ebd769 212 * @param optname Stack-specific option identifier
Nathan Yonkee 9:d58e77ebd769 213 * @param optval Option value
Nathan Yonkee 9:d58e77ebd769 214 * @param optlen Length of the option value
Nathan Yonkee 9:d58e77ebd769 215 * @return 0 on success, negative error code on failure
Nathan Yonkee 9:d58e77ebd769 216 */
Nathan Yonkee 9:d58e77ebd769 217 virtual nsapi_error_t setsockopt(void *handle, int level, int optname, const void *optval, unsigned optlen);
Nathan Yonkee 9:d58e77ebd769 218
Nathan Yonkee 9:d58e77ebd769 219 /* Get stack-specific socket options
Nathan Yonkee 9:d58e77ebd769 220 *
Nathan Yonkee 9:d58e77ebd769 221 * The getstackopt allow an application to retrieve stack-specific hints
Nathan Yonkee 9:d58e77ebd769 222 * from the underlying stack. For unsupported options,
Nathan Yonkee 9:d58e77ebd769 223 * NSAPI_ERROR_UNSUPPORTED is returned and optval is unmodified.
Nathan Yonkee 9:d58e77ebd769 224 *
Nathan Yonkee 9:d58e77ebd769 225 * @param handle Socket handle
Nathan Yonkee 9:d58e77ebd769 226 * @param level Stack-specific protocol level
Nathan Yonkee 9:d58e77ebd769 227 * @param optname Stack-specific option identifier
Nathan Yonkee 9:d58e77ebd769 228 * @param optval Destination for option value
Nathan Yonkee 9:d58e77ebd769 229 * @param optlen Length of the option value
Nathan Yonkee 9:d58e77ebd769 230 * @return 0 on success, negative error code on failure
Nathan Yonkee 9:d58e77ebd769 231 */
Nathan Yonkee 9:d58e77ebd769 232 virtual nsapi_error_t getsockopt(void *handle, int level, int optname, void *optval, unsigned *optlen);
Nathan Yonkee 9:d58e77ebd769 233
Nathan Yonkee 9:d58e77ebd769 234 private:
Nathan Yonkee 9:d58e77ebd769 235 nsapi_size_or_error_t do_sendto(void *handle, const struct ns_address *address, const void *data, nsapi_size_t size);
Nathan Yonkee 9:d58e77ebd769 236 char text_ip_address[40];
Nathan Yonkee 9:d58e77ebd769 237 static NanostackInterface * _ns_interface;
Nathan Yonkee 9:d58e77ebd769 238 };
Nathan Yonkee 9:d58e77ebd769 239
Nathan Yonkee 9:d58e77ebd769 240 nsapi_error_t map_mesh_error(mesh_error_t err);
Nathan Yonkee 9:d58e77ebd769 241
Nathan Yonkee 9:d58e77ebd769 242 #endif /* NANOSTACK_INTERFACE_H_ */