lel
Fork of XBeeLib by
Embed:
(wiki syntax)
Show/hide line numbers
FH_RxPacket802.cpp
00001 /** 00002 * Copyright (c) 2015 Digi International Inc., 00003 * All rights not expressly granted are reserved. 00004 * 00005 * This Source Code Form is subject to the terms of the Mozilla Public 00006 * License, v. 2.0. If a copy of the MPL was not distributed with this file, 00007 * You can obtain one at http://mozilla.org/MPL/2.0/. 00008 * 00009 * Digi International Inc. 11001 Bren Road East, Minnetonka, MN 55343 00010 * ======================================================================= 00011 */ 00012 00013 #include "FH_RxPacket802.h" 00014 00015 using namespace XBeeLib; 00016 00017 /** Class constructor */ 00018 FH_RxPacket64b802::FH_RxPacket64b802() : FrameHandler(ApiFrame::RxPacket64Bit), 00019 receive_cb(NULL) 00020 { 00021 } 00022 00023 /** Class destructor */ 00024 FH_RxPacket64b802::~FH_RxPacket64b802() 00025 { 00026 } 00027 00028 void FH_RxPacket64b802::register_receive_cb(receive_802_cb_t function) 00029 { 00030 receive_cb = function; 00031 } 00032 00033 void FH_RxPacket64b802::unregister_receive_cb(void) 00034 { 00035 receive_cb = NULL; 00036 } 00037 00038 /* 802.15.4 RX packet offsets */ 00039 #define RX_802_RSSI_OFFSET 8 00040 #define RX_802_OPTIONS_OFFSET 9 00041 #define RX_802_DATA_OFFSET 10 00042 #define RX_802_OVERHEAD (8+1+1) 00043 00044 #define BROADCAST_PACKET 0x02 00045 00046 void FH_RxPacket64b802::process_frame_data(const ApiFrame *const frame) 00047 { 00048 /* The caller checks that the type matches, so no need to check it here again */ 00049 00050 if (receive_cb == NULL) { 00051 return; 00052 } 00053 00054 /* We got a rx packet, decode it... */ 00055 const uint8_t *datap = frame->get_data(); 00056 const uint64_t sender64 = addr64_from_uint8_t(datap); 00057 const uint8_t rx_options = datap[RX_802_OPTIONS_OFFSET]; 00058 const RemoteXBee802 sender = RemoteXBee802(sender64); 00059 00060 receive_cb(sender, rx_options & BROADCAST_PACKET, &datap[RX_802_DATA_OFFSET], frame->get_data_len() - RX_802_OVERHEAD); 00061 } 00062 00063 00064 /** Class constructor */ 00065 FH_RxPacket16b802::FH_RxPacket16b802() : FrameHandler(ApiFrame::RxPacket16Bit), 00066 receive_cb(NULL) 00067 { 00068 } 00069 00070 /** Class destructor */ 00071 FH_RxPacket16b802::~FH_RxPacket16b802() 00072 { 00073 } 00074 00075 void FH_RxPacket16b802::register_receive_cb(receive_802_cb_t function) 00076 { 00077 receive_cb = function; 00078 } 00079 00080 void FH_RxPacket16b802::unregister_receive_cb(void) 00081 { 00082 receive_cb = NULL; 00083 } 00084 00085 /* 802.15.4 RX packet offsets */ 00086 #define RX_802_ADDR16_MSB_OFFSET 0 00087 #define RX_802_ADDR16_LSB_OFFSET 1 00088 #define RX_802_RSSI_OFFSET2 2 00089 #define RX_802_OPTIONS_OFFSET2 3 00090 #define RX_802_DATA_OFFSET2 4 00091 #define RX_802_OVERHEAD2 (2+1+1) 00092 00093 void FH_RxPacket16b802::process_frame_data(const ApiFrame *const frame) 00094 { 00095 /* The caller checks that the type matches, so no need to check it here again */ 00096 00097 if (receive_cb == NULL) { 00098 return; 00099 } 00100 00101 /* We got a rx packet, decode it... */ 00102 const uint8_t *datap = frame->get_data(); 00103 const uint16_t sender16 = ADDR16(datap[RX_802_ADDR16_MSB_OFFSET], datap[RX_802_ADDR16_LSB_OFFSET]); 00104 const uint8_t rx_options = datap[RX_802_OPTIONS_OFFSET2]; 00105 const RemoteXBee802 sender = RemoteXBee802(sender16); 00106 00107 receive_cb(sender, rx_options & BROADCAST_PACKET, &datap[RX_802_DATA_OFFSET2], frame->get_data_len() - RX_802_OVERHEAD2); 00108 }
Generated on Sat Jul 16 2022 05:30:22 by 1.7.2