mbed-os5 only for TYBLE16

Dependents:   TYBLE16_simple_data_logger TYBLE16_MP3_Air

Committer:
kenjiArai
Date:
Tue Dec 31 06:02:27 2019 +0000
Revision:
1:9db0e321a9f4
Parent:
features/netsocket/cellular/CellularNonIPSocket.h@0:5b88d5760320
updated based on mbed-os5.15.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 0:5b88d5760320 1 /* CellularNonIPSocket
kenjiArai 0:5b88d5760320 2 * Copyright (c) 2015 ARM Limited
kenjiArai 0:5b88d5760320 3 *
kenjiArai 0:5b88d5760320 4 * Licensed under the Apache License, Version 2.0 (the "License");
kenjiArai 0:5b88d5760320 5 * you may not use this file except in compliance with the License.
kenjiArai 0:5b88d5760320 6 * You may obtain a copy of the License at
kenjiArai 0:5b88d5760320 7 *
kenjiArai 0:5b88d5760320 8 * http://www.apache.org/licenses/LICENSE-2.0
kenjiArai 0:5b88d5760320 9 *
kenjiArai 0:5b88d5760320 10 * Unless required by applicable law or agreed to in writing, software
kenjiArai 0:5b88d5760320 11 * distributed under the License is distributed on an "AS IS" BASIS,
kenjiArai 0:5b88d5760320 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
kenjiArai 0:5b88d5760320 13 * See the License for the specific language governing permissions and
kenjiArai 0:5b88d5760320 14 * limitations under the License.
kenjiArai 0:5b88d5760320 15 */
kenjiArai 0:5b88d5760320 16
kenjiArai 0:5b88d5760320 17 #ifndef CELLULARNONIPSOCKET_H
kenjiArai 0:5b88d5760320 18 #define CELLULARNONIPSOCKET_H
kenjiArai 0:5b88d5760320 19
kenjiArai 0:5b88d5760320 20 #include "netsocket/Socket.h"
kenjiArai 0:5b88d5760320 21 #include "rtos/Mutex.h"
kenjiArai 0:5b88d5760320 22 #include "rtos/EventFlags.h"
kenjiArai 0:5b88d5760320 23 #include "Callback.h"
kenjiArai 0:5b88d5760320 24 #include "mbed_toolchain.h"
kenjiArai 0:5b88d5760320 25 #include "ControlPlane_netif.h"
kenjiArai 0:5b88d5760320 26 #include "CellularContext.h"
kenjiArai 0:5b88d5760320 27
kenjiArai 0:5b88d5760320 28 namespace mbed {
kenjiArai 0:5b88d5760320 29
kenjiArai 0:5b88d5760320 30 /** \addtogroup netsocket */
kenjiArai 0:5b88d5760320 31 /** @{*/
kenjiArai 0:5b88d5760320 32
kenjiArai 0:5b88d5760320 33 /** Socket implementation for cellular Non-IP data delivery(NIDD).
kenjiArai 0:5b88d5760320 34 * Relies on Control Plane CIoT EPS optimization feature,
kenjiArai 0:5b88d5760320 35 * implemented in ControlPlane_netif class.
kenjiArai 0:5b88d5760320 36 */
kenjiArai 0:5b88d5760320 37 class CellularNonIPSocket : public Socket {
kenjiArai 0:5b88d5760320 38 public:
kenjiArai 0:5b88d5760320 39 /** Destroy the socket.
kenjiArai 0:5b88d5760320 40 *
kenjiArai 0:5b88d5760320 41 * @note Closes socket if it's still open.
kenjiArai 0:5b88d5760320 42 */
kenjiArai 0:5b88d5760320 43 virtual ~CellularNonIPSocket();
kenjiArai 0:5b88d5760320 44
kenjiArai 0:5b88d5760320 45 /** Creates a socket.
kenjiArai 0:5b88d5760320 46 */
kenjiArai 0:5b88d5760320 47 CellularNonIPSocket();
kenjiArai 0:5b88d5760320 48
kenjiArai 0:5b88d5760320 49 /** Opens a socket on the given cellular context.
kenjiArai 0:5b88d5760320 50 *
kenjiArai 0:5b88d5760320 51 * @param cellular_context Cellular PDP context over which this socket is sending and
kenjiArai 0:5b88d5760320 52 * receiving data. The context has support for providing
kenjiArai 0:5b88d5760320 53 * a control plane interface for data delivery.
kenjiArai 0:5b88d5760320 54 * @return NSAPI_ERROR_OK on success
kenjiArai 0:5b88d5760320 55 * NSAPI_ERROR_PARAMETER otherwise
kenjiArai 0:5b88d5760320 56 */
kenjiArai 0:5b88d5760320 57 virtual nsapi_error_t open(mbed::CellularContext *cellular_context);
kenjiArai 0:5b88d5760320 58
kenjiArai 0:5b88d5760320 59 /** Opens a socket that will use the given control plane interface for data delivery.
kenjiArai 0:5b88d5760320 60 * Attaches the event as callback to the control plane interface.
kenjiArai 0:5b88d5760320 61 *
kenjiArai 0:5b88d5760320 62 * @param cp_netif Control plane interface for data delivery.
kenjiArai 0:5b88d5760320 63 * @return NSAPI_ERROR_OK on success
kenjiArai 0:5b88d5760320 64 * NSAPI_ERROR_PARAMETER otherwise
kenjiArai 0:5b88d5760320 65 *
kenjiArai 0:5b88d5760320 66 */
kenjiArai 0:5b88d5760320 67 virtual nsapi_error_t open(mbed::ControlPlane_netif *cp_netif);
kenjiArai 0:5b88d5760320 68
kenjiArai 0:5b88d5760320 69 /** Closes socket
kenjiArai 0:5b88d5760320 70 *
kenjiArai 0:5b88d5760320 71 * @return NSAPI_ERROR_OK on success
kenjiArai 0:5b88d5760320 72 * NSAPI_ERROR_NO_SOCKET otherwise
kenjiArai 0:5b88d5760320 73 */
kenjiArai 0:5b88d5760320 74
kenjiArai 0:5b88d5760320 75 virtual nsapi_error_t close();
kenjiArai 0:5b88d5760320 76
kenjiArai 0:5b88d5760320 77 /** Send data over a control plane cellular context.
kenjiArai 0:5b88d5760320 78 *
kenjiArai 0:5b88d5760320 79 * By default, send blocks until all data is sent. If socket is set to
kenjiArai 0:5b88d5760320 80 * nonblocking or times out, a partial amount can be written.
kenjiArai 0:5b88d5760320 81 * NSAPI_ERROR_WOULD_BLOCK is returned if no data was written.
kenjiArai 0:5b88d5760320 82 *
kenjiArai 0:5b88d5760320 83 * @param data Buffer of data to be sent.
kenjiArai 0:5b88d5760320 84 * @param size Size of the buffer in bytes.
kenjiArai 0:5b88d5760320 85 * @return Number of sent bytes on success, negative error
kenjiArai 0:5b88d5760320 86 * code on failure.
kenjiArai 0:5b88d5760320 87 */
kenjiArai 0:5b88d5760320 88 virtual nsapi_size_or_error_t send(const void *data, nsapi_size_t size);
kenjiArai 0:5b88d5760320 89
kenjiArai 0:5b88d5760320 90 /** Receive data from a socket.
kenjiArai 0:5b88d5760320 91 *
kenjiArai 0:5b88d5760320 92 * By default, recv blocks until some data is received. If socket is set to
kenjiArai 0:5b88d5760320 93 * nonblocking or times out, NSAPI_ERROR_WOULD_BLOCK can be returned to
kenjiArai 0:5b88d5760320 94 * indicate no data.
kenjiArai 0:5b88d5760320 95 *
kenjiArai 0:5b88d5760320 96 * @param data Pointer to buffer for received data.
kenjiArai 0:5b88d5760320 97 * @param size Size of the buffer in bytes.
kenjiArai 0:5b88d5760320 98 * @return Number of received bytes on success, negative error
kenjiArai 0:5b88d5760320 99 * code on failure.
kenjiArai 0:5b88d5760320 100 */
kenjiArai 0:5b88d5760320 101 virtual nsapi_size_or_error_t recv(void *data, nsapi_size_t size);
kenjiArai 0:5b88d5760320 102
kenjiArai 0:5b88d5760320 103 /** @copydoc Socket::set_blocking
kenjiArai 0:5b88d5760320 104 */
kenjiArai 0:5b88d5760320 105 virtual void set_blocking(bool blocking);
kenjiArai 0:5b88d5760320 106
kenjiArai 0:5b88d5760320 107 /** @copydoc Socket::set_timeout
kenjiArai 0:5b88d5760320 108 */
kenjiArai 0:5b88d5760320 109 virtual void set_timeout(int timeout);
kenjiArai 0:5b88d5760320 110
kenjiArai 0:5b88d5760320 111 /** @copydoc Socket::sigio
kenjiArai 0:5b88d5760320 112 */
kenjiArai 0:5b88d5760320 113 virtual void sigio(mbed::Callback<void()> func);
kenjiArai 0:5b88d5760320 114
kenjiArai 0:5b88d5760320 115 /// NOT APPLICABLE
kenjiArai 0:5b88d5760320 116 virtual nsapi_error_t connect(const SocketAddress &address);
kenjiArai 0:5b88d5760320 117 /// NOT APPLICABLE
kenjiArai 0:5b88d5760320 118 virtual Socket *accept(nsapi_error_t *error = NULL);
kenjiArai 0:5b88d5760320 119 /// NOT APPLICABLE
kenjiArai 0:5b88d5760320 120 virtual nsapi_error_t listen(int backlog = 1);
kenjiArai 0:5b88d5760320 121 /// NOT APPLICABLE
kenjiArai 0:5b88d5760320 122 virtual nsapi_error_t setsockopt(int level, int optname, const void *optval, unsigned optlen);
kenjiArai 0:5b88d5760320 123 /// NOT APPLICABLE
kenjiArai 0:5b88d5760320 124 virtual nsapi_error_t getsockopt(int level, int optname, void *optval, unsigned *optlen);
kenjiArai 0:5b88d5760320 125 /// NOT APPLICABLE
kenjiArai 0:5b88d5760320 126 virtual nsapi_error_t getpeername(SocketAddress *address);
kenjiArai 0:5b88d5760320 127 /// NOT APPLICABLE
kenjiArai 0:5b88d5760320 128 virtual nsapi_size_or_error_t sendto(const SocketAddress &address,
kenjiArai 0:5b88d5760320 129 const void *data, nsapi_size_t size);
kenjiArai 0:5b88d5760320 130 /// NOT APPLICABLE
kenjiArai 0:5b88d5760320 131 virtual nsapi_size_or_error_t recvfrom(SocketAddress *address,
kenjiArai 0:5b88d5760320 132 void *data, nsapi_size_t size);
kenjiArai 0:5b88d5760320 133 /// NOT APPLICABLE
kenjiArai 0:5b88d5760320 134 virtual nsapi_error_t bind(const SocketAddress &address);
kenjiArai 0:5b88d5760320 135
kenjiArai 0:5b88d5760320 136 protected:
kenjiArai 0:5b88d5760320 137 virtual void event();
kenjiArai 0:5b88d5760320 138
kenjiArai 0:5b88d5760320 139 uint32_t _timeout;
kenjiArai 0:5b88d5760320 140 mbed::Callback<void()> _event;
kenjiArai 0:5b88d5760320 141 mbed::Callback<void()> _callback;
kenjiArai 0:5b88d5760320 142 rtos::EventFlags _event_flag;
kenjiArai 0:5b88d5760320 143 rtos::Mutex _lock;
kenjiArai 0:5b88d5760320 144 uint8_t _readers;
kenjiArai 0:5b88d5760320 145 uint8_t _writers;
kenjiArai 0:5b88d5760320 146 volatile unsigned _pending;
kenjiArai 0:5b88d5760320 147
kenjiArai 0:5b88d5760320 148 // Event flags
kenjiArai 0:5b88d5760320 149 static const int READ_FLAG = 0x1u;
kenjiArai 0:5b88d5760320 150 static const int WRITE_FLAG = 0x2u;
kenjiArai 0:5b88d5760320 151 static const int FINISHED_FLAG = 0x3u;
kenjiArai 0:5b88d5760320 152
kenjiArai 0:5b88d5760320 153 ControlPlane_netif *_cp_netif;
kenjiArai 0:5b88d5760320 154 bool _opened;
kenjiArai 0:5b88d5760320 155 };
kenjiArai 0:5b88d5760320 156
kenjiArai 0:5b88d5760320 157 /** @}*/
kenjiArai 0:5b88d5760320 158 } // namespace mbed
kenjiArai 0:5b88d5760320 159
kenjiArai 0:5b88d5760320 160 #endif // CELLULARNONIPSOCKET_H