Library to easily communicate with XBee modules.

Fork of XBeeLib by Digi International Inc.

Committer:
basvuyk
Date:
Tue Mar 27 14:13:12 2018 +0000
Revision:
10:273032d9299a
Parent:
4:629712865107
Slave V1.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
spastor 0:fcaad0dfa051 1 /**
spastor 0:fcaad0dfa051 2 * Copyright (c) 2015 Digi International Inc.,
spastor 0:fcaad0dfa051 3 * All rights not expressly granted are reserved.
spastor 0:fcaad0dfa051 4 *
spastor 0:fcaad0dfa051 5 * This Source Code Form is subject to the terms of the Mozilla Public
spastor 0:fcaad0dfa051 6 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
spastor 0:fcaad0dfa051 7 * You can obtain one at http://mozilla.org/MPL/2.0/.
spastor 0:fcaad0dfa051 8 *
spastor 0:fcaad0dfa051 9 * Digi International Inc. 11001 Bren Road East, Minnetonka, MN 55343
spastor 0:fcaad0dfa051 10 * =======================================================================
spastor 0:fcaad0dfa051 11 */
spastor 0:fcaad0dfa051 12
spastor 0:fcaad0dfa051 13 #include "FH_RxPacketZB.h"
spastor 0:fcaad0dfa051 14
spastor 0:fcaad0dfa051 15 using namespace XBeeLib;
spastor 0:fcaad0dfa051 16
spastor 0:fcaad0dfa051 17 /** Class constructor */
spastor 0:fcaad0dfa051 18 FH_RxPacketZB::FH_RxPacketZB() : FrameHandler(ApiFrame::RxPacketAO0), receive_cb(NULL)
spastor 0:fcaad0dfa051 19 {
spastor 0:fcaad0dfa051 20 }
spastor 0:fcaad0dfa051 21
spastor 0:fcaad0dfa051 22 /** Class destructor */
spastor 0:fcaad0dfa051 23 FH_RxPacketZB::~FH_RxPacketZB()
spastor 0:fcaad0dfa051 24 {
spastor 0:fcaad0dfa051 25 }
spastor 0:fcaad0dfa051 26
spastor 0:fcaad0dfa051 27 void FH_RxPacketZB::register_receive_cb(receive_zb_cb_t function)
spastor 0:fcaad0dfa051 28 {
spastor 4:629712865107 29 receive_cb = function;
spastor 0:fcaad0dfa051 30 }
spastor 0:fcaad0dfa051 31
spastor 0:fcaad0dfa051 32 void FH_RxPacketZB::unregister_receive_cb(void)
spastor 0:fcaad0dfa051 33 {
spastor 4:629712865107 34 receive_cb = NULL;
spastor 0:fcaad0dfa051 35 }
spastor 0:fcaad0dfa051 36
spastor 0:fcaad0dfa051 37 /* ZB RX packet offsets */
spastor 0:fcaad0dfa051 38 #define ZB_RX_ADDR16_MSB_OFFSET 8
spastor 0:fcaad0dfa051 39 #define ZB_RX_ADDR16_LSB_OFFSET 9
spastor 0:fcaad0dfa051 40 #define ZB_RX_OPTIONS_OFFSET 10
spastor 0:fcaad0dfa051 41 #define ZB_RX_DATA_OFFSET 11
spastor 0:fcaad0dfa051 42 #define ZB_RX_OVERHEAD (8+2+1)
spastor 0:fcaad0dfa051 43
spastor 0:fcaad0dfa051 44 #define BROADCAST_PACKET 0x02
spastor 0:fcaad0dfa051 45
spastor 0:fcaad0dfa051 46 void FH_RxPacketZB::process_frame_data(const ApiFrame *const frame)
spastor 0:fcaad0dfa051 47 {
spastor 4:629712865107 48 /* The caller checks that the type matches, so no need to check it here again */
spastor 0:fcaad0dfa051 49
spastor 4:629712865107 50 if (receive_cb == NULL) {
spastor 0:fcaad0dfa051 51 return;
spastor 4:629712865107 52 }
spastor 0:fcaad0dfa051 53
spastor 0:fcaad0dfa051 54 /* We got a rx packet, decode it... */
spastor 0:fcaad0dfa051 55 const uint8_t *datap = frame->get_data();
spastor 0:fcaad0dfa051 56 const uint64_t sender64 = addr64_from_uint8_t(datap);
spastor 0:fcaad0dfa051 57 const uint16_t sender16 = ADDR16(datap[ZB_RX_ADDR16_MSB_OFFSET], datap[ZB_RX_ADDR16_LSB_OFFSET]);
spastor 0:fcaad0dfa051 58 const uint8_t rx_options = datap[ZB_RX_OPTIONS_OFFSET];
spastor 0:fcaad0dfa051 59 const RemoteXBeeZB sender = RemoteXBeeZB(sender64, sender16);
spastor 0:fcaad0dfa051 60
spastor 0:fcaad0dfa051 61 receive_cb(sender, rx_options & BROADCAST_PACKET, &datap[ZB_RX_DATA_OFFSET], frame->get_data_len() - ZB_RX_OVERHEAD);
spastor 0:fcaad0dfa051 62 }