Contiki 2.6

sicslowmac.c File Reference

Example glue code between the existing MAC code and the Contiki mac interface. More...

#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#include <stdio.h>
#include <avr/eeprom.h>
#include <util/delay.h>
#include "net/packetbuf.h"
#include "zmac.h"
#include "mac.h"
#include "frame.h"
#include "radio.h"
#include "tcpip.h"
#include "sicslowmac.h"
#include "sicslowpan.h"
#include "ieee-15-4-manager.h"

Go to the source code of this file.

Functions

uint8_t mac_event_pending (void)
 Checks for any pending events in the queue.
void mac_put_event (event_object_t *object)
 Puts an event into the queue of events.
event_object_t * mac_get_event (void)
 Pulls an event from the event queue.
void mac_task (process_event_t ev, process_data_t data)
 This is the main loop task for the MAC.
int sicslowmac_dataRequest (void)
 This is the implementation of the 15.4 MAC Data Request primitive.
int mac_wake (void)
 Stub function that will be implemented in phase 2 to cause end nodes to sleep.
int mac_sleep (void)
 Stub function that will be implemented in phase 2 to cause end nodes to sleep.
void sicslowmac_resetRequest (bool setDefaultPIB)
 This is the implementation of the 15.4 MAC Reset Request primitive.
 PROCESS_THREAD (mac_process, ev, data)

Variables

ieee_15_4_manager_t ieee15_4ManagerAddress
 Interface structure for this module.

Detailed Description

Example glue code between the existing MAC code and the Contiki mac interface.

Author:
Adam Dunkels <adam@sics.se> Eric Gnoske <egnoske@gmail.com> Blake Leverett <bleverett@gmail.com>

Definition in file sicslowmac.c.


Function Documentation

uint8_t mac_event_pending ( void  )

Checks for any pending events in the queue.

Returns:
True if there is a pending event, else false.

Definition at line 123 of file sicslowmac.c.

Referenced by mac_task().

event_object_t* mac_get_event ( void  )

Pulls an event from the event queue.

Assumes that there is an event in the queue. See mac_event_pending().

Returns:
Pointer to the event object, or NULL in the event of empty queue.

Definition at line 163 of file sicslowmac.c.

References NULL.

Referenced by mac_task().

void mac_put_event ( event_object_t *  object)

Puts an event into the queue of events.

Parameters:
objectis a pointer to the event to add to queue.

Definition at line 134 of file sicslowmac.c.

Referenced by rx_frame_parse().

void mac_task ( process_event_t  ev,
process_data_t  data 
)

This is the main loop task for the MAC.

Called by the main application loop.

Definition at line 194 of file sicslowmac.c.

References mac_event_pending(), and mac_get_event().

Referenced by PROCESS_THREAD().

PROCESS_THREAD ( mac_process  ,
ev  ,
data   
)
int sicslowmac_dataRequest ( void  )

This is the implementation of the 15.4 MAC Data Request primitive.

Returns:
Integer denoting success or failure.
Return values:
0Failure.
1Success.

The data request primitive creates the frame header based on static and dynamic data. The static data will be refined in phase II of the project. The frame payload and length are retrieved from the rime buffer and rime length respectively.

When the header and payload are assembled into the frame_create_params structure, the frame is created by a call to frame_tx_create and then transmited via radio_send_data.

Todo:
For phase 1 the addresses are all long. We'll need a mechanism in the rime attributes to tell the mac to use long or short for phase 2.
Todo:
: Fix delay in sicslowmac so they do not block receiving

Definition at line 397 of file sicslowmac.c.

References fcf_t::ackRequired, addr_t::addr16, addr_t::addr64, frame_create_params_t::dest_addr, frame_create_params_t::dest_pid, fcf_t::destAddrMode, frame_create_params_t::fcf, frame_result_t::frame, frame_tx_create(), fcf_t::framePending, fcf_t::frameType, fcf_t::frameVersion, ieee_15_4_manager::get_dst_panid, ieee_15_4_manager::get_long_addr, ieee_15_4_manager::get_src_panid, frame_result_t::length, macDSN, packetbuf_datalen(), packetbuf_dataptr(), fcf_t::panIdCompression, frame_create_params_t::payload, frame_create_params_t::payload_len, radio_send_data(), RADIO_SUCCESS, RADIO_WRONG_STATE, rimeaddr_cmp(), rimeaddr_null, fcf_t::securityEnabled, frame_create_params_t::seq, frame_create_params_t::src_addr, frame_create_params_t::src_pid, and fcf_t::srcAddrMode.

Referenced by PROCESS_THREAD().

void sicslowmac_resetRequest ( bool  setDefaultPIB)

This is the implementation of the 15.4 MAC Reset Request primitive.

Parameters:
setDefaultPIBTrue if the default PIB values should be set.
Returns:
Integer denoting success or failure.
Return values:
0Failure.
1Success.

Sets all PIB values to default.

Todo:
This might be read from the serial eeprom onboard Raven.

Definition at line 560 of file sicslowmac.c.

References AVR_ENTER_CRITICAL_REGION, AVR_LEAVE_CRITICAL_REGION, macCoordShortAddress, macDSN, macDstPANId, macLongAddr, macShortAddress, and macSrcPANId.

Referenced by mac_init().