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.h@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 | #if !defined(__API_FRAME_H_) |
spastor | 0:fcaad0dfa051 | 14 | #define __API_FRAME_H_ |
spastor | 0:fcaad0dfa051 | 15 | |
spastor | 0:fcaad0dfa051 | 16 | #include "XBee/Addresses.h" |
spastor | 0:fcaad0dfa051 | 17 | |
spastor | 0:fcaad0dfa051 | 18 | /** Class for XBee API frames */ |
spastor | 0:fcaad0dfa051 | 19 | class ApiFrame |
spastor | 0:fcaad0dfa051 | 20 | { |
spastor | 0:fcaad0dfa051 | 21 | /** Static variable that contains the last frame ID value assigned */ |
spastor | 0:fcaad0dfa051 | 22 | static uint8_t last_frame_id; |
spastor | 0:fcaad0dfa051 | 23 | |
spastor | 0:fcaad0dfa051 | 24 | public: |
spastor | 0:fcaad0dfa051 | 25 | /** List of API frames. Note that not all frames are supported by all radios */ |
spastor | 0:fcaad0dfa051 | 26 | enum ApiFrameType { |
spastor | 0:fcaad0dfa051 | 27 | |
spastor | 0:fcaad0dfa051 | 28 | TxReq64Bit = 0x00, /**< TxReq64Bit: Only for 802.15.4 modules */ |
spastor | 0:fcaad0dfa051 | 29 | TxReq16Bit = 0x01, /**< TxReq16Bit: Only for 802.15.4 modules */ |
spastor | 0:fcaad0dfa051 | 30 | AtCmd = 0x08, /**< AtCmd */ |
spastor | 0:fcaad0dfa051 | 31 | AtCmdQueuePV = 0x09, /**< AtCmdQueuePV */ |
spastor | 0:fcaad0dfa051 | 32 | TxReqZB = 0x10, /**< TxReqZB: Only for ZigBee modules */ |
spastor | 0:fcaad0dfa051 | 33 | ExpAddrCmd = 0x11, /**< ExpAddrCmd: Only for ZigBee modules */ |
spastor | 0:fcaad0dfa051 | 34 | RemoteCmdReq = 0x17, /**< RemoteCmdReq */ |
spastor | 0:fcaad0dfa051 | 35 | CreateSrcRoute = 0x21, /**< CreateSrcRoute */ |
spastor | 0:fcaad0dfa051 | 36 | RxPacket64Bit = 0x80, /**< RxPacket64Bit: Only for 802.15.4 modules */ |
spastor | 0:fcaad0dfa051 | 37 | RxPacket16Bit = 0x81, /**< RxPacket16Bit: Only for 802.15.4 modules */ |
spastor | 0:fcaad0dfa051 | 38 | Io64Bit = 0x82, /**< Io64Bit: Only for 802.15.4 modules */ |
spastor | 0:fcaad0dfa051 | 39 | Io16Bit = 0x83, /**< Io16Bit */ |
spastor | 0:fcaad0dfa051 | 40 | AtCmdResp = 0x88, /**< AtCmdResp */ |
spastor | 0:fcaad0dfa051 | 41 | TxStatus = 0x89, /**< TxStatus */ |
spastor | 0:fcaad0dfa051 | 42 | AtModemStatus = 0x8A, /**< AtModemStatus */ |
spastor | 0:fcaad0dfa051 | 43 | TxStatusZB = 0x8B, /**< TxStatusZB: Only for ZigBee modules */ |
spastor | 0:fcaad0dfa051 | 44 | RxPacketAO0 = 0x90, /**< RxPacketAO0: Only for ZigBee modules */ |
spastor | 0:fcaad0dfa051 | 45 | RxPacketAO1 = 0x91, /**< RxPacketAO1: Only for ZigBee modules */ |
spastor | 0:fcaad0dfa051 | 46 | IoSampleRxZB = 0x92, /**< IoSampleRxZB: Only for ZigBee modules */ |
spastor | 0:fcaad0dfa051 | 47 | SensorRxIndAO0 = 0x94, /**< SensorRxIndAO0: Only for ZigBee modules */ |
spastor | 0:fcaad0dfa051 | 48 | NodeIdentIndAO0 = 0x95, /**< NodeIdentIndAO0: Only for ZigBee modules */ |
spastor | 0:fcaad0dfa051 | 49 | RemoteCmdResp = 0x97, /**< RemoteCmdResp */ |
spastor | 0:fcaad0dfa051 | 50 | OtaFwUpStatus = 0xA0, /**< OtaFwUpStatus */ |
spastor | 0:fcaad0dfa051 | 51 | RouteRecInd = 0xA1, /**< RouteRecInd */ |
spastor | 0:fcaad0dfa051 | 52 | Many2OneRRInd = 0xA3, /**< Many2OneRRInd */ |
spastor | 0:fcaad0dfa051 | 53 | Invalid = ~0, /**< Invalid */ |
spastor | 0:fcaad0dfa051 | 54 | }; |
spastor | 0:fcaad0dfa051 | 55 | |
spastor | 0:fcaad0dfa051 | 56 | /** Default constructor */ |
spastor | 0:fcaad0dfa051 | 57 | ApiFrame(); |
spastor | 0:fcaad0dfa051 | 58 | |
spastor | 0:fcaad0dfa051 | 59 | /** Constructor |
spastor | 0:fcaad0dfa051 | 60 | * |
spastor | 0:fcaad0dfa051 | 61 | * @param len length of the API frame (will allocate len bytes). |
spastor | 0:fcaad0dfa051 | 62 | */ |
spastor | 0:fcaad0dfa051 | 63 | ApiFrame(uint16_t len); |
spastor | 0:fcaad0dfa051 | 64 | |
spastor | 0:fcaad0dfa051 | 65 | /** Constructor |
spastor | 0:fcaad0dfa051 | 66 | * |
spastor | 0:fcaad0dfa051 | 67 | * @param type frame type of this api frame. |
spastor | 0:fcaad0dfa051 | 68 | * @param data pointer to frame data payload. |
spastor | 0:fcaad0dfa051 | 69 | * @param len length of the payload. |
spastor | 0:fcaad0dfa051 | 70 | */ |
spastor | 0:fcaad0dfa051 | 71 | ApiFrame(ApiFrameType type, const uint8_t *data, uint16_t len); |
spastor | 0:fcaad0dfa051 | 72 | |
spastor | 0:fcaad0dfa051 | 73 | /** Destructor */ |
spastor | 0:fcaad0dfa051 | 74 | ~ApiFrame(); |
spastor | 0:fcaad0dfa051 | 75 | |
spastor | 0:fcaad0dfa051 | 76 | ApiFrame(const ApiFrame& other); /* Intentionally not implemented */ |
spastor | 0:fcaad0dfa051 | 77 | |
spastor | 0:fcaad0dfa051 | 78 | /** get_frame_type gets the type of the frame |
spastor | 0:fcaad0dfa051 | 79 | * |
spastor | 0:fcaad0dfa051 | 80 | * @returns the type of this frame. |
spastor | 0:fcaad0dfa051 | 81 | */ |
spastor | 0:fcaad0dfa051 | 82 | ApiFrameType get_frame_type() const; |
spastor | 0:fcaad0dfa051 | 83 | |
spastor | 0:fcaad0dfa051 | 84 | /** dump dumps the information of this frame */ |
spastor | 0:fcaad0dfa051 | 85 | void dump() const; |
spastor | 0:fcaad0dfa051 | 86 | |
spastor | 0:fcaad0dfa051 | 87 | /** dump_if dumps the information of the frame if the frame type matches |
spastor | 0:fcaad0dfa051 | 88 | * with the parameter. |
spastor | 0:fcaad0dfa051 | 89 | * |
spastor | 0:fcaad0dfa051 | 90 | * @param type dump the frame info/data if the frame type matches with type. |
spastor | 0:fcaad0dfa051 | 91 | */ |
spastor | 0:fcaad0dfa051 | 92 | void dump_if(ApiFrameType type); |
spastor | 0:fcaad0dfa051 | 93 | |
spastor | 0:fcaad0dfa051 | 94 | |
spastor | 0:fcaad0dfa051 | 95 | /** set_frame_type sets the type of the frame to type. |
spastor | 0:fcaad0dfa051 | 96 | * |
spastor | 0:fcaad0dfa051 | 97 | * @param type the type we want to set on the frame. |
spastor | 0:fcaad0dfa051 | 98 | */ |
spastor | 0:fcaad0dfa051 | 99 | void set_frame_type(ApiFrameType type); |
spastor | 0:fcaad0dfa051 | 100 | |
spastor | 0:fcaad0dfa051 | 101 | /** get_data_len gets the length of the frame data payload. |
spastor | 0:fcaad0dfa051 | 102 | * |
spastor | 0:fcaad0dfa051 | 103 | * @returns the length of the data payload. |
spastor | 0:fcaad0dfa051 | 104 | */ |
spastor | 0:fcaad0dfa051 | 105 | uint16_t get_data_len() const; |
spastor | 0:fcaad0dfa051 | 106 | |
spastor | 0:fcaad0dfa051 | 107 | /** set_data_len sets the length of the frame data payload. |
spastor | 0:fcaad0dfa051 | 108 | * |
spastor | 0:fcaad0dfa051 | 109 | * @param len the length of the data payload will be set on this frame. |
spastor | 0:fcaad0dfa051 | 110 | */ |
spastor | 0:fcaad0dfa051 | 111 | void set_data_len(uint16_t len); |
spastor | 0:fcaad0dfa051 | 112 | |
spastor | 0:fcaad0dfa051 | 113 | /** get_data returns a pointer to the frame data payload. |
spastor | 0:fcaad0dfa051 | 114 | * |
spastor | 0:fcaad0dfa051 | 115 | * @returns a pointer to the frame data payload. |
spastor | 0:fcaad0dfa051 | 116 | */ |
spastor | 0:fcaad0dfa051 | 117 | const uint8_t *get_data() const; |
spastor | 0:fcaad0dfa051 | 118 | |
spastor | 0:fcaad0dfa051 | 119 | /** get_data_at returns the byte at index offset. |
spastor | 0:fcaad0dfa051 | 120 | * |
spastor | 0:fcaad0dfa051 | 121 | * @param index offset of the byte we want to get. |
spastor | 0:fcaad0dfa051 | 122 | * @returns the byte at index offset. |
spastor | 0:fcaad0dfa051 | 123 | */ |
spastor | 0:fcaad0dfa051 | 124 | uint8_t get_data_at(uint16_t index) const; |
spastor | 0:fcaad0dfa051 | 125 | |
spastor | 0:fcaad0dfa051 | 126 | /** set_data sets data byte at the specified index or offset. |
spastor | 0:fcaad0dfa051 | 127 | * |
spastor | 0:fcaad0dfa051 | 128 | * @param data byte that will be set at index position. |
spastor | 0:fcaad0dfa051 | 129 | * @param index offset of the byte we want to set. |
spastor | 0:fcaad0dfa051 | 130 | */ |
spastor | 0:fcaad0dfa051 | 131 | void set_data(uint8_t data, uint16_t index); |
spastor | 0:fcaad0dfa051 | 132 | |
spastor | 0:fcaad0dfa051 | 133 | /** get_frame_id returns the frame id of this frame. |
spastor | 0:fcaad0dfa051 | 134 | * |
spastor | 0:fcaad0dfa051 | 135 | * @returns the frame id of this frame. |
spastor | 0:fcaad0dfa051 | 136 | */ |
spastor | 0:fcaad0dfa051 | 137 | uint8_t get_frame_id() const; |
spastor | 0:fcaad0dfa051 | 138 | |
spastor | 0:fcaad0dfa051 | 139 | static uint8_t get_current_frame_id() |
spastor | 0:fcaad0dfa051 | 140 | { |
spastor | 0:fcaad0dfa051 | 141 | return last_frame_id; |
spastor | 0:fcaad0dfa051 | 142 | } |
spastor | 0:fcaad0dfa051 | 143 | |
spastor | 0:fcaad0dfa051 | 144 | protected: |
spastor | 0:fcaad0dfa051 | 145 | /** Type of this frame */ |
spastor | 0:fcaad0dfa051 | 146 | ApiFrameType _type; |
spastor | 0:fcaad0dfa051 | 147 | |
spastor | 0:fcaad0dfa051 | 148 | /** length of the payload, excluding the frame type */ |
spastor | 0:fcaad0dfa051 | 149 | uint16_t _data_frame_len; |
spastor | 0:fcaad0dfa051 | 150 | |
spastor | 0:fcaad0dfa051 | 151 | /** pointer to the frame data */ |
spastor | 0:fcaad0dfa051 | 152 | uint8_t *_data; |
spastor | 0:fcaad0dfa051 | 153 | |
spastor | 0:fcaad0dfa051 | 154 | /** True if the constructor allocates the data. Needed to delete it on the destructor */ |
spastor | 0:fcaad0dfa051 | 155 | bool _alloc_data; |
spastor | 0:fcaad0dfa051 | 156 | |
spastor | 0:fcaad0dfa051 | 157 | /** Frame ID of this frame */ |
spastor | 0:fcaad0dfa051 | 158 | uint8_t _frame_id; |
spastor | 0:fcaad0dfa051 | 159 | |
spastor | 0:fcaad0dfa051 | 160 | /** get_next_frame_id - returns the next frame ID secuentially, skipping the value 0 |
spastor | 0:fcaad0dfa051 | 161 | * |
spastor | 0:fcaad0dfa051 | 162 | * @returns the next frame ID that should be assigned to a frame |
spastor | 0:fcaad0dfa051 | 163 | */ |
spastor | 0:fcaad0dfa051 | 164 | uint8_t get_next_frame_id(); |
spastor | 0:fcaad0dfa051 | 165 | |
spastor | 0:fcaad0dfa051 | 166 | /** set_api_frame sets several members |
spastor | 0:fcaad0dfa051 | 167 | * |
spastor | 0:fcaad0dfa051 | 168 | * @param type frame type of this api frame. |
spastor | 0:fcaad0dfa051 | 169 | * @param data pointer to frame data payload. |
spastor | 0:fcaad0dfa051 | 170 | * @param len length of the payload. |
spastor | 0:fcaad0dfa051 | 171 | */ |
spastor | 0:fcaad0dfa051 | 172 | void set_api_frame(ApiFrameType type, const uint8_t *data, uint16_t len); |
spastor | 0:fcaad0dfa051 | 173 | }; |
spastor | 0:fcaad0dfa051 | 174 | |
spastor | 0:fcaad0dfa051 | 175 | #endif /* __API_FRAME_H_ */ |
spastor | 0:fcaad0dfa051 | 176 | |
spastor | 0:fcaad0dfa051 | 177 |