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 /* Socket
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 #include "ns_list.h"
kenjiArai 0:5b88d5760320 18 #include "netsocket/NetworkInterface.h"
kenjiArai 0:5b88d5760320 19 #include "netsocket/NetworkStack.h"
kenjiArai 0:5b88d5760320 20 #include "platform/Callback.h"
kenjiArai 0:5b88d5760320 21 #include "platform/mbed_error.h"
kenjiArai 0:5b88d5760320 22 #include <string.h>
kenjiArai 0:5b88d5760320 23
kenjiArai 0:5b88d5760320 24 // Default network-interface state
kenjiArai 0:5b88d5760320 25 void NetworkInterface::set_as_default()
kenjiArai 0:5b88d5760320 26 {
kenjiArai 0:5b88d5760320 27
kenjiArai 0:5b88d5760320 28 }
kenjiArai 0:5b88d5760320 29
kenjiArai 0:5b88d5760320 30 const char *NetworkInterface::get_mac_address()
kenjiArai 0:5b88d5760320 31 {
kenjiArai 0:5b88d5760320 32 return 0;
kenjiArai 0:5b88d5760320 33 }
kenjiArai 0:5b88d5760320 34
kenjiArai 1:9db0e321a9f4 35 nsapi_error_t NetworkInterface::get_ip_address(SocketAddress *)
kenjiArai 1:9db0e321a9f4 36 {
kenjiArai 1:9db0e321a9f4 37 return NSAPI_ERROR_UNSUPPORTED;
kenjiArai 1:9db0e321a9f4 38 }
kenjiArai 1:9db0e321a9f4 39
kenjiArai 0:5b88d5760320 40 const char *NetworkInterface::get_ip_address()
kenjiArai 0:5b88d5760320 41 {
kenjiArai 1:9db0e321a9f4 42 return nullptr;
kenjiArai 1:9db0e321a9f4 43 }
kenjiArai 1:9db0e321a9f4 44
kenjiArai 1:9db0e321a9f4 45 nsapi_error_t NetworkInterface::get_ipv6_link_local_address(SocketAddress *address)
kenjiArai 1:9db0e321a9f4 46 {
kenjiArai 1:9db0e321a9f4 47 return NSAPI_ERROR_UNSUPPORTED;
kenjiArai 1:9db0e321a9f4 48 }
kenjiArai 1:9db0e321a9f4 49
kenjiArai 1:9db0e321a9f4 50 nsapi_error_t NetworkInterface::get_netmask(SocketAddress *)
kenjiArai 1:9db0e321a9f4 51 {
kenjiArai 1:9db0e321a9f4 52 return NSAPI_ERROR_UNSUPPORTED;
kenjiArai 0:5b88d5760320 53 }
kenjiArai 0:5b88d5760320 54
kenjiArai 0:5b88d5760320 55 const char *NetworkInterface::get_netmask()
kenjiArai 0:5b88d5760320 56 {
kenjiArai 1:9db0e321a9f4 57 return nullptr;
kenjiArai 1:9db0e321a9f4 58 }
kenjiArai 1:9db0e321a9f4 59
kenjiArai 1:9db0e321a9f4 60 nsapi_error_t NetworkInterface::get_gateway(SocketAddress *)
kenjiArai 1:9db0e321a9f4 61 {
kenjiArai 1:9db0e321a9f4 62 return NSAPI_ERROR_UNSUPPORTED;
kenjiArai 0:5b88d5760320 63 }
kenjiArai 0:5b88d5760320 64
kenjiArai 0:5b88d5760320 65 const char *NetworkInterface::get_gateway()
kenjiArai 0:5b88d5760320 66 {
kenjiArai 1:9db0e321a9f4 67 return nullptr;
kenjiArai 0:5b88d5760320 68 }
kenjiArai 0:5b88d5760320 69
kenjiArai 0:5b88d5760320 70 char *NetworkInterface::get_interface_name(char *interface_name)
kenjiArai 0:5b88d5760320 71 {
kenjiArai 0:5b88d5760320 72 return 0;
kenjiArai 0:5b88d5760320 73 }
kenjiArai 0:5b88d5760320 74
kenjiArai 0:5b88d5760320 75 nsapi_error_t NetworkInterface::set_network(const char *ip_address, const char *netmask, const char *gateway)
kenjiArai 0:5b88d5760320 76 {
kenjiArai 0:5b88d5760320 77 return NSAPI_ERROR_UNSUPPORTED;
kenjiArai 0:5b88d5760320 78 }
kenjiArai 0:5b88d5760320 79
kenjiArai 1:9db0e321a9f4 80 nsapi_error_t NetworkInterface::set_network(const SocketAddress &ip_address, const SocketAddress &netmask, const SocketAddress &gateway)
kenjiArai 1:9db0e321a9f4 81 {
kenjiArai 1:9db0e321a9f4 82 return NSAPI_ERROR_UNSUPPORTED;
kenjiArai 1:9db0e321a9f4 83 }
kenjiArai 1:9db0e321a9f4 84
kenjiArai 0:5b88d5760320 85 nsapi_error_t NetworkInterface::set_dhcp(bool dhcp)
kenjiArai 0:5b88d5760320 86 {
kenjiArai 0:5b88d5760320 87 if (!dhcp) {
kenjiArai 0:5b88d5760320 88 return NSAPI_ERROR_UNSUPPORTED;
kenjiArai 0:5b88d5760320 89 } else {
kenjiArai 0:5b88d5760320 90 return NSAPI_ERROR_OK;
kenjiArai 0:5b88d5760320 91 }
kenjiArai 0:5b88d5760320 92 }
kenjiArai 0:5b88d5760320 93
kenjiArai 0:5b88d5760320 94 nsapi_error_t NetworkInterface::gethostbyname(const char *name, SocketAddress *address, nsapi_version_t version, const char *interface_name)
kenjiArai 0:5b88d5760320 95 {
kenjiArai 0:5b88d5760320 96 return get_stack()->gethostbyname(name, address, version, interface_name);
kenjiArai 0:5b88d5760320 97 }
kenjiArai 0:5b88d5760320 98
kenjiArai 0:5b88d5760320 99 nsapi_value_or_error_t NetworkInterface::gethostbyname_async(const char *host, hostbyname_cb_t callback, nsapi_version_t version, const char *interface_name)
kenjiArai 0:5b88d5760320 100 {
kenjiArai 0:5b88d5760320 101 return get_stack()->gethostbyname_async(host, callback, version, interface_name);
kenjiArai 0:5b88d5760320 102 }
kenjiArai 0:5b88d5760320 103
kenjiArai 0:5b88d5760320 104 nsapi_error_t NetworkInterface::gethostbyname_async_cancel(int id)
kenjiArai 0:5b88d5760320 105 {
kenjiArai 0:5b88d5760320 106 return get_stack()->gethostbyname_async_cancel(id);
kenjiArai 0:5b88d5760320 107 }
kenjiArai 0:5b88d5760320 108
kenjiArai 0:5b88d5760320 109 nsapi_error_t NetworkInterface::add_dns_server(const SocketAddress &address, const char *interface_name)
kenjiArai 0:5b88d5760320 110 {
kenjiArai 0:5b88d5760320 111 return get_stack()->add_dns_server(address, interface_name);
kenjiArai 0:5b88d5760320 112 }
kenjiArai 0:5b88d5760320 113
kenjiArai 0:5b88d5760320 114 void NetworkInterface::attach(mbed::Callback<void(nsapi_event_t, intptr_t)> status_cb)
kenjiArai 0:5b88d5760320 115 {
kenjiArai 0:5b88d5760320 116 // Dummy, that needs to be overwritten when inherited, but cannot be removed
kenjiArai 0:5b88d5760320 117 // because suplied previously and can be referred from binaries.
kenjiArai 0:5b88d5760320 118 }
kenjiArai 0:5b88d5760320 119
kenjiArai 0:5b88d5760320 120 typedef struct iface_eventlist_entry {
kenjiArai 0:5b88d5760320 121 NetworkInterface *iface;
kenjiArai 0:5b88d5760320 122 mbed::Callback<void(nsapi_event_t, intptr_t)> status_cb;
kenjiArai 0:5b88d5760320 123 ns_list_link_t link;
kenjiArai 0:5b88d5760320 124 } iface_eventlist_entry_t;
kenjiArai 0:5b88d5760320 125
kenjiArai 0:5b88d5760320 126 typedef NS_LIST_HEAD(iface_eventlist_entry_t, link) iface_eventlist_t;
kenjiArai 0:5b88d5760320 127
kenjiArai 0:5b88d5760320 128 static iface_eventlist_t *get_interface_event_list_head()
kenjiArai 0:5b88d5760320 129 {
kenjiArai 0:5b88d5760320 130 static iface_eventlist_t NS_LIST_NAME_INIT(event_list);
kenjiArai 0:5b88d5760320 131 return &event_list;
kenjiArai 0:5b88d5760320 132 }
kenjiArai 0:5b88d5760320 133
kenjiArai 0:5b88d5760320 134 static void call_all_event_listeners(NetworkInterface *iface, nsapi_event_t event, intptr_t val)
kenjiArai 0:5b88d5760320 135 {
kenjiArai 0:5b88d5760320 136 iface_eventlist_t *event_list = get_interface_event_list_head();
kenjiArai 0:5b88d5760320 137 ns_list_foreach(iface_eventlist_entry_t, entry, event_list) {
kenjiArai 0:5b88d5760320 138 if (entry->iface == iface) {
kenjiArai 0:5b88d5760320 139 entry->status_cb(event, val);
kenjiArai 0:5b88d5760320 140 }
kenjiArai 0:5b88d5760320 141 }
kenjiArai 0:5b88d5760320 142 }
kenjiArai 0:5b88d5760320 143
kenjiArai 0:5b88d5760320 144 void NetworkInterface::add_event_listener(mbed::Callback<void(nsapi_event_t, intptr_t)> status_cb)
kenjiArai 0:5b88d5760320 145 {
kenjiArai 0:5b88d5760320 146 iface_eventlist_t *event_list = get_interface_event_list_head();
kenjiArai 0:5b88d5760320 147 iface_eventlist_entry_t *entry = new iface_eventlist_entry_t;
kenjiArai 0:5b88d5760320 148 entry->iface = this;
kenjiArai 0:5b88d5760320 149 entry->status_cb = status_cb;
kenjiArai 0:5b88d5760320 150 ns_list_add_to_end(event_list, entry);
kenjiArai 0:5b88d5760320 151 attach(mbed::callback(&call_all_event_listeners, this));
kenjiArai 0:5b88d5760320 152 }
kenjiArai 0:5b88d5760320 153
kenjiArai 0:5b88d5760320 154 void NetworkInterface::remove_event_listener(mbed::Callback<void(nsapi_event_t, intptr_t)> status_cb)
kenjiArai 0:5b88d5760320 155 {
kenjiArai 0:5b88d5760320 156 iface_eventlist_t *event_list = get_interface_event_list_head();
kenjiArai 0:5b88d5760320 157 ns_list_foreach_safe(iface_eventlist_entry_t, entry, event_list) {
kenjiArai 0:5b88d5760320 158 if (entry->status_cb == status_cb && entry->iface == this) {
kenjiArai 0:5b88d5760320 159 ns_list_remove(event_list, entry);
kenjiArai 0:5b88d5760320 160 delete entry;
kenjiArai 0:5b88d5760320 161 return;
kenjiArai 0:5b88d5760320 162 }
kenjiArai 0:5b88d5760320 163 }
kenjiArai 0:5b88d5760320 164 }
kenjiArai 0:5b88d5760320 165
kenjiArai 0:5b88d5760320 166 NetworkInterface::~NetworkInterface()
kenjiArai 0:5b88d5760320 167 {
kenjiArai 0:5b88d5760320 168 iface_eventlist_t *event_list = get_interface_event_list_head();
kenjiArai 0:5b88d5760320 169 ns_list_foreach_safe(iface_eventlist_entry_t, entry, event_list) {
kenjiArai 0:5b88d5760320 170 if (entry->iface == this) {
kenjiArai 0:5b88d5760320 171 ns_list_remove(event_list, entry);
kenjiArai 1:9db0e321a9f4 172 delete entry;
kenjiArai 0:5b88d5760320 173 }
kenjiArai 0:5b88d5760320 174 }
kenjiArai 0:5b88d5760320 175 }
kenjiArai 0:5b88d5760320 176
kenjiArai 0:5b88d5760320 177 nsapi_connection_status_t NetworkInterface::get_connection_status() const
kenjiArai 0:5b88d5760320 178 {
kenjiArai 0:5b88d5760320 179 return NSAPI_STATUS_ERROR_UNSUPPORTED;
kenjiArai 0:5b88d5760320 180 }
kenjiArai 0:5b88d5760320 181
kenjiArai 0:5b88d5760320 182 nsapi_error_t NetworkInterface::set_blocking(bool blocking)
kenjiArai 0:5b88d5760320 183 {
kenjiArai 0:5b88d5760320 184 return NSAPI_ERROR_UNSUPPORTED;
kenjiArai 0:5b88d5760320 185 }
kenjiArai 0:5b88d5760320 186