📄 mac.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. **//** * \addtogroup wireless * @{ *//** * \defgroup rf230mac RF230 MAC * @{ *//** * \file * \brief The IEEE 802.15.4 (2003/2006) MAC utility functions. * *//** * \author * Eric Gnoske <egnoske@gmail.com> * Blake Leverett <bleverett@gmail.com> * Mike Vidales <mavida404@gmail.com> * Colin O'Flynn <coflynn@newae.com> * *//* Includes */#include <stdlib.h>#include <string.h>#include "zmac.h"#include "radio.h"#include "hal.h"#include "tcpip.h"#include "uip.h"#include "sicslowpan.h"#include "sicslowmac.h"/* Globals *//** \brief Interface structure for this module */ieee_15_4_manager_t ieee15_4ManagerAddress;//dataRequest_t dataRequestStructAddress;/* Macros & Defines */uint8_t msduHandle;bool iAmCoord;bool autoModes;/** \brief The RF channel to use for all following transmissions and * receptions (see 6.1.2). Allowable values are 0-26 */uint8_t phyCurrentChannel;/** \brief The 64-bit address of the coordinator/router through which * the network layer wishes to communicate. */uint64_t macCoordExtendedAddress;/** \brief 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. The default value is 0xfff. */uint16_t macCoordShortAddress;/** \brief This address is the 64-bit address that will be used as * the mechanism to provide a destination to the upper layers. The * default value is 0xfff. */uint64_t macDestAddress;/** \brief The sequence number (0x00 - 0xff) added to the transmitted * data or MAC command frame. The default is a random value within * the range. */uint8_t macDSN;/** \brief The 16-bit identifier of the PAN on which the device is * sending to. If this value is 0xffff, the device is not * associated. The default value is 0xffff. */uint16_t macDstPANId;/** \brief The 16-bit identifier of the PAN on which the device is * operating. If this value is 0xffff, the device is not * associated. The default value is 0xffff. */uint16_t macSrcPANId;/** \brief 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. The default value is * 0xffff. */uint16_t macShortAddress;/** \brief Our own long address. This needs to be read from EEPROM or * other secure memory storage. */uint64_t macLongAddr;/* Implementation *//** \brief Initializes the (quasi) 802.15.4 MAC. This function should * be called only once on startup. */voidmac_init(void){ volatile uint8_t buf[8]; sicslowmac_resetRequest(true); /* Set up the radio for auto mode operation. */ hal_subregister_write( SR_MAX_FRAME_RETRIES, 2 ); /* Need to laod PANID for auto modes */ radio_set_pan_id(DEST_PAN_ID); /* Buffer the uint64_t address for easy loading and debug. */ /** \todo Find a better location to load the IEEE address. */ buf[0] = macLongAddr & 0xFF; buf[1] = (macLongAddr >> 8) & 0xFF; buf[2] = (macLongAddr >> 16) & 0xFF; buf[3] = (macLongAddr >> 24) & 0xFF; buf[4] = (macLongAddr >> 32) & 0xFF; buf[5] = (macLongAddr >> 40) & 0xFF; buf[6] = (macLongAddr >> 48) & 0xFF; buf[7] = (macLongAddr >> 56) & 0xFF; /* Load the long address into the radio. This is required for auto mode */ /* operation. */ radio_set_extended_address((uint8_t *)&macLongAddr); srand(1234 ); msduHandle = rand(); /* Ping6 debug */ memcpy(uip_lladdr.addr, &macLongAddr, 8); /* Convert expected byte order */ byte_reverse((uint8_t *)uip_lladdr.addr, 8);}/** @} *//** @} */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -