changes to communication

Dependencies:   DigiLogger

Fork of XBeeLib by Digi International Inc.

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?

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 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