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:
0:5b88d5760320
updated based on mbed-os5.15.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 0:5b88d5760320 1 /* mbed OS IP stack API
kenjiArai 0:5b88d5760320 2 * Copyright (c) 2015-2017 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 MBED_IPSTACK_H
kenjiArai 0:5b88d5760320 18 #define MBED_IPSTACK_H
kenjiArai 0:5b88d5760320 19
kenjiArai 0:5b88d5760320 20 #include "nsapi.h"
kenjiArai 0:5b88d5760320 21
kenjiArai 0:5b88d5760320 22 #include "NetworkStack.h"
kenjiArai 0:5b88d5760320 23 #include "EMAC.h"
kenjiArai 0:5b88d5760320 24 #include "L3IP.h"
kenjiArai 1:9db0e321a9f4 25 #include "PPP.h"
kenjiArai 0:5b88d5760320 26
kenjiArai 0:5b88d5760320 27 /**
kenjiArai 0:5b88d5760320 28 * mbed OS API for onboard IP stack abstraction
kenjiArai 0:5b88d5760320 29 *
kenjiArai 0:5b88d5760320 30 * This interface should be used by targets to initialize IP stack, create, bring up and bring down network interfaces.
kenjiArai 0:5b88d5760320 31 *
kenjiArai 0:5b88d5760320 32 * An onboard network stack has the potential ability to register interfaces
kenjiArai 0:5b88d5760320 33 * such as through EMAC, and has its own interface identifiers.
kenjiArai 0:5b88d5760320 34 */
kenjiArai 0:5b88d5760320 35 class OnboardNetworkStack : public NetworkStack {
kenjiArai 0:5b88d5760320 36 public:
kenjiArai 0:5b88d5760320 37 /** Return the default on-board network stack
kenjiArai 0:5b88d5760320 38 *
kenjiArai 0:5b88d5760320 39 * Returns the default on-board network stack, as configured by
kenjiArai 0:5b88d5760320 40 * JSON option nsapi.default-stack.
kenjiArai 0:5b88d5760320 41 */
kenjiArai 0:5b88d5760320 42 static OnboardNetworkStack &get_default_instance();
kenjiArai 0:5b88d5760320 43
kenjiArai 0:5b88d5760320 44 /** Representation of a stack's view of an interface.
kenjiArai 0:5b88d5760320 45 *
kenjiArai 0:5b88d5760320 46 * Provides facilities required by a driver to implement the application
kenjiArai 0:5b88d5760320 47 * NetworkInterface API.
kenjiArai 0:5b88d5760320 48 */
kenjiArai 0:5b88d5760320 49 class Interface {
kenjiArai 0:5b88d5760320 50 public:
kenjiArai 0:5b88d5760320 51 virtual ~Interface() {}
kenjiArai 0:5b88d5760320 52
kenjiArai 0:5b88d5760320 53 /** Connect the interface to the network
kenjiArai 0:5b88d5760320 54 *
kenjiArai 0:5b88d5760320 55 * Sets up a connection on specified network interface, using DHCP or provided network details. If the @a dhcp is set to
kenjiArai 0:5b88d5760320 56 * true all the remaining parameters are ignored.
kenjiArai 0:5b88d5760320 57 *
kenjiArai 0:5b88d5760320 58 * @param dhcp true if the network details should be acquired using DHCP
kenjiArai 0:5b88d5760320 59 * @param ip IP address to be used for the interface as "W:X:Y:Z" or NULL
kenjiArai 0:5b88d5760320 60 * @param netmask Net mask to be used for the interface as "W:X:Y:Z" or NULL
kenjiArai 0:5b88d5760320 61 * @param gw Gateway address to be used for the interface as "W:X:Y:Z" or NULL
kenjiArai 0:5b88d5760320 62 * @param stack Allow manual selection of IPv4 and/or IPv6.
kenjiArai 0:5b88d5760320 63 * @param blocking Specify whether bringup blocks for connection completion.
kenjiArai 0:5b88d5760320 64 * @return NSAPI_ERROR_OK on success, or error code
kenjiArai 0:5b88d5760320 65 */
kenjiArai 0:5b88d5760320 66 virtual nsapi_error_t bringup(bool dhcp, const char *ip,
kenjiArai 0:5b88d5760320 67 const char *netmask, const char *gw,
kenjiArai 0:5b88d5760320 68 nsapi_ip_stack_t stack = DEFAULT_STACK,
kenjiArai 0:5b88d5760320 69 bool blocking = true) = 0;
kenjiArai 0:5b88d5760320 70
kenjiArai 0:5b88d5760320 71 /** Disconnect interface from the network
kenjiArai 0:5b88d5760320 72 *
kenjiArai 0:5b88d5760320 73 * After this call the network interface is inactive, to use it again user needs to call @n bringup again.
kenjiArai 0:5b88d5760320 74 *
kenjiArai 0:5b88d5760320 75 * @return NSAPI_ERROR_OK on success, or error code
kenjiArai 0:5b88d5760320 76 */
kenjiArai 0:5b88d5760320 77 virtual nsapi_error_t bringdown() = 0;
kenjiArai 0:5b88d5760320 78
kenjiArai 0:5b88d5760320 79 /** Register callback for status reporting
kenjiArai 0:5b88d5760320 80 *
kenjiArai 0:5b88d5760320 81 * The specified status callback function will be called on status changes
kenjiArai 0:5b88d5760320 82 * on the network. The parameters on the callback are the event type and
kenjiArai 0:5b88d5760320 83 * event-type dependent reason parameter.
kenjiArai 0:5b88d5760320 84 *
kenjiArai 0:5b88d5760320 85 * @param status_cb The callback for status changes
kenjiArai 0:5b88d5760320 86 */
kenjiArai 0:5b88d5760320 87 virtual void attach(mbed::Callback<void(nsapi_event_t, intptr_t)> status_cb) = 0;
kenjiArai 0:5b88d5760320 88
kenjiArai 0:5b88d5760320 89 /** Get the connection status
kenjiArai 0:5b88d5760320 90 *
kenjiArai 0:5b88d5760320 91 * @return The connection status according to ConnectionStatusType
kenjiArai 0:5b88d5760320 92 */
kenjiArai 0:5b88d5760320 93
kenjiArai 0:5b88d5760320 94 virtual nsapi_connection_status_t get_connection_status() const = 0;
kenjiArai 0:5b88d5760320 95
kenjiArai 0:5b88d5760320 96 /** Returns interface name
kenjiArai 0:5b88d5760320 97 *
kenjiArai 0:5b88d5760320 98 * @return string containing name of network interface for example "en0"
kenjiArai 0:5b88d5760320 99 */
kenjiArai 0:5b88d5760320 100
kenjiArai 0:5b88d5760320 101 virtual char *get_interface_name(char *buf)
kenjiArai 0:5b88d5760320 102 {
kenjiArai 0:5b88d5760320 103 return NULL;
kenjiArai 0:5b88d5760320 104 };
kenjiArai 0:5b88d5760320 105 /** Return MAC address of the network interface
kenjiArai 0:5b88d5760320 106 *
kenjiArai 0:5b88d5760320 107 * @return MAC address as "V:W:X:Y:Z"
kenjiArai 0:5b88d5760320 108 */
kenjiArai 0:5b88d5760320 109
kenjiArai 0:5b88d5760320 110 virtual char *get_mac_address(char *buf, nsapi_size_t buflen) = 0;
kenjiArai 0:5b88d5760320 111
kenjiArai 1:9db0e321a9f4 112 /** @copydoc NetworkStack::get_ip_address */
kenjiArai 1:9db0e321a9f4 113 virtual nsapi_error_t get_ip_address(SocketAddress *address) = 0;
kenjiArai 0:5b88d5760320 114
kenjiArai 1:9db0e321a9f4 115 MBED_DEPRECATED_SINCE("mbed-os-5.15", "String-based APIs are deprecated")
kenjiArai 0:5b88d5760320 116 virtual char *get_ip_address(char *buf, nsapi_size_t buflen) = 0;
kenjiArai 0:5b88d5760320 117
kenjiArai 1:9db0e321a9f4 118 /** @copydoc NetworkStack::get_ipv6_link_local_address */
kenjiArai 1:9db0e321a9f4 119 virtual nsapi_error_t get_ipv6_link_local_address(SocketAddress *address)
kenjiArai 0:5b88d5760320 120 {
kenjiArai 1:9db0e321a9f4 121 return NSAPI_ERROR_UNSUPPORTED;
kenjiArai 1:9db0e321a9f4 122 }
kenjiArai 0:5b88d5760320 123
kenjiArai 1:9db0e321a9f4 124 /** @copydoc NetworkStack::get_netmask */
kenjiArai 1:9db0e321a9f4 125 virtual nsapi_error_t get_netmask(SocketAddress *address) = 0;
kenjiArai 1:9db0e321a9f4 126
kenjiArai 1:9db0e321a9f4 127 MBED_DEPRECATED_SINCE("mbed-os-5.15", "String-based APIs are deprecated")
kenjiArai 0:5b88d5760320 128 virtual char *get_netmask(char *buf, nsapi_size_t buflen) = 0;
kenjiArai 0:5b88d5760320 129
kenjiArai 1:9db0e321a9f4 130 /** @copydoc NetworkStack::get_gateway */
kenjiArai 1:9db0e321a9f4 131 virtual nsapi_error_t get_gateway(SocketAddress *address) = 0;
kenjiArai 1:9db0e321a9f4 132
kenjiArai 1:9db0e321a9f4 133 MBED_DEPRECATED_SINCE("mbed-os-5.15", "String-based APIs are deprecated")
kenjiArai 0:5b88d5760320 134 virtual char *get_gateway(char *buf, nsapi_size_t buflen) = 0;
kenjiArai 0:5b88d5760320 135 };
kenjiArai 0:5b88d5760320 136
kenjiArai 0:5b88d5760320 137 /** Register a network interface with the IP stack
kenjiArai 0:5b88d5760320 138 *
kenjiArai 0:5b88d5760320 139 * Connects EMAC layer with the IP stack and initializes all the required infrastructure.
kenjiArai 0:5b88d5760320 140 * This function should be called only once for each available interface. EMAC memory
kenjiArai 0:5b88d5760320 141 * manager is available to EMAC after this function call.
kenjiArai 0:5b88d5760320 142 *
kenjiArai 0:5b88d5760320 143 * @param emac EMAC HAL implementation for this network interface
kenjiArai 0:5b88d5760320 144 * @param default_if true if the interface should be treated as the default one
kenjiArai 0:5b88d5760320 145 * @param[out] interface_out pointer to stack interface object controlling the EMAC
kenjiArai 0:5b88d5760320 146 * @return NSAPI_ERROR_OK on success, or error code
kenjiArai 0:5b88d5760320 147 */
kenjiArai 0:5b88d5760320 148 virtual nsapi_error_t add_ethernet_interface(EMAC &emac, bool default_if, Interface **interface_out) = 0;
kenjiArai 0:5b88d5760320 149
kenjiArai 0:5b88d5760320 150 virtual nsapi_error_t add_l3ip_interface(L3IP &l3ip, bool default_if, Interface **interface_out)
kenjiArai 0:5b88d5760320 151 {
kenjiArai 0:5b88d5760320 152 return NSAPI_ERROR_OK;
kenjiArai 0:5b88d5760320 153 };
kenjiArai 0:5b88d5760320 154
kenjiArai 1:9db0e321a9f4 155 virtual nsapi_error_t add_ppp_interface(PPP &ppp, bool default_if, Interface **interface_out)
kenjiArai 1:9db0e321a9f4 156 {
kenjiArai 1:9db0e321a9f4 157 return NSAPI_ERROR_UNSUPPORTED;
kenjiArai 1:9db0e321a9f4 158 };
kenjiArai 1:9db0e321a9f4 159
kenjiArai 0:5b88d5760320 160 virtual nsapi_error_t remove_l3ip_interface(Interface **interface_out)
kenjiArai 0:5b88d5760320 161 {
kenjiArai 0:5b88d5760320 162 return NSAPI_ERROR_OK;
kenjiArai 0:5b88d5760320 163 };
kenjiArai 0:5b88d5760320 164
kenjiArai 1:9db0e321a9f4 165 virtual nsapi_error_t remove_ppp_interface(Interface **interface_out)
kenjiArai 1:9db0e321a9f4 166 {
kenjiArai 1:9db0e321a9f4 167 return NSAPI_ERROR_UNSUPPORTED;
kenjiArai 1:9db0e321a9f4 168 };
kenjiArai 1:9db0e321a9f4 169
kenjiArai 0:5b88d5760320 170 virtual void set_default_interface(OnboardNetworkStack::Interface *interface)
kenjiArai 0:5b88d5760320 171 {
kenjiArai 0:5b88d5760320 172 }
kenjiArai 0:5b88d5760320 173
kenjiArai 0:5b88d5760320 174 };
kenjiArai 0:5b88d5760320 175
kenjiArai 0:5b88d5760320 176 #endif /* MBED_IPSTACK_H */