64 #if defined( __GNUC__ )
66 #include <util/delay.h>
81 #include "sicslowmac.h"
88 #ifndef AUTO_CRC_PADDING
89 #define AUTO_CRC_PADDING 0
99 static uint8_t tx_frame_buffer[130];
125 memset(&flen, 0,
sizeof(field_length_t));
129 flen.dest_pid_len = 2;
132 flen.src_pid_len = 2;
140 flen.src_pid_len = 0;
145 flen.dest_addr_len = 2;
148 flen.dest_addr_len = 8;
155 flen.src_addr_len = 2;
158 flen.src_addr_len = 8;
167 flen.aux_sec_len = 5;
170 flen.aux_sec_len = 6;
173 flen.aux_sec_len = 10;
176 flen.aux_sec_len = 14;
187 tx_frame_buffer[index++] = p->
seq;
189 if (flen.dest_pid_len == 2){
190 *(uint16_t *)&tx_frame_buffer[index] = p->
dest_pid;
194 switch (flen.dest_addr_len){
208 if (flen.src_pid_len == 2){
209 *(uint16_t *)&tx_frame_buffer[index] = p->
src_pid;
213 switch (flen.src_addr_len){
227 if (flen.aux_sec_len){
228 memcpy((
char *)&tx_frame_buffer[index],
231 index += flen.aux_sec_len;
234 memcpy((
char *)&tx_frame_buffer[index],
240 frame_result->
length = index + AUTO_CRC_PADDING;
241 frame_result->
frame = tx_frame_buffer;
258 uint8_t *p = rx_frame->
data;
260 static uint8_t frame_dropped = 0;
266 if (!frame_dropped) {
267 event_object_t event;
268 event.event = MAC_EVENT_DROPPED;
278 pf->fcf = (
fcf_t *)p;
284 pf->payload_length = 0;
290 pf->dest_pid = (uint16_t *)p;
296 pf->dest_addr = (
addr_t *)p;
309 pf->src_pid = (uint16_t *)p;
312 pf->src_pid = pf->dest_pid;
315 pf->src_addr = (
addr_t *)p;
325 pf->payload_length = rx_frame->
length - (p - (uint8_t*)&rx_frame->
data) - 2;
330 pf->lqi = rx_frame->
lqi;
331 pf->fcs = rx_frame->
crc;
334 event_object_t event;
335 event.event = MAC_EVENT_RX;
336 event.data = (uint8_t*)pf;