Library to easily communicate with XBee modules.

Fork of XBeeLib by Digi International Inc.

Committer:
basvuyk
Date:
Tue Mar 27 14:13:12 2018 +0000
Revision:
10:273032d9299a
Parent:
6:06522f3a6642
Slave V1.0

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 #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 4:629712865107 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 4:629712865107 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 4:629712865107 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 */
hbujanda 6:06522f3a6642 32 TxReqZBDM = 0x10, /**< TxReqZBDM: Only for ZigBee and DigiMesh modules */
hbujanda 6:06522f3a6642 33 ExpAddrCmd = 0x11, /**< ExpAddrCmd: Only for ZigBee modules and DigiMesh */
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 */
hbujanda 6:06522f3a6642 43 TxStatusZBDM = 0x8B, /**< TxStatusZBDM: Only for ZigBee and DigiMesh modules */
hbujanda 6:06522f3a6642 44 RouteInfo = 0x8D, /**< RouteInfo: Only for DigiMesh modules */
hbujanda 6:06522f3a6642 45 AggregateAddr = 0x8E, /**< AggregateAddr: Only for DigiMesh modules */
hbujanda 6:06522f3a6642 46 RxPacketAO0 = 0x90, /**< RxPacketAO0: Only for ZigBee and DigiMesh modules */
hbujanda 6:06522f3a6642 47 RxPacketAO1 = 0x91, /**< RxPacketAO1: Only for ZigBee and DigiMesh modules */
hbujanda 6:06522f3a6642 48 IoSampleRxZBDM = 0x92, /**< IoSampleRxZBDM: Only for ZigBee and DigiMesh modules */
spastor 0:fcaad0dfa051 49 SensorRxIndAO0 = 0x94, /**< SensorRxIndAO0: Only for ZigBee modules */
hbujanda 6:06522f3a6642 50 NodeIdentIndAO0 = 0x95, /**< NodeIdentIndAO0: Only for ZigBee and DigiMesh modules */
spastor 0:fcaad0dfa051 51 RemoteCmdResp = 0x97, /**< RemoteCmdResp */
spastor 0:fcaad0dfa051 52 OtaFwUpStatus = 0xA0, /**< OtaFwUpStatus */
spastor 0:fcaad0dfa051 53 RouteRecInd = 0xA1, /**< RouteRecInd */
spastor 0:fcaad0dfa051 54 Many2OneRRInd = 0xA3, /**< Many2OneRRInd */
spastor 0:fcaad0dfa051 55 Invalid = ~0, /**< Invalid */
spastor 0:fcaad0dfa051 56 };
spastor 4:629712865107 57
spastor 0:fcaad0dfa051 58 /** Default constructor */
spastor 0:fcaad0dfa051 59 ApiFrame();
spastor 0:fcaad0dfa051 60
spastor 4:629712865107 61 /** Constructor
spastor 0:fcaad0dfa051 62 *
spastor 0:fcaad0dfa051 63 * @param len length of the API frame (will allocate len bytes).
spastor 0:fcaad0dfa051 64 */
spastor 0:fcaad0dfa051 65 ApiFrame(uint16_t len);
spastor 4:629712865107 66
spastor 4:629712865107 67 /** Constructor
spastor 0:fcaad0dfa051 68 *
spastor 0:fcaad0dfa051 69 * @param type frame type of this api frame.
spastor 0:fcaad0dfa051 70 * @param data pointer to frame data payload.
spastor 0:fcaad0dfa051 71 * @param len length of the payload.
spastor 0:fcaad0dfa051 72 */
spastor 0:fcaad0dfa051 73 ApiFrame(ApiFrameType type, const uint8_t *data, uint16_t len);
spastor 4:629712865107 74
spastor 0:fcaad0dfa051 75 /** Destructor */
spastor 0:fcaad0dfa051 76 ~ApiFrame();
spastor 0:fcaad0dfa051 77
spastor 0:fcaad0dfa051 78 ApiFrame(const ApiFrame& other); /* Intentionally not implemented */
spastor 0:fcaad0dfa051 79
spastor 4:629712865107 80 /** get_frame_type gets the type of the frame
spastor 0:fcaad0dfa051 81 *
spastor 0:fcaad0dfa051 82 * @returns the type of this frame.
spastor 0:fcaad0dfa051 83 */
spastor 0:fcaad0dfa051 84 ApiFrameType get_frame_type() const;
spastor 4:629712865107 85
spastor 0:fcaad0dfa051 86 /** dump dumps the information of this frame */
spastor 0:fcaad0dfa051 87 void dump() const;
spastor 4:629712865107 88
spastor 0:fcaad0dfa051 89 /** dump_if dumps the information of the frame if the frame type matches
spastor 0:fcaad0dfa051 90 * with the parameter.
spastor 0:fcaad0dfa051 91 *
spastor 0:fcaad0dfa051 92 * @param type dump the frame info/data if the frame type matches with type.
spastor 0:fcaad0dfa051 93 */
spastor 0:fcaad0dfa051 94 void dump_if(ApiFrameType type);
spastor 0:fcaad0dfa051 95
spastor 0:fcaad0dfa051 96
spastor 0:fcaad0dfa051 97 /** set_frame_type sets the type of the frame to type.
spastor 0:fcaad0dfa051 98 *
spastor 0:fcaad0dfa051 99 * @param type the type we want to set on the frame.
spastor 0:fcaad0dfa051 100 */
spastor 0:fcaad0dfa051 101 void set_frame_type(ApiFrameType type);
spastor 4:629712865107 102
spastor 0:fcaad0dfa051 103 /** get_data_len gets the length of the frame data payload.
spastor 0:fcaad0dfa051 104 *
spastor 0:fcaad0dfa051 105 * @returns the length of the data payload.
spastor 0:fcaad0dfa051 106 */
spastor 0:fcaad0dfa051 107 uint16_t get_data_len() const;
spastor 0:fcaad0dfa051 108
spastor 0:fcaad0dfa051 109 /** set_data_len sets the length of the frame data payload.
spastor 0:fcaad0dfa051 110 *
spastor 0:fcaad0dfa051 111 * @param len the length of the data payload will be set on this frame.
spastor 0:fcaad0dfa051 112 */
spastor 0:fcaad0dfa051 113 void set_data_len(uint16_t len);
spastor 4:629712865107 114
spastor 0:fcaad0dfa051 115 /** get_data returns a pointer to the frame data payload.
spastor 0:fcaad0dfa051 116 *
spastor 0:fcaad0dfa051 117 * @returns a pointer to the frame data payload.
spastor 0:fcaad0dfa051 118 */
spastor 0:fcaad0dfa051 119 const uint8_t *get_data() const;
spastor 4:629712865107 120
spastor 0:fcaad0dfa051 121 /** get_data_at returns the byte at index offset.
spastor 0:fcaad0dfa051 122 *
spastor 0:fcaad0dfa051 123 * @param index offset of the byte we want to get.
spastor 0:fcaad0dfa051 124 * @returns the byte at index offset.
spastor 0:fcaad0dfa051 125 */
spastor 4:629712865107 126 uint8_t get_data_at(uint16_t index) const;
spastor 0:fcaad0dfa051 127
spastor 0:fcaad0dfa051 128 /** set_data sets data byte at the specified index or offset.
spastor 0:fcaad0dfa051 129 *
spastor 0:fcaad0dfa051 130 * @param data byte that will be set at index position.
spastor 0:fcaad0dfa051 131 * @param index offset of the byte we want to set.
spastor 0:fcaad0dfa051 132 */
spastor 0:fcaad0dfa051 133 void set_data(uint8_t data, uint16_t index);
spastor 0:fcaad0dfa051 134
spastor 0:fcaad0dfa051 135 /** get_frame_id returns the frame id of this frame.
spastor 0:fcaad0dfa051 136 *
spastor 0:fcaad0dfa051 137 * @returns the frame id of this frame.
spastor 0:fcaad0dfa051 138 */
spastor 0:fcaad0dfa051 139 uint8_t get_frame_id() const;
spastor 0:fcaad0dfa051 140
spastor 0:fcaad0dfa051 141 static uint8_t get_current_frame_id()
spastor 0:fcaad0dfa051 142 {
spastor 0:fcaad0dfa051 143 return last_frame_id;
spastor 0:fcaad0dfa051 144 }
spastor 4:629712865107 145
spastor 0:fcaad0dfa051 146 protected:
spastor 0:fcaad0dfa051 147 /** Type of this frame */
spastor 0:fcaad0dfa051 148 ApiFrameType _type;
spastor 0:fcaad0dfa051 149
spastor 4:629712865107 150 /** length of the payload, excluding the frame type */
spastor 0:fcaad0dfa051 151 uint16_t _data_frame_len;
spastor 0:fcaad0dfa051 152
spastor 4:629712865107 153 /** pointer to the frame data */
spastor 0:fcaad0dfa051 154 uint8_t *_data;
spastor 0:fcaad0dfa051 155
spastor 4:629712865107 156 /** True if the constructor allocates the data. Needed to delete it on the destructor */
spastor 0:fcaad0dfa051 157 bool _alloc_data;
spastor 4:629712865107 158
spastor 0:fcaad0dfa051 159 /** Frame ID of this frame */
spastor 0:fcaad0dfa051 160 uint8_t _frame_id;
spastor 4:629712865107 161
spastor 0:fcaad0dfa051 162 /** get_next_frame_id - returns the next frame ID secuentially, skipping the value 0
spastor 0:fcaad0dfa051 163 *
spastor 0:fcaad0dfa051 164 * @returns the next frame ID that should be assigned to a frame
spastor 0:fcaad0dfa051 165 */
spastor 0:fcaad0dfa051 166 uint8_t get_next_frame_id();
spastor 0:fcaad0dfa051 167
spastor 4:629712865107 168 /** set_api_frame sets several members
spastor 0:fcaad0dfa051 169 *
spastor 0:fcaad0dfa051 170 * @param type frame type of this api frame.
spastor 0:fcaad0dfa051 171 * @param data pointer to frame data payload.
spastor 0:fcaad0dfa051 172 * @param len length of the payload.
spastor 0:fcaad0dfa051 173 */
spastor 0:fcaad0dfa051 174 void set_api_frame(ApiFrameType type, const uint8_t *data, uint16_t len);
spastor 0:fcaad0dfa051 175 };
spastor 0:fcaad0dfa051 176
spastor 0:fcaad0dfa051 177 #endif /* __API_FRAME_H_ */