Library to easily communicate with XBee modules.

Fork of XBeeLib by Digi International Inc.

Committer:
spastor
Date:
Mon May 18 13:16:55 2015 +0200
Revision:
3:8662ebe83570
Parent:
0:fcaad0dfa051
Child:
4:629712865107
Automatic upload

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 "ZigbeeFrames.h"
spastor 0:fcaad0dfa051 14
spastor 0:fcaad0dfa051 15 #define FRAME_ID_LEN 1
spastor 0:fcaad0dfa051 16 #define ADDR64_LEN 8
spastor 0:fcaad0dfa051 17 #define ADDR16_LEN 2
spastor 0:fcaad0dfa051 18 #define BROADCAST_RADIOUS_LEN 1
spastor 0:fcaad0dfa051 19 #define OPTIONS_LEN 1
spastor 0:fcaad0dfa051 20 #define TX_REQUEST_OVERHEAD (FRAME_ID_LEN + ADDR64_LEN + \
spastor 0:fcaad0dfa051 21 ADDR16_LEN + BROADCAST_RADIOUS_LEN + \
spastor 0:fcaad0dfa051 22 OPTIONS_LEN)
spastor 0:fcaad0dfa051 23 #define SOURCE_EP_LEN 1
spastor 0:fcaad0dfa051 24 #define DEST_EP_LEN 1
spastor 0:fcaad0dfa051 25 #define CLUSTER_ID_LEN 2
spastor 0:fcaad0dfa051 26 #define PROFILE_ID_LEN 2
spastor 0:fcaad0dfa051 27
spastor 0:fcaad0dfa051 28 #define EXP_ADDR_OVERHEAD (TX_REQUEST_OVERHEAD + SOURCE_EP_LEN + \
spastor 0:fcaad0dfa051 29 DEST_EP_LEN + CLUSTER_ID_LEN + \
spastor 0:fcaad0dfa051 30 PROFILE_ID_LEN)
spastor 0:fcaad0dfa051 31
spastor 0:fcaad0dfa051 32 /** Class constructor */
spastor 0:fcaad0dfa051 33 TxFrameZB::TxFrameZB(uint64_t addr, uint16_t addr16, uint8_t broadcast_rad, uint8_t tx_opt,
spastor 0:fcaad0dfa051 34 const uint8_t *const data, uint16_t len)
spastor 0:fcaad0dfa051 35 {
spastor 0:fcaad0dfa051 36 uint8_t frame_data[TX_REQUEST_OVERHEAD + len];
spastor 0:fcaad0dfa051 37
spastor 0:fcaad0dfa051 38 _frame_id = get_next_frame_id();
spastor 0:fcaad0dfa051 39
spastor 0:fcaad0dfa051 40 /* copy the frame id, the 64bit remote address, the 16bit network address,
spastor 0:fcaad0dfa051 41 * the broad cast radious, the options byte and the frame data */
spastor 0:fcaad0dfa051 42
spastor 0:fcaad0dfa051 43 frame_data[0] = _frame_id;
spastor 0:fcaad0dfa051 44 rmemcpy(&frame_data[1], (const uint8_t *)&addr, sizeof addr);
spastor 0:fcaad0dfa051 45 frame_data[9] = (uint8_t)(addr16 >> 8);
spastor 0:fcaad0dfa051 46 frame_data[10] = (uint8_t)addr16;
spastor 0:fcaad0dfa051 47 frame_data[11] = broadcast_rad;
spastor 0:fcaad0dfa051 48 frame_data[12] = tx_opt;
spastor 0:fcaad0dfa051 49
spastor 0:fcaad0dfa051 50 if (len)
spastor 0:fcaad0dfa051 51 memcpy(&frame_data[13], data, len);
spastor 0:fcaad0dfa051 52
spastor 0:fcaad0dfa051 53 set_api_frame(TxReqZB, frame_data, TX_REQUEST_OVERHEAD + len);
spastor 0:fcaad0dfa051 54 }
spastor 0:fcaad0dfa051 55
spastor 0:fcaad0dfa051 56 /** Class constructor */
spastor 0:fcaad0dfa051 57 TxFrameZB::TxFrameZB(uint64_t addr, uint16_t addr16, uint8_t source_ep, uint8_t dest_ep,
spastor 0:fcaad0dfa051 58 uint16_t cluster_id, uint16_t profile_id, uint8_t broadcast_rad,
spastor 0:fcaad0dfa051 59 uint8_t tx_opt, const uint8_t *const data, uint16_t len)
spastor 0:fcaad0dfa051 60 {
spastor 0:fcaad0dfa051 61 uint8_t frame_data[EXP_ADDR_OVERHEAD + len];
spastor 0:fcaad0dfa051 62
spastor 0:fcaad0dfa051 63 _frame_id = get_next_frame_id();
spastor 0:fcaad0dfa051 64
spastor 0:fcaad0dfa051 65 /* copy the frame id, the 64bit remote address, the 16bit network address,
spastor 0:fcaad0dfa051 66 * the end point source and destination addresses, the cluster and profile IDs,
spastor 0:fcaad0dfa051 67 * the broad cast radious, the options byte and the frame data */
spastor 0:fcaad0dfa051 68
spastor 0:fcaad0dfa051 69 frame_data[0] = _frame_id;
spastor 0:fcaad0dfa051 70 rmemcpy(&frame_data[1], (const uint8_t *)&addr, sizeof addr);
spastor 0:fcaad0dfa051 71 frame_data[9] = (uint8_t)(addr16 >> 8);
spastor 0:fcaad0dfa051 72 frame_data[10] = (uint8_t)addr16;
spastor 0:fcaad0dfa051 73 frame_data[11] = source_ep;
spastor 0:fcaad0dfa051 74 frame_data[12] = dest_ep;
spastor 0:fcaad0dfa051 75 frame_data[13] = (uint8_t)(cluster_id >> 8);
spastor 0:fcaad0dfa051 76 frame_data[14] = (uint8_t)cluster_id;
spastor 0:fcaad0dfa051 77 frame_data[15] = (uint8_t)(profile_id >> 8);
spastor 0:fcaad0dfa051 78 frame_data[16] = (uint8_t)profile_id;
spastor 0:fcaad0dfa051 79 frame_data[17] = broadcast_rad;
spastor 0:fcaad0dfa051 80 frame_data[18] = tx_opt;
spastor 0:fcaad0dfa051 81
spastor 0:fcaad0dfa051 82 if (len)
spastor 0:fcaad0dfa051 83 memcpy(&frame_data[19], data, len);
spastor 0:fcaad0dfa051 84
spastor 0:fcaad0dfa051 85 set_api_frame(ExpAddrCmd, frame_data, EXP_ADDR_OVERHEAD + len);
spastor 0:fcaad0dfa051 86 }