Version of easy-connect with the u-blox cellular platforms C027 and C030 added.

Dependents:   HelloMQTT

Committer:
rob.meades@u-blox.com
Date:
Thu Aug 10 16:04:16 2017 +0100
Revision:
3:1ee51369146a
Parent:
0:19aa55d66228
Child:
4:72079f2401ea
Change to CELLULAR_UBLOX from CELLULAR_C030 (since this code also works for C027).

Who changed what in which revision?

UserRevisionLine numberNew contents of line
group-ublox 0:19aa55d66228 1 #ifndef __EASY_CONNECT_H__
group-ublox 0:19aa55d66228 2 #define __EASY_CONNECT_H__
group-ublox 0:19aa55d66228 3
group-ublox 0:19aa55d66228 4 #include "mbed.h"
group-ublox 0:19aa55d66228 5
group-ublox 0:19aa55d66228 6 #define ETHERNET 1
group-ublox 0:19aa55d66228 7 #define WIFI_ESP8266 2
group-ublox 0:19aa55d66228 8 #define MESH_LOWPAN_ND 3
group-ublox 0:19aa55d66228 9 #define MESH_THREAD 4
group-ublox 0:19aa55d66228 10 #define WIFI_ODIN 5
group-ublox 0:19aa55d66228 11 #define WIFI_REALTEK 6
rob.meades@u-blox.com 3:1ee51369146a 12 #define CELLULAR_UBLOX 7
group-ublox 0:19aa55d66228 13
group-ublox 0:19aa55d66228 14 #if MBED_CONF_APP_NETWORK_INTERFACE == WIFI_ESP8266
group-ublox 0:19aa55d66228 15 #include "ESP8266Interface.h"
group-ublox 0:19aa55d66228 16
group-ublox 0:19aa55d66228 17 #ifdef MBED_CONF_APP_ESP8266_DEBUG
group-ublox 0:19aa55d66228 18 ESP8266Interface wifi(MBED_CONF_APP_ESP8266_TX, MBED_CONF_APP_ESP8266_RX, MBED_CONF_APP_ESP8266_DEBUG);
group-ublox 0:19aa55d66228 19 #else
group-ublox 0:19aa55d66228 20 ESP8266Interface wifi(MBED_CONF_APP_ESP8266_TX, MBED_CONF_APP_ESP8266_RX);
group-ublox 0:19aa55d66228 21 #endif
group-ublox 0:19aa55d66228 22
group-ublox 0:19aa55d66228 23 #elif MBED_CONF_APP_NETWORK_INTERFACE == WIFI_ODIN
group-ublox 0:19aa55d66228 24 #include "OdinWiFiInterface.h"
group-ublox 0:19aa55d66228 25
group-ublox 0:19aa55d66228 26 OdinWiFiInterface wifi;
group-ublox 0:19aa55d66228 27 #elif MBED_CONF_APP_NETWORK_INTERFACE == WIFI_RTW
group-ublox 0:19aa55d66228 28 #include "RTWInterface.h"
group-ublox 0:19aa55d66228 29 RTWInterface wifi;
group-ublox 0:19aa55d66228 30
group-ublox 0:19aa55d66228 31 #elif MBED_CONF_APP_NETWORK_INTERFACE == CELLULAR_UBLOX
group-ublox 0:19aa55d66228 32 // Note: we use UbloxAtCellularInterfaceExt here but the same
group-ublox 0:19aa55d66228 33 // example works with UbloxATCellularInterface or with UbloxPPPCellularInterface
group-ublox 0:19aa55d66228 34 // simply uncomment/comment the correct options in the next few lines
group-ublox 0:19aa55d66228 35 #include "UbloxATCellularInterfaceExt.h"
group-ublox 0:19aa55d66228 36 //#include "UbloxPPPCellularInterface.h"
group-ublox 0:19aa55d66228 37 //#include "UbloxATCellularInterface.h"
group-ublox 0:19aa55d66228 38
group-ublox 0:19aa55d66228 39 UbloxATCellularInterfaceExt cellular;
group-ublox 0:19aa55d66228 40 //UbloxPPPCellularInterface cellular;
group-ublox 0:19aa55d66228 41 //UbloxATCellularInterface cellular;
group-ublox 0:19aa55d66228 42 #elif MBED_CONF_APP_NETWORK_INTERFACE == ETHERNET
group-ublox 0:19aa55d66228 43 #include "EthernetInterface.h"
group-ublox 0:19aa55d66228 44 EthernetInterface eth;
group-ublox 0:19aa55d66228 45 #elif MBED_CONF_APP_NETWORK_INTERFACE == MESH_LOWPAN_ND
group-ublox 0:19aa55d66228 46 #define MESH
group-ublox 0:19aa55d66228 47 #include "NanostackInterface.h"
group-ublox 0:19aa55d66228 48 LoWPANNDInterface mesh;
group-ublox 0:19aa55d66228 49 #elif MBED_CONF_APP_NETWORK_INTERFACE == MESH_THREAD
group-ublox 0:19aa55d66228 50 #define MESH
group-ublox 0:19aa55d66228 51 #include "NanostackInterface.h"
group-ublox 0:19aa55d66228 52 ThreadInterface mesh;
group-ublox 0:19aa55d66228 53 #else
group-ublox 0:19aa55d66228 54 #error "No connectivity method chosen. Please add 'config.network-interfaces.value' to your mbed_app.json (see README.md for more information)."
group-ublox 0:19aa55d66228 55 #endif
group-ublox 0:19aa55d66228 56
group-ublox 0:19aa55d66228 57 #if defined(MESH)
group-ublox 0:19aa55d66228 58 #if MBED_CONF_APP_MESH_RADIO_TYPE == ATMEL
group-ublox 0:19aa55d66228 59 #include "NanostackRfPhyAtmel.h"
group-ublox 0:19aa55d66228 60 NanostackRfPhyAtmel rf_phy(ATMEL_SPI_MOSI, ATMEL_SPI_MISO, ATMEL_SPI_SCLK, ATMEL_SPI_CS,
group-ublox 0:19aa55d66228 61 ATMEL_SPI_RST, ATMEL_SPI_SLP, ATMEL_SPI_IRQ, ATMEL_I2C_SDA, ATMEL_I2C_SCL);
group-ublox 0:19aa55d66228 62 #elif MBED_CONF_APP_MESH_RADIO_TYPE == MCR20
group-ublox 0:19aa55d66228 63 #include "NanostackRfPhyMcr20a.h"
group-ublox 0:19aa55d66228 64 NanostackRfPhyMcr20a rf_phy(MCR20A_SPI_MOSI, MCR20A_SPI_MISO, MCR20A_SPI_SCLK, MCR20A_SPI_CS, MCR20A_SPI_RST, MCR20A_SPI_IRQ);
group-ublox 0:19aa55d66228 65 #elif MBED_CONF_APP_MESH_RADIO_TYPE == SPIRIT1
group-ublox 0:19aa55d66228 66 #include "NanostackRfPhySpirit1.h"
group-ublox 0:19aa55d66228 67 NanostackRfPhySpirit1 rf_phy(SPIRIT1_SPI_MOSI, SPIRIT1_SPI_MISO, SPIRIT1_SPI_SCLK,
group-ublox 0:19aa55d66228 68 SPIRIT1_DEV_IRQ, SPIRIT1_DEV_CS, SPIRIT1_DEV_SDN, SPIRIT1_BRD_LED);
group-ublox 0:19aa55d66228 69 #elif MBED_CONF_APP_MESH_RADIO_TYPE == EFR32
group-ublox 0:19aa55d66228 70 #include "NanostackRfPhyEfr32.h"
group-ublox 0:19aa55d66228 71 NanostackRfPhyEfr32 rf_phy;
group-ublox 0:19aa55d66228 72 #endif //MBED_CONF_APP_RADIO_TYPE
group-ublox 0:19aa55d66228 73 #endif //MESH
group-ublox 0:19aa55d66228 74
group-ublox 0:19aa55d66228 75 #ifndef MESH
group-ublox 0:19aa55d66228 76 // This is address to mbed Device Connector
group-ublox 0:19aa55d66228 77 #define MBED_SERVER_ADDRESS "coap://api.connector.mbed.com:5684"
group-ublox 0:19aa55d66228 78 #else
group-ublox 0:19aa55d66228 79 // This is address to mbed Device Connector
group-ublox 0:19aa55d66228 80 #define MBED_SERVER_ADDRESS "coaps://[2607:f0d0:2601:52::20]:5684"
group-ublox 0:19aa55d66228 81 #endif
group-ublox 0:19aa55d66228 82
group-ublox 0:19aa55d66228 83 #ifdef MBED_CONF_APP_ESP8266_SSID
group-ublox 0:19aa55d66228 84 #define MBED_CONF_APP_WIFI_SSID MBED_CONF_APP_ESP8266_SSID
group-ublox 0:19aa55d66228 85 #endif
group-ublox 0:19aa55d66228 86
group-ublox 0:19aa55d66228 87 #ifdef MBED_CONF_APP_ESP8266_PASSWORD
group-ublox 0:19aa55d66228 88 #define MBED_CONF_APP_WIFI_PASSWORD MBED_CONF_APP_ESP8266_PASSWORD
group-ublox 0:19aa55d66228 89 #endif
group-ublox 0:19aa55d66228 90
group-ublox 0:19aa55d66228 91 /* \brief print_MAC - print_MAC - helper function to print out MAC address
group-ublox 0:19aa55d66228 92 * in: network_interface - pointer to network i/f
group-ublox 0:19aa55d66228 93 * bool log-messages print out logs or not
group-ublox 0:19aa55d66228 94 * MAC address is print, if it can be acquired & log_messages is true.
group-ublox 0:19aa55d66228 95 *
group-ublox 0:19aa55d66228 96 */
rob.meades@u-blox.com 3:1ee51369146a 97 void print_MAC(NetworkInterface* network_interface, bool log_messages) {
rob.meades@u-blox.com 3:1ee51369146a 98 #if MBED_CONF_APP_NETWORK_INTERFACE != CELLULAR_UBLOX
group-ublox 0:19aa55d66228 99 const char *mac_addr = network_interface->get_mac_address();
group-ublox 0:19aa55d66228 100 if (mac_addr == NULL) {
group-ublox 0:19aa55d66228 101 if (log_messages) {
group-ublox 0:19aa55d66228 102 printf("[EasyConnect] ERROR - No MAC address\n");
group-ublox 0:19aa55d66228 103 }
group-ublox 0:19aa55d66228 104 return;
group-ublox 0:19aa55d66228 105 }
group-ublox 0:19aa55d66228 106 if (log_messages) {
group-ublox 0:19aa55d66228 107 printf("[EasyConnect] MAC address %s\n", mac_addr);
group-ublox 0:19aa55d66228 108 }
rob.meades@u-blox.com 3:1ee51369146a 109 #endif
group-ublox 0:19aa55d66228 110 }
group-ublox 0:19aa55d66228 111
group-ublox 0:19aa55d66228 112
group-ublox 0:19aa55d66228 113 /* \brief easy_connect - easy_connect function to connect the pre-defined network bearer,
group-ublox 0:19aa55d66228 114 * config done via mbed_app.json (see README.md for details).
group-ublox 0:19aa55d66228 115 * IN: bool log_messages print out diagnostics or not.
group-ublox 0:19aa55d66228 116 *
group-ublox 0:19aa55d66228 117 */
group-ublox 0:19aa55d66228 118 NetworkInterface* easy_connect(bool log_messages = false) {
group-ublox 0:19aa55d66228 119 NetworkInterface* network_interface = 0;
group-ublox 0:19aa55d66228 120 int connect_success = -1;
group-ublox 0:19aa55d66228 121 /// This should be removed once mbedOS supports proper dual-stack
group-ublox 0:19aa55d66228 122 #if defined (MESH) || (MBED_CONF_LWIP_IPV6_ENABLED==true)
group-ublox 0:19aa55d66228 123 printf("[EasyConnect] IPv6 mode\n");
group-ublox 0:19aa55d66228 124 #else
group-ublox 0:19aa55d66228 125 printf("[EasyConnect] IPv4 mode\n");
group-ublox 0:19aa55d66228 126 #endif
group-ublox 0:19aa55d66228 127
group-ublox 0:19aa55d66228 128 #if MBED_CONF_APP_NETWORK_INTERFACE == WIFI_ESP8266
group-ublox 0:19aa55d66228 129 if (log_messages) {
group-ublox 0:19aa55d66228 130 printf("[EasyConnect] Using WiFi (ESP8266) \n");
group-ublox 0:19aa55d66228 131 printf("[EasyConnect] Connecting to WiFi %s\n", MBED_CONF_APP_WIFI_SSID);
group-ublox 0:19aa55d66228 132 }
group-ublox 0:19aa55d66228 133 network_interface = &wifi;
group-ublox 0:19aa55d66228 134 connect_success = wifi.connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, NSAPI_SECURITY_WPA_WPA2);
group-ublox 0:19aa55d66228 135 #elif MBED_CONF_APP_NETWORK_INTERFACE == WIFI_ODIN
group-ublox 0:19aa55d66228 136 if (log_messages) {
group-ublox 0:19aa55d66228 137 printf("[EasyConnect] Using WiFi (ODIN) \n");
group-ublox 0:19aa55d66228 138 printf("[EasyConnect] Connecting to WiFi %s\n", MBED_CONF_APP_WIFI_SSID);
group-ublox 0:19aa55d66228 139 }
group-ublox 0:19aa55d66228 140 network_interface = &wifi;
group-ublox 0:19aa55d66228 141 connect_success = wifi.connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, NSAPI_SECURITY_WPA_WPA2);
group-ublox 0:19aa55d66228 142 #elif MBED_CONF_APP_NETWORK_INTERFACE == WIFI_RTW
group-ublox 0:19aa55d66228 143 if (log_messages) {
group-ublox 0:19aa55d66228 144 printf("[EasyConnect] Using WiFi (RTW)\n");
group-ublox 0:19aa55d66228 145 printf("[EasyConnect] Connecting to WiFi %s\n", MBED_CONF_APP_WIFI_SSID);
group-ublox 0:19aa55d66228 146 }
group-ublox 0:19aa55d66228 147 network_interface = &wifi;
group-ublox 0:19aa55d66228 148 connect_success = wifi.connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, NSAPI_SECURITY_WPA_WPA2);
group-ublox 0:19aa55d66228 149 #elif MBED_CONF_APP_NETWORK_INTERFACE == CELLULAR_UBLOX
group-ublox 0:19aa55d66228 150 if (log_messages) {
group-ublox 0:19aa55d66228 151 printf("[EasyConnect] Using Cellular (u-blox) \n");
group-ublox 0:19aa55d66228 152 #if MBED_CONF_APP_APN
group-ublox 0:19aa55d66228 153 printf("[EasyConnect] Connecting to Cellular %s\n", MBED_CONF_APP_APN);
group-ublox 0:19aa55d66228 154 #else
group-ublox 0:19aa55d66228 155 printf("[EasyConnect] Connecting to Cellular\n");
group-ublox 0:19aa55d66228 156 #endif
group-ublox 0:19aa55d66228 157 }
group-ublox 0:19aa55d66228 158 network_interface = &cellular;
group-ublox 0:19aa55d66228 159 connect_success = cellular.connect(MBED_CONF_APP_DEFAULT_PIN, MBED_CONF_APP_APN, MBED_CONF_APP_USERNAME, MBED_CONF_APP_PASSWORD);
group-ublox 0:19aa55d66228 160 #elif MBED_CONF_APP_NETWORK_INTERFACE == ETHERNET
group-ublox 0:19aa55d66228 161 if (log_messages) {
group-ublox 0:19aa55d66228 162 printf("[EasyConnect] Using Ethernet\n");
group-ublox 0:19aa55d66228 163 }
group-ublox 0:19aa55d66228 164 network_interface = ð
group-ublox 0:19aa55d66228 165 connect_success = eth.connect();
group-ublox 0:19aa55d66228 166 #endif
group-ublox 0:19aa55d66228 167
group-ublox 0:19aa55d66228 168 #ifdef MESH
group-ublox 0:19aa55d66228 169 if (log_messages) {
group-ublox 0:19aa55d66228 170 printf("[EasyConnect] Using Mesh\n");
group-ublox 0:19aa55d66228 171 printf("[EasyConnect] Connecting to Mesh..\n");
group-ublox 0:19aa55d66228 172 }
group-ublox 0:19aa55d66228 173 network_interface = &mesh;
group-ublox 0:19aa55d66228 174 mesh.initialize(&rf_phy);
group-ublox 0:19aa55d66228 175 connect_success = mesh.connect();
group-ublox 0:19aa55d66228 176 #endif
group-ublox 0:19aa55d66228 177 if(connect_success == 0) {
group-ublox 0:19aa55d66228 178 if (log_messages) {
group-ublox 0:19aa55d66228 179 printf("[EasyConnect] Connected to Network successfully\n");
group-ublox 0:19aa55d66228 180 print_MAC(network_interface, log_messages);
group-ublox 0:19aa55d66228 181 }
group-ublox 0:19aa55d66228 182 } else {
group-ublox 0:19aa55d66228 183 if (log_messages) {
group-ublox 0:19aa55d66228 184 print_MAC(network_interface, log_messages);
group-ublox 0:19aa55d66228 185 printf("[EasyConnect] Connection to Network Failed %d!\n", connect_success);
group-ublox 0:19aa55d66228 186 }
group-ublox 0:19aa55d66228 187 return NULL;
group-ublox 0:19aa55d66228 188 }
group-ublox 0:19aa55d66228 189 const char *ip_addr = network_interface->get_ip_address();
group-ublox 0:19aa55d66228 190 if (ip_addr == NULL) {
group-ublox 0:19aa55d66228 191 if (log_messages) {
group-ublox 0:19aa55d66228 192 printf("[EasyConnect] ERROR - No IP address\n");
group-ublox 0:19aa55d66228 193 }
group-ublox 0:19aa55d66228 194 return NULL;
group-ublox 0:19aa55d66228 195 }
group-ublox 0:19aa55d66228 196 if (log_messages) {
group-ublox 0:19aa55d66228 197 printf("[EasyConnect] IP address %s\n", ip_addr);
group-ublox 0:19aa55d66228 198 }
group-ublox 0:19aa55d66228 199 return network_interface;
group-ublox 0:19aa55d66228 200 }
group-ublox 0:19aa55d66228 201
group-ublox 0:19aa55d66228 202 #endif // __EASY_CONNECT_H__