Library to easily communicate with XBee modules.
Fork of XBeeLib by
Frames/ApiFrame.cpp@10:055802660f2e, 2018-03-26 (annotated)
- Committer:
- basvuyk
- Date:
- Mon Mar 26 13:45:24 2018 +0000
- Revision:
- 10:055802660f2e
- Parent:
- 4:629712865107
xbee changes
Who changed what in which revision?
User | Revision | Line number | New 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 | } |