XBee modules

Dependencies:   DigiLogger

Fork of XBeeLib by Digi International Inc.

Committer:
Javier117
Date:
Tue Oct 18 20:47:11 2016 +0000
Revision:
10:6b922add27d7
Parent:
4:629712865107
No DebugLogger

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 "mbed.h"
spastor 0:fcaad0dfa051 14 #include "XBee/XBee.h"
spastor 0:fcaad0dfa051 15 #include "ApiFrame.h"
spastor 0:fcaad0dfa051 16
spastor 0:fcaad0dfa051 17 using namespace XBeeLib;
spastor 0:fcaad0dfa051 18
spastor 0:fcaad0dfa051 19 uint8_t ApiFrame::last_frame_id = 0;
spastor 0:fcaad0dfa051 20
spastor 0:fcaad0dfa051 21 ApiFrame::ApiFrame(void)
spastor 0:fcaad0dfa051 22 {
spastor 0:fcaad0dfa051 23 this->_type = Invalid;
spastor 0:fcaad0dfa051 24 this->_data = NULL;
spastor 0:fcaad0dfa051 25 this->_data_frame_len = 0;
spastor 0:fcaad0dfa051 26 this->_alloc_data = false;
spastor 0:fcaad0dfa051 27 _frame_id = get_next_frame_id();
spastor 0:fcaad0dfa051 28 }
spastor 0:fcaad0dfa051 29
spastor 0:fcaad0dfa051 30 ApiFrame::ApiFrame(uint16_t len)
spastor 0:fcaad0dfa051 31 {
spastor 0:fcaad0dfa051 32 this->_type = Invalid;
spastor 0:fcaad0dfa051 33 this->_data = new uint8_t[len];
spastor 0:fcaad0dfa051 34 this->_alloc_data = true;
spastor 0:fcaad0dfa051 35 this->_data_frame_len = len;
spastor 0:fcaad0dfa051 36 this->_frame_id = get_next_frame_id();
spastor 0:fcaad0dfa051 37 }
spastor 0:fcaad0dfa051 38
spastor 0:fcaad0dfa051 39 uint8_t ApiFrame::get_next_frame_id(void)
spastor 0:fcaad0dfa051 40 {
spastor 0:fcaad0dfa051 41 last_frame_id++;
spastor 4:629712865107 42 if (last_frame_id == 0) {
spastor 0:fcaad0dfa051 43 last_frame_id++;
spastor 4:629712865107 44 }
spastor 4:629712865107 45
spastor 0:fcaad0dfa051 46 return last_frame_id;
spastor 0:fcaad0dfa051 47 }
spastor 0:fcaad0dfa051 48
spastor 0:fcaad0dfa051 49 ApiFrame::ApiFrame(ApiFrameType type, const uint8_t *data, uint16_t len)
spastor 0:fcaad0dfa051 50 {
spastor 0:fcaad0dfa051 51 this->_data = NULL;
spastor 0:fcaad0dfa051 52 set_api_frame(type, data, len);
spastor 0:fcaad0dfa051 53 }
spastor 0:fcaad0dfa051 54
spastor 0:fcaad0dfa051 55 void ApiFrame::set_api_frame(ApiFrameType type, const uint8_t *data, uint16_t len)
spastor 0:fcaad0dfa051 56 {
spastor 0:fcaad0dfa051 57 this->_type = type;
spastor 0:fcaad0dfa051 58 this->_data_frame_len = len;
spastor 4:629712865107 59 if (this->_data) {
spastor 0:fcaad0dfa051 60 delete _data;
spastor 4:629712865107 61 }
spastor 0:fcaad0dfa051 62 this->_data = new uint8_t[len];
spastor 0:fcaad0dfa051 63 this->_alloc_data = true;
spastor 0:fcaad0dfa051 64 assert(this->_data != NULL);
spastor 0:fcaad0dfa051 65 memcpy((void *)this->_data, data, len);
spastor 0:fcaad0dfa051 66 }
spastor 0:fcaad0dfa051 67
spastor 0:fcaad0dfa051 68 ApiFrame::~ApiFrame()
spastor 0:fcaad0dfa051 69 {
spastor 0:fcaad0dfa051 70 if (this->_data != NULL && this->_alloc_data) {
spastor 0:fcaad0dfa051 71 delete[] this->_data;
spastor 0:fcaad0dfa051 72 }
spastor 0:fcaad0dfa051 73 }
spastor 0:fcaad0dfa051 74
spastor 0:fcaad0dfa051 75 void ApiFrame::dump(void) const
spastor 0:fcaad0dfa051 76 {
spastor 0:fcaad0dfa051 77 #if defined(ENABLE_LOGGING)
spastor 0:fcaad0dfa051 78 digi_log(LogLevelFrameData, "API frame: type %02x, len %d\r\n", this->_type, this->_data_frame_len);
spastor 4:629712865107 79 for (int i = 0; i < this->_data_frame_len; i++)
spastor 0:fcaad0dfa051 80 digi_log(LogLevelFrameData, "%02x ", this->_data[i]);
spastor 0:fcaad0dfa051 81 digi_log(LogLevelFrameData, "\r\n");
spastor 0:fcaad0dfa051 82 #endif
spastor 0:fcaad0dfa051 83 }
spastor 0:fcaad0dfa051 84
spastor 0:fcaad0dfa051 85 void ApiFrame::dump_if(ApiFrameType type)
spastor 0:fcaad0dfa051 86 {
spastor 4:629712865107 87 if (_type != type) {
spastor 0:fcaad0dfa051 88 return;
spastor 4:629712865107 89 }
spastor 4:629712865107 90 dump();
spastor 0:fcaad0dfa051 91 }
spastor 4:629712865107 92
spastor 0:fcaad0dfa051 93 ApiFrame::ApiFrameType ApiFrame::get_frame_type() const
spastor 0:fcaad0dfa051 94 {
spastor 0:fcaad0dfa051 95 return _type;
spastor 0:fcaad0dfa051 96 }
spastor 0:fcaad0dfa051 97
spastor 0:fcaad0dfa051 98 void ApiFrame::set_frame_type(ApiFrameType type)
spastor 0:fcaad0dfa051 99 {
spastor 0:fcaad0dfa051 100 _type = type;
spastor 0:fcaad0dfa051 101 }
spastor 0:fcaad0dfa051 102
spastor 0:fcaad0dfa051 103 uint16_t ApiFrame::get_data_len() const
spastor 0:fcaad0dfa051 104 {
spastor 0:fcaad0dfa051 105 return _data_frame_len;
spastor 4:629712865107 106 }
spastor 0:fcaad0dfa051 107
spastor 4:629712865107 108 void ApiFrame::set_data_len(uint16_t len)
spastor 0:fcaad0dfa051 109 {
spastor 0:fcaad0dfa051 110 _data_frame_len = len;
spastor 4:629712865107 111 }
spastor 0:fcaad0dfa051 112
spastor 0:fcaad0dfa051 113 const uint8_t *ApiFrame::get_data() const
spastor 0:fcaad0dfa051 114 {
spastor 0:fcaad0dfa051 115 return _data;
spastor 4:629712865107 116 }
spastor 0:fcaad0dfa051 117
spastor 0:fcaad0dfa051 118 uint8_t ApiFrame::get_data_at(uint16_t index) const
spastor 0:fcaad0dfa051 119 {
spastor 0:fcaad0dfa051 120 return *(_data + index);
spastor 4:629712865107 121 }
spastor 0:fcaad0dfa051 122
spastor 4:629712865107 123 void ApiFrame::set_data(uint8_t d, uint16_t index)
spastor 0:fcaad0dfa051 124 {
spastor 0:fcaad0dfa051 125 *(_data + index) = d;
spastor 4:629712865107 126 }
spastor 0:fcaad0dfa051 127
spastor 0:fcaad0dfa051 128 /* Returns the frame_id of this frame */
spastor 0:fcaad0dfa051 129 uint8_t ApiFrame::get_frame_id() const
spastor 0:fcaad0dfa051 130 {
spastor 0:fcaad0dfa051 131 return _frame_id;
spastor 0:fcaad0dfa051 132 }