osd-contiki/cpu/avr/radio/mac/zmac.h
2008-10-14 18:36:07 +00:00

240 lines
7.2 KiB
C

/* Copyright (c) 2008, Swedish Institute of Computer Science
* All rights reserved.
*
* Additional fixes for AVR contributed by:
*
* Colin O'Flynn coflynn@newae.com
* Eric Gnoske egnoske@gmail.com
* Blake Leverett bleverett@gmail.com
* Mike Vidales mavida404@gmail.com
* Kevin Brown kbrown3@uccs.edu
* Nate Bohlmann nate@elfwerks.com
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* * Neither the name of the copyright holders nor the names of
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
/**
* \brief The equivalent IEEE 802.15.4 (2003/2006) header file for
* the mac primitives.
*
*/
/**
* \addtogroup rf230mac
* @{
*/
/**
* \file
* \brief The IEEE 802.15.4 (2003/2006) MAC utility functions.
*/
#ifndef MAC_H
#define MAC_H
/* Includes */
#include <stdint.h>
#include <stdbool.h>
#include "frame.h"
#include "ieee-15-4-manager.h"
#define EEPROMMACADDRESS ((void*)0)
#define EEPROMDSTADDRESS ((void*)8)
#define EEPROMCHANADDRESS ((void*)16)
#define EEPROMPANIDADDRESS ((void*)17)
#define EEPROMROLEADDRESS ((void*)19)
#define SUCCESS (0)
#define CHANNEL_PAGE_0 (0)
/* MAC command frames codes */
/* MAC enumerations */
/** \brief Pre-defined data frame control field (FCF) values.
* \name FCF Values
* @{
*/
#define FCF_NO_ACK (0x8841)
#define FCF_ACK_REQ (0x8861)
/** @} */
/** \brief Hardcoded various "network" addresses, for use when testing.
* \name Pre-defined network addresses
* @{
*/
#define DEST_PAN_ID (0xABCD)
#define SOURCE_PAN_ID (0xABCD)
#define LONG_ADDR_1 (0xFFEEDDCCBBAA1100LL)
#define LONG_ADDR_2 (0x1122334455667788LL)
#define LONG_ADDR_3 (0xDDEEAADDBBEEEEFFLL)
#define LONG_ADDR_4 (0x0123456789ABCDEFLL)
#define SOURCE_ADDR (0x1234)
#define FCF_ACK (0x0002)
#define TX_OPTION_NOACK (0)
#define TX_OPTION_ACK (1)
#define LONG_ADDR_LEN (8)
/** @} */
#define MPDU_OVERHEAD (11) /**< This overhead includes FCF, DSN, DEST_PAN_ID, DEST_ADDR, SOURCE_ADDR, & FCS */
/** \brief These are some definitions of values used in the FCF. See the 802.15.4 spec for details.
* \name FCF element values definitions
* @{
*/
#define BEACONFRAME (0x00)
#define DATAFRAME (0x01)
#define ACKFRAME (0x02)
#define CMDFRAME (0x03)
#define BEACONREQ (0x07)
#define IEEERESERVED (0x00)
#define NOADDR (0x00) /**< Only valid for ACK or Beacon frames. */
#define SHORTADDRMODE (0x02)
#define LONGADDRMODE (0x03)
#define NOBEACONS (0x0F)
#define BROADCASTADDR (0xFFFF)
#define BROADCASTPANDID (0xFFFF)
#define IEEE802154_2003 (0x00)
#define IEEE802154_2006 (0x01)
#define SECURITY_LEVEL_NONE (0)
#define SECURITY_LEVEL_128 (3)
#define PSDULEN (127)
/** @} */
/* typedef enum {TRUE, FALSE} bool; */
typedef struct dataRequest {
uint8_t srcAddrMode;
uint8_t dstAddrMode;
uint16_t dstPANId;
addr_t dstAddr;
uint8_t msduLength;
uint8_t *msdu;
uint8_t msduHandle;
uint8_t txOptions;
uint8_t securityLevel;
uint8_t keyIdMode;
uint8_t *keySource;
uint8_t keyIndex;
} dataRequest_t;
/* Macros & Defines */
extern ieee_15_4_manager_t ieee15_4ManagerAddress;
extern dataRequest_t dataRequestStructAddress;
#define ieee15_4Struct (&ieee15_4ManagerAddress)
#define dataRequestStruct (&dataRequestStructAddress)
/**
* \name Scan variables
* \brief Global variables and defines for scan.
* \{
*/
extern uint8_t msduHandle;
extern bool iAmCoord;
extern bool autoModes;
extern uint16_t macShortAddr;
extern uint64_t macLongAddr;
/** @} */
/* PHY PIB Attributes */
/* uint8_t phyCurrentChannel Integer 0-26
* The RF channel to use for all following transmissions and receptions (see6.1.2).
*/
extern uint8_t phyCurrentChannel;
/* uint64_t macCoordExtendedAddress -- no default
*
* The 64-bit address of the coordinator/router through which the network layer wishes to communicate
*/
extern uint64_t macCoordExtendedAddress;
/* uint16_t macCoordShortAddress -- default 0xffff
*
* The 16-bit short address assigned to the coordinator through which the network layer wishes
* to communicate. A value of 0xfffe indicates th the coordinator is only using it's 64-bit
* extended address. A value of 0xffff indicates that this value is unknown.
*/
extern uint16_t macCoordShortAddress;
/* uint64_t macDestAddress -- default 0xffff
*
* This address is the 64-bit address that will be used as the mechanism to
* provide a destination to the upper layers.
*/
extern uint64_t macDestAddress;
/* uint8_t macDSN -- default is random value within the range
*
* The sequence number (0x00 - 0xff) added to the transmitted data or MAC command frame.
*/
extern uint8_t macDSN;
/* uint16_t macDstPANId -- default 0xffff
*
* The 16-bit identifier of the PAN on which the device is sending to. If this value
* is 0xffff, the device is not associated.
*/
extern uint16_t macDstPANId;
/* uint16_t macSrcPANId -- default 0xffff
*
* The 16-bit identifier of the PAN on which the device is operating. If this value
* is 0xffff, the device is not associated.
*/
extern uint16_t macSrcPANId;
/* uint16_t macShortAddress -- default 0xffff
*
* The 16-bit address that the device uses to communicate in the PAN. If the device is the
* PAN coordinator, this value shall be chosen before a PAN is started. Otherwise, the
* address is allocated by a coordinator during association. A value of 0xfffe indicates
* that the device has associated but has not been allocated an address. A value of 0xffff
* indicates that the device does not have a short address.
*/
extern uint16_t macShortAddress;
/* Scan defines */
/* Protoypes */
void mac_init(void);
#endif
/** @} */