Library to easily communicate with XBee modules.

Fork of XBeeLib by Digi International Inc.

Committer:
spastor
Date:
Mon Jun 01 18:59:43 2015 +0200
Revision:
4:629712865107
Parent:
3:8662ebe83570
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 "802_Frames.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 OPTIONS_LEN 1
spastor 0:fcaad0dfa051 19 #define TX_REQUEST_OVERHEAD (FRAME_ID_LEN + ADDR64_LEN + OPTIONS_LEN)
spastor 0:fcaad0dfa051 20 #define TX_REQUEST_OVERHEAD2 (FRAME_ID_LEN + ADDR16_LEN + OPTIONS_LEN)
spastor 0:fcaad0dfa051 21
spastor 0:fcaad0dfa051 22 /** Class constructor */
spastor 0:fcaad0dfa051 23 TxFrame802::TxFrame802(uint64_t addr, uint8_t tx_options,
spastor 0:fcaad0dfa051 24 const uint8_t *const data, uint16_t len)
spastor 0:fcaad0dfa051 25 {
spastor 0:fcaad0dfa051 26 uint8_t frame_data[TX_REQUEST_OVERHEAD + len];
spastor 4:629712865107 27
spastor 0:fcaad0dfa051 28 _frame_id = get_next_frame_id();
spastor 0:fcaad0dfa051 29
spastor 0:fcaad0dfa051 30 /* copy the frame id, the 64bit remote address, the tx options byte
spastor 0:fcaad0dfa051 31 * and the frame data */
spastor 0:fcaad0dfa051 32
spastor 0:fcaad0dfa051 33 frame_data[0] = _frame_id;
spastor 0:fcaad0dfa051 34 rmemcpy(&frame_data[1], (const uint8_t *)&addr, sizeof addr);
spastor 0:fcaad0dfa051 35 frame_data[9] = tx_options;
spastor 4:629712865107 36
spastor 4:629712865107 37 if (len) {
spastor 0:fcaad0dfa051 38 memcpy(&frame_data[10], data, len);
spastor 4:629712865107 39 }
spastor 0:fcaad0dfa051 40
spastor 0:fcaad0dfa051 41 set_api_frame(TxReq64Bit, frame_data, TX_REQUEST_OVERHEAD + len);
spastor 0:fcaad0dfa051 42 }
spastor 0:fcaad0dfa051 43
spastor 0:fcaad0dfa051 44 /** Class constructor */
spastor 0:fcaad0dfa051 45 TxFrame802::TxFrame802(uint16_t addr16, uint8_t tx_options,
spastor 0:fcaad0dfa051 46 const uint8_t *const data, uint16_t len)
spastor 0:fcaad0dfa051 47 {
spastor 0:fcaad0dfa051 48 uint8_t frame_data[TX_REQUEST_OVERHEAD2 + len];
spastor 4:629712865107 49
spastor 0:fcaad0dfa051 50 _frame_id = get_next_frame_id();
spastor 0:fcaad0dfa051 51
spastor 0:fcaad0dfa051 52 /* copy the frame id, the 16bit remote address, the tx options byte
spastor 0:fcaad0dfa051 53 * and the frame data */
spastor 0:fcaad0dfa051 54
spastor 0:fcaad0dfa051 55 frame_data[0] = _frame_id;
spastor 0:fcaad0dfa051 56 frame_data[1] = (uint8_t)(addr16 >> 8);
spastor 0:fcaad0dfa051 57 frame_data[2] = (uint8_t)addr16;
spastor 0:fcaad0dfa051 58 frame_data[3] = tx_options;
spastor 4:629712865107 59
spastor 4:629712865107 60 if (len) {
spastor 0:fcaad0dfa051 61 memcpy(&frame_data[4], data, len);
spastor 4:629712865107 62 }
spastor 0:fcaad0dfa051 63
spastor 0:fcaad0dfa051 64 set_api_frame(TxReq16Bit, frame_data, TX_REQUEST_OVERHEAD2 + len);
spastor 0:fcaad0dfa051 65 }