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

Dependents:   HelloMQTT

Committer:
group-ublox
Date:
Thu Aug 10 14:33:05 2017 +0000
Revision:
0:19aa55d66228
Child:
3:1ee51369146a
Initial commit

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
group-ublox 0:19aa55d66228 12 #define CELLULAR_C030 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 */
group-ublox 0:19aa55d66228 97 void print_MAC(NetworkInterface* network_interface, bool log_messages) {
group-ublox 0:19aa55d66228 98 const char *mac_addr = network_interface->get_mac_address();
group-ublox 0:19aa55d66228 99 if (mac_addr == NULL) {
group-ublox 0:19aa55d66228 100 if (log_messages) {
group-ublox 0:19aa55d66228 101 printf("[EasyConnect] ERROR - No MAC address\n");
group-ublox 0:19aa55d66228 102 }
group-ublox 0:19aa55d66228 103 return;
group-ublox 0:19aa55d66228 104 }
group-ublox 0:19aa55d66228 105 if (log_messages) {
group-ublox 0:19aa55d66228 106 printf("[EasyConnect] MAC address %s\n", mac_addr);
group-ublox 0:19aa55d66228 107 }
group-ublox 0:19aa55d66228 108 }
group-ublox 0:19aa55d66228 109
group-ublox 0:19aa55d66228 110
group-ublox 0:19aa55d66228 111 /* \brief easy_connect - easy_connect function to connect the pre-defined network bearer,
group-ublox 0:19aa55d66228 112 * config done via mbed_app.json (see README.md for details).
group-ublox 0:19aa55d66228 113 * IN: bool log_messages print out diagnostics or not.
group-ublox 0:19aa55d66228 114 *
group-ublox 0:19aa55d66228 115 */
group-ublox 0:19aa55d66228 116 NetworkInterface* easy_connect(bool log_messages = false) {
group-ublox 0:19aa55d66228 117 NetworkInterface* network_interface = 0;
group-ublox 0:19aa55d66228 118 int connect_success = -1;
group-ublox 0:19aa55d66228 119 /// This should be removed once mbedOS supports proper dual-stack
group-ublox 0:19aa55d66228 120 #if defined (MESH) || (MBED_CONF_LWIP_IPV6_ENABLED==true)
group-ublox 0:19aa55d66228 121 printf("[EasyConnect] IPv6 mode\n");
group-ublox 0:19aa55d66228 122 #else
group-ublox 0:19aa55d66228 123 printf("[EasyConnect] IPv4 mode\n");
group-ublox 0:19aa55d66228 124 #endif
group-ublox 0:19aa55d66228 125
group-ublox 0:19aa55d66228 126 #if MBED_CONF_APP_NETWORK_INTERFACE == WIFI_ESP8266
group-ublox 0:19aa55d66228 127 if (log_messages) {
group-ublox 0:19aa55d66228 128 printf("[EasyConnect] Using WiFi (ESP8266) \n");
group-ublox 0:19aa55d66228 129 printf("[EasyConnect] Connecting to WiFi %s\n", MBED_CONF_APP_WIFI_SSID);
group-ublox 0:19aa55d66228 130 }
group-ublox 0:19aa55d66228 131 network_interface = &wifi;
group-ublox 0:19aa55d66228 132 connect_success = wifi.connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, NSAPI_SECURITY_WPA_WPA2);
group-ublox 0:19aa55d66228 133 #elif MBED_CONF_APP_NETWORK_INTERFACE == WIFI_ODIN
group-ublox 0:19aa55d66228 134 if (log_messages) {
group-ublox 0:19aa55d66228 135 printf("[EasyConnect] Using WiFi (ODIN) \n");
group-ublox 0:19aa55d66228 136 printf("[EasyConnect] Connecting to WiFi %s\n", MBED_CONF_APP_WIFI_SSID);
group-ublox 0:19aa55d66228 137 }
group-ublox 0:19aa55d66228 138 network_interface = &wifi;
group-ublox 0:19aa55d66228 139 connect_success = wifi.connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, NSAPI_SECURITY_WPA_WPA2);
group-ublox 0:19aa55d66228 140 #elif MBED_CONF_APP_NETWORK_INTERFACE == WIFI_RTW
group-ublox 0:19aa55d66228 141 if (log_messages) {
group-ublox 0:19aa55d66228 142 printf("[EasyConnect] Using WiFi (RTW)\n");
group-ublox 0:19aa55d66228 143 printf("[EasyConnect] Connecting to WiFi %s\n", MBED_CONF_APP_WIFI_SSID);
group-ublox 0:19aa55d66228 144 }
group-ublox 0:19aa55d66228 145 network_interface = &wifi;
group-ublox 0:19aa55d66228 146 connect_success = wifi.connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, NSAPI_SECURITY_WPA_WPA2);
group-ublox 0:19aa55d66228 147 #elif MBED_CONF_APP_NETWORK_INTERFACE == CELLULAR_UBLOX
group-ublox 0:19aa55d66228 148 if (log_messages) {
group-ublox 0:19aa55d66228 149 printf("[EasyConnect] Using Cellular (u-blox) \n");
group-ublox 0:19aa55d66228 150 #if MBED_CONF_APP_APN
group-ublox 0:19aa55d66228 151 printf("[EasyConnect] Connecting to Cellular %s\n", MBED_CONF_APP_APN);
group-ublox 0:19aa55d66228 152 #else
group-ublox 0:19aa55d66228 153 printf("[EasyConnect] Connecting to Cellular\n");
group-ublox 0:19aa55d66228 154 #endif
group-ublox 0:19aa55d66228 155 }
group-ublox 0:19aa55d66228 156 network_interface = &cellular;
group-ublox 0:19aa55d66228 157 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 158 #elif MBED_CONF_APP_NETWORK_INTERFACE == ETHERNET
group-ublox 0:19aa55d66228 159 if (log_messages) {
group-ublox 0:19aa55d66228 160 printf("[EasyConnect] Using Ethernet\n");
group-ublox 0:19aa55d66228 161 }
group-ublox 0:19aa55d66228 162 network_interface = ð
group-ublox 0:19aa55d66228 163 connect_success = eth.connect();
group-ublox 0:19aa55d66228 164 #endif
group-ublox 0:19aa55d66228 165
group-ublox 0:19aa55d66228 166 #ifdef MESH
group-ublox 0:19aa55d66228 167 if (log_messages) {
group-ublox 0:19aa55d66228 168 printf("[EasyConnect] Using Mesh\n");
group-ublox 0:19aa55d66228 169 printf("[EasyConnect] Connecting to Mesh..\n");
group-ublox 0:19aa55d66228 170 }
group-ublox 0:19aa55d66228 171 network_interface = &mesh;
group-ublox 0:19aa55d66228 172 mesh.initialize(&rf_phy);
group-ublox 0:19aa55d66228 173 connect_success = mesh.connect();
group-ublox 0:19aa55d66228 174 #endif
group-ublox 0:19aa55d66228 175 if(connect_success == 0) {
group-ublox 0:19aa55d66228 176 if (log_messages) {
group-ublox 0:19aa55d66228 177 printf("[EasyConnect] Connected to Network successfully\n");
group-ublox 0:19aa55d66228 178 print_MAC(network_interface, log_messages);
group-ublox 0:19aa55d66228 179 }
group-ublox 0:19aa55d66228 180 } else {
group-ublox 0:19aa55d66228 181 if (log_messages) {
group-ublox 0:19aa55d66228 182 print_MAC(network_interface, log_messages);
group-ublox 0:19aa55d66228 183 printf("[EasyConnect] Connection to Network Failed %d!\n", connect_success);
group-ublox 0:19aa55d66228 184 }
group-ublox 0:19aa55d66228 185 return NULL;
group-ublox 0:19aa55d66228 186 }
group-ublox 0:19aa55d66228 187 const char *ip_addr = network_interface->get_ip_address();
group-ublox 0:19aa55d66228 188 if (ip_addr == NULL) {
group-ublox 0:19aa55d66228 189 if (log_messages) {
group-ublox 0:19aa55d66228 190 printf("[EasyConnect] ERROR - No IP address\n");
group-ublox 0:19aa55d66228 191 }
group-ublox 0:19aa55d66228 192 return NULL;
group-ublox 0:19aa55d66228 193 }
group-ublox 0:19aa55d66228 194 if (log_messages) {
group-ublox 0:19aa55d66228 195 printf("[EasyConnect] IP address %s\n", ip_addr);
group-ublox 0:19aa55d66228 196 }
group-ublox 0:19aa55d66228 197 return network_interface;
group-ublox 0:19aa55d66228 198 }
group-ublox 0:19aa55d66228 199
group-ublox 0:19aa55d66228 200 #endif // __EASY_CONNECT_H__