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.
Diff: mbed-os/features/cellular/framework/AT/AT_CellularStack.h
- Revision:
- 0:2f0e1e23c242
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-os/features/cellular/framework/AT/AT_CellularStack.h Fri Apr 13 08:53:46 2018 +0000
@@ -0,0 +1,169 @@
+/*
+ * Copyright (c) 2017, Arm Limited and affiliates.
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * 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 AT_CELLULAR_STACK_H_
+#define AT_CELLULAR_STACK_H_
+
+#include "AT_CellularBase.h"
+#include "NetworkStack.h"
+
+namespace mbed {
+
+// <PDP_addr_1> and <PDP_addr_2>: each is a string type that identifies the MT in the address space applicable to the PDP.
+// The string is given as dot-separated numeric (0-255) parameter of the form:
+// a1.a2.a3.a4 for IPv4 and
+// a1.a2.a3.a4.a5.a6.a7.a8.a9.a10.a11.a12.a13.a14.a15.a16 for IPv6.
+#define PDP_IPV6_SIZE 63+1
+
+/**
+ * Class AT_CellularStack.
+ *
+ * Implements NetworkStack and introduces interface for modem specific stack implementations.
+ */
+class AT_CellularStack : public NetworkStack, public AT_CellularBase
+{
+
+public:
+ AT_CellularStack(ATHandler &at, int cid, nsapi_ip_stack_t stack_type);
+ virtual ~AT_CellularStack();
+
+public: // NetworkStack
+
+ virtual const char *get_ip_address();
+protected: // NetworkStack
+
+ virtual nsapi_error_t socket_open(nsapi_socket_t *handle, nsapi_protocol_t proto);
+
+ virtual nsapi_error_t socket_close(nsapi_socket_t handle);
+
+ virtual nsapi_error_t socket_bind(nsapi_socket_t handle, const SocketAddress &address);
+
+ virtual nsapi_error_t socket_listen(nsapi_socket_t handle, int backlog);
+
+ virtual nsapi_error_t socket_connect(nsapi_socket_t handle, const SocketAddress &address);
+
+ virtual nsapi_error_t socket_accept(nsapi_socket_t server,
+ nsapi_socket_t *handle, SocketAddress *address=0);
+
+ virtual nsapi_size_or_error_t socket_send(nsapi_socket_t handle,
+ const void *data, nsapi_size_t size);
+
+ virtual nsapi_size_or_error_t socket_recv(nsapi_socket_t handle,
+ void *data, nsapi_size_t size);
+
+ virtual nsapi_size_or_error_t socket_sendto(nsapi_socket_t handle, const SocketAddress &address,
+ const void *data, nsapi_size_t size);
+
+ virtual nsapi_size_or_error_t socket_recvfrom(nsapi_socket_t handle, SocketAddress *address,
+ void *buffer, nsapi_size_t size);
+
+ virtual void socket_attach(nsapi_socket_t handle, void (*callback)(void *), void *data);
+
+protected:
+
+ class CellularSocket
+ {
+ public:
+ // Socket id from cellular device
+ int id;
+ // Being connected means remote ip address and port are set
+ bool connected;
+ nsapi_protocol_t proto;
+ SocketAddress remoteAddress;
+ SocketAddress localAddress;
+ void (*_cb)(void *);
+ void *_data;
+ bool created;
+ bool rx_avail; // used to synchronize reading from modem
+ };
+
+ /**
+ * Gets maximum number of sockets modem supports
+ */
+ virtual int get_max_socket_count() = 0;
+
+ /**
+ * Gets maximum packet size
+ */
+ virtual int get_max_packet_size() = 0;
+
+ /**
+ * Checks if modem supports the given protocol
+ *
+ * @param protocol Protocol type
+ */
+ virtual bool is_protocol_supported(nsapi_protocol_t protocol) = 0;
+
+ /**
+ * Implements modem specific AT command set for socket closing
+ *
+ * @param sock_id Socket id
+ */
+ virtual nsapi_error_t socket_close_impl(int sock_id) = 0;
+
+ /**
+ * Implements modem specific AT command set for creating socket
+ *
+ * @param socket Cellular socket handle
+ */
+ virtual nsapi_error_t create_socket_impl(CellularSocket *socket) = 0;
+
+ /**
+ * Implements modem specific AT command set for sending data
+ *
+ * @param socket Cellular 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_impl(CellularSocket *socket, const SocketAddress &address,
+ const void *data, nsapi_size_t size) = 0;
+
+ /**
+ * Implements modem specific AT command set for receiving data
+ *
+ * @param socket Socket handle
+ * @param address Destination for the source address or NULL
+ * @param buffer 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_impl(CellularSocket *socket, SocketAddress *address,
+ void *buffer, nsapi_size_t size) = 0;
+
+ // socket container
+ CellularSocket **_socket;
+
+ // number of socket slots allocated in socket container
+ int _socket_count;
+
+ // IP address
+ char _ip[PDP_IPV6_SIZE];
+
+ // PDP context id
+ int _cid;
+
+ // stack type from PDP context
+ nsapi_ip_stack_t _stack_type;
+};
+
+} // namespace mbed
+
+#endif // AT_CELLULAR_STACK_H_