mbed-os5 only for TYBLE16

Dependents:   TYBLE16_simple_data_logger TYBLE16_MP3_Air

Committer:
kenjiArai
Date:
Tue Dec 17 23:23:45 2019 +0000
Revision:
0:5b88d5760320
Child:
1:9db0e321a9f4
mbed-os5 only for TYBLE16

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