Dependents:   mbed-TFT-example-NCS36510 mbed-Accelerometer-example-NCS36510 mbed-Accelerometer-example-NCS36510

Committer:
jacobjohnson
Date:
Mon Feb 27 17:45:05 2017 +0000
Revision:
1:f30bdcd2b33b
Parent:
0:098463de4c5d
changed the inputscale from 1 to 7 in analogin_api.c.  This will need to be changed later, and accessed from the main level, but for now this allows the  adc to read a value from 0 to 3.7V, instead of just up to 1V.;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
group-onsemi 0:098463de4c5d 1
group-onsemi 0:098463de4c5d 2 /** \addtogroup netsocket */
group-onsemi 0:098463de4c5d 3 /** @{*/
group-onsemi 0:098463de4c5d 4 /* Socket
group-onsemi 0:098463de4c5d 5 * Copyright (c) 2015 ARM Limited
group-onsemi 0:098463de4c5d 6 *
group-onsemi 0:098463de4c5d 7 * Licensed under the Apache License, Version 2.0 (the "License");
group-onsemi 0:098463de4c5d 8 * you may not use this file except in compliance with the License.
group-onsemi 0:098463de4c5d 9 * You may obtain a copy of the License at
group-onsemi 0:098463de4c5d 10 *
group-onsemi 0:098463de4c5d 11 * http://www.apache.org/licenses/LICENSE-2.0
group-onsemi 0:098463de4c5d 12 *
group-onsemi 0:098463de4c5d 13 * Unless required by applicable law or agreed to in writing, software
group-onsemi 0:098463de4c5d 14 * distributed under the License is distributed on an "AS IS" BASIS,
group-onsemi 0:098463de4c5d 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
group-onsemi 0:098463de4c5d 16 * See the License for the specific language governing permissions and
group-onsemi 0:098463de4c5d 17 * limitations under the License.
group-onsemi 0:098463de4c5d 18 */
group-onsemi 0:098463de4c5d 19
group-onsemi 0:098463de4c5d 20 #ifndef SOCKET_H
group-onsemi 0:098463de4c5d 21 #define SOCKET_H
group-onsemi 0:098463de4c5d 22
group-onsemi 0:098463de4c5d 23 #include "netsocket/SocketAddress.h"
group-onsemi 0:098463de4c5d 24 #include "netsocket/NetworkStack.h"
group-onsemi 0:098463de4c5d 25 #include "rtos/Mutex.h"
group-onsemi 0:098463de4c5d 26 #include "Callback.h"
group-onsemi 0:098463de4c5d 27 #include "toolchain.h"
group-onsemi 0:098463de4c5d 28
group-onsemi 0:098463de4c5d 29
group-onsemi 0:098463de4c5d 30 /** Abstract socket class
group-onsemi 0:098463de4c5d 31 */
group-onsemi 0:098463de4c5d 32 class Socket {
group-onsemi 0:098463de4c5d 33 public:
group-onsemi 0:098463de4c5d 34 /** Destroy a socket
group-onsemi 0:098463de4c5d 35 *
group-onsemi 0:098463de4c5d 36 * Closes socket if the socket is still open
group-onsemi 0:098463de4c5d 37 */
group-onsemi 0:098463de4c5d 38 virtual ~Socket() {}
group-onsemi 0:098463de4c5d 39
group-onsemi 0:098463de4c5d 40 /** Opens a socket
group-onsemi 0:098463de4c5d 41 *
group-onsemi 0:098463de4c5d 42 * Creates a network socket on the network stack of the given
group-onsemi 0:098463de4c5d 43 * network interface. Not needed if stack is passed to the
group-onsemi 0:098463de4c5d 44 * socket's constructor.
group-onsemi 0:098463de4c5d 45 *
group-onsemi 0:098463de4c5d 46 * @param stack Network stack as target for socket
group-onsemi 0:098463de4c5d 47 * @return 0 on success, negative error code on failure
group-onsemi 0:098463de4c5d 48 */
group-onsemi 0:098463de4c5d 49 nsapi_error_t open(NetworkStack *stack);
group-onsemi 0:098463de4c5d 50
group-onsemi 0:098463de4c5d 51 template <typename S>
group-onsemi 0:098463de4c5d 52 nsapi_error_t open(S *stack) {
group-onsemi 0:098463de4c5d 53 return open(nsapi_create_stack(stack));
group-onsemi 0:098463de4c5d 54 }
group-onsemi 0:098463de4c5d 55
group-onsemi 0:098463de4c5d 56 /** Close the socket
group-onsemi 0:098463de4c5d 57 *
group-onsemi 0:098463de4c5d 58 * Closes any open connection and deallocates any memory associated
group-onsemi 0:098463de4c5d 59 * with the socket. Called from destructor if socket is not closed.
group-onsemi 0:098463de4c5d 60 *
group-onsemi 0:098463de4c5d 61 * @return 0 on success, negative error code on failure
group-onsemi 0:098463de4c5d 62 */
group-onsemi 0:098463de4c5d 63 nsapi_error_t close();
group-onsemi 0:098463de4c5d 64
group-onsemi 0:098463de4c5d 65 /** Bind a specific address to a socket
group-onsemi 0:098463de4c5d 66 *
group-onsemi 0:098463de4c5d 67 * Binding a socket specifies the address and port on which to recieve
group-onsemi 0:098463de4c5d 68 * data.
group-onsemi 0:098463de4c5d 69 *
group-onsemi 0:098463de4c5d 70 * @param port Local port to bind
group-onsemi 0:098463de4c5d 71 * @return 0 on success, negative error code on failure.
group-onsemi 0:098463de4c5d 72 */
group-onsemi 0:098463de4c5d 73 nsapi_error_t bind(uint16_t port);
group-onsemi 0:098463de4c5d 74
group-onsemi 0:098463de4c5d 75 /** Bind a specific address to a socket
group-onsemi 0:098463de4c5d 76 *
group-onsemi 0:098463de4c5d 77 * Binding a socket specifies the address and port on which to recieve
group-onsemi 0:098463de4c5d 78 * data. If the IP address is zeroed, only the port is bound.
group-onsemi 0:098463de4c5d 79 *
group-onsemi 0:098463de4c5d 80 * @param address Null-terminated local address to bind
group-onsemi 0:098463de4c5d 81 * @param port Local port to bind
group-onsemi 0:098463de4c5d 82 * @return 0 on success, negative error code on failure.
group-onsemi 0:098463de4c5d 83 */
group-onsemi 0:098463de4c5d 84 nsapi_error_t bind(const char *address, uint16_t port);
group-onsemi 0:098463de4c5d 85
group-onsemi 0:098463de4c5d 86 /** Bind a specific address to a socket
group-onsemi 0:098463de4c5d 87 *
group-onsemi 0:098463de4c5d 88 * Binding a socket specifies the address and port on which to recieve
group-onsemi 0:098463de4c5d 89 * data. If the IP address is zeroed, only the port is bound.
group-onsemi 0:098463de4c5d 90 *
group-onsemi 0:098463de4c5d 91 * @param address Local address to bind
group-onsemi 0:098463de4c5d 92 * @return 0 on success, negative error code on failure.
group-onsemi 0:098463de4c5d 93 */
group-onsemi 0:098463de4c5d 94 nsapi_error_t bind(const SocketAddress &address);
group-onsemi 0:098463de4c5d 95
group-onsemi 0:098463de4c5d 96 /** Set blocking or non-blocking mode of the socket
group-onsemi 0:098463de4c5d 97 *
group-onsemi 0:098463de4c5d 98 * Initially all sockets are in blocking mode. In non-blocking mode
group-onsemi 0:098463de4c5d 99 * blocking operations such as send/recv/accept return
group-onsemi 0:098463de4c5d 100 * NSAPI_ERROR_WOULD_BLOCK if they can not continue.
group-onsemi 0:098463de4c5d 101 *
group-onsemi 0:098463de4c5d 102 * set_blocking(false) is equivalent to set_timeout(-1)
group-onsemi 0:098463de4c5d 103 * set_blocking(true) is equivalent to set_timeout(0)
group-onsemi 0:098463de4c5d 104 *
group-onsemi 0:098463de4c5d 105 * @param blocking true for blocking mode, false for non-blocking mode.
group-onsemi 0:098463de4c5d 106 */
group-onsemi 0:098463de4c5d 107 void set_blocking(bool blocking);
group-onsemi 0:098463de4c5d 108
group-onsemi 0:098463de4c5d 109 /** Set timeout on blocking socket operations
group-onsemi 0:098463de4c5d 110 *
group-onsemi 0:098463de4c5d 111 * Initially all sockets have unbounded timeouts. NSAPI_ERROR_WOULD_BLOCK
group-onsemi 0:098463de4c5d 112 * is returned if a blocking operation takes longer than the specified
group-onsemi 0:098463de4c5d 113 * timeout. A timeout of 0 removes the timeout from the socket. A negative
group-onsemi 0:098463de4c5d 114 * value give the socket an unbounded timeout.
group-onsemi 0:098463de4c5d 115 *
group-onsemi 0:098463de4c5d 116 * set_timeout(0) is equivalent to set_blocking(false)
group-onsemi 0:098463de4c5d 117 * set_timeout(-1) is equivalent to set_blocking(true)
group-onsemi 0:098463de4c5d 118 *
group-onsemi 0:098463de4c5d 119 * @param timeout Timeout in milliseconds
group-onsemi 0:098463de4c5d 120 */
group-onsemi 0:098463de4c5d 121 void set_timeout(int timeout);
group-onsemi 0:098463de4c5d 122
group-onsemi 0:098463de4c5d 123 /* Set socket options
group-onsemi 0:098463de4c5d 124 *
group-onsemi 0:098463de4c5d 125 * setsockopt allows an application to pass stack-specific options
group-onsemi 0:098463de4c5d 126 * to the underlying stack using stack-specific level and option names,
group-onsemi 0:098463de4c5d 127 * or to request generic options using levels from nsapi_socket_level_t.
group-onsemi 0:098463de4c5d 128 *
group-onsemi 0:098463de4c5d 129 * For unsupported options, NSAPI_ERROR_UNSUPPORTED is returned
group-onsemi 0:098463de4c5d 130 * and the socket is unmodified.
group-onsemi 0:098463de4c5d 131 *
group-onsemi 0:098463de4c5d 132 * @param level Stack-specific protocol level or nsapi_socket_level_t
group-onsemi 0:098463de4c5d 133 * @param optname Level-specific option name
group-onsemi 0:098463de4c5d 134 * @param optval Option value
group-onsemi 0:098463de4c5d 135 * @param optlen Length of the option value
group-onsemi 0:098463de4c5d 136 * @return 0 on success, negative error code on failure
group-onsemi 0:098463de4c5d 137 */
group-onsemi 0:098463de4c5d 138 nsapi_error_t setsockopt(int level, int optname, const void *optval, unsigned optlen);
group-onsemi 0:098463de4c5d 139
group-onsemi 0:098463de4c5d 140 /* Get socket options
group-onsemi 0:098463de4c5d 141 *
group-onsemi 0:098463de4c5d 142 * getsockopt allows an application to retrieve stack-specific options
group-onsemi 0:098463de4c5d 143 * from the underlying stack using stack-specific level and option names,
group-onsemi 0:098463de4c5d 144 * or to request generic options using levels from nsapi_socket_level_t.
group-onsemi 0:098463de4c5d 145 *
group-onsemi 0:098463de4c5d 146 * For unsupported options, NSAPI_ERROR_UNSUPPORTED is returned
group-onsemi 0:098463de4c5d 147 * and the socket is unmodified.
group-onsemi 0:098463de4c5d 148 *
group-onsemi 0:098463de4c5d 149 * @param level Stack-specific protocol level or nsapi_socket_level_t
group-onsemi 0:098463de4c5d 150 * @param optname Level-specific option name
group-onsemi 0:098463de4c5d 151 * @param optval Destination for option value
group-onsemi 0:098463de4c5d 152 * @param optlen Length of the option value
group-onsemi 0:098463de4c5d 153 * @return 0 on success, negative error code on failure
group-onsemi 0:098463de4c5d 154 */
group-onsemi 0:098463de4c5d 155 nsapi_error_t getsockopt(int level, int optname, void *optval, unsigned *optlen);
group-onsemi 0:098463de4c5d 156
group-onsemi 0:098463de4c5d 157 /** Register a callback on state change of the socket
group-onsemi 0:098463de4c5d 158 *
group-onsemi 0:098463de4c5d 159 * The specified callback will be called on state changes such as when
group-onsemi 0:098463de4c5d 160 * the socket can recv/send/accept successfully and on when an error
group-onsemi 0:098463de4c5d 161 * occurs. The callback may also be called spuriously without reason.
group-onsemi 0:098463de4c5d 162 *
group-onsemi 0:098463de4c5d 163 * The callback may be called in an interrupt context and should not
group-onsemi 0:098463de4c5d 164 * perform expensive operations such as recv/send calls.
group-onsemi 0:098463de4c5d 165 *
group-onsemi 0:098463de4c5d 166 * @param func Function to call on state change
group-onsemi 0:098463de4c5d 167 */
group-onsemi 0:098463de4c5d 168 void attach(mbed::Callback<void()> func);
group-onsemi 0:098463de4c5d 169
group-onsemi 0:098463de4c5d 170 /** Register a callback on state change of the socket
group-onsemi 0:098463de4c5d 171 *
group-onsemi 0:098463de4c5d 172 * The specified callback will be called on state changes such as when
group-onsemi 0:098463de4c5d 173 * the socket can recv/send/accept successfully and on when an error
group-onsemi 0:098463de4c5d 174 * occurs. The callback may also be called spuriously without reason.
group-onsemi 0:098463de4c5d 175 *
group-onsemi 0:098463de4c5d 176 * The callback may be called in an interrupt context and should not
group-onsemi 0:098463de4c5d 177 * perform expensive operations such as recv/send calls.
group-onsemi 0:098463de4c5d 178 *
group-onsemi 0:098463de4c5d 179 * @param obj Pointer to object to call method on
group-onsemi 0:098463de4c5d 180 * @param method Method to call on state change
group-onsemi 0:098463de4c5d 181 *
group-onsemi 0:098463de4c5d 182 * @deprecated
group-onsemi 0:098463de4c5d 183 * The attach function does not support cv-qualifiers. Replaced by
group-onsemi 0:098463de4c5d 184 * attach(callback(obj, method)).
group-onsemi 0:098463de4c5d 185 */
group-onsemi 0:098463de4c5d 186 template <typename T, typename M>
group-onsemi 0:098463de4c5d 187 MBED_DEPRECATED_SINCE("mbed-os-5.1",
group-onsemi 0:098463de4c5d 188 "The attach function does not support cv-qualifiers. Replaced by "
group-onsemi 0:098463de4c5d 189 "attach(callback(obj, method)).")
group-onsemi 0:098463de4c5d 190 void attach(T *obj, M method) {
group-onsemi 0:098463de4c5d 191 attach(mbed::callback(obj, method));
group-onsemi 0:098463de4c5d 192 }
group-onsemi 0:098463de4c5d 193
group-onsemi 0:098463de4c5d 194 protected:
group-onsemi 0:098463de4c5d 195 Socket();
group-onsemi 0:098463de4c5d 196 virtual nsapi_protocol_t get_proto() = 0;
group-onsemi 0:098463de4c5d 197 virtual void event() = 0;
group-onsemi 0:098463de4c5d 198
group-onsemi 0:098463de4c5d 199 NetworkStack *_stack;
group-onsemi 0:098463de4c5d 200 nsapi_socket_t _socket;
group-onsemi 0:098463de4c5d 201 uint32_t _timeout;
group-onsemi 0:098463de4c5d 202 mbed::Callback<void()> _event;
group-onsemi 0:098463de4c5d 203 mbed::Callback<void()> _callback;
group-onsemi 0:098463de4c5d 204 rtos::Mutex _lock;
group-onsemi 0:098463de4c5d 205 };
group-onsemi 0:098463de4c5d 206
group-onsemi 0:098463de4c5d 207
group-onsemi 0:098463de4c5d 208 #endif
group-onsemi 0:098463de4c5d 209
group-onsemi 0:098463de4c5d 210 /** @}*/