Imported more library files
Not compiling currently
This commit is contained in:
@@ -0,0 +1,198 @@
|
||||
/*
|
||||
* Copyright (c) 2023, The OpenThread Authors.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. 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.
|
||||
* 3. Neither the name of the copyright holder nor the
|
||||
* names of its 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 HOLDER 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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file
|
||||
* This file holds required 802.15.4 definitions
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __IEEE802154IEEE802154_H__
|
||||
#define __IEEE802154IEEE802154_H__
|
||||
|
||||
#define IEEE802154_MIN_LENGTH \
|
||||
4 // Technically, a version 2 packet / ACK
|
||||
// can be 4 bytes with seq# suppression
|
||||
#define IEEE802154_MAX_LENGTH 127
|
||||
#define IEEE802154_MIN_DATA_LENGTH 5
|
||||
|
||||
// FCF + DSN + dest PANID + dest addr + src PANID + src addr (without security header)
|
||||
#define IEEE802154_MAX_MHR_LENGTH (2 + 1 + 2 + 8 + 2 + 8)
|
||||
|
||||
#define IEEE802154_DSN_OFFSET 2
|
||||
#define IEEE802154_FCF_OFFSET 0
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
// 802.15.4 Frame Control Field definitions for Beacon, Ack, Data, Command
|
||||
|
||||
#define IEEE802154_FRAME_TYPE_BEACON ((uint16_t)0x0000U) // Beacon
|
||||
#define IEEE802154_FRAME_TYPE_DATA ((uint16_t)0x0001U) // Data
|
||||
#define IEEE802154_FRAME_TYPE_ACK ((uint16_t)0x0002U) // ACK
|
||||
#define IEEE802154_FRAME_TYPE_COMMAND ((uint16_t)0x0003U) // Command
|
||||
#define IEEE802154_FRAME_TYPE_CONTROL IEEE802154_FRAME_TYPE_COMMAND // (synonym)
|
||||
// 802.15.4E-2012 introduced MultiPurpose with different Frame Control Field
|
||||
// layout described in the MultiPurpose section below.
|
||||
#define IEEE802154_FRAME_TYPE_MULTIPURPOSE ((uint16_t)0x0005U) // MultiPurpose
|
||||
#define IEEE802154_FRAME_TYPE_RESERVED_1 ((uint16_t)0x0004U)
|
||||
#define IEEE802154_FRAME_TYPE_RESERVED_2 ((uint16_t)0x0006U)
|
||||
#define IEEE802154_FRAME_TYPE_RESERVED_3 ((uint16_t)0x0007U)
|
||||
#define IEEE802154_FRAME_TYPE_MASK ((uint16_t)0x0007U) // Bits 0..2
|
||||
// Use a reserved flag internally to check whether outgoing enh-ACK was secure
|
||||
#define IEEE802154_SECURED_OUTGOING_ENHANCED_ACK IEEE802154_FRAME_TYPE_RESERVED_1
|
||||
|
||||
#define IEEE802154_FRAME_FLAG_SECURITY_ENABLED ((uint16_t)0x0008U) // Bit 3
|
||||
#define IEEE802154_FRAME_FLAG_FRAME_PENDING ((uint16_t)0x0010U) // Bit 4
|
||||
#define IEEE802154_FRAME_FLAG_ACK_REQUIRED ((uint16_t)0x0020U) // Bit 5
|
||||
#define IEEE802154_FRAME_FLAG_INTRA_PAN ((uint16_t)0x0040U) // Bit 6
|
||||
// 802.15.4-2006 renamed the Intra-Pan flag PanId-Compression
|
||||
#define IEEE802154_FRAME_FLAG_PANID_COMPRESSION IEEE802154_FRAME_FLAG_INTRA_PAN
|
||||
#define IEEE802154_FRAME_FLAG_RESERVED ((uint16_t)0x0080U) // Bit 7 reserved
|
||||
// Use the reserved flag internally to check whether frame pending bit was set in outgoing ACK
|
||||
#define IEEE802154_FRAME_PENDING_SET_IN_OUTGOING_ACK IEEE802154_FRAME_FLAG_RESERVED
|
||||
// 802.15.4E-2012 introduced these flags for Frame Version 2 frames
|
||||
// which are reserved bit positions in earlier Frame Version frames:
|
||||
#define IEEE802154_FRAME_FLAG_SEQ_SUPPRESSION ((uint16_t)0x0100U) // Bit 8
|
||||
#define IEEE802154_FRAME_FLAG_IE_LIST_PRESENT ((uint16_t)0x0200U) // Bit 9
|
||||
|
||||
#define IEEE802154_FRAME_DESTINATION_MODE_MASK ((uint16_t)0x0C00U) // Bits 10..11
|
||||
#define IEEE802154_FRAME_DESTINATION_MODE_NONE ((uint16_t)0x0000U) // Mode 0
|
||||
#define IEEE802154_FRAME_DESTINATION_MODE_RESERVED ((uint16_t)0x0400U) // Mode 1
|
||||
#define IEEE802154_FRAME_DESTINATION_MODE_SHORT ((uint16_t)0x0800U) // Mode 2
|
||||
#define IEEE802154_FRAME_DESTINATION_MODE_LONG ((uint16_t)0x0C00U) // Mode 3
|
||||
// 802.15.4e-2012 only (not adopted into 802.15.4-2015)
|
||||
#define IEEE802154_FRAME_DESTINATION_MODE_BYTE IEEE802154_FRAME_DESTINATION_MODE_RESERVED
|
||||
|
||||
#define IEEE802154_FRAME_VERSION_MASK ((uint16_t)0x3000U) // Bits 12..13
|
||||
#define IEEE802154_FRAME_VERSION_2003 ((uint16_t)0x0000U) // Version 0
|
||||
#define IEEE802154_FRAME_VERSION_2006 ((uint16_t)0x1000U) // Version 1
|
||||
// In 802.15.4-2015, Version 2 is just called "IEEE STD 802.15.4"
|
||||
// which can be rather confusing. It was introduced in 802.15.4E-2012.
|
||||
#define IEEE802154_FRAME_VERSION_2012 ((uint16_t)0x2000U) // Version 2
|
||||
#define IEEE802154_FRAME_VERSION_2015 ((uint16_t)0x2000U) // Version 2
|
||||
#define IEEE802154_FRAME_VERSION_RESERVED ((uint16_t)0x3000U) // Version 3
|
||||
|
||||
#define IEEE802154_FRAME_SOURCE_MODE_MASK ((uint16_t)0xC000U) // Bits 14..15
|
||||
#define IEEE802154_FRAME_SOURCE_MODE_NONE ((uint16_t)0x0000U) // Mode 0
|
||||
#define IEEE802154_FRAME_SOURCE_MODE_RESERVED ((uint16_t)0x4000U) // Mode 1
|
||||
#define IEEE802154_FRAME_SOURCE_MODE_SHORT ((uint16_t)0x8000U) // Mode 2
|
||||
#define IEEE802154_FRAME_SOURCE_MODE_LONG ((uint16_t)0xC000U) // Mode 3
|
||||
// 802.15.4e-2012 only (not adopted into 802.15.4-2015)
|
||||
#define IEEE802154_FRAME_SOURCE_MODE_BYTE IEEE802154_FRAME_SOURCE_MODE_RESERVED
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
// 802.15.4E-2012 Frame Control Field definitions for MultiPurpose
|
||||
|
||||
#define IEEE802154_MP_FRAME_TYPE_MASK IEEE802154_FRAME_TYPE_MASK // Bits 0..2
|
||||
#define IEEE802154_MP_FRAME_TYPE_MULTIPURPOSE IEEE802154_FRAME_TYPE_MULTIPURPOSE
|
||||
|
||||
#define IEEE802154_MP_FRAME_FLAG_LONG_FCF ((uint16_t)0x0008U) // Bit 3
|
||||
|
||||
#define IEEE802154_MP_FRAME_DESTINATION_MODE_MASK ((uint16_t)0x0030U) // Bits 4..5
|
||||
#define IEEE802154_MP_FRAME_DESTINATION_MODE_NONE ((uint16_t)0x0000U) // Mode 0
|
||||
#define IEEE802154_MP_FRAME_DESTINATION_MODE_RESERVED ((uint16_t)0x0010U) // Mode 1
|
||||
#define IEEE802154_MP_FRAME_DESTINATION_MODE_SHORT ((uint16_t)0x0020U) // Mode 2
|
||||
#define IEEE802154_MP_FRAME_DESTINATION_MODE_LONG ((uint16_t)0x0030U) // Mode 3
|
||||
// 802.15.4e-2012 only (not adopted into 802.15.4-2015)
|
||||
#define IEEE802154_MP_FRAME_DESTINATION_MODE_BYTE IEEE802154_MP_FRAME_DESTINATION_MODE_RESERVED
|
||||
|
||||
#define IEEE802154_MP_FRAME_SOURCE_MODE_MASK ((uint16_t)0x00C0U) // Bits 6..7
|
||||
#define IEEE802154_MP_FRAME_SOURCE_MODE_NONE ((uint16_t)0x0000U) // Mode 0
|
||||
#define IEEE802154_MP_FRAME_SOURCE_MODE_RESERVED ((uint16_t)0x0040U) // Mode 1
|
||||
#define IEEE802154_MP_FRAME_SOURCE_MODE_SHORT ((uint16_t)0x0080U) // Mode 2
|
||||
#define IEEE802154_MP_FRAME_SOURCE_MODE_LONG ((uint16_t)0x00C0U) // Mode 3
|
||||
// 802.15.4e-2012 only (not adopted into 802.15.4-2015)
|
||||
#define IEEE802154_MP_FRAME_SOURCE_MODE_BYTE IEEE802154_MP_FRAME_SOURCE_MODE_RESERVED
|
||||
|
||||
#define IEEE802154_MP_FRAME_FLAG_PANID_PRESENT ((uint16_t)0x0100U) // Bit 8
|
||||
#define IEEE802154_MP_FRAME_FLAG_SECURITY_ENABLED ((uint16_t)0x0200U) // Bit 9
|
||||
#define IEEE802154_MP_FRAME_FLAG_SEQ_SUPPRESSION ((uint16_t)0x0400U) // Bit 10
|
||||
#define IEEE802154_MP_FRAME_FLAG_FRAME_PENDING ((uint16_t)0x0800U) // Bit 11
|
||||
|
||||
#define IEEE802154_MP_FRAME_VERSION_MASK IEEE802154_FRAME_VERSION_MASK // Bits 12..13
|
||||
#define IEEE802154_MP_FRAME_VERSION_2012 ((uint16_t)0x0000U) // Zeroed out
|
||||
#define IEEE802154_MP_FRAME_VERSION_2015 ((uint16_t)0x0000U) // Zeroed out
|
||||
// All other MultiPurpose Frame Versions are reserved
|
||||
|
||||
#define IEEE802154_MP_FRAME_FLAG_ACK_REQUIRED ((uint16_t)0x4000U) // Bit 14
|
||||
#define IEEE802154_MP_FRAME_FLAG_IE_LIST_PRESENT ((uint16_t)0x8000U) // Bit 15
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
// Information Elements fields
|
||||
|
||||
#define IEEE802154_KEYID_MODE_0 ((uint8_t)0x0000U)
|
||||
#define IEEE802154_KEYID_MODE_0_SIZE 0
|
||||
|
||||
#define IEEE802154_KEYID_MODE_1 ((uint8_t)0x0008U)
|
||||
#define IEEE802154_KEYID_MODE_1_SIZE 0
|
||||
|
||||
#define IEEE802154_KEYID_MODE_2 ((uint8_t)0x0010U)
|
||||
#define IEEE802154_KEYID_MODE_2_SIZE 4
|
||||
|
||||
#define IEEE802154_KEYID_MODE_3 ((uint8_t)0x0018U)
|
||||
#define IEEE802154_KEYID_MODE_3_SIZE 8
|
||||
|
||||
#define IEEE802154_KEYID_MODE_MASK ((uint8_t)0x0018U)
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
// Information Elements fields
|
||||
|
||||
// There are Header IEs and Payload IEs. Header IEs are authenticated
|
||||
// if MAC Security is enabled. Payload IEs are both authenticated and
|
||||
// encrypted if MAC security is enabled.
|
||||
|
||||
// Header and Payload IEs have slightly different formats and different
|
||||
// contents based on the 802.15.4 spec.
|
||||
|
||||
// Both are actually a list of IEs that continues until a termination
|
||||
// IE is seen.
|
||||
|
||||
#define IEEE802154_FRAME_HEADER_INFO_ELEMENT_LENGTH_MASK 0x007F // bits 0-6
|
||||
#define IEEE802154_FRAME_HEADER_INFO_ELEMENT_ID_MASK 0x7F80 // bits 7-14
|
||||
#define IEEE802154_FRAME_HEADER_INFO_ELEMENT_TYPE_MASK 0x8000 // bit 15
|
||||
|
||||
#define IEEE802154_FRAME_HEADER_INFO_ELEMENT_ID_SHIFT 7
|
||||
|
||||
#define IEEE802154_FRAME_PAYLOAD_INFO_ELEMENT_LENGTH_MASK 0x07FF // bits 0 -10
|
||||
#define IEEE802154_FRAME_PAYLOAD_INFO_ELEMENT_GROUP_ID_MASK 0x7800 // bits 11-14
|
||||
#define IEEE802154_FRAME_PAYLOAD_INFO_ELEMENT_TYPE_MASK 0x8000 // bit 15
|
||||
|
||||
#define IEEE802154_FRAME_PAYLOAD_INFO_ELEMENT_ID_SHIFT 11
|
||||
|
||||
// This "type" field indicates header vs. payload IE. However there is
|
||||
// also a Header IE List terminator which would imply the IE list
|
||||
// that follows is only payload IEs.
|
||||
#define IEEE802154_FRAME_INFO_ELEMENT_TYPE_MASK 0x8000
|
||||
|
||||
// Header Termination ID 1 is used when there are Payload IEs that follow.
|
||||
// Header Termination ID 2 is used when there are no Payload IEs and the
|
||||
// next field is the MAC payload.
|
||||
#define IEEE802154_FRAME_HEADER_TERMINATION_ID_1 0x7E
|
||||
#define IEEE802154_FRAME_HEADER_TERMINATION_ID_2 0x7F
|
||||
#define IEEE802154_FRAME_PAYLOAD_TERMINATION_ID 0x0F
|
||||
|
||||
#endif //__IEEE802154IEEE802154_H__
|
||||
Reference in New Issue
Block a user