⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frame.h

📁 Contiki是一个开源
💻 H
字号:
/* *  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 frame *    @{ *//** *  \file *  \brief 802.15.4 frame creation and parsing functions * *  This file converts to and from a structure to a packed 802.15.4 *  frame. * *    $Id: frame.h,v 1.2 2008/10/14 18:37:28 c_oflynn Exp $*//* Includes */#ifndef FRAME_UTILS_H#define FRAME_UTILS_H#include "hal.h"/* Macros & Defines *//** * \brief Defines the bitfields of the frame control field (FCF). */typedef union{    /** \brief Structure of bitfields for the FCF */    struct{        uint8_t frameType : 3;          /**< Frame type field, see 802.15.4 */        bool    securityEnabled : 1;    /**< True if security is used in this frame */        bool    framePending : 1;       /**< True if sender has more data to send */        bool    ackRequired : 1;        /**< Is an ack frame required? */        bool    panIdCompression : 1;   /**< Is this a compressed header? */        uint8_t reserved : 3;           /**< Unused bits */        uint8_t destAddrMode : 2;       /**< Destination address mode, see 802.15.4 */        uint8_t frameVersion : 2;       /**< 802.15.4 frame version */        uint8_t srcAddrMode : 2;        /**< Source address mode, see 802.15.4 */    };    uint16_t word_val; /**< A word-wide value for the entire FCF */}fcf_t;/** *  \brief Structure that contains the lengths of the various addressing and security fields *  in the 802.15.4 header.  This structure is used in \ref frame_tx_create() */typedef struct{    uint8_t dest_pid_len;    /**<  Length (in bytes) of destination PAN ID field */    uint8_t dest_addr_len;   /**<  Length (in bytes) of destination address field */    uint8_t src_pid_len;     /**<  Length (in bytes) of source PAN ID field */    uint8_t src_addr_len;    /**<  Length (in bytes) of source address field */    uint8_t aux_sec_len;     /**<  Length (in bytes) of aux security header field */} field_length_t;/** \brief 802.15.4 security control bitfield.  See section 7.6.2.2.1 in 802.15.4 specification */typedef struct{    uint8_t  security_level : 3; /**< security level      */    uint8_t  key_id_mode    : 2; /**< Key identifier mode */    uint8_t  reserved       : 3; /**< Reserved bits       */} scf_t;/** \brief 802.15.4 Aux security header */typedef struct{    scf_t  security_control;  /**< Security control bitfield */    uint32_t frame_counter;   /**< Frame counter, used for security */    uint8_t  key[9];          /**< The key itself, or an index to the key */} aux_hdr_t;/** *    @brief  Some constants for frame length calculations. *            The IEEE 802.15.4 frame has a number of constant/fixed fields that *            can be counted to make frame construction and max payload *            calculations easier. * *            These include: *            1. FCF                  - 2 bytes       - Fixed *            2. Sequence number      - 1 byte        - Fixed *            3. Addressing fields    - 4 - 20 bytes  - Variable *            4. Aux security header  - 0 - 14 bytes  - Variable *            5. CRC                  - 2 bytes       - Fixed*/#define FIXEDFRAMEOVERHEAD  (5)/** \brief A union of short and long address types. Although a node can have * both long and short addresses a frame will contain * only one of these. Therefore, a union is appropriate here. */typedef union{    uint16_t shortAddr;     /**< Short address, two bytes */    uint64_t longAddr;      /**< Long address, eight bytes */}ADDR_SIZE_SPEC_t;/** \brief Structure containing a PAN ID and an address */typedef struct{    uint16_t  panId;            /**< PAN ID */    ADDR_SIZE_SPEC_t addrSpec;  /**< A short or long address */}PAN_ID_ADDR_SPEC_t;/** \brief Structure containing both source and destination addresses */typedef struct{    PAN_ID_ADDR_SPEC_t  destAddrFields; /**< Destination address */    PAN_ID_ADDR_SPEC_t  srcAddrFields;  /**< Source address */}ADDR_FIELD_SPEC_t;/** \brief Union of both short and long addresses */typedef union{    uint16_t addr16;  /**< Short address */    uint64_t addr64;  /**< Long address */} addr_t;/** \brief Strucure used to return that status of the frame create process. *   See frame_tx_create() function.*/typedef struct{    uint8_t *frame; /**< Pointer to created frame */    uint8_t length; /**< Length (in bytes) of created frame */} frame_result_t;/** \brief Parameters used by the frame_tx_create() function.  These *  parameters are used in the 802.15.4 frame header.  See the 802.15.4 *  specification for details. */typedef struct{    fcf_t fcf;            /**< Frame control field  */    uint8_t seq;          /**< Sequence number */    uint16_t dest_pid;    /**< Destination PAN ID */    addr_t dest_addr;     /**< Destination address */    uint16_t src_pid;     /**< Source PAN ID */    addr_t src_addr;      /**< Source address */    aux_hdr_t aux_hdr;    /**< Aux security header */    uint8_t *payload;     /**< Pointer to 802.15.4 frame payload */    uint8_t payload_len;  /**< Length of payload field */} frame_create_params_t;typedef struct{    fcf_t      * fcf;               /**< The FCF of the frame. */    uint8_t    * seqNum;            /**< The sequence number of the frame. */    uint16_t   * dest_pid;          /**< Destination PAN ID. */    addr_t     * dest_addr;         /**< Destination address. */    uint16_t   * src_pid;           /**< PAN ID */    addr_t     * src_addr;          /**< Source address */    uint8_t    * aux_sec_hdr;       /**< 802.15.4 Aux security header */    uint8_t    * payload;           /**< Frame payload */    uint8_t      payload_length;    /**< Length of payload section of frame */    uint8_t     lqi;                /**< Link quality indication value */    uint8_t     rssi;               /**< Received signal strength indication value */    uint32_t    time;               /**< Time stamp of received frame */    bool   fcs:1;                   /**< True if checksum has passed */    bool   in_use:1;                /**< Is this frame struct being used? */} parsed_frame_t;/* Globals *///extern FRAME_t rx_frame;/* Protoypes */void frame_tx_create(frame_create_params_t *p,frame_result_t *frame_result);void frame_rx_callback(uint16_t data);void rx_frame_parse(hal_rx_frame_t *rx_frame, parsed_frame_t *pf);/** @} */#endif /* FRAME_UTILS_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -