Nanostack Border Router is a generic mbed border router implementation that provides the 6LoWPAN ND or Thread border router initialization logic.
source/border_router_main.cpp@0:85f4174a8e29, 2017-03-09 (annotated)
- Committer:
- mbed_official
- Date:
- Thu Mar 09 17:47:03 2017 +0000
- Revision:
- 0:85f4174a8e29
- Child:
- 2:1411fd11ccdd
Initial commit.
Commit copied from https://github.com/ARMmbed/nanostack-border-router
Who changed what in which revision?
User | Revision | Line number | New 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 | 0:85f4174a8e29 | 26 | #include "ns_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 | 0:85f4174a8e29 | 31 | static uint8_t mac[6] = {0}; |
mbed_official | 0:85f4174a8e29 | 32 | |
mbed_official | 0:85f4174a8e29 | 33 | static DigitalOut led1(MBED_CONF_APP_LED); |
mbed_official | 0:85f4174a8e29 | 34 | |
mbed_official | 0:85f4174a8e29 | 35 | static Ticker led_ticker; |
mbed_official | 0:85f4174a8e29 | 36 | |
mbed_official | 0:85f4174a8e29 | 37 | static void app_heap_error_handler(heap_fail_t event); |
mbed_official | 0:85f4174a8e29 | 38 | |
mbed_official | 0:85f4174a8e29 | 39 | static void toggle_led1() |
mbed_official | 0:85f4174a8e29 | 40 | { |
mbed_official | 0:85f4174a8e29 | 41 | led1 = !led1; |
mbed_official | 0:85f4174a8e29 | 42 | } |
mbed_official | 0:85f4174a8e29 | 43 | |
mbed_official | 0:85f4174a8e29 | 44 | /** |
mbed_official | 0:85f4174a8e29 | 45 | * \brief Prints string to serial (adds CRLF). |
mbed_official | 0:85f4174a8e29 | 46 | */ |
mbed_official | 0:85f4174a8e29 | 47 | static void trace_printer(const char *str) |
mbed_official | 0:85f4174a8e29 | 48 | { |
mbed_official | 0:85f4174a8e29 | 49 | printf("%s\n", str); |
mbed_official | 0:85f4174a8e29 | 50 | } |
mbed_official | 0:85f4174a8e29 | 51 | |
mbed_official | 0:85f4174a8e29 | 52 | /** |
mbed_official | 0:85f4174a8e29 | 53 | * \brief Initializes the SLIP MAC backhaul driver. |
mbed_official | 0:85f4174a8e29 | 54 | * This function is called by the border router module. |
mbed_official | 0:85f4174a8e29 | 55 | */ |
mbed_official | 0:85f4174a8e29 | 56 | void backhaul_driver_init(void (*backhaul_driver_status_cb)(uint8_t, int8_t)) |
mbed_official | 0:85f4174a8e29 | 57 | { |
mbed_official | 0:85f4174a8e29 | 58 | // Values allowed in "backhaul-driver" option |
mbed_official | 0:85f4174a8e29 | 59 | #define ETH 0 |
mbed_official | 0:85f4174a8e29 | 60 | #define SLIP 1 |
mbed_official | 0:85f4174a8e29 | 61 | #if MBED_CONF_APP_BACKHAUL_DRIVER == SLIP |
mbed_official | 0:85f4174a8e29 | 62 | SlipMACDriver *pslipmacdriver; |
mbed_official | 0:85f4174a8e29 | 63 | int8_t slipdrv_id = -1; |
mbed_official | 0:85f4174a8e29 | 64 | #if defined(MBED_CONF_APP_SLIP_HW_FLOW_CONTROL) |
mbed_official | 0:85f4174a8e29 | 65 | pslipmacdriver = new SlipMACDriver(SERIAL_TX, SERIAL_RX, SERIAL_RTS, SERIAL_CTS); |
mbed_official | 0:85f4174a8e29 | 66 | #else |
mbed_official | 0:85f4174a8e29 | 67 | pslipmacdriver = new SlipMACDriver(SERIAL_TX, SERIAL_RX); |
mbed_official | 0:85f4174a8e29 | 68 | #endif |
mbed_official | 0:85f4174a8e29 | 69 | |
mbed_official | 0:85f4174a8e29 | 70 | if (pslipmacdriver == NULL) { |
mbed_official | 0:85f4174a8e29 | 71 | tr_error("Unable to create SLIP driver"); |
mbed_official | 0:85f4174a8e29 | 72 | return; |
mbed_official | 0:85f4174a8e29 | 73 | } |
mbed_official | 0:85f4174a8e29 | 74 | |
mbed_official | 0:85f4174a8e29 | 75 | tr_info("Using SLIP backhaul driver..."); |
mbed_official | 0:85f4174a8e29 | 76 | |
mbed_official | 0:85f4174a8e29 | 77 | #ifdef MBED_CONF_APP_SLIP_SERIAL_BAUD_RATE |
mbed_official | 0:85f4174a8e29 | 78 | slipdrv_id = pslipmacdriver->Slip_Init(mac, MBED_CONF_APP_SLIP_SERIAL_BAUD_RATE); |
mbed_official | 0:85f4174a8e29 | 79 | #else |
mbed_official | 0:85f4174a8e29 | 80 | tr_warning("baud rate for slip not defined"); |
mbed_official | 0:85f4174a8e29 | 81 | #endif |
mbed_official | 0:85f4174a8e29 | 82 | |
mbed_official | 0:85f4174a8e29 | 83 | if (slipdrv_id >= 0) { |
mbed_official | 0:85f4174a8e29 | 84 | backhaul_driver_status_cb(1, slipdrv_id); |
mbed_official | 0:85f4174a8e29 | 85 | return; |
mbed_official | 0:85f4174a8e29 | 86 | } |
mbed_official | 0:85f4174a8e29 | 87 | |
mbed_official | 0:85f4174a8e29 | 88 | tr_error("Backhaul driver init failed, retval = %d", slipdrv_id); |
mbed_official | 0:85f4174a8e29 | 89 | #elif MBED_CONF_APP_BACKHAUL_DRIVER == ETH |
mbed_official | 0:85f4174a8e29 | 90 | tr_info("Using ETH backhaul driver..."); |
mbed_official | 0:85f4174a8e29 | 91 | arm_eth_phy_device_register(mac, backhaul_driver_status_cb); |
mbed_official | 0:85f4174a8e29 | 92 | return; |
mbed_official | 0:85f4174a8e29 | 93 | #else |
mbed_official | 0:85f4174a8e29 | 94 | #error "Unsupported backhaul driver" |
mbed_official | 0:85f4174a8e29 | 95 | #endif |
mbed_official | 0:85f4174a8e29 | 96 | |
mbed_official | 0:85f4174a8e29 | 97 | } |
mbed_official | 0:85f4174a8e29 | 98 | |
mbed_official | 0:85f4174a8e29 | 99 | /** |
mbed_official | 0:85f4174a8e29 | 100 | * \brief The entry point for this application. |
mbed_official | 0:85f4174a8e29 | 101 | * Sets up the application and starts the border router module. |
mbed_official | 0:85f4174a8e29 | 102 | */ |
mbed_official | 0:85f4174a8e29 | 103 | |
mbed_official | 0:85f4174a8e29 | 104 | int main(int argc, char **argv) |
mbed_official | 0:85f4174a8e29 | 105 | { |
mbed_official | 0:85f4174a8e29 | 106 | ns_hal_init(app_stack_heap, APP_DEFINED_HEAP_SIZE, app_heap_error_handler, 0); |
mbed_official | 0:85f4174a8e29 | 107 | |
mbed_official | 0:85f4174a8e29 | 108 | trace_init(); // set up the tracing library |
mbed_official | 0:85f4174a8e29 | 109 | set_trace_print_function(trace_printer); |
mbed_official | 0:85f4174a8e29 | 110 | set_trace_config(TRACE_MODE_COLOR | APP_TRACE_LEVEL | TRACE_CARRIAGE_RETURN); |
mbed_official | 0:85f4174a8e29 | 111 | |
mbed_official | 0:85f4174a8e29 | 112 | |
mbed_official | 0:85f4174a8e29 | 113 | #define BOARD 0 |
mbed_official | 0:85f4174a8e29 | 114 | #define CONFIG 1 |
mbed_official | 0:85f4174a8e29 | 115 | #if MBED_CONF_APP_BACKHAUL_MAC_SRC == BOARD |
mbed_official | 0:85f4174a8e29 | 116 | /* Setting the MAC Address from UID. |
mbed_official | 0:85f4174a8e29 | 117 | * Takes UID Mid low and UID low and shuffles them around. */ |
mbed_official | 0:85f4174a8e29 | 118 | mbed_mac_address((char *)mac); |
mbed_official | 0:85f4174a8e29 | 119 | #elif MBED_CONF_APP_BACKHAUL_MAC_SRC == CONFIG |
mbed_official | 0:85f4174a8e29 | 120 | const uint8_t mac48[] = MBED_CONF_APP_BACKHAUL_MAC; |
mbed_official | 0:85f4174a8e29 | 121 | for (uint32_t i = 0; i < sizeof(mac); ++i) { |
mbed_official | 0:85f4174a8e29 | 122 | mac[i] = mac48[i]; |
mbed_official | 0:85f4174a8e29 | 123 | } |
mbed_official | 0:85f4174a8e29 | 124 | #else |
mbed_official | 0:85f4174a8e29 | 125 | #error "MAC address not defined" |
mbed_official | 0:85f4174a8e29 | 126 | #endif |
mbed_official | 0:85f4174a8e29 | 127 | |
mbed_official | 0:85f4174a8e29 | 128 | led_ticker.attach_us(toggle_led1, 500000); |
mbed_official | 0:85f4174a8e29 | 129 | border_router_start(); |
mbed_official | 0:85f4174a8e29 | 130 | } |
mbed_official | 0:85f4174a8e29 | 131 | |
mbed_official | 0:85f4174a8e29 | 132 | /** |
mbed_official | 0:85f4174a8e29 | 133 | * \brief Error handler for errors in dynamic memory handling. |
mbed_official | 0:85f4174a8e29 | 134 | */ |
mbed_official | 0:85f4174a8e29 | 135 | static void app_heap_error_handler(heap_fail_t event) |
mbed_official | 0:85f4174a8e29 | 136 | { |
mbed_official | 0:85f4174a8e29 | 137 | tr_error("Dyn mem error %x", (int8_t)event); |
mbed_official | 0:85f4174a8e29 | 138 | |
mbed_official | 0:85f4174a8e29 | 139 | switch (event) { |
mbed_official | 0:85f4174a8e29 | 140 | case NS_DYN_MEM_NULL_FREE: |
mbed_official | 0:85f4174a8e29 | 141 | break; |
mbed_official | 0:85f4174a8e29 | 142 | case NS_DYN_MEM_DOUBLE_FREE: |
mbed_official | 0:85f4174a8e29 | 143 | break; |
mbed_official | 0:85f4174a8e29 | 144 | case NS_DYN_MEM_ALLOCATE_SIZE_NOT_VALID: |
mbed_official | 0:85f4174a8e29 | 145 | break; |
mbed_official | 0:85f4174a8e29 | 146 | case NS_DYN_MEM_POINTER_NOT_VALID: |
mbed_official | 0:85f4174a8e29 | 147 | break; |
mbed_official | 0:85f4174a8e29 | 148 | case NS_DYN_MEM_HEAP_SECTOR_CORRUPTED: |
mbed_official | 0:85f4174a8e29 | 149 | break; |
mbed_official | 0:85f4174a8e29 | 150 | case NS_DYN_MEM_HEAP_SECTOR_UNITIALIZED: |
mbed_official | 0:85f4174a8e29 | 151 | break; |
mbed_official | 0:85f4174a8e29 | 152 | default: |
mbed_official | 0:85f4174a8e29 | 153 | break; |
mbed_official | 0:85f4174a8e29 | 154 | } |
mbed_official | 0:85f4174a8e29 | 155 | |
mbed_official | 0:85f4174a8e29 | 156 | while (1); |
mbed_official | 0:85f4174a8e29 | 157 | } |