Contiki 2.6

zmac.h

Go to the documentation of this file.
00001 /*   Copyright (c) 2008, Swedish Institute of Computer Science
00002  *  All rights reserved.
00003  *
00004  *  Additional fixes for AVR contributed by:
00005  *
00006  *      Colin O'Flynn coflynn@newae.com
00007  *      Eric Gnoske egnoske@gmail.com
00008  *      Blake Leverett bleverett@gmail.com
00009  *      Mike Vidales mavida404@gmail.com
00010  *      Kevin Brown kbrown3@uccs.edu
00011  *      Nate Bohlmann nate@elfwerks.com
00012  *
00013  *   All rights reserved.
00014  *
00015  *   Redistribution and use in source and binary forms, with or without
00016  *   modification, are permitted provided that the following conditions are met:
00017  *
00018  *   * Redistributions of source code must retain the above copyright
00019  *     notice, this list of conditions and the following disclaimer.
00020  *   * Redistributions in binary form must reproduce the above copyright
00021  *     notice, this list of conditions and the following disclaimer in
00022  *     the documentation and/or other materials provided with the
00023  *     distribution.
00024  *   * Neither the name of the copyright holders nor the names of
00025  *     contributors may be used to endorse or promote products derived
00026  *     from this software without specific prior written permission.
00027  *
00028  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
00029  *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00030  *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00031  *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
00032  *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
00033  *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
00034  *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
00035  *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
00036  *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
00037  *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00038  *  POSSIBILITY OF SUCH DAMAGE.
00039  */
00040 /**
00041  *    \brief  The equivalent IEEE 802.15.4 (2003/2006) header file for
00042  *            the mac primitives.
00043  *
00044  */
00045 /**
00046  *   \addtogroup rf230mac
00047  *   @{
00048 */
00049 /**
00050  *    \file
00051  *    \brief  The IEEE 802.15.4 (2003/2006) MAC utility functions.
00052  */
00053 
00054 #ifndef MAC_H
00055 #define MAC_H
00056 
00057 /*  Includes */
00058 #include <stdint.h>
00059 #include <stdbool.h>
00060 #include "frame.h"
00061 #include "ieee-15-4-manager.h"
00062 
00063 #define EEPROMMACADDRESS                ((void*)0)
00064 #define EEPROMDSTADDRESS                ((void*)8)
00065 #define EEPROMCHANADDRESS               ((void*)16)
00066 #define EEPROMPANIDADDRESS              ((void*)17)
00067 #define EEPROMROLEADDRESS               ((void*)19)
00068 #define SUCCESS                         (0)
00069 #define CHANNEL_PAGE_0                  (0)
00070 
00071 
00072 
00073 
00074 /* MAC command frames codes */
00075 
00076 /* MAC enumerations */
00077 /** \brief Pre-defined data frame control field (FCF) values. 
00078  *  \name FCF Values
00079  *  @{
00080 */
00081 #define FCF_NO_ACK      (0x8841)
00082 #define FCF_ACK_REQ     (0x8861)
00083 /** @} */
00084 
00085 /** \brief Hardcoded various "network" addresses, for use when testing.
00086  *  \name Pre-defined network addresses
00087  *  @{
00088  */
00089 #define DEST_PAN_ID     (0xABCD)
00090 #define SOURCE_PAN_ID   (0xABCD)
00091 #define LONG_ADDR_1     (0xFFEEDDCCBBAA1100LL)
00092 #define LONG_ADDR_2     (0x1122334455667788LL)
00093 #define LONG_ADDR_3     (0xDDEEAADDBBEEEEFFLL)
00094 #define LONG_ADDR_4     (0x0123456789ABCDEFLL)
00095 #define SOURCE_ADDR     (0x1234)
00096 #define FCF_ACK         (0x0002)
00097 #define TX_OPTION_NOACK (0)
00098 #define TX_OPTION_ACK   (1)
00099 #define LONG_ADDR_LEN   (8)
00100 /** @} */
00101 
00102 #define MPDU_OVERHEAD   (11) /**< This overhead includes FCF, DSN, DEST_PAN_ID, DEST_ADDR, SOURCE_ADDR, & FCS */
00103 
00104 
00105 /** \brief These are some definitions of values used in the FCF.  See the 802.15.4 spec for details.
00106  *  \name FCF element values definitions
00107  *  @{
00108  */
00109 #define BEACONFRAME     (0x00)
00110 #define DATAFRAME       (0x01)
00111 #define ACKFRAME        (0x02)
00112 #define CMDFRAME        (0x03)
00113 
00114 #define BEACONREQ       (0x07)
00115 
00116 #define IEEERESERVED    (0x00)
00117 #define NOADDR          (0x00)      /**< Only valid for ACK or Beacon frames. */
00118 #define SHORTADDRMODE   (0x02)
00119 #define LONGADDRMODE    (0x03)
00120 
00121 #define NOBEACONS       (0x0F)
00122 
00123 #define BROADCASTADDR   (0xFFFF)
00124 #define BROADCASTPANDID (0xFFFF)
00125 
00126 #define IEEE802154_2003 (0x00)
00127 #define IEEE802154_2006 (0x01)
00128 
00129 #define SECURITY_LEVEL_NONE (0)
00130 #define SECURITY_LEVEL_128  (3)
00131 
00132 #define PSDULEN         (127)
00133 /** @} */
00134 
00135 
00136 /* typedef enum {TRUE, FALSE} bool; */
00137 
00138 typedef struct dataRequest  {
00139     uint8_t srcAddrMode;
00140     uint8_t dstAddrMode;
00141     uint16_t dstPANId;
00142     addr_t dstAddr;
00143     uint8_t msduLength;
00144     uint8_t *msdu;
00145     uint8_t msduHandle;
00146     uint8_t txOptions;
00147     uint8_t securityLevel;
00148     uint8_t keyIdMode;
00149     uint8_t *keySource;
00150     uint8_t keyIndex;
00151 } dataRequest_t;
00152 
00153 
00154 /*  Macros & Defines */
00155 extern ieee_15_4_manager_t ieee15_4ManagerAddress;
00156 extern dataRequest_t dataRequestStructAddress;
00157 #define ieee15_4Struct (&ieee15_4ManagerAddress)
00158 #define dataRequestStruct (&dataRequestStructAddress)
00159 
00160 
00161 /**
00162  *  \name Scan variables
00163  *  \brief Global variables and defines for scan.
00164  *  \{
00165 */
00166 extern uint8_t msduHandle;
00167 extern bool iAmCoord;
00168 extern bool autoModes;
00169 extern uint16_t macShortAddr;
00170 extern uint64_t macLongAddr;
00171 /** @} */
00172 
00173 /*  PHY PIB Attributes */
00174 
00175 /* uint8_t phyCurrentChannel              Integer 0-26
00176  * The RF channel to use for all following transmissions and receptions (see6.1.2).
00177  */
00178 extern uint8_t phyCurrentChannel;
00179 
00180 /* uint64_t macCoordExtendedAddress -- no default
00181  *
00182  *   The 64-bit address of the coordinator/router through which the network layer wishes to communicate
00183  */
00184 extern uint64_t macCoordExtendedAddress;
00185 
00186 /* uint16_t macCoordShortAddress  -- default 0xffff
00187  *
00188  *   The 16-bit short address assigned to the coordinator through which the network layer wishes
00189  *   to communicate.  A value of 0xfffe indicates th the coordinator is only using it's 64-bit
00190  *   extended address.  A value of 0xffff indicates that this value is unknown.
00191  */
00192 extern uint16_t macCoordShortAddress;
00193 
00194 /* uint64_t macDestAddress  -- default 0xffff
00195  *
00196  *   This address is the 64-bit address that will be used as the mechanism to
00197  *   provide a destination to the upper layers.
00198  */
00199 extern uint64_t macDestAddress;
00200 
00201 /* uint8_t macDSN                 -- default is random value within the range
00202  *
00203  *   The sequence number (0x00 - 0xff) added to the transmitted data or MAC command frame.
00204  */
00205 extern uint8_t macDSN;
00206 
00207 /* uint16_t macDstPANId              -- default 0xffff
00208  *
00209  *   The 16-bit identifier of the PAN on which the device is sending to.  If this value
00210  *   is 0xffff, the device is not associated.
00211  */
00212 extern uint16_t macDstPANId;
00213 
00214 /* uint16_t macSrcPANId              -- default 0xffff
00215  *
00216  *   The 16-bit identifier of the PAN on which the device is operating.  If this value
00217  *   is 0xffff, the device is not associated.
00218  */
00219 extern uint16_t macSrcPANId;
00220 
00221 /* uint16_t macShortAddress       -- default 0xffff
00222  *
00223  *   The 16-bit address that the device uses to communicate in the PAN.  If the device is the
00224  *   PAN coordinator, this value shall be chosen before a PAN is started.  Otherwise, the
00225  *   address is allocated by a coordinator during association.  A value of 0xfffe indicates
00226  *   that the device has associated but has not been allocated an address.  A value of 0xffff
00227  *   indicates that the device does not have a short address.
00228  */
00229 extern uint16_t macShortAddress;
00230 
00231 /*  Scan defines */
00232 
00233 
00234 /*  Protoypes */
00235 void mac_init(void);
00236 
00237 #endif
00238 
00239 /** @} */