John Bailey / XBeeApi

Dependencies:   CircularBuffer FixedLengthList

Dependents:   XBeeApiTest XBeeApiSimpleATCmdsExample XBeeApiBroadcastExample XBeeApiBroadcastExampleRTOS ... more

Committer:
johnb
Date:
Tue Mar 25 22:52:36 2014 +0000
Revision:
34:2535760d53a6
Parent:
27:6356ef5fe39b
Child:
35:0f8910a023a3
Comment update

Who changed what in which revision?

UserRevisionLine numberNew contents of line
johnb 22:2e5aff1149a2 1 /**
johnb 22:2e5aff1149a2 2
johnb 22:2e5aff1149a2 3 Copyright 2014 John Bailey
johnb 22:2e5aff1149a2 4
johnb 22:2e5aff1149a2 5 Licensed under the Apache License, Version 2.0 (the "License");
johnb 22:2e5aff1149a2 6 you may not use this file except in compliance with the License.
johnb 22:2e5aff1149a2 7 You may obtain a copy of the License at
johnb 22:2e5aff1149a2 8
johnb 22:2e5aff1149a2 9 http://www.apache.org/licenses/LICENSE-2.0
johnb 22:2e5aff1149a2 10
johnb 22:2e5aff1149a2 11 Unless required by applicable law or agreed to in writing, software
johnb 22:2e5aff1149a2 12 distributed under the License is distributed on an "AS IS" BASIS,
johnb 22:2e5aff1149a2 13 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
johnb 22:2e5aff1149a2 14 See the License for the specific language governing permissions and
johnb 22:2e5aff1149a2 15 limitations under the License.
johnb 22:2e5aff1149a2 16
johnb 22:2e5aff1149a2 17 */
johnb 22:2e5aff1149a2 18
johnb 22:2e5aff1149a2 19 #include "XBeeApiRxFrame.hpp"
johnb 22:2e5aff1149a2 20
johnb 22:2e5aff1149a2 21 XBeeApiRxFrame::XBeeApiRxFrame( XBeeDevice* p_device ) : XBeeApiFrame(), XBeeApiFrameDecoder( p_device )
johnb 22:2e5aff1149a2 22 {
johnb 22:2e5aff1149a2 23 }
johnb 22:2e5aff1149a2 24
johnb 22:2e5aff1149a2 25 XBeeApiRxFrame::~XBeeApiRxFrame( void )
johnb 22:2e5aff1149a2 26 {
johnb 22:2e5aff1149a2 27 }
johnb 22:2e5aff1149a2 28
johnb 22:2e5aff1149a2 29 bool XBeeApiRxFrame::decodeCallback( const uint8_t* const p_data, size_t p_len )
johnb 22:2e5aff1149a2 30 {
johnb 22:2e5aff1149a2 31 bool ret_val = false;
johnb 22:2e5aff1149a2 32
johnb 27:6356ef5fe39b 33 /* TODO: Length check */
johnb 27:6356ef5fe39b 34
johnb 22:2e5aff1149a2 35 if(( XBEE_CMD_RX_64B_ADDR == p_data[ XBEE_CMD_POSN_API_ID ] ) ||
johnb 22:2e5aff1149a2 36 ( XBEE_CMD_RX_16B_ADDR == p_data[ XBEE_CMD_POSN_API_ID ] ))
johnb 22:2e5aff1149a2 37 {
johnb 27:6356ef5fe39b 38 size_t pos = XBEE_CMD_POSN_ID_SPECIFIC_DATA;
johnb 27:6356ef5fe39b 39
johnb 27:6356ef5fe39b 40 /* Depending on the frame type, decode either a 64- or 16-bit address */
johnb 27:6356ef5fe39b 41 if( XBEE_CMD_RX_64B_ADDR == p_data[ XBEE_CMD_POSN_API_ID ] )
johnb 27:6356ef5fe39b 42 {
johnb 27:6356ef5fe39b 43 m_addr = (((uint64_t)p_data[ pos ]) << 54U ) |
johnb 27:6356ef5fe39b 44 (((uint64_t)p_data[ pos+1 ]) << 48U ) |
johnb 27:6356ef5fe39b 45 (((uint64_t)p_data[ pos+2 ]) << 40U ) |
johnb 27:6356ef5fe39b 46 (((uint64_t)p_data[ pos+3 ]) << 32U ) |
johnb 27:6356ef5fe39b 47 (((uint64_t)p_data[ pos+4 ]) << 24U ) |
johnb 27:6356ef5fe39b 48 (((uint64_t)p_data[ pos+5 ]) << 16U ) |
johnb 27:6356ef5fe39b 49 (((uint64_t)p_data[ pos+6 ]) << 8U ) |
johnb 27:6356ef5fe39b 50 p_data[ pos+7 ];
johnb 27:6356ef5fe39b 51 pos += sizeof( uint64_t );
johnb 27:6356ef5fe39b 52 m_addrIs16bit = false;
johnb 27:6356ef5fe39b 53 }
johnb 27:6356ef5fe39b 54 else
johnb 27:6356ef5fe39b 55 {
johnb 27:6356ef5fe39b 56 m_addr = (((uint16_t)p_data[ pos ]) << 8U ) |
johnb 27:6356ef5fe39b 57 p_data[ pos+1 ];
johnb 27:6356ef5fe39b 58 pos += sizeof( uint16_t );
johnb 27:6356ef5fe39b 59 m_addrIs16bit = true;
johnb 27:6356ef5fe39b 60 }
johnb 27:6356ef5fe39b 61
johnb 27:6356ef5fe39b 62 m_rssi += p_data[ pos++ ];
johnb 27:6356ef5fe39b 63
johnb 27:6356ef5fe39b 64 m_addressBroadcast = p_data[ pos ] & 2U;
johnb 27:6356ef5fe39b 65 m_panBroadcast = p_data[ pos ] & 4U;
johnb 27:6356ef5fe39b 66 pos++;
johnb 27:6356ef5fe39b 67
johnb 27:6356ef5fe39b 68 m_data = &( p_data[ pos ] );
johnb 34:2535760d53a6 69
johnb 27:6356ef5fe39b 70 /* -1 to account for the checksum */
johnb 27:6356ef5fe39b 71 m_dataLen = p_len - pos - 1;
johnb 27:6356ef5fe39b 72
johnb 27:6356ef5fe39b 73 frameRxCallback();
johnb 27:6356ef5fe39b 74
johnb 34:2535760d53a6 75 // TODO: m_data pointing to p_data here, which will be going away ..
johnb 34:2535760d53a6 76
johnb 27:6356ef5fe39b 77 ret_val = true;
johnb 22:2e5aff1149a2 78 }
johnb 22:2e5aff1149a2 79
johnb 22:2e5aff1149a2 80 return ret_val;
johnb 22:2e5aff1149a2 81 }
johnb 27:6356ef5fe39b 82
johnb 27:6356ef5fe39b 83 void XBeeApiRxFrame::frameRxCallback( void )
johnb 27:6356ef5fe39b 84 {
johnb 27:6356ef5fe39b 85 }