240 lines
7.2 KiB
C
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
|
|
|
|
/** @} */
|