Easily add all supported connectivity methods to your mbed OS project

Dependencies:   type-yd-driver

Committer:
MACRUM
Date:
Wed Jul 12 10:52:58 2017 +0000
Revision:
0:615f90842ce8
Initial commit

Who changed what in which revision?

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