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.
Dependencies: CircularBuffer FixedLengthList
Dependents: XBeeApiTest XBeeApiSimpleATCmdsExample XBeeApiBroadcastExample XBeeApiBroadcastExampleRTOS ... more
RXTX/XBeeApiTxFrame.hpp@53:7b65422d7a32, 2014-07-28 (annotated)
- Committer:
- johnb
- Date:
- Mon Jul 28 13:27:58 2014 +0000
- Revision:
- 53:7b65422d7a32
- Parent:
- 47:5d3608835668
Comments & clean-up
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
johnb | 9:ba90e9efd68b | 1 | /** |
johnb | 9:ba90e9efd68b | 2 | @file |
johnb | 12:58319a467943 | 3 | @brief Class to support transmission of data via the XBee's wireless |
johnb | 9:ba90e9efd68b | 4 | |
johnb | 9:ba90e9efd68b | 5 | @author John Bailey |
johnb | 9:ba90e9efd68b | 6 | |
johnb | 9:ba90e9efd68b | 7 | @copyright Copyright 2014 John Bailey |
johnb | 9:ba90e9efd68b | 8 | |
johnb | 9:ba90e9efd68b | 9 | @section LICENSE |
johnb | 9:ba90e9efd68b | 10 | |
johnb | 9:ba90e9efd68b | 11 | Licensed under the Apache License, Version 2.0 (the "License"); |
johnb | 9:ba90e9efd68b | 12 | you may not use this file except in compliance with the License. |
johnb | 9:ba90e9efd68b | 13 | You may obtain a copy of the License at |
johnb | 9:ba90e9efd68b | 14 | |
johnb | 9:ba90e9efd68b | 15 | http://www.apache.org/licenses/LICENSE-2.0 |
johnb | 9:ba90e9efd68b | 16 | |
johnb | 9:ba90e9efd68b | 17 | Unless required by applicable law or agreed to in writing, software |
johnb | 9:ba90e9efd68b | 18 | distributed under the License is distributed on an "AS IS" BASIS, |
johnb | 9:ba90e9efd68b | 19 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
johnb | 9:ba90e9efd68b | 20 | See the License for the specific language governing permissions and |
johnb | 9:ba90e9efd68b | 21 | limitations under the License. |
johnb | 9:ba90e9efd68b | 22 | |
johnb | 9:ba90e9efd68b | 23 | */ |
johnb | 9:ba90e9efd68b | 24 | |
johnb | 16:8095c43a2a6e | 25 | #if !defined XBEEAPITXFRAME_HPP |
johnb | 16:8095c43a2a6e | 26 | #define XBEEAPITXFRAME_HPP |
johnb | 9:ba90e9efd68b | 27 | |
johnb | 9:ba90e9efd68b | 28 | #include "XBeeApiFrame.hpp" |
johnb | 9:ba90e9efd68b | 29 | #include "XBeeDevice.hpp" |
johnb | 9:ba90e9efd68b | 30 | |
johnb | 9:ba90e9efd68b | 31 | #include <stdint.h> |
johnb | 9:ba90e9efd68b | 32 | |
johnb | 16:8095c43a2a6e | 33 | #define XBEE_API_TX_FRAME_BUFFER_SIZE 11U |
johnb | 16:8095c43a2a6e | 34 | |
johnb | 16:8095c43a2a6e | 35 | #define XBEE_API_MAX_TX_PAYLOAD_LEN 100U |
johnb | 16:8095c43a2a6e | 36 | |
johnb | 16:8095c43a2a6e | 37 | /** Class to represent a frame of data being transmitted by the XBee */ |
johnb | 9:ba90e9efd68b | 38 | class XBeeApiTxFrame : public XBeeApiFrame, public XBeeApiFrameDecoder |
johnb | 9:ba90e9efd68b | 39 | { |
johnb | 9:ba90e9efd68b | 40 | protected: |
johnb | 27:6356ef5fe39b | 41 | /** Destination address of the frame */ |
johnb | 27:6356ef5fe39b | 42 | uint64_t m_addr; |
johnb | 27:6356ef5fe39b | 43 | |
johnb | 53:7b65422d7a32 | 44 | /** Whether or not an acknowledgement of the frame is requested */ |
johnb | 53:7b65422d7a32 | 45 | bool m_ack; |
johnb | 53:7b65422d7a32 | 46 | |
johnb | 53:7b65422d7a32 | 47 | /** Whether or not the frame is a PAN broadcast */ |
johnb | 53:7b65422d7a32 | 48 | bool m_panBroadcast; |
johnb | 53:7b65422d7a32 | 49 | |
johnb | 53:7b65422d7a32 | 50 | /** Buffer to house data relating to the frame header */ |
johnb | 53:7b65422d7a32 | 51 | uint8_t m_buffer[XBEE_API_TX_FRAME_BUFFER_SIZE]; |
johnb | 47:5d3608835668 | 52 | |
johnb | 53:7b65422d7a32 | 53 | /* TODO: doc */ |
johnb | 53:7b65422d7a32 | 54 | uint8_t m_bufferLen; |
johnb | 53:7b65422d7a32 | 55 | |
johnb | 53:7b65422d7a32 | 56 | /** Called by XBeeDevice in order to offer frame data to the object for |
johnb | 53:7b65422d7a32 | 57 | decoding |
johnb | 21:09ddf12a65ed | 58 | |
johnb | 53:7b65422d7a32 | 59 | \param p_data Pointer to the content of the received data |
johnb | 53:7b65422d7a32 | 60 | \param p_len Length of the data pointed to by p_data |
johnb | 53:7b65422d7a32 | 61 | */ |
johnb | 53:7b65422d7a32 | 62 | virtual bool decodeCallback( const uint8_t* const p_data, size_t p_len ); |
johnb | 21:09ddf12a65ed | 63 | |
johnb | 53:7b65422d7a32 | 64 | /* TODO: doc */ |
johnb | 53:7b65422d7a32 | 65 | void updateBuffer( void ); |
johnb | 47:5d3608835668 | 66 | |
johnb | 9:ba90e9efd68b | 67 | public: |
johnb | 20:3fa7a0daf1c7 | 68 | /** Enum for capturing the possible status of an XBee message TX |
johnb | 20:3fa7a0daf1c7 | 69 | attempt */ |
johnb | 15:ff9f12e38f44 | 70 | typedef enum |
johnb | 15:ff9f12e38f44 | 71 | { |
johnb | 20:3fa7a0daf1c7 | 72 | /** Frame was transmitted OK. Note that successfully transmitted |
johnb | 20:3fa7a0daf1c7 | 73 | broadcast frames will have this status, even in the case |
johnb | 20:3fa7a0daf1c7 | 74 | that they are not received by any other nodes */ |
johnb | 15:ff9f12e38f44 | 75 | XBEE_API_TX_STATUS_OK = 0, |
johnb | 20:3fa7a0daf1c7 | 76 | /** No acknowledgement was received when the frame was transmitted. |
johnb | 20:3fa7a0daf1c7 | 77 | See XBEE_API_TX_STATUS_OK for note regarding broadcast frames */ |
johnb | 15:ff9f12e38f44 | 78 | XBEE_API_TX_STATUS_NO_ACK = 1, |
johnb | 20:3fa7a0daf1c7 | 79 | /** Channel is unavailable for transmission (Clear Channel |
johnb | 20:3fa7a0daf1c7 | 80 | Assessment failed) */ |
johnb | 15:ff9f12e38f44 | 81 | XBEE_API_TX_STATUS_CCA_FAIL = 2, |
johnb | 20:3fa7a0daf1c7 | 82 | /** Coordinator has timed out an indirect transmission */ |
johnb | 16:8095c43a2a6e | 83 | XBEE_API_TX_STATUS_PURGED = 3, |
johnb | 16:8095c43a2a6e | 84 | /** Not an actual status, used to provide a handle on the numer of |
johnb | 16:8095c43a2a6e | 85 | enumeration items */ |
johnb | 16:8095c43a2a6e | 86 | XBEE_API_TX_STATUS_LAST = 4 |
johnb | 15:ff9f12e38f44 | 87 | } XBeeApiTxStatus_e; |
johnb | 15:ff9f12e38f44 | 88 | |
johnb | 53:7b65422d7a32 | 89 | /* TODO: doc */ |
johnb | 53:7b65422d7a32 | 90 | XBeeApiTxFrame( XBeeDevice* p_device = NULL, |
johnb | 53:7b65422d7a32 | 91 | const uint8_t* p_data = NULL, |
johnb | 53:7b65422d7a32 | 92 | const size_t p_dataLen = 0, |
johnb | 53:7b65422d7a32 | 93 | const uint64_t p_addr = XBEE_BROADCAST_ADDR, |
johnb | 53:7b65422d7a32 | 94 | const XBeeDevice::XBeeApiAddrType_t p_type = XBeeDevice::XBEE_API_ADDR_TYPE_16BIT ); |
johnb | 53:7b65422d7a32 | 95 | /* TODO: doc */ |
johnb | 53:7b65422d7a32 | 96 | virtual ~XBeeApiTxFrame( void ); |
johnb | 16:8095c43a2a6e | 97 | |
johnb | 53:7b65422d7a32 | 98 | /* TODO: doc */ |
johnb | 53:7b65422d7a32 | 99 | void setDestAddrType( const XBeeDevice::XBeeApiAddrType_t p_type ); |
johnb | 53:7b65422d7a32 | 100 | |
johnb | 53:7b65422d7a32 | 101 | /* TODO: doc */ |
johnb | 53:7b65422d7a32 | 102 | void setDestAddr( uint64_t p_addr ); |
johnb | 53:7b65422d7a32 | 103 | |
johnb | 53:7b65422d7a32 | 104 | /* TODO: doc */ |
johnb | 53:7b65422d7a32 | 105 | void setDestAddrBroadcast( void ); |
johnb | 53:7b65422d7a32 | 106 | |
johnb | 53:7b65422d7a32 | 107 | /* TODO: doc */ |
johnb | 53:7b65422d7a32 | 108 | void setPanBroadcast( const bool p_bc ); |
johnb | 53:7b65422d7a32 | 109 | |
johnb | 53:7b65422d7a32 | 110 | /* TODO: doc */ |
johnb | 53:7b65422d7a32 | 111 | virtual uint16_t getCmdLen( void ) const; |
johnb | 53:7b65422d7a32 | 112 | |
johnb | 53:7b65422d7a32 | 113 | /* TODO: doc */ |
johnb | 53:7b65422d7a32 | 114 | virtual void getDataPtr( const uint16_t p_start, const uint8_t** p_buff, uint16_t* const p_len ) const; |
johnb | 16:8095c43a2a6e | 115 | |
johnb | 53:7b65422d7a32 | 116 | /* TODO: doc */ |
johnb | 53:7b65422d7a32 | 117 | virtual uint8_t getFrameId( void ) const; |
johnb | 53:7b65422d7a32 | 118 | |
johnb | 53:7b65422d7a32 | 119 | /** Callback function which is invoked when a response to the TX request is received from |
johnb | 53:7b65422d7a32 | 120 | the XBee. |
johnb | 53:7b65422d7a32 | 121 | |
johnb | 53:7b65422d7a32 | 122 | \param p_status Status of the TX attempt */ |
johnb | 53:7b65422d7a32 | 123 | virtual void frameTxCallback( const XBeeApiTxStatus_e p_status ); |
johnb | 16:8095c43a2a6e | 124 | |
johnb | 53:7b65422d7a32 | 125 | /** Set the frame payload |
johnb | 53:7b65422d7a32 | 126 | |
johnb | 53:7b65422d7a32 | 127 | \param p_buff Pointer to the buffer containing the data. Note that this buffer is not copied, so |
johnb | 53:7b65422d7a32 | 128 | must retain the appropriate content until transmission is complete |
johnb | 53:7b65422d7a32 | 129 | \param p_len Length of the data pointed to be p_buff. Must be 100 or less. |
johnb | 53:7b65422d7a32 | 130 | \returns true in the case that the operation was successful, false in the case that it was not |
johnb | 53:7b65422d7a32 | 131 | (content too long, etc) |
johnb | 53:7b65422d7a32 | 132 | */ |
johnb | 53:7b65422d7a32 | 133 | bool setDataPtr( const uint8_t* const p_buff, const uint16_t p_len ); |
johnb | 9:ba90e9efd68b | 134 | }; |
johnb | 9:ba90e9efd68b | 135 | |
johnb | 9:ba90e9efd68b | 136 | #endif |