Nanostack Border Router is a generic mbed border router implementation that provides the 6LoWPAN ND or Thread border router initialization logic.
Diff: source/border_router_main.cpp
- Revision:
- 63:d01e7341699d
- Parent:
- 61:b80d169da384
- Child:
- 65:92e581c01e8c
--- a/source/border_router_main.cpp Mon Jun 04 12:04:03 2018 +0100 +++ b/source/border_router_main.cpp Tue Jun 05 10:45:19 2018 +0100 @@ -10,12 +10,6 @@ #include "drivers/eth_driver.h" #include "sal-stack-nanostack-slip/Slip.h" -#include "Nanostack.h" -#include "NanostackEthernetInterface.h" -#include "MeshInterfaceNanostack.h" -#include "EMACInterface.h" -#include "EMAC.h" - #ifdef MBED_CONF_APP_DEBUG_TRACE #if MBED_CONF_APP_DEBUG_TRACE == 1 #define APP_TRACE_LEVEL TRACE_ACTIVE_LEVEL_DEBUG @@ -25,7 +19,6 @@ #endif //MBED_CONF_APP_DEBUG_TRACE #include "ns_hal_init.h" -#include "mesh_system.h" #include "cmsis_os.h" #include "arm_hal_interrupt.h" @@ -35,18 +28,9 @@ #define APP_DEFINED_HEAP_SIZE MBED_CONF_APP_HEAP_SIZE static uint8_t app_stack_heap[APP_DEFINED_HEAP_SIZE]; +static uint8_t mac[6] = {0}; static mem_stat_t heap_info; -#define BOARD 1 -#define CONFIG 2 -#if MBED_CONF_APP_BACKHAUL_MAC_SRC == BOARD -static uint8_t mac[6]; -#elif MBED_CONF_APP_BACKHAUL_MAC_SRC == CONFIG -static const uint8_t mac[] = MBED_CONF_APP_BACKHAUL_MAC; -#else -#error "MAC address not defined" -#endif - static DigitalOut led1(MBED_CONF_APP_LED); static Ticker led_ticker; @@ -66,23 +50,6 @@ printf("%s\n", str); } -#undef ETH -#undef SLIP -#undef EMAC -#define ETH 1 -#define SLIP 2 -#define EMAC 3 -#if MBED_CONF_APP_BACKHAUL_DRIVER == EMAC -static void (*emac_actual_cb)(uint8_t, int8_t); -static int8_t emac_driver_id; -static void emac_link_cb(bool up) -{ - if (emac_actual_cb) { - emac_actual_cb(up, emac_driver_id); - } -} -#endif - /** * \brief Initializes the SLIP MAC backhaul driver. * This function is called by the border router module. @@ -90,6 +57,8 @@ void backhaul_driver_init(void (*backhaul_driver_status_cb)(uint8_t, int8_t)) { // Values allowed in "backhaul-driver" option +#define ETH 0 +#define SLIP 1 #if MBED_CONF_APP_BACKHAUL_DRIVER == SLIP SlipMACDriver *pslipmacdriver; int8_t slipdrv_id = -1; @@ -118,37 +87,6 @@ } tr_error("Backhaul driver init failed, retval = %d", slipdrv_id); -#elif MBED_CONF_APP_BACKHAUL_DRIVER == EMAC -#undef EMAC - tr_info("Using EMAC backhaul driver..."); - NetworkInterface *net = NetworkInterface::get_default_instance(); - if (!net) { - tr_error("Default network interface not found"); - exit(1); - } - EMACInterface *emacif = net->emacInterface(); - if (!emacif) { - tr_error("Default interface is not EMAC-based"); - exit(1); - } - EMAC &emac = emacif->get_emac(); - Nanostack::EthernetInterface *ns_if; -#if MBED_CONF_APP_BACKHAUL_MAC_SRC == BOARD - /* Let the core code choose address - either from board or EMAC (for - * ETH and SLIP we pass in the board address already in mac[]) */ - nsapi_error_t err = Nanostack::get_instance().add_ethernet_interface(emac, true, &ns_if); - /* Read back what they chose into our mac[] */ - ns_if->get_mac_address(mac); -#else - nsapi_error_t err = Nanostack::get_instance().add_ethernet_interface(emac, true, &ns_if, mac); -#endif - if (err < 0) { - tr_error("Backhaul driver init failed, retval = %d", err); - } else { - emac_actual_cb = backhaul_driver_status_cb; - emac_driver_id = ns_if->get_driver_id(); - emac.set_link_state_cb(emac_link_cb); - } #elif MBED_CONF_APP_BACKHAUL_DRIVER == ETH tr_info("Using ETH backhaul driver..."); arm_eth_phy_device_register(mac, backhaul_driver_status_cb); @@ -156,9 +94,7 @@ #else #error "Unsupported backhaul driver" #endif -#undef SLIP -#undef ETH -#undef EMAC + } /** @@ -174,12 +110,20 @@ mbed_trace_print_function_set(trace_printer); mbed_trace_config_set(TRACE_MODE_COLOR | APP_TRACE_LEVEL | TRACE_CARRIAGE_RETURN); - // Have to let mesh_system do net_init_core in case we use - // Nanostack::add_ethernet_interface() - mesh_system_init(); +#define BOARD 0 +#define CONFIG 1 #if MBED_CONF_APP_BACKHAUL_MAC_SRC == BOARD + /* Setting the MAC Address from UID. + * Takes UID Mid low and UID low and shuffles them around. */ mbed_mac_address((char *)mac); +#elif MBED_CONF_APP_BACKHAUL_MAC_SRC == CONFIG + const uint8_t mac48[] = MBED_CONF_APP_BACKHAUL_MAC; + for (uint32_t i = 0; i < sizeof(mac); ++i) { + mac[i] = mac48[i]; + } +#else + #error "MAC address not defined" #endif if (MBED_CONF_APP_LED != NC) {