Nanostack Border Router is a generic mbed border router implementation that provides the 6LoWPAN ND or Thread border router initialization logic.

Committer:
mbed_official
Date:
Tue Jun 05 10:45:19 2018 +0100
Revision:
63:d01e7341699d
Parent:
61:b80d169da384
Child:
65:92e581c01e8c
Revert support for EMAC backhaul driver

Revert EMAC changes pending 5.9.0 release.

This reverts commits 918feb6..935d777 (PRs #85 and #108).

.
Commit copied from https://github.com/ARMmbed/nanostack-border-router

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 0:85f4174a8e29 1 /*
mbed_official 0:85f4174a8e29 2 * Copyright (c) 2016 ARM Limited. All rights reserved.
mbed_official 0:85f4174a8e29 3 */
mbed_official 0:85f4174a8e29 4
mbed_official 0:85f4174a8e29 5 #include <string.h>
mbed_official 0:85f4174a8e29 6
mbed_official 0:85f4174a8e29 7
mbed_official 0:85f4174a8e29 8 #include "mbed.h"
mbed_official 0:85f4174a8e29 9 #include "borderrouter_tasklet.h"
mbed_official 0:85f4174a8e29 10 #include "drivers/eth_driver.h"
mbed_official 0:85f4174a8e29 11 #include "sal-stack-nanostack-slip/Slip.h"
mbed_official 0:85f4174a8e29 12
mbed_official 0:85f4174a8e29 13 #ifdef MBED_CONF_APP_DEBUG_TRACE
mbed_official 0:85f4174a8e29 14 #if MBED_CONF_APP_DEBUG_TRACE == 1
mbed_official 0:85f4174a8e29 15 #define APP_TRACE_LEVEL TRACE_ACTIVE_LEVEL_DEBUG
mbed_official 0:85f4174a8e29 16 #else
mbed_official 0:85f4174a8e29 17 #define APP_TRACE_LEVEL TRACE_ACTIVE_LEVEL_INFO
mbed_official 0:85f4174a8e29 18 #endif
mbed_official 0:85f4174a8e29 19 #endif //MBED_CONF_APP_DEBUG_TRACE
mbed_official 0:85f4174a8e29 20
mbed_official 0:85f4174a8e29 21 #include "ns_hal_init.h"
mbed_official 0:85f4174a8e29 22 #include "cmsis_os.h"
mbed_official 0:85f4174a8e29 23 #include "arm_hal_interrupt.h"
mbed_official 0:85f4174a8e29 24
mbed_official 0:85f4174a8e29 25
mbed_official 5:9c0320afe010 26 #include "mbed_trace.h"
mbed_official 0:85f4174a8e29 27 #define TRACE_GROUP "app"
mbed_official 0:85f4174a8e29 28
mbed_official 0:85f4174a8e29 29 #define APP_DEFINED_HEAP_SIZE MBED_CONF_APP_HEAP_SIZE
mbed_official 0:85f4174a8e29 30 static uint8_t app_stack_heap[APP_DEFINED_HEAP_SIZE];
mbed_official 63:d01e7341699d 31 static uint8_t mac[6] = {0};
mbed_official 13:993808eb2e9c 32 static mem_stat_t heap_info;
mbed_official 0:85f4174a8e29 33
mbed_official 0:85f4174a8e29 34 static DigitalOut led1(MBED_CONF_APP_LED);
mbed_official 0:85f4174a8e29 35
mbed_official 0:85f4174a8e29 36 static Ticker led_ticker;
mbed_official 0:85f4174a8e29 37
mbed_official 0:85f4174a8e29 38 static void app_heap_error_handler(heap_fail_t event);
mbed_official 0:85f4174a8e29 39
mbed_official 0:85f4174a8e29 40 static void toggle_led1()
mbed_official 0:85f4174a8e29 41 {
mbed_official 0:85f4174a8e29 42 led1 = !led1;
mbed_official 0:85f4174a8e29 43 }
mbed_official 0:85f4174a8e29 44
mbed_official 0:85f4174a8e29 45 /**
mbed_official 0:85f4174a8e29 46 * \brief Prints string to serial (adds CRLF).
mbed_official 0:85f4174a8e29 47 */
mbed_official 0:85f4174a8e29 48 static void trace_printer(const char *str)
mbed_official 0:85f4174a8e29 49 {
mbed_official 0:85f4174a8e29 50 printf("%s\n", str);
mbed_official 0:85f4174a8e29 51 }
mbed_official 0:85f4174a8e29 52
mbed_official 0:85f4174a8e29 53 /**
mbed_official 0:85f4174a8e29 54 * \brief Initializes the SLIP MAC backhaul driver.
mbed_official 0:85f4174a8e29 55 * This function is called by the border router module.
mbed_official 0:85f4174a8e29 56 */
mbed_official 0:85f4174a8e29 57 void backhaul_driver_init(void (*backhaul_driver_status_cb)(uint8_t, int8_t))
mbed_official 0:85f4174a8e29 58 {
mbed_official 0:85f4174a8e29 59 // Values allowed in "backhaul-driver" option
mbed_official 63:d01e7341699d 60 #define ETH 0
mbed_official 63:d01e7341699d 61 #define SLIP 1
mbed_official 0:85f4174a8e29 62 #if MBED_CONF_APP_BACKHAUL_DRIVER == SLIP
mbed_official 0:85f4174a8e29 63 SlipMACDriver *pslipmacdriver;
mbed_official 0:85f4174a8e29 64 int8_t slipdrv_id = -1;
mbed_official 0:85f4174a8e29 65 #if defined(MBED_CONF_APP_SLIP_HW_FLOW_CONTROL)
mbed_official 0:85f4174a8e29 66 pslipmacdriver = new SlipMACDriver(SERIAL_TX, SERIAL_RX, SERIAL_RTS, SERIAL_CTS);
mbed_official 0:85f4174a8e29 67 #else
mbed_official 0:85f4174a8e29 68 pslipmacdriver = new SlipMACDriver(SERIAL_TX, SERIAL_RX);
mbed_official 0:85f4174a8e29 69 #endif
mbed_official 0:85f4174a8e29 70
mbed_official 0:85f4174a8e29 71 if (pslipmacdriver == NULL) {
mbed_official 0:85f4174a8e29 72 tr_error("Unable to create SLIP driver");
mbed_official 0:85f4174a8e29 73 return;
mbed_official 0:85f4174a8e29 74 }
mbed_official 0:85f4174a8e29 75
mbed_official 0:85f4174a8e29 76 tr_info("Using SLIP backhaul driver...");
mbed_official 0:85f4174a8e29 77
mbed_official 0:85f4174a8e29 78 #ifdef MBED_CONF_APP_SLIP_SERIAL_BAUD_RATE
mbed_official 0:85f4174a8e29 79 slipdrv_id = pslipmacdriver->Slip_Init(mac, MBED_CONF_APP_SLIP_SERIAL_BAUD_RATE);
mbed_official 0:85f4174a8e29 80 #else
mbed_official 0:85f4174a8e29 81 tr_warning("baud rate for slip not defined");
mbed_official 0:85f4174a8e29 82 #endif
mbed_official 0:85f4174a8e29 83
mbed_official 0:85f4174a8e29 84 if (slipdrv_id >= 0) {
mbed_official 0:85f4174a8e29 85 backhaul_driver_status_cb(1, slipdrv_id);
mbed_official 0:85f4174a8e29 86 return;
mbed_official 0:85f4174a8e29 87 }
mbed_official 0:85f4174a8e29 88
mbed_official 0:85f4174a8e29 89 tr_error("Backhaul driver init failed, retval = %d", slipdrv_id);
mbed_official 0:85f4174a8e29 90 #elif MBED_CONF_APP_BACKHAUL_DRIVER == ETH
mbed_official 0:85f4174a8e29 91 tr_info("Using ETH backhaul driver...");
mbed_official 0:85f4174a8e29 92 arm_eth_phy_device_register(mac, backhaul_driver_status_cb);
mbed_official 0:85f4174a8e29 93 return;
mbed_official 0:85f4174a8e29 94 #else
mbed_official 0:85f4174a8e29 95 #error "Unsupported backhaul driver"
mbed_official 0:85f4174a8e29 96 #endif
mbed_official 63:d01e7341699d 97
mbed_official 0:85f4174a8e29 98 }
mbed_official 0:85f4174a8e29 99
mbed_official 0:85f4174a8e29 100 /**
mbed_official 0:85f4174a8e29 101 * \brief The entry point for this application.
mbed_official 0:85f4174a8e29 102 * Sets up the application and starts the border router module.
mbed_official 0:85f4174a8e29 103 */
mbed_official 0:85f4174a8e29 104
mbed_official 0:85f4174a8e29 105 int main(int argc, char **argv)
mbed_official 0:85f4174a8e29 106 {
mbed_official 13:993808eb2e9c 107 ns_hal_init(app_stack_heap, APP_DEFINED_HEAP_SIZE, app_heap_error_handler, &heap_info);
mbed_official 0:85f4174a8e29 108
mbed_official 5:9c0320afe010 109 mbed_trace_init(); // set up the tracing library
mbed_official 5:9c0320afe010 110 mbed_trace_print_function_set(trace_printer);
mbed_official 15:173f354b131f 111 mbed_trace_config_set(TRACE_MODE_COLOR | APP_TRACE_LEVEL | TRACE_CARRIAGE_RETURN);
mbed_official 0:85f4174a8e29 112
mbed_official 0:85f4174a8e29 113
mbed_official 63:d01e7341699d 114 #define BOARD 0
mbed_official 63:d01e7341699d 115 #define CONFIG 1
mbed_official 0:85f4174a8e29 116 #if MBED_CONF_APP_BACKHAUL_MAC_SRC == BOARD
mbed_official 63:d01e7341699d 117 /* Setting the MAC Address from UID.
mbed_official 63:d01e7341699d 118 * Takes UID Mid low and UID low and shuffles them around. */
mbed_official 0:85f4174a8e29 119 mbed_mac_address((char *)mac);
mbed_official 63:d01e7341699d 120 #elif MBED_CONF_APP_BACKHAUL_MAC_SRC == CONFIG
mbed_official 63:d01e7341699d 121 const uint8_t mac48[] = MBED_CONF_APP_BACKHAUL_MAC;
mbed_official 63:d01e7341699d 122 for (uint32_t i = 0; i < sizeof(mac); ++i) {
mbed_official 63:d01e7341699d 123 mac[i] = mac48[i];
mbed_official 63:d01e7341699d 124 }
mbed_official 63:d01e7341699d 125 #else
mbed_official 63:d01e7341699d 126 #error "MAC address not defined"
mbed_official 0:85f4174a8e29 127 #endif
mbed_official 0:85f4174a8e29 128
mbed_official 2:1411fd11ccdd 129 if (MBED_CONF_APP_LED != NC) {
mbed_official 2:1411fd11ccdd 130 led_ticker.attach_us(toggle_led1, 500000);
mbed_official 2:1411fd11ccdd 131 }
mbed_official 7:571f9a90b972 132 border_router_tasklet_start();
mbed_official 0:85f4174a8e29 133 }
mbed_official 0:85f4174a8e29 134
mbed_official 0:85f4174a8e29 135 /**
mbed_official 0:85f4174a8e29 136 * \brief Error handler for errors in dynamic memory handling.
mbed_official 0:85f4174a8e29 137 */
mbed_official 0:85f4174a8e29 138 static void app_heap_error_handler(heap_fail_t event)
mbed_official 0:85f4174a8e29 139 {
mbed_official 0:85f4174a8e29 140 tr_error("Dyn mem error %x", (int8_t)event);
mbed_official 0:85f4174a8e29 141
mbed_official 0:85f4174a8e29 142 switch (event) {
mbed_official 0:85f4174a8e29 143 case NS_DYN_MEM_NULL_FREE:
mbed_official 0:85f4174a8e29 144 break;
mbed_official 0:85f4174a8e29 145 case NS_DYN_MEM_DOUBLE_FREE:
mbed_official 0:85f4174a8e29 146 break;
mbed_official 0:85f4174a8e29 147 case NS_DYN_MEM_ALLOCATE_SIZE_NOT_VALID:
mbed_official 0:85f4174a8e29 148 break;
mbed_official 0:85f4174a8e29 149 case NS_DYN_MEM_POINTER_NOT_VALID:
mbed_official 0:85f4174a8e29 150 break;
mbed_official 0:85f4174a8e29 151 case NS_DYN_MEM_HEAP_SECTOR_CORRUPTED:
mbed_official 0:85f4174a8e29 152 break;
mbed_official 0:85f4174a8e29 153 case NS_DYN_MEM_HEAP_SECTOR_UNITIALIZED:
mbed_official 0:85f4174a8e29 154 break;
mbed_official 0:85f4174a8e29 155 default:
mbed_official 0:85f4174a8e29 156 break;
mbed_official 0:85f4174a8e29 157 }
mbed_official 0:85f4174a8e29 158
mbed_official 0:85f4174a8e29 159 while (1);
mbed_official 0:85f4174a8e29 160 }
mbed_official 13:993808eb2e9c 161