John Bailey / XBeeApi

Dependencies:   CircularBuffer FixedLengthList

Dependents:   XBeeApiTest XBeeApiSimpleATCmdsExample XBeeApiBroadcastExample XBeeApiBroadcastExampleRTOS ... more

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?

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