Modified version of easy-connect for W5500 Ethernet components
Dependents: http-webserver-example mbed-os-example-sockets
Fork of easy-connect by
easy-connect.cpp@7:15287721e11b, 2018-08-13 (annotated)
- Committer:
- Bongjun
- Date:
- Mon Aug 13 08:59:16 2018 +0000
- Revision:
- 7:15287721e11b
- Parent:
- 6:307d527714cf
moved to init mac and dhcp functions into W5500Interface
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Bongjun | 1:5af739d06652 | 1 | /* |
Bongjun | 1:5af739d06652 | 2 | * FILE: easy-connect.cpp |
Bongjun | 1:5af739d06652 | 3 | * |
Bongjun | 1:5af739d06652 | 4 | * Copyright (c) 2015 - 2017 ARM Limited. All rights reserved. |
Bongjun | 1:5af739d06652 | 5 | * SPDX-License-Identifier: Apache-2.0 |
Bongjun | 1:5af739d06652 | 6 | * Licensed under the Apache License, Version 2.0 (the License); you may |
Bongjun | 1:5af739d06652 | 7 | * not use this file except in compliance with the License. |
Bongjun | 1:5af739d06652 | 8 | * You may obtain a copy of the License at |
Bongjun | 1:5af739d06652 | 9 | * |
Bongjun | 1:5af739d06652 | 10 | * http://www.apache.org/licenses/LICENSE-2.0 |
Bongjun | 1:5af739d06652 | 11 | * |
Bongjun | 1:5af739d06652 | 12 | * Unless required by applicable law or agreed to in writing, software |
Bongjun | 1:5af739d06652 | 13 | * distributed under the License is distributed on an AS IS BASIS, WITHOUT |
Bongjun | 1:5af739d06652 | 14 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
Bongjun | 1:5af739d06652 | 15 | * See the License for the specific language governing permissions and |
Bongjun | 1:5af739d06652 | 16 | * limitations under the License. |
Bongjun | 1:5af739d06652 | 17 | */ |
Bongjun | 1:5af739d06652 | 18 | |
Bongjun | 1:5af739d06652 | 19 | #include "mbed.h" |
Bongjun | 1:5af739d06652 | 20 | #include "easy-connect.h" |
Bongjun | 1:5af739d06652 | 21 | |
Bongjun | 1:5af739d06652 | 22 | /* |
Bongjun | 1:5af739d06652 | 23 | * Instantiate the configured network interface |
Bongjun | 1:5af739d06652 | 24 | */ |
Bongjun | 1:5af739d06652 | 25 | #if MBED_CONF_APP_NETWORK_INTERFACE == WIFI_ESP8266 |
Bongjun | 1:5af739d06652 | 26 | #include "ESP8266Interface.h" |
Bongjun | 1:5af739d06652 | 27 | #define EASY_CONNECT_WIFI_TYPE "ESP8266" |
Bongjun | 1:5af739d06652 | 28 | |
Bongjun | 1:5af739d06652 | 29 | #ifdef MBED_CONF_APP_ESP8266_DEBUG |
Bongjun | 1:5af739d06652 | 30 | ESP8266Interface wifi(MBED_CONF_EASY_CONNECT_WIFI_ESP8266_TX, MBED_CONF_EASY_CONNECT_WIFI_ESP8266_RX, MBED_CONF_EASY_CONNECT_WIFI_ESP8266_DEBUG); |
Bongjun | 1:5af739d06652 | 31 | #else |
Bongjun | 1:5af739d06652 | 32 | ESP8266Interface wifi(MBED_CONF_EASY_CONNECT_WIFI_ESP8266_TX, MBED_CONF_EASY_CONNECT_WIFI_ESP8266_RX); |
Bongjun | 1:5af739d06652 | 33 | #endif |
Bongjun | 1:5af739d06652 | 34 | |
Bongjun | 1:5af739d06652 | 35 | #elif MBED_CONF_APP_NETWORK_INTERFACE == WIFI_ODIN |
Bongjun | 1:5af739d06652 | 36 | #define EASY_CONNECT_WIFI_TYPE "Odin" |
Bongjun | 1:5af739d06652 | 37 | #include "OdinWiFiInterface.h" |
Bongjun | 1:5af739d06652 | 38 | OdinWiFiInterface wifi; |
Bongjun | 1:5af739d06652 | 39 | |
Bongjun | 1:5af739d06652 | 40 | #elif MBED_CONF_APP_NETWORK_INTERFACE == WIFI_RTW |
Bongjun | 1:5af739d06652 | 41 | #define EASY_CONNECT_WIFI_TYPE "RTW" |
Bongjun | 1:5af739d06652 | 42 | #include "RTWInterface.h" |
Bongjun | 1:5af739d06652 | 43 | RTWInterface wifi; |
Bongjun | 1:5af739d06652 | 44 | |
Bongjun | 1:5af739d06652 | 45 | #elif MBED_CONF_APP_NETWORK_INTERFACE == WIFI_IDW0XX1 |
Bongjun | 1:5af739d06652 | 46 | #include "SpwfSAInterface.h" |
Bongjun | 1:5af739d06652 | 47 | |
Bongjun | 1:5af739d06652 | 48 | #if MBED_CONF_IDW0XX1_EXPANSION_BOARD == IDW01M1 |
Bongjun | 1:5af739d06652 | 49 | #define EASY_CONNECT_WIFI_TYPE "IDW01M1" |
Bongjun | 1:5af739d06652 | 50 | SpwfSAInterface wifi(MBED_CONF_EASY_CONNECT_WIFI_IDW01M1_TX, MBED_CONF_EASY_CONNECT_WIFI_IDW01M1_RX); |
Bongjun | 1:5af739d06652 | 51 | #endif // MBED_CONF_IDW0XX1_EXPANSION_BOARD == IDW01M1 |
Bongjun | 1:5af739d06652 | 52 | |
Bongjun | 1:5af739d06652 | 53 | #if MBED_CONF_IDW0XX1_EXPANSION_BOARD == IDW04A1 |
Bongjun | 1:5af739d06652 | 54 | #define EASY_CONNECT_WIFI_TYPE "IDW04A1" |
Bongjun | 1:5af739d06652 | 55 | SpwfSAInterface wifi(MBED_CONF_EASY_CONNECT_WIFI_IDW04A1_TX, MBED_CONF_EASY_CONNECT_WIFI_IDW04A1_RX); |
Bongjun | 1:5af739d06652 | 56 | #endif // MBED_CONF_IDW0XX1_EXPANSION_BOARD == IDW04A1 |
Bongjun | 1:5af739d06652 | 57 | |
Bongjun | 1:5af739d06652 | 58 | #elif MBED_CONF_APP_NETWORK_INTERFACE == WIFI_ISM43362 |
Bongjun | 1:5af739d06652 | 59 | #include "ISM43362Interface.h" |
Bongjun | 1:5af739d06652 | 60 | #define EASY_CONNECT_WIFI_TYPE "ISM43362" |
Bongjun | 1:5af739d06652 | 61 | |
Bongjun | 1:5af739d06652 | 62 | #ifdef MBED_CONF_APP_ISM43362_DEBUG |
Bongjun | 1:5af739d06652 | 63 | ISM43362Interface wifi(true); |
Bongjun | 1:5af739d06652 | 64 | #else |
Bongjun | 1:5af739d06652 | 65 | ISM43362Interface wifi; |
Bongjun | 1:5af739d06652 | 66 | #endif |
Bongjun | 1:5af739d06652 | 67 | |
Bongjun | 1:5af739d06652 | 68 | #elif MBED_CONF_APP_NETWORK_INTERFACE == ETHERNET |
Bongjun | 1:5af739d06652 | 69 | #include "EthernetInterface.h" |
Bongjun | 1:5af739d06652 | 70 | EthernetInterface eth; |
Bongjun | 1:5af739d06652 | 71 | |
Bongjun | 1:5af739d06652 | 72 | #elif MBED_CONF_APP_NETWORK_INTERFACE == MESH_LOWPAN_ND |
Bongjun | 1:5af739d06652 | 73 | #define EASY_CONNECT_MESH |
Bongjun | 1:5af739d06652 | 74 | #include "NanostackInterface.h" |
Bongjun | 1:5af739d06652 | 75 | LoWPANNDInterface mesh; |
Bongjun | 1:5af739d06652 | 76 | |
Bongjun | 1:5af739d06652 | 77 | #elif MBED_CONF_APP_NETWORK_INTERFACE == MESH_THREAD |
Bongjun | 1:5af739d06652 | 78 | #define EASY_CONNECT_MESH |
Bongjun | 1:5af739d06652 | 79 | #include "NanostackInterface.h" |
Bongjun | 1:5af739d06652 | 80 | ThreadInterface mesh; |
Bongjun | 1:5af739d06652 | 81 | |
Bongjun | 1:5af739d06652 | 82 | #elif MBED_CONF_APP_NETWORK_INTERFACE == CELLULAR_ONBOARD |
Bongjun | 1:5af739d06652 | 83 | #include "OnboardCellularInterface.h" |
Bongjun | 1:5af739d06652 | 84 | OnboardCellularInterface cellular; |
Bongjun | 1:5af739d06652 | 85 | |
Bongjun | 1:5af739d06652 | 86 | #elif MBED_CONF_APP_NETWORK_INTERFACE == CELLULAR |
Bongjun | 1:5af739d06652 | 87 | #include "EasyCellularConnection.h" |
Bongjun | 1:5af739d06652 | 88 | EasyCellularConnection cellular; |
Bongjun | 1:5af739d06652 | 89 | |
Bongjun | 1:5af739d06652 | 90 | #elif MBED_CONF_APP_NETWORK_INTERFACE == WIFI_WIZFI310 |
Bongjun | 1:5af739d06652 | 91 | #include "WizFi310Interface.h" |
Bongjun | 1:5af739d06652 | 92 | #define EASY_CONNECT_WIFI_TYPE "WizFi310" |
Bongjun | 1:5af739d06652 | 93 | |
Bongjun | 1:5af739d06652 | 94 | #ifdef MBED_CONF_APP_WIZFI310_DEBUG |
Bongjun | 1:5af739d06652 | 95 | WizFi310Interface wifi(MBED_CONF_EASY_CONNECT_WIFI_WIZFI310_TX, MBED_CONF_EASY_CONNECT_WIFI_WIZFI310_RX, MBED_CONF_EASY_CONNECT_WIFI_WIZFI310_DEBUG); |
Bongjun | 1:5af739d06652 | 96 | #else |
Bongjun | 1:5af739d06652 | 97 | WizFi310Interface wifi(MBED_CONF_EASY_CONNECT_WIFI_WIZFI310_TX, MBED_CONF_EASY_CONNECT_WIFI_WIZFI310_RX); |
Bongjun | 1:5af739d06652 | 98 | #endif |
Bongjun | 1:5af739d06652 | 99 | |
Bongjun | 1:5af739d06652 | 100 | #elif MBED_CONF_APP_NETWORK_INTERFACE == CELLULAR_WNC14A2A |
Bongjun | 1:5af739d06652 | 101 | #include "WNC14A2AInterface.h" |
Bongjun | 1:5af739d06652 | 102 | |
Bongjun | 1:5af739d06652 | 103 | #if MBED_CONF_APP_WNC_DEBUG == true |
Bongjun | 1:5af739d06652 | 104 | #include "WNCDebug.h" |
Bongjun | 1:5af739d06652 | 105 | WNCDebug dbgout(stderr); |
Bongjun | 1:5af739d06652 | 106 | WNC14A2AInterface wnc(&dbgout); |
Bongjun | 1:5af739d06652 | 107 | #else |
Bongjun | 1:5af739d06652 | 108 | WNC14A2AInterface wnc; |
Bongjun | 1:5af739d06652 | 109 | #endif |
Bongjun | 1:5af739d06652 | 110 | |
Bongjun | 1:5af739d06652 | 111 | |
Bongjun | 1:5af739d06652 | 112 | #elif MBED_CONF_APP_NETWORK_INTERFACE == ETHERNET_W5500 |
Bongjun | 4:a6b064717635 | 113 | |
Bongjun | 3:1c6ff32e7b69 | 114 | #include "W5500Interface/W5500Interface.h" |
Bongjun | 4:a6b064717635 | 115 | W5500Interface eth(W5500_SPI_MOSI,W5500_SPI_MISO,W5500_SPI_SCLK, W5500_SPI_CS, W5500_SPI_RST); // mosi, miso, sclk, cs, reset |
Bongjun | 4:a6b064717635 | 116 | |
Bongjun | 1:5af739d06652 | 117 | #else |
Bongjun | 1:5af739d06652 | 118 | #error "No connectivity method chosen. Please add 'config.network-interfaces.value' to your mbed_app.json (see README.md for more information)." |
Bongjun | 1:5af739d06652 | 119 | #endif // MBED_CONF_APP_NETWORK_INTERFACE |
Bongjun | 1:5af739d06652 | 120 | |
Bongjun | 1:5af739d06652 | 121 | /* |
Bongjun | 1:5af739d06652 | 122 | * In case of Mesh, instantiate the configured RF PHY. |
Bongjun | 1:5af739d06652 | 123 | */ |
Bongjun | 1:5af739d06652 | 124 | #if defined (EASY_CONNECT_MESH) |
Bongjun | 1:5af739d06652 | 125 | #if MBED_CONF_APP_MESH_RADIO_TYPE == ATMEL |
Bongjun | 1:5af739d06652 | 126 | #include "NanostackRfPhyAtmel.h" |
Bongjun | 1:5af739d06652 | 127 | #define EASY_CONNECT_MESH_TYPE "Atmel" |
Bongjun | 1:5af739d06652 | 128 | NanostackRfPhyAtmel rf_phy(ATMEL_SPI_MOSI, ATMEL_SPI_MISO, ATMEL_SPI_SCLK, ATMEL_SPI_CS, |
Bongjun | 1:5af739d06652 | 129 | ATMEL_SPI_RST, ATMEL_SPI_SLP, ATMEL_SPI_IRQ, ATMEL_I2C_SDA, ATMEL_I2C_SCL); |
Bongjun | 1:5af739d06652 | 130 | |
Bongjun | 1:5af739d06652 | 131 | #elif MBED_CONF_APP_MESH_RADIO_TYPE == MCR20 |
Bongjun | 1:5af739d06652 | 132 | #include "NanostackRfPhyMcr20a.h" |
Bongjun | 1:5af739d06652 | 133 | #define EASY_CONNECT_MESH_TYPE "Mcr20A" |
Bongjun | 1:5af739d06652 | 134 | NanostackRfPhyMcr20a rf_phy(MCR20A_SPI_MOSI, MCR20A_SPI_MISO, MCR20A_SPI_SCLK, MCR20A_SPI_CS, MCR20A_SPI_RST, MCR20A_SPI_IRQ); |
Bongjun | 1:5af739d06652 | 135 | |
Bongjun | 1:5af739d06652 | 136 | #elif MBED_CONF_APP_MESH_RADIO_TYPE == SPIRIT1 |
Bongjun | 1:5af739d06652 | 137 | #include "NanostackRfPhySpirit1.h" |
Bongjun | 1:5af739d06652 | 138 | #define EASY_CONNECT_MESH_TYPE "Spirit1" |
Bongjun | 1:5af739d06652 | 139 | NanostackRfPhySpirit1 rf_phy(SPIRIT1_SPI_MOSI, SPIRIT1_SPI_MISO, SPIRIT1_SPI_SCLK, |
Bongjun | 1:5af739d06652 | 140 | SPIRIT1_DEV_IRQ, SPIRIT1_DEV_CS, SPIRIT1_DEV_SDN, SPIRIT1_BRD_LED); |
Bongjun | 1:5af739d06652 | 141 | |
Bongjun | 1:5af739d06652 | 142 | #elif MBED_CONF_APP_MESH_RADIO_TYPE == EFR32 |
Bongjun | 1:5af739d06652 | 143 | #include "NanostackRfPhyEfr32.h" |
Bongjun | 1:5af739d06652 | 144 | #define EASY_CONNECT_MESH_TYPE "EFR32" |
Bongjun | 1:5af739d06652 | 145 | NanostackRfPhyEfr32 rf_phy; |
Bongjun | 1:5af739d06652 | 146 | |
Bongjun | 1:5af739d06652 | 147 | #endif // MBED_CONF_APP_RADIO_TYPE |
Bongjun | 1:5af739d06652 | 148 | #endif // EASY_CONNECT_MESH |
Bongjun | 1:5af739d06652 | 149 | |
Bongjun | 1:5af739d06652 | 150 | #if defined (EASY_CONNECT_WIFI) |
Bongjun | 1:5af739d06652 | 151 | #define WIFI_SSID_MAX_LEN 32 // As per IEEE 802.11 chapter 7.3.2.1 (SSID element) |
Bongjun | 1:5af739d06652 | 152 | #define WIFI_PASSWORD_MAX_LEN 64 // |
Bongjun | 1:5af739d06652 | 153 | |
Bongjun | 1:5af739d06652 | 154 | char* _ssid = NULL; |
Bongjun | 1:5af739d06652 | 155 | char* _password = NULL; |
Bongjun | 1:5af739d06652 | 156 | #endif // EASY_CONNECT_WIFI |
Bongjun | 1:5af739d06652 | 157 | |
Bongjun | 1:5af739d06652 | 158 | /* \brief print_MAC - print_MAC - helper function to print out MAC address |
Bongjun | 1:5af739d06652 | 159 | * in: network_interface - pointer to network i/f |
Bongjun | 1:5af739d06652 | 160 | * bool log-messages print out logs or not |
Bongjun | 1:5af739d06652 | 161 | * MAC address is printed, if it can be acquired & log_messages is true. |
Bongjun | 1:5af739d06652 | 162 | * |
Bongjun | 1:5af739d06652 | 163 | */ |
Bongjun | 1:5af739d06652 | 164 | void print_MAC(NetworkInterface* network_interface, bool log_messages) { |
Bongjun | 1:5af739d06652 | 165 | #if MBED_CONF_APP_NETWORK_INTERFACE != CELLULAR_ONBOARD && MBED_CONF_APP_NETWORK_INTERFACE != CELLULAR |
Bongjun | 1:5af739d06652 | 166 | const char *mac_addr = network_interface->get_mac_address(); |
Bongjun | 1:5af739d06652 | 167 | if (mac_addr == NULL) { |
Bongjun | 1:5af739d06652 | 168 | if (log_messages) { |
Bongjun | 1:5af739d06652 | 169 | printf("[EasyConnect] ERROR - No MAC address\n"); |
Bongjun | 1:5af739d06652 | 170 | } |
Bongjun | 1:5af739d06652 | 171 | return; |
Bongjun | 1:5af739d06652 | 172 | } |
Bongjun | 1:5af739d06652 | 173 | if (log_messages) { |
Bongjun | 1:5af739d06652 | 174 | printf("[EasyConnect] MAC address %s\n", mac_addr); |
Bongjun | 1:5af739d06652 | 175 | } |
Bongjun | 1:5af739d06652 | 176 | #endif |
Bongjun | 1:5af739d06652 | 177 | } |
Bongjun | 1:5af739d06652 | 178 | |
Bongjun | 1:5af739d06652 | 179 | |
Bongjun | 1:5af739d06652 | 180 | |
Bongjun | 1:5af739d06652 | 181 | /* \brief easy_connect easy_connect() function to connect the pre-defined network bearer, |
Bongjun | 1:5af739d06652 | 182 | * config done via mbed_app.json (see README.md for details). |
Bongjun | 1:5af739d06652 | 183 | * |
Bongjun | 1:5af739d06652 | 184 | * IN: bool log_messages print out diagnostics or not. |
Bongjun | 1:5af739d06652 | 185 | */ |
Bongjun | 1:5af739d06652 | 186 | NetworkInterface* easy_connect(bool log_messages) { |
Bongjun | 1:5af739d06652 | 187 | NetworkInterface* network_interface = NULL; |
Bongjun | 1:5af739d06652 | 188 | int connect_success = -1; |
Bongjun | 1:5af739d06652 | 189 | |
Bongjun | 1:5af739d06652 | 190 | #if defined (EASY_CONNECT_WIFI) |
Bongjun | 1:5af739d06652 | 191 | // We check if the _ssid and _password have already been set (via the easy_connect() |
Bongjun | 1:5af739d06652 | 192 | // that takes thoses parameters or not. |
Bongjun | 1:5af739d06652 | 193 | // If they have not been set, use the ones we can gain from mbed_app.json. |
Bongjun | 1:5af739d06652 | 194 | if (_ssid == NULL) { |
Bongjun | 1:5af739d06652 | 195 | if(strlen(MBED_CONF_APP_WIFI_SSID) > WIFI_SSID_MAX_LEN) { |
Bongjun | 1:5af739d06652 | 196 | printf("ERROR - MBED_CONF_APP_WIFI_SSID is too long %d vs. %d\n", |
Bongjun | 1:5af739d06652 | 197 | strlen(MBED_CONF_APP_WIFI_SSID), |
Bongjun | 1:5af739d06652 | 198 | WIFI_SSID_MAX_LEN); |
Bongjun | 1:5af739d06652 | 199 | return NULL; |
Bongjun | 1:5af739d06652 | 200 | } |
Bongjun | 1:5af739d06652 | 201 | } |
Bongjun | 1:5af739d06652 | 202 | |
Bongjun | 1:5af739d06652 | 203 | if (_password == NULL) { |
Bongjun | 1:5af739d06652 | 204 | if(strlen(MBED_CONF_APP_WIFI_PASSWORD) > WIFI_PASSWORD_MAX_LEN) { |
Bongjun | 1:5af739d06652 | 205 | printf("ERROR - MBED_CONF_APP_WIFI_PASSWORD is too long %d vs. %d\n", |
Bongjun | 1:5af739d06652 | 206 | strlen(MBED_CONF_APP_WIFI_PASSWORD), |
Bongjun | 1:5af739d06652 | 207 | WIFI_PASSWORD_MAX_LEN); |
Bongjun | 1:5af739d06652 | 208 | return NULL; |
Bongjun | 1:5af739d06652 | 209 | } |
Bongjun | 1:5af739d06652 | 210 | } |
Bongjun | 1:5af739d06652 | 211 | #endif // EASY_CONNECT_WIFI |
Bongjun | 1:5af739d06652 | 212 | |
Bongjun | 1:5af739d06652 | 213 | /// This should be removed once mbedOS supports proper dual-stack |
Bongjun | 1:5af739d06652 | 214 | if (log_messages) { |
Bongjun | 1:5af739d06652 | 215 | #if defined (EASY_CONNECT_MESH) || (MBED_CONF_LWIP_IPV6_ENABLED==true) |
Bongjun | 1:5af739d06652 | 216 | printf("[EasyConnect] IPv6 mode\n"); |
Bongjun | 1:5af739d06652 | 217 | #else |
Bongjun | 1:5af739d06652 | 218 | printf("[EasyConnect] IPv4 mode\n"); |
Bongjun | 1:5af739d06652 | 219 | #endif |
Bongjun | 1:5af739d06652 | 220 | } |
Bongjun | 1:5af739d06652 | 221 | |
Bongjun | 1:5af739d06652 | 222 | #if defined (EASY_CONNECT_WIFI) |
Bongjun | 1:5af739d06652 | 223 | if (log_messages) { |
Bongjun | 1:5af739d06652 | 224 | printf("[EasyConnect] Using WiFi (%s) \n", EASY_CONNECT_WIFI_TYPE); |
Bongjun | 1:5af739d06652 | 225 | printf("[EasyConnect] Connecting to WiFi %s\n", |
Bongjun | 1:5af739d06652 | 226 | ((_ssid == NULL) ? MBED_CONF_APP_WIFI_SSID : _ssid) ); |
Bongjun | 1:5af739d06652 | 227 | } |
Bongjun | 1:5af739d06652 | 228 | network_interface = &wifi; |
Bongjun | 1:5af739d06652 | 229 | if (_ssid == NULL) { |
Bongjun | 1:5af739d06652 | 230 | connect_success = wifi.connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, |
Bongjun | 1:5af739d06652 | 231 | (strlen(MBED_CONF_APP_WIFI_PASSWORD) > 1) ? NSAPI_SECURITY_WPA_WPA2 : NSAPI_SECURITY_NONE); |
Bongjun | 1:5af739d06652 | 232 | } |
Bongjun | 1:5af739d06652 | 233 | else { |
Bongjun | 1:5af739d06652 | 234 | connect_success = wifi.connect(_ssid, _password, (strlen(_password) > 1) ? NSAPI_SECURITY_WPA_WPA2 : NSAPI_SECURITY_NONE); |
Bongjun | 1:5af739d06652 | 235 | } |
Bongjun | 1:5af739d06652 | 236 | #elif MBED_CONF_APP_NETWORK_INTERFACE == CELLULAR_ONBOARD || MBED_CONF_APP_NETWORK_INTERFACE == CELLULAR |
Bongjun | 1:5af739d06652 | 237 | # ifdef MBED_CONF_APP_CELLULAR_SIM_PIN |
Bongjun | 1:5af739d06652 | 238 | cellular.set_sim_pin(MBED_CONF_APP_CELLULAR_SIM_PIN); |
Bongjun | 1:5af739d06652 | 239 | # endif |
Bongjun | 1:5af739d06652 | 240 | # ifdef MBED_CONF_APP_CELLULAR_APN |
Bongjun | 1:5af739d06652 | 241 | # ifndef MBED_CONF_APP_CELLULAR_USERNAME |
Bongjun | 1:5af739d06652 | 242 | # define MBED_CONF_APP_CELLULAR_USERNAME 0 |
Bongjun | 1:5af739d06652 | 243 | # endif |
Bongjun | 1:5af739d06652 | 244 | # ifndef MBED_CONF_APP_CELLULAR_PASSWORD |
Bongjun | 1:5af739d06652 | 245 | # define MBED_CONF_APP_CELLULAR_PASSWORD 0 |
Bongjun | 1:5af739d06652 | 246 | # endif |
Bongjun | 1:5af739d06652 | 247 | cellular.set_credentials(MBED_CONF_APP_CELLULAR_APN, MBED_CONF_APP_CELLULAR_USERNAME, MBED_CONF_APP_CELLULAR_PASSWORD); |
Bongjun | 1:5af739d06652 | 248 | if (log_messages) { |
Bongjun | 1:5af739d06652 | 249 | printf("[EasyConnect] Connecting using Cellular interface and APN %s\n", MBED_CONF_APP_CELLULAR_APN); |
Bongjun | 1:5af739d06652 | 250 | } |
Bongjun | 1:5af739d06652 | 251 | # else |
Bongjun | 1:5af739d06652 | 252 | if (log_messages) { |
Bongjun | 1:5af739d06652 | 253 | printf("[EasyConnect] Connecting using Cellular interface and default APN\n"); |
Bongjun | 1:5af739d06652 | 254 | } |
Bongjun | 1:5af739d06652 | 255 | # endif |
Bongjun | 1:5af739d06652 | 256 | connect_success = cellular.connect(); |
Bongjun | 1:5af739d06652 | 257 | network_interface = &cellular; |
Bongjun | 1:5af739d06652 | 258 | |
Bongjun | 1:5af739d06652 | 259 | #elif MBED_CONF_APP_NETWORK_INTERFACE == CELLULAR_WNC14A2A |
Bongjun | 1:5af739d06652 | 260 | if (log_messages) { |
Bongjun | 1:5af739d06652 | 261 | printf("[EasyConnect] Using WNC14A2A\n"); |
Bongjun | 1:5af739d06652 | 262 | } |
Bongjun | 1:5af739d06652 | 263 | # if MBED_CONF_APP_WNC_DEBUG == true |
Bongjun | 1:5af739d06652 | 264 | printf("[EasyConnect] With WNC14A2A debug output set to 0x%02X\n",MBED_CONF_APP_WNC_DEBUG_SETTING); |
Bongjun | 1:5af739d06652 | 265 | wnc.doDebug(MBED_CONF_APP_WNC_DEBUG_SETTING); |
Bongjun | 1:5af739d06652 | 266 | # endif |
Bongjun | 1:5af739d06652 | 267 | network_interface = &wnc; |
Bongjun | 1:5af739d06652 | 268 | connect_success = wnc.connect(); |
Bongjun | 1:5af739d06652 | 269 | |
Bongjun | 1:5af739d06652 | 270 | #elif MBED_CONF_APP_NETWORK_INTERFACE == ETHERNET |
Bongjun | 1:5af739d06652 | 271 | if (log_messages) { |
Bongjun | 1:5af739d06652 | 272 | printf("[EasyConnect] Using Ethernet\n"); |
Bongjun | 1:5af739d06652 | 273 | } |
Bongjun | 1:5af739d06652 | 274 | network_interface = ð |
Bongjun | 1:5af739d06652 | 275 | #if MBED_CONF_EVENTS_SHARED_DISPATCH_FROM_APPLICATION |
Bongjun | 1:5af739d06652 | 276 | eth.set_blocking(false); |
Bongjun | 1:5af739d06652 | 277 | #endif |
Bongjun | 1:5af739d06652 | 278 | connect_success = eth.connect(); |
Bongjun | 1:5af739d06652 | 279 | |
Bongjun | 1:5af739d06652 | 280 | #elif MBED_CONF_APP_NETWORK_INTERFACE == ETHERNET_W5500 |
Bongjun | 1:5af739d06652 | 281 | |
Bongjun | 1:5af739d06652 | 282 | if (log_messages) { |
Bongjun | 1:5af739d06652 | 283 | printf("[EasyConnect] Using Ethernet W5500\n"); |
Bongjun | 1:5af739d06652 | 284 | } |
Bongjun | 4:a6b064717635 | 285 | // wait during chip reset |
Bongjun | 1:5af739d06652 | 286 | wait(1); |
Bongjun | 1:5af739d06652 | 287 | |
Bongjun | 1:5af739d06652 | 288 | network_interface = ð |
Bongjun | 1:5af739d06652 | 289 | #if MBED_CONF_EVENTS_SHARED_DISPATCH_FROM_APPLICATION |
Bongjun | 1:5af739d06652 | 290 | eth.set_blocking(false); |
Bongjun | 1:5af739d06652 | 291 | #endif |
Bongjun | 1:5af739d06652 | 292 | connect_success = eth.connect(); |
Bongjun | 4:a6b064717635 | 293 | |
Bongjun | 1:5af739d06652 | 294 | #endif |
Bongjun | 1:5af739d06652 | 295 | |
Bongjun | 1:5af739d06652 | 296 | #ifdef EASY_CONNECT_MESH |
Bongjun | 1:5af739d06652 | 297 | if (log_messages) { |
Bongjun | 1:5af739d06652 | 298 | printf("[EasyConnect] Using Mesh (%s)\n", EASY_CONNECT_MESH_TYPE); |
Bongjun | 1:5af739d06652 | 299 | printf("[EasyConnect] Connecting to Mesh...\n"); |
Bongjun | 1:5af739d06652 | 300 | } |
Bongjun | 1:5af739d06652 | 301 | network_interface = &mesh; |
Bongjun | 1:5af739d06652 | 302 | #if MBED_CONF_EVENTS_SHARED_DISPATCH_FROM_APPLICATION |
Bongjun | 1:5af739d06652 | 303 | mesh.set_blocking(false); |
Bongjun | 1:5af739d06652 | 304 | #endif |
Bongjun | 1:5af739d06652 | 305 | mesh.initialize(&rf_phy); |
Bongjun | 1:5af739d06652 | 306 | connect_success = mesh.connect(); |
Bongjun | 1:5af739d06652 | 307 | #endif |
Bongjun | 1:5af739d06652 | 308 | |
Bongjun | 1:5af739d06652 | 309 | if(connect_success == 0 |
Bongjun | 1:5af739d06652 | 310 | #if (MBED_CONF_EVENTS_SHARED_DISPATCH_FROM_APPLICATION && (MBED_CONF_APP_NETWORK_INTERFACE == ETHERNET || defined(EASY_CONNECT_MESH))) |
Bongjun | 1:5af739d06652 | 311 | || connect_success == NSAPI_ERROR_IS_CONNECTED || connect_success == NSAPI_ERROR_ALREADY |
Bongjun | 1:5af739d06652 | 312 | #endif |
Bongjun | 1:5af739d06652 | 313 | ) { |
Bongjun | 1:5af739d06652 | 314 | #if (MBED_CONF_EVENTS_SHARED_DISPATCH_FROM_APPLICATION && (MBED_CONF_APP_NETWORK_INTERFACE == ETHERNET || defined(EASY_CONNECT_MESH))) |
Bongjun | 1:5af739d06652 | 315 | nsapi_connection_status_t connection_status; |
Bongjun | 1:5af739d06652 | 316 | |
Bongjun | 1:5af739d06652 | 317 | for (;;) { |
Bongjun | 1:5af739d06652 | 318 | |
Bongjun | 1:5af739d06652 | 319 | // Check current connection status. |
Bongjun | 1:5af739d06652 | 320 | connection_status = network_interface->get_connection_status(); |
Bongjun | 1:5af739d06652 | 321 | |
Bongjun | 1:5af739d06652 | 322 | if (connection_status == NSAPI_STATUS_GLOBAL_UP) { |
Bongjun | 1:5af739d06652 | 323 | |
Bongjun | 1:5af739d06652 | 324 | // Connection ready. |
Bongjun | 1:5af739d06652 | 325 | break; |
Bongjun | 1:5af739d06652 | 326 | |
Bongjun | 1:5af739d06652 | 327 | } else if (connection_status == NSAPI_STATUS_ERROR_UNSUPPORTED) { |
Bongjun | 1:5af739d06652 | 328 | |
Bongjun | 1:5af739d06652 | 329 | if (log_messages) { |
Bongjun | 1:5af739d06652 | 330 | print_MAC(network_interface, log_messages); |
Bongjun | 1:5af739d06652 | 331 | printf("[EasyConnect] Connection to Network Failed %d!\n", connection_status); |
Bongjun | 1:5af739d06652 | 332 | } |
Bongjun | 1:5af739d06652 | 333 | return NULL; |
Bongjun | 1:5af739d06652 | 334 | |
Bongjun | 1:5af739d06652 | 335 | } |
Bongjun | 1:5af739d06652 | 336 | |
Bongjun | 1:5af739d06652 | 337 | // Not ready yet, give some runtime to the network stack. |
Bongjun | 1:5af739d06652 | 338 | mbed::mbed_event_queue()->dispatch(100); |
Bongjun | 1:5af739d06652 | 339 | |
Bongjun | 1:5af739d06652 | 340 | } |
Bongjun | 1:5af739d06652 | 341 | #endif |
Bongjun | 1:5af739d06652 | 342 | |
Bongjun | 1:5af739d06652 | 343 | if (log_messages) { |
Bongjun | 1:5af739d06652 | 344 | printf("[EasyConnect] Connected to Network successfully\n"); |
Bongjun | 1:5af739d06652 | 345 | print_MAC(network_interface, log_messages); |
Bongjun | 1:5af739d06652 | 346 | } |
Bongjun | 1:5af739d06652 | 347 | } else { |
Bongjun | 1:5af739d06652 | 348 | if (log_messages) { |
Bongjun | 1:5af739d06652 | 349 | print_MAC(network_interface, log_messages); |
Bongjun | 1:5af739d06652 | 350 | printf("[EasyConnect] Connection to Network Failed %d!\n", connect_success); |
Bongjun | 1:5af739d06652 | 351 | } |
Bongjun | 1:5af739d06652 | 352 | return NULL; |
Bongjun | 1:5af739d06652 | 353 | } |
Bongjun | 1:5af739d06652 | 354 | const char *ip_addr = network_interface->get_ip_address(); |
Bongjun | 1:5af739d06652 | 355 | if (ip_addr == NULL) { |
Bongjun | 1:5af739d06652 | 356 | if (log_messages) { |
Bongjun | 1:5af739d06652 | 357 | printf("[EasyConnect] ERROR - No IP address\n"); |
Bongjun | 1:5af739d06652 | 358 | } |
Bongjun | 1:5af739d06652 | 359 | return NULL; |
Bongjun | 1:5af739d06652 | 360 | } |
Bongjun | 1:5af739d06652 | 361 | |
Bongjun | 1:5af739d06652 | 362 | if (log_messages) { |
Bongjun | 1:5af739d06652 | 363 | printf("[EasyConnect] IP address %s\n", ip_addr); |
Bongjun | 1:5af739d06652 | 364 | } |
Bongjun | 1:5af739d06652 | 365 | return network_interface; |
Bongjun | 1:5af739d06652 | 366 | } |
Bongjun | 1:5af739d06652 | 367 | |
Bongjun | 1:5af739d06652 | 368 | /* \brief easy_connect - easy_connect function to connect the pre-defined network bearer, |
Bongjun | 1:5af739d06652 | 369 | * config done via mbed_app.json (see README.md for details). |
Bongjun | 1:5af739d06652 | 370 | * This version is just a helper version and uses the easy_connect() with |
Bongjun | 1:5af739d06652 | 371 | * one parameters to do it's job. |
Bongjun | 1:5af739d06652 | 372 | * IN: bool log_messages print out diagnostics or not. |
Bongjun | 1:5af739d06652 | 373 | * char* WiFiSSID WiFi SSID - pointer to WiFi SSID, but if it is NULL |
Bongjun | 1:5af739d06652 | 374 | * then MBED_CONF_APP_WIFI_SSID will be used |
Bongjun | 1:5af739d06652 | 375 | * char* WiFiPassword WiFi Password - pointer to WiFI password, but if it's NULL |
Bongjun | 1:5af739d06652 | 376 | * then MBED_CONF_APP_WIFI_PASSWORD will be used |
Bongjun | 1:5af739d06652 | 377 | */ |
Bongjun | 1:5af739d06652 | 378 | |
Bongjun | 1:5af739d06652 | 379 | NetworkInterface* easy_connect(bool log_messages, |
Bongjun | 1:5af739d06652 | 380 | char* WiFiSSID, |
Bongjun | 1:5af739d06652 | 381 | char* WiFiPassword ) { |
Bongjun | 1:5af739d06652 | 382 | |
Bongjun | 1:5af739d06652 | 383 | // This functionality only makes sense when using WiFi |
Bongjun | 1:5af739d06652 | 384 | #if defined (EASY_CONNECT_WIFI) |
Bongjun | 1:5af739d06652 | 385 | // We essentially want to populate the _ssid and _password and then call easy_connect() again. |
Bongjun | 1:5af739d06652 | 386 | if (WiFiSSID != NULL) { |
Bongjun | 1:5af739d06652 | 387 | if(strlen(WiFiSSID) > WIFI_SSID_MAX_LEN) { |
Bongjun | 1:5af739d06652 | 388 | printf("ERROR - WiFi SSID is too long - %d vs %d.\n", strlen(WiFiSSID), WIFI_SSID_MAX_LEN); |
Bongjun | 1:5af739d06652 | 389 | return NULL; |
Bongjun | 1:5af739d06652 | 390 | } |
Bongjun | 1:5af739d06652 | 391 | _ssid = WiFiSSID; |
Bongjun | 1:5af739d06652 | 392 | } |
Bongjun | 1:5af739d06652 | 393 | |
Bongjun | 1:5af739d06652 | 394 | if (WiFiPassword != NULL) { |
Bongjun | 1:5af739d06652 | 395 | if(strlen(WiFiPassword) > WIFI_PASSWORD_MAX_LEN) { |
Bongjun | 1:5af739d06652 | 396 | printf("ERROR - WiFi Password is too long - %d vs %d\n", strlen(WiFiPassword), WIFI_PASSWORD_MAX_LEN); |
Bongjun | 1:5af739d06652 | 397 | return NULL; |
Bongjun | 1:5af739d06652 | 398 | } |
Bongjun | 1:5af739d06652 | 399 | _password = WiFiPassword; |
Bongjun | 1:5af739d06652 | 400 | } |
Bongjun | 1:5af739d06652 | 401 | #endif // EASY_CONNECT_WIFI |
Bongjun | 1:5af739d06652 | 402 | return easy_connect(log_messages); |
Bongjun | 1:5af739d06652 | 403 | } |
Bongjun | 1:5af739d06652 | 404 | |
Bongjun | 1:5af739d06652 | 405 | /* \brief easy_get_netif - easy_connect function to get pointer to network interface |
Bongjun | 1:5af739d06652 | 406 | * without connecting to it. |
Bongjun | 1:5af739d06652 | 407 | * |
Bongjun | 1:5af739d06652 | 408 | * IN: bool log_messages print out diagnostics or not. |
Bongjun | 1:5af739d06652 | 409 | */ |
Bongjun | 1:5af739d06652 | 410 | NetworkInterface* easy_get_netif(bool log_messages) { |
Bongjun | 1:5af739d06652 | 411 | #if defined (EASY_CONNECT_WIFI) |
Bongjun | 1:5af739d06652 | 412 | if (log_messages) { |
Bongjun | 1:5af739d06652 | 413 | printf("[EasyConnect] WiFi: %s\n", EASY_CONNECT_WIFI_TYPE); |
Bongjun | 1:5af739d06652 | 414 | } |
Bongjun | 1:5af739d06652 | 415 | return &wifi; |
Bongjun | 1:5af739d06652 | 416 | |
Bongjun | 1:5af739d06652 | 417 | #elif MBED_CONF_APP_NETWORK_INTERFACE == ETHERNET |
Bongjun | 1:5af739d06652 | 418 | if (log_messages) { |
Bongjun | 1:5af739d06652 | 419 | printf("[EasyConnect] Ethernet\n"); |
Bongjun | 1:5af739d06652 | 420 | } |
Bongjun | 1:5af739d06652 | 421 | return ð |
Bongjun | 1:5af739d06652 | 422 | |
Bongjun | 1:5af739d06652 | 423 | #elif defined (EASY_CONNECT_MESH) |
Bongjun | 1:5af739d06652 | 424 | if (log_messages) { |
Bongjun | 1:5af739d06652 | 425 | printf("[EasyConnect] Mesh : %s\n", EASY_CONNECT_MESH_TYPE); |
Bongjun | 1:5af739d06652 | 426 | } |
Bongjun | 1:5af739d06652 | 427 | return &mesh; |
Bongjun | 1:5af739d06652 | 428 | |
Bongjun | 1:5af739d06652 | 429 | #elif MBED_CONF_APP_NETWORK_INTERFACE == CELLULAR_ONBOARD || MBED_CONF_APP_NETWORK_INTERFACE == CELLULAR |
Bongjun | 1:5af739d06652 | 430 | if (log_messages) { |
Bongjun | 1:5af739d06652 | 431 | printf("[EasyConnect] Cellular\n"); |
Bongjun | 1:5af739d06652 | 432 | } |
Bongjun | 1:5af739d06652 | 433 | return &cellular; |
Bongjun | 1:5af739d06652 | 434 | |
Bongjun | 1:5af739d06652 | 435 | #elif MBED_CONF_APP_NETWORK_INTERFACE == CELLULAR_WNC14A2A |
Bongjun | 1:5af739d06652 | 436 | if (log_messages) { |
Bongjun | 1:5af739d06652 | 437 | printf("[EasyConnect] WNC14A2A\n"); |
Bongjun | 1:5af739d06652 | 438 | } |
Bongjun | 1:5af739d06652 | 439 | return &wnc; |
Bongjun | 1:5af739d06652 | 440 | |
Bongjun | 1:5af739d06652 | 441 | #elif MBED_CONF_APP_NETWORK_INTERFACE == ETHERNET_W5500 |
Bongjun | 1:5af739d06652 | 442 | if (log_messages) { |
Bongjun | 1:5af739d06652 | 443 | printf("[EasyConnect] Ethernet W5500\n"); |
Bongjun | 1:5af739d06652 | 444 | } |
Bongjun | 1:5af739d06652 | 445 | return ð |
Bongjun | 1:5af739d06652 | 446 | |
Bongjun | 1:5af739d06652 | 447 | #endif |
Bongjun | 1:5af739d06652 | 448 | } |
Bongjun | 1:5af739d06652 | 449 | |
Bongjun | 1:5af739d06652 | 450 | /* \brief easy_get_wifi - easy_connect function to get pointer to Wifi interface |
Bongjun | 1:5af739d06652 | 451 | * without connecting to it. You would want this 1st so that |
Bongjun | 1:5af739d06652 | 452 | * you can scan the APNs, choose the right one and then connect. |
Bongjun | 1:5af739d06652 | 453 | * |
Bongjun | 1:5af739d06652 | 454 | * IN: bool log_messages print out diagnostics or not. |
Bongjun | 1:5af739d06652 | 455 | */ |
Bongjun | 1:5af739d06652 | 456 | WiFiInterface* easy_get_wifi(bool log_messages) { |
Bongjun | 1:5af739d06652 | 457 | #if defined (EASY_CONNECT_WIFI) |
Bongjun | 1:5af739d06652 | 458 | if (log_messages) { |
Bongjun | 1:5af739d06652 | 459 | printf("[EasyConnect] WiFi: %s\n", EASY_CONNECT_WIFI_TYPE); |
Bongjun | 1:5af739d06652 | 460 | } |
Bongjun | 1:5af739d06652 | 461 | return &wifi; |
Bongjun | 1:5af739d06652 | 462 | #else |
Bongjun | 1:5af739d06652 | 463 | if (log_messages) { |
Bongjun | 1:5af739d06652 | 464 | printf("[EasyConnect] ERROR - Wifi not in use, can not return WifiInterface.\n"); |
Bongjun | 1:5af739d06652 | 465 | } |
Bongjun | 1:5af739d06652 | 466 | return NULL; |
Bongjun | 1:5af739d06652 | 467 | #endif |
Bongjun | 1:5af739d06652 | 468 | } |