Digi International Inc. / Mbed 2 deprecated XBeeDM_node_discovery

Dependencies:   XBeeLib mbed

Fork of XBeeZB_node_discovery by Digi International Inc.

Committer:
hbujanda
Date:
Thu May 14 16:24:21 2015 +0200
Revision:
5:6916f9c7bdb0
Child:
7:694d412d8a05
Automatic upload

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hbujanda 5:6916f9c7bdb0 1 /**
hbujanda 5:6916f9c7bdb0 2 * Copyright (c) 2015 Digi International Inc.,
hbujanda 5:6916f9c7bdb0 3 * All rights not expressly granted are reserved.
hbujanda 5:6916f9c7bdb0 4 *
hbujanda 5:6916f9c7bdb0 5 * This Source Code Form is subject to the terms of the Mozilla Public
hbujanda 5:6916f9c7bdb0 6 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
hbujanda 5:6916f9c7bdb0 7 * You can obtain one at http://mozilla.org/MPL/2.0/.
hbujanda 5:6916f9c7bdb0 8 *
hbujanda 5:6916f9c7bdb0 9 * Digi International Inc. 11001 Bren Road East, Minnetonka, MN 55343
hbujanda 5:6916f9c7bdb0 10 * =======================================================================
hbujanda 5:6916f9c7bdb0 11 */
hbujanda 5:6916f9c7bdb0 12
hbujanda 5:6916f9c7bdb0 13 #include "mbed.h"
hbujanda 5:6916f9c7bdb0 14 #include "XBeeLib.h"
hbujanda 5:6916f9c7bdb0 15 #if defined(ENABLE_LOGGING)
hbujanda 5:6916f9c7bdb0 16 #include "DigiLoggerMbedSerial.h"
hbujanda 5:6916f9c7bdb0 17 using namespace DigiLog;
hbujanda 5:6916f9c7bdb0 18 #endif
hbujanda 5:6916f9c7bdb0 19
hbujanda 5:6916f9c7bdb0 20 #define REMOTE_NODE_ID "MyNodeID" /* TODO: Write a node's NI here*/
hbujanda 5:6916f9c7bdb0 21
hbujanda 5:6916f9c7bdb0 22 using namespace XBeeLib;
hbujanda 5:6916f9c7bdb0 23
hbujanda 5:6916f9c7bdb0 24 Serial *log_serial;
hbujanda 5:6916f9c7bdb0 25
hbujanda 5:6916f9c7bdb0 26 XBeeZB * xbee = NULL;
hbujanda 5:6916f9c7bdb0 27
hbujanda 5:6916f9c7bdb0 28 void discovery_function(const RemoteXBeeZB& remote, char const * const node_id)
hbujanda 5:6916f9c7bdb0 29 {
hbujanda 5:6916f9c7bdb0 30 MBED_ASSERT(xbee != NULL);
hbujanda 5:6916f9c7bdb0 31
hbujanda 5:6916f9c7bdb0 32 const uint64_t remote_addr64 = remote.get_addr64();
hbujanda 5:6916f9c7bdb0 33
hbujanda 5:6916f9c7bdb0 34 log_serial->printf("Found device '%s' [%08x:%08x][%04X] sending a message to it\r\n", node_id, UINT64_HI32(remote_addr64), UINT64_LO32(remote_addr64), remote.get_addr16());
hbujanda 5:6916f9c7bdb0 35
hbujanda 5:6916f9c7bdb0 36 const char message[] = "Hello neighbor!";
hbujanda 5:6916f9c7bdb0 37 log_serial->printf("Sending data to remote device\r\n");
hbujanda 5:6916f9c7bdb0 38 const TxStatus txStatus = xbee->send_data(remote, (const uint8_t *)message, sizeof message - 1);
hbujanda 5:6916f9c7bdb0 39 if (txStatus != TxStatusSuccess) {
hbujanda 5:6916f9c7bdb0 40 log_serial->printf("Found an error while sending data %d\r\n", txStatus);
hbujanda 5:6916f9c7bdb0 41 }
hbujanda 5:6916f9c7bdb0 42 }
hbujanda 5:6916f9c7bdb0 43
hbujanda 5:6916f9c7bdb0 44 int main()
hbujanda 5:6916f9c7bdb0 45 {
hbujanda 5:6916f9c7bdb0 46 log_serial = new Serial(DEBUG_TX, DEBUG_RX);
hbujanda 5:6916f9c7bdb0 47 log_serial->baud(9600);
hbujanda 5:6916f9c7bdb0 48 log_serial->printf("Sample application to demo how to discover nodes in the ZigBee network and send a message to them\r\n\r\n");
hbujanda 5:6916f9c7bdb0 49 log_serial->printf(XB_LIB_BANNER);
hbujanda 5:6916f9c7bdb0 50
hbujanda 5:6916f9c7bdb0 51 #if defined(ENABLE_LOGGING)
hbujanda 5:6916f9c7bdb0 52 new DigiLoggerMbedSerial(log_serial, LogLevelInfo);
hbujanda 5:6916f9c7bdb0 53 #endif
hbujanda 5:6916f9c7bdb0 54
hbujanda 5:6916f9c7bdb0 55 xbee = new XBeeZB(RADIO_TX, RADIO_RX, RADIO_RESET, NC, NC, 9600);
hbujanda 5:6916f9c7bdb0 56
hbujanda 5:6916f9c7bdb0 57 /* Register callbacks */
hbujanda 5:6916f9c7bdb0 58 xbee->register_node_discovery_cb(&discovery_function);
hbujanda 5:6916f9c7bdb0 59
hbujanda 5:6916f9c7bdb0 60 RadioStatus const radioStatus = xbee->init();
hbujanda 5:6916f9c7bdb0 61 MBED_ASSERT(radioStatus == Success);
hbujanda 5:6916f9c7bdb0 62
hbujanda 5:6916f9c7bdb0 63 /* Wait until the device has joined the network */
hbujanda 5:6916f9c7bdb0 64 log_serial->printf("Waiting for device to join the network: ");
hbujanda 5:6916f9c7bdb0 65 while (!xbee->is_joined()) {
hbujanda 5:6916f9c7bdb0 66 wait_ms(1000);
hbujanda 5:6916f9c7bdb0 67 log_serial->printf(".");
hbujanda 5:6916f9c7bdb0 68 }
hbujanda 5:6916f9c7bdb0 69 log_serial->printf("OK\r\n");
hbujanda 5:6916f9c7bdb0 70
hbujanda 5:6916f9c7bdb0 71 log_serial->printf("Starting Node Discovery\r\n");
hbujanda 5:6916f9c7bdb0 72
hbujanda 5:6916f9c7bdb0 73 log_serial->printf("Trying to discover '%s' by its NI\r\n", REMOTE_NODE_ID);
hbujanda 5:6916f9c7bdb0 74 RemoteXBeeZB remote_node = xbee->get_remote_node_by_id(REMOTE_NODE_ID);
hbujanda 5:6916f9c7bdb0 75
hbujanda 5:6916f9c7bdb0 76 if (remote_node.is_valid()) {
hbujanda 5:6916f9c7bdb0 77 const uint64_t addr64 = remote_node.get_addr64();
hbujanda 5:6916f9c7bdb0 78 log_serial->printf("Found '%s'! [%08x:%08x|%04x]\r\n", REMOTE_NODE_ID, UINT64_HI32(addr64), UINT64_LO32(addr64), remote_node.get_addr16());
hbujanda 5:6916f9c7bdb0 79
hbujanda 5:6916f9c7bdb0 80 const char message[] = "Hello " REMOTE_NODE_ID "!";
hbujanda 5:6916f9c7bdb0 81 log_serial->printf("Sending data to remote device\r\n");
hbujanda 5:6916f9c7bdb0 82 const TxStatus txStatus = xbee->send_data(remote_node, (const uint8_t *)message, sizeof message - 1);
hbujanda 5:6916f9c7bdb0 83 if (txStatus != TxStatusSuccess) {
hbujanda 5:6916f9c7bdb0 84 log_serial->printf("Found an error while sending data %d\r\n", txStatus);
hbujanda 5:6916f9c7bdb0 85 }
hbujanda 5:6916f9c7bdb0 86 } else {
hbujanda 5:6916f9c7bdb0 87 log_serial->printf("Couldn't find '%s' node\r\n", REMOTE_NODE_ID);
hbujanda 5:6916f9c7bdb0 88 }
hbujanda 5:6916f9c7bdb0 89
hbujanda 5:6916f9c7bdb0 90 log_serial->printf("Starting Node Discovery\r\n");
hbujanda 5:6916f9c7bdb0 91 xbee->start_node_discovery();
hbujanda 5:6916f9c7bdb0 92
hbujanda 5:6916f9c7bdb0 93 while (true) {
hbujanda 5:6916f9c7bdb0 94 xbee->process_rx_frames();
hbujanda 5:6916f9c7bdb0 95 wait_ms(10);
hbujanda 5:6916f9c7bdb0 96 }
hbujanda 5:6916f9c7bdb0 97
hbujanda 5:6916f9c7bdb0 98 delete(log_serial);
hbujanda 5:6916f9c7bdb0 99 }