802.15.4 Receive Data example for mbed XBeeLib By Digi

Dependencies:   XBeeLib mbed

Description

This example shows how to receive data from a remote XBee802 module.
A remote XBee module sends a packet to our local XBee module though the air. The local XBee module receives the packet and sends it to the mbed module through the serial port. This library decodes the packet and calls a user defined method to process the packet.

See Receiving Data from other module chapter for more information.

Common Setup

Make sure you have a valid Example Common Setup

Example Setup

This example does not require any additional setup.

Running the example

Build and deploy the example to the mbed module.
Reset the mbed module so the example starts. You should see the example debug information through the debug interface configured in the 'Local Setup' chapter.

While the example is running, go to the "Console" tab of the X-CTU connected to the remote XBee module. Press the "Add API frame to the list" and paste following bytes that create a new broadcast transmit request packet:

7E 00 19 10 01 00 00 00 00 00 00 FF FF FF FE 00 00 48 65 6C 6C 6F 20 58 42 65 65 21 5A

Select the frame and press the "Send selected frame" button to send the frame ("Hello XBee!") to the XBee network.

Verify that the local XBee module has received the frame by accessing the debug interface console terminal. If it was successful, the "Hello XBee!" message will be displayed there.

Committer:
hbujanda
Date:
Wed Apr 29 17:58:10 2015 +0200
Revision:
0:155647ac203f
Child:
2:1a8a4587b870
Automatic upload

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hbujanda 0:155647ac203f 1 /**
hbujanda 0:155647ac203f 2 * Copyright (c) 2015 Digi International Inc.,
hbujanda 0:155647ac203f 3 * All rights not expressly granted are reserved.
hbujanda 0:155647ac203f 4 *
hbujanda 0:155647ac203f 5 * This Source Code Form is subject to the terms of the Mozilla Public
hbujanda 0:155647ac203f 6 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
hbujanda 0:155647ac203f 7 * You can obtain one at http://mozilla.org/MPL/2.0/.
hbujanda 0:155647ac203f 8 *
hbujanda 0:155647ac203f 9 * Digi International Inc. 11001 Bren Road East, Minnetonka, MN 55343
hbujanda 0:155647ac203f 10 * =======================================================================
hbujanda 0:155647ac203f 11 */
hbujanda 0:155647ac203f 12
hbujanda 0:155647ac203f 13 #include "mbed.h"
hbujanda 0:155647ac203f 14 #include "XBeeLib.h"
hbujanda 0:155647ac203f 15 #if defined(ENABLE_LOGGING)
hbujanda 0:155647ac203f 16 #include "DigiLoggerMbedSerial.h"
hbujanda 0:155647ac203f 17 using namespace DigiLog;
hbujanda 0:155647ac203f 18 #endif
hbujanda 0:155647ac203f 19
hbujanda 0:155647ac203f 20 using namespace XBeeLib;
hbujanda 0:155647ac203f 21
hbujanda 0:155647ac203f 22 Serial *log_serial;
hbujanda 0:155647ac203f 23
hbujanda 0:155647ac203f 24 static void receive_cb(const RemoteXBee802& remote, bool broadcast, const uint8_t *const data, uint16_t len)
hbujanda 0:155647ac203f 25 {
hbujanda 0:155647ac203f 26 if (remote.is_valid_addr16b()) {
hbujanda 0:155647ac203f 27 uint16_t remote16;
hbujanda 0:155647ac203f 28 remote.get_addr(&remote16);
hbujanda 0:155647ac203f 29
hbujanda 0:155647ac203f 30 log_serial->printf("\r\nGot a %s 16-bit RX packet [%04x], len %d\r\nData: ", broadcast ? "BROADCAST" : "UNICAST", remote16, len);
hbujanda 0:155647ac203f 31 } else {
hbujanda 0:155647ac203f 32 Addr64 remote64;
hbujanda 0:155647ac203f 33 remote.get_addr(&remote64);
hbujanda 0:155647ac203f 34
hbujanda 0:155647ac203f 35 log_serial->printf("\r\nGot a %s 64-bit RX packet [%08x:%08x], len %d\r\nData: ", broadcast ? "BROADCAST" : "UNICAST",
hbujanda 0:155647ac203f 36 remote64.get_high32(), remote64.get_low32(), len);
hbujanda 0:155647ac203f 37 }
hbujanda 0:155647ac203f 38
hbujanda 0:155647ac203f 39 for (int i = 0; i < len; i++)
hbujanda 0:155647ac203f 40 log_serial->printf("%02x ", data[i]);
hbujanda 0:155647ac203f 41
hbujanda 0:155647ac203f 42 log_serial->printf("\r\n");
hbujanda 0:155647ac203f 43 }
hbujanda 0:155647ac203f 44
hbujanda 0:155647ac203f 45 int main()
hbujanda 0:155647ac203f 46 {
hbujanda 0:155647ac203f 47 log_serial = new Serial(DEBUG_TX, DEBUG_RX);
hbujanda 0:155647ac203f 48 log_serial->baud(9600);
hbujanda 0:155647ac203f 49 log_serial->printf("Sample application to demo how to receive unicast and broadcast data with the XBee802\r\n\r\n");
hbujanda 0:155647ac203f 50 log_serial->printf(XB_LIB_BANNER);
hbujanda 0:155647ac203f 51
hbujanda 0:155647ac203f 52 #if defined(ENABLE_LOGGING)
hbujanda 0:155647ac203f 53 new DigiLoggerMbedSerial(log_serial, LogLevelInfo);
hbujanda 0:155647ac203f 54 #endif
hbujanda 0:155647ac203f 55
hbujanda 0:155647ac203f 56 XBee802 xbee = XBee802(RADIO_TX, RADIO_RX, RADIO_RESET, NC, NC, 9600);
hbujanda 0:155647ac203f 57
hbujanda 0:155647ac203f 58 /* Register callback */
hbujanda 0:155647ac203f 59 xbee.register_receive_cb(&receive_cb);
hbujanda 0:155647ac203f 60
hbujanda 0:155647ac203f 61 RadioStatus const radioStatus = xbee.init();
hbujanda 0:155647ac203f 62 MBED_ASSERT(radioStatus == Success);
hbujanda 0:155647ac203f 63
hbujanda 0:155647ac203f 64 while (true) {
hbujanda 0:155647ac203f 65 xbee.process_rx_frames();
hbujanda 0:155647ac203f 66 wait_ms(100);
hbujanda 0:155647ac203f 67 log_serial->printf(".");
hbujanda 0:155647ac203f 68 }
hbujanda 0:155647ac203f 69
hbujanda 0:155647ac203f 70 delete(log_serial);
hbujanda 0:155647ac203f 71 }