Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of XBeeLib by
Frames/ApiFrame.cpp@0:fcaad0dfa051, 2015-05-08 (annotated)
- Committer:
- spastor
- Date:
- Fri May 08 11:50:56 2015 +0200
- Revision:
- 0:fcaad0dfa051
- Child:
- 3:8662ebe83570
Automatic upload
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 | 0:fcaad0dfa051 | 42 | if (last_frame_id == 0) |
spastor | 0:fcaad0dfa051 | 43 | last_frame_id++; |
spastor | 0:fcaad0dfa051 | 44 | |
spastor | 0:fcaad0dfa051 | 45 | return last_frame_id; |
spastor | 0:fcaad0dfa051 | 46 | } |
spastor | 0:fcaad0dfa051 | 47 | |
spastor | 0:fcaad0dfa051 | 48 | ApiFrame::ApiFrame(ApiFrameType type, const uint8_t *data, uint16_t len) |
spastor | 0:fcaad0dfa051 | 49 | { |
spastor | 0:fcaad0dfa051 | 50 | this->_data = NULL; |
spastor | 0:fcaad0dfa051 | 51 | set_api_frame(type, data, len); |
spastor | 0:fcaad0dfa051 | 52 | } |
spastor | 0:fcaad0dfa051 | 53 | |
spastor | 0:fcaad0dfa051 | 54 | void ApiFrame::set_api_frame(ApiFrameType type, const uint8_t *data, uint16_t len) |
spastor | 0:fcaad0dfa051 | 55 | { |
spastor | 0:fcaad0dfa051 | 56 | this->_type = type; |
spastor | 0:fcaad0dfa051 | 57 | this->_data_frame_len = len; |
spastor | 0:fcaad0dfa051 | 58 | if (this->_data) |
spastor | 0:fcaad0dfa051 | 59 | delete _data; |
spastor | 0:fcaad0dfa051 | 60 | this->_data = new uint8_t[len]; |
spastor | 0:fcaad0dfa051 | 61 | this->_alloc_data = true; |
spastor | 0:fcaad0dfa051 | 62 | assert(this->_data != NULL); |
spastor | 0:fcaad0dfa051 | 63 | memcpy((void *)this->_data, data, len); |
spastor | 0:fcaad0dfa051 | 64 | } |
spastor | 0:fcaad0dfa051 | 65 | |
spastor | 0:fcaad0dfa051 | 66 | ApiFrame::~ApiFrame() |
spastor | 0:fcaad0dfa051 | 67 | { |
spastor | 0:fcaad0dfa051 | 68 | if (this->_data != NULL && this->_alloc_data) { |
spastor | 0:fcaad0dfa051 | 69 | delete[] this->_data; |
spastor | 0:fcaad0dfa051 | 70 | } |
spastor | 0:fcaad0dfa051 | 71 | } |
spastor | 0:fcaad0dfa051 | 72 | |
spastor | 0:fcaad0dfa051 | 73 | void ApiFrame::dump(void) const |
spastor | 0:fcaad0dfa051 | 74 | { |
spastor | 0:fcaad0dfa051 | 75 | #if defined(ENABLE_LOGGING) |
spastor | 0:fcaad0dfa051 | 76 | digi_log(LogLevelFrameData, "API frame: type %02x, len %d\r\n", this->_type, this->_data_frame_len); |
spastor | 0:fcaad0dfa051 | 77 | for (int i = 0; i < this->_data_frame_len; i++) |
spastor | 0:fcaad0dfa051 | 78 | digi_log(LogLevelFrameData, "%02x ", this->_data[i]); |
spastor | 0:fcaad0dfa051 | 79 | digi_log(LogLevelFrameData, "\r\n"); |
spastor | 0:fcaad0dfa051 | 80 | #endif |
spastor | 0:fcaad0dfa051 | 81 | } |
spastor | 0:fcaad0dfa051 | 82 | |
spastor | 0:fcaad0dfa051 | 83 | void ApiFrame::dump_if(ApiFrameType type) |
spastor | 0:fcaad0dfa051 | 84 | { |
spastor | 0:fcaad0dfa051 | 85 | if (_type != type) |
spastor | 0:fcaad0dfa051 | 86 | return; |
spastor | 0:fcaad0dfa051 | 87 | dump(); |
spastor | 0:fcaad0dfa051 | 88 | } |
spastor | 0:fcaad0dfa051 | 89 | |
spastor | 0:fcaad0dfa051 | 90 | ApiFrame::ApiFrameType ApiFrame::get_frame_type() const |
spastor | 0:fcaad0dfa051 | 91 | { |
spastor | 0:fcaad0dfa051 | 92 | return _type; |
spastor | 0:fcaad0dfa051 | 93 | } |
spastor | 0:fcaad0dfa051 | 94 | |
spastor | 0:fcaad0dfa051 | 95 | void ApiFrame::set_frame_type(ApiFrameType type) |
spastor | 0:fcaad0dfa051 | 96 | { |
spastor | 0:fcaad0dfa051 | 97 | _type = type; |
spastor | 0:fcaad0dfa051 | 98 | } |
spastor | 0:fcaad0dfa051 | 99 | |
spastor | 0:fcaad0dfa051 | 100 | uint16_t ApiFrame::get_data_len() const |
spastor | 0:fcaad0dfa051 | 101 | { |
spastor | 0:fcaad0dfa051 | 102 | return _data_frame_len; |
spastor | 0:fcaad0dfa051 | 103 | } |
spastor | 0:fcaad0dfa051 | 104 | |
spastor | 0:fcaad0dfa051 | 105 | void ApiFrame::set_data_len(uint16_t len) |
spastor | 0:fcaad0dfa051 | 106 | { |
spastor | 0:fcaad0dfa051 | 107 | _data_frame_len = len; |
spastor | 0:fcaad0dfa051 | 108 | } |
spastor | 0:fcaad0dfa051 | 109 | |
spastor | 0:fcaad0dfa051 | 110 | const uint8_t *ApiFrame::get_data() const |
spastor | 0:fcaad0dfa051 | 111 | { |
spastor | 0:fcaad0dfa051 | 112 | return _data; |
spastor | 0:fcaad0dfa051 | 113 | } |
spastor | 0:fcaad0dfa051 | 114 | |
spastor | 0:fcaad0dfa051 | 115 | uint8_t ApiFrame::get_data_at(uint16_t index) const |
spastor | 0:fcaad0dfa051 | 116 | { |
spastor | 0:fcaad0dfa051 | 117 | return *(_data + index); |
spastor | 0:fcaad0dfa051 | 118 | } |
spastor | 0:fcaad0dfa051 | 119 | |
spastor | 0:fcaad0dfa051 | 120 | void ApiFrame::set_data(uint8_t d, uint16_t index) |
spastor | 0:fcaad0dfa051 | 121 | { |
spastor | 0:fcaad0dfa051 | 122 | *(_data + index) = d; |
spastor | 0:fcaad0dfa051 | 123 | } |
spastor | 0:fcaad0dfa051 | 124 | |
spastor | 0:fcaad0dfa051 | 125 | /* Returns the frame_id of this frame */ |
spastor | 0:fcaad0dfa051 | 126 | uint8_t ApiFrame::get_frame_id() const |
spastor | 0:fcaad0dfa051 | 127 | { |
spastor | 0:fcaad0dfa051 | 128 | return _frame_id; |
spastor | 0:fcaad0dfa051 | 129 | } |
spastor | 0:fcaad0dfa051 | 130 | |
spastor | 0:fcaad0dfa051 | 131 | |
spastor | 0:fcaad0dfa051 | 132 |