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;
bool securityEnabled
True if security is used in this frame.
uint8_t lqi
LQI value for received frame.
uint8_t length
Length (in bytes) of created frame.
void process_poll(struct process *p)
Request a process to be polled.
uint16_t src_pid
Source PAN ID.
uint8_t seq
Sequence number.
uint8_t payload_len
Length of payload field.
uint8_t destAddrMode
Destination address mode, see 802.15.4.
void rx_frame_parse(hal_rx_frame_t *rx_frame, parsed_frame_t *pf)
Parses an input frame.
bool panIdCompression
Is this a compressed header?
scf_t security_control
Security control bitfield.
uint8_t length
Length of frame.
void frame_tx_create(frame_create_params_t *p, frame_result_t *frame_result)
Creates a frame for transmission over the air.
#define NULL
The null pointer.
This struct defines the rx data container.
uint8_t data[HAL_MAX_FRAME_LENGTH]
Actual frame data.
bool crc
Flag - did CRC pass for received frame?
int process_post(struct process *p, process_event_t ev, process_data_t data)
Post an asynchronous event.
uint8_t * frame
Pointer to created frame.
Strucure used to return that status of the frame create process.
This file contains the register definitions for the AT86RF230.
aux_hdr_t aux_hdr
Aux security header.
addr_t src_addr
Source address.
uint64_t addr64
Long address.
uint8_t srcAddrMode
Source address mode, see 802.15.4.
uint16_t dest_pid
Destination PAN ID.
uint8_t frameType
Frame type field, see 802.15.4.
uint16_t addr16
Short address.
addr_t dest_addr
Destination address.
Union of both short and long addresses.
Parameters used by the frame_tx_create() function.
void mac_put_event(event_object_t *object)
Puts an event into the queue of events.
uint16_t word_val
A word-wide value for the entire FCF.
uint8_t key_id_mode
Key identifier mode.
The IEEE 802.15.4 (2003/2006) MAC utility functions.
fcf_t fcf
Frame control field.
802.15.4 frame creation and parsing functions
Header file for the Contiki process interface.
uint8_t * payload
Pointer to 802.15.4 frame payload.
This file contains radio driver code.
Defines the bitfields of the frame control field (FCF).