123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280 |
- /**************************************************************************************************
- Filename: mac_spec.h
- Revised: $Date: 2011-02-28 16:59:59 -0800 (Mon, 28 Feb 2011) $
- Revision: $Revision: 25230 $
- Description: This file contains constants and other data defined by the 802.15.4 spec.
- Copyright 2005-2010 Texas Instruments Incorporated. All rights reserved.
- IMPORTANT: Your use of this Software is limited to those specific rights
- granted under the terms of a software license agreement between the user
- who downloaded the software, his/her employer (which must be your employer)
- and Texas Instruments Incorporated (the "License"). You may not use this
- Software unless you agree to abide by the terms of the License. The License
- limits your use, and you acknowledge, that the Software may not be modified,
- copied or distributed unless embedded on a Texas Instruments microcontroller
- or used solely and exclusively in conjunction with a Texas Instruments radio
- frequency transceiver, which is integrated into your product. Other than for
- the foregoing purpose, you may not use, reproduce, copy, prepare derivative
- works of, modify, distribute, perform, display or sell this Software and/or
- its documentation for any purpose.
- YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE
- PROVIDED “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED,
- INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE,
- NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL
- TEXAS INSTRUMENTS OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT,
- NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER
- LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES
- INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE
- OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT
- OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES
- (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS.
- Should you have any questions regarding your right to use this Software,
- contact Texas Instruments Incorporated at www.TI.com.
- **************************************************************************************************/
- #ifndef MAC_SPEC_H
- #define MAC_SPEC_H
- /* ------------------------------------------------------------------------------------------------
- * Constants
- * ------------------------------------------------------------------------------------------------
- */
- /* PHY packet fields lengths in bytes */
- #define MAC_PHY_SHR_LEN 5 /* preamble bytes plus SFD byte */
- #define MAC_PHY_PHR_LEN 1 /* length byte */
- /* MAC frame field lengths in bytes */
- #define MAC_FCF_FIELD_LEN 2 /* frame control field */
- #define MAC_SEQ_NUM_FIELD_LEN 1 /* sequence number */
- #define MAC_PAN_ID_FIELD_LEN 2 /* PAN ID */
- #define MAC_EXT_ADDR_FIELD_LEN 8 /* Extended address */
- #define MAC_SHORT_ADDR_FIELD_LEN 2 /* Short address */
- #define MAC_FCS_FIELD_LEN 2 /* FCS field */
- #define MAC_SEC_CONTROL_FIELD_LEN 1 /* Security control field */
- /* Frame offsets in bytes */
- #define MAC_FCF_OFFSET 0 /* offset to frame control field */
- #define MAC_SEQ_NUM_OFFSET 2 /* offset to sequence number */
- #define MAC_DEST_PAN_ID_OFFSET 3 /* offset to destination PAN ID */
- #define MAC_DEST_ADDR_OFFSET 5 /* offset to destination address */
- /* Frame control field bit masks */
- #define MAC_FCF_FRAME_TYPE_MASK 0x0007
- #define MAC_FCF_SEC_ENABLED_MASK 0x0008
- #define MAC_FCF_FRAME_PENDING_MASK 0x0010
- #define MAC_FCF_ACK_REQUEST_MASK 0x0020
- #define MAC_FCF_INTRA_PAN_MASK 0x0040
- #define MAC_FCF_DST_ADDR_MODE_MASK 0x0C00
- #define MAC_FCF_FRAME_VERSION_MASK 0x3000
- #define MAC_FCF_SRC_ADDR_MODE_MASK 0xC000
- /* Frame control field bit positions */
- #define MAC_FCF_FRAME_TYPE_POS 0
- #define MAC_FCF_SEC_ENABLED_POS 3
- #define MAC_FCF_FRAME_PENDING_POS 4
- #define MAC_FCF_ACK_REQUEST_POS 5
- #define MAC_FCF_INTRA_PAN_POS 6
- #define MAC_FCF_DST_ADDR_MODE_POS 10
- #define MAC_FCF_FRAME_VERSION_POS 12
- #define MAC_FCF_SRC_ADDR_MODE_POS 14
- /* Security control field bit masks */
- #define MAC_SCF_SECURITY_LEVEL_MASK 0x07
- #define MAC_SCF_KEY_IDENTIFIER_MASK 0x18
- /* Security control field bit positions */
- #define MAC_SCF_SECURITY_LEVEL_POS 0
- #define MAC_SCF_KEY_IDENTIFIER_POS 3
- /* MAC Payload offsets in bytes */
- #define MAC_SFS_OFFSET 0
- #define MAC_PENDING_ADDR_OFFSET 3 /* if GTS is not in use */
- /* Beacon superframe spec bit positions, low byte */
- #define MAC_SFS_BEACON_ORDER_POS 0
- #define MAC_SFS_SUPERFRAME_ORDER_POS 4
- /* Beacon superframe spec bit positions, high byte */
- #define MAC_SFS_FINAL_CAP_SLOT_POS 0
- #define MAC_SFS_BATT_LIFE_EXT_POS 4
- #define MAC_SFS_PAN_COORD_POS 6
- #define MAC_SFS_ASSOC_PERMIT_POS 7
- /* Frame type */
- #define MAC_FRAME_TYPE_BEACON 0
- #define MAC_FRAME_TYPE_DATA 1
- #define MAC_FRAME_TYPE_ACK 2
- #define MAC_FRAME_TYPE_COMMAND 3
- #define MAC_FRAME_TYPE_MAX_VALID MAC_FRAME_TYPE_COMMAND
- /* Command frame identifiers */
- #define MAC_ASSOC_REQ_FRAME 1
- #define MAC_ASSOC_RSP_FRAME 2
- #define MAC_DISASSOC_NOTIF_FRAME 3
- #define MAC_DATA_REQ_FRAME 4
- #define MAC_PAN_CONFLICT_FRAME 5
- #define MAC_ORPHAN_NOTIF_FRAME 6
- #define MAC_BEACON_REQ_FRAME 7
- #define MAC_COORD_REALIGN_FRAME 8
- #define MAC_GTS_REQ_FRAME 9
- /* Length of command frame payload (includes command ID byte) */
- #define MAC_ZERO_DATA_PAYLOAD 0
- #define MAC_ASSOC_REQ_PAYLOAD 2
- #define MAC_ASSOC_RSP_PAYLOAD 4
- #define MAC_DISASSOC_NOTIF_PAYLOAD 2
- #define MAC_DATA_REQ_PAYLOAD 1
- #define MAC_PAN_CONFLICT_PAYLOAD 1
- #define MAC_ORPHAN_NOTIF_PAYLOAD 1
- #define MAC_BEACON_REQ_PAYLOAD 1
- #define MAC_COORD_REALIGN_PAYLOAD 9
- #define MAC_GTS_REQ_PAYLOAD 2
- /* Length of command frames (max header plus payload) */
- #define MAC_ZERO_DATA_FRAME_LEN (21 + MAC_ZERO_DATA_PAYLOAD)
- #define MAC_ASSOC_REQ_FRAME_LEN (23 + MAC_ASSOC_REQ_PAYLOAD)
- #define MAC_ASSOC_RSP_FRAME_LEN (23 + MAC_ASSOC_RSP_PAYLOAD)
- #define MAC_DISASSOC_NOTIF_FRAME_LEN (17 + MAC_DISASSOC_NOTIF_PAYLOAD)
- #define MAC_DATA_REQ_FRAME_LEN (23 + MAC_DATA_REQ_PAYLOAD)
- #define MAC_PAN_CONFLICT_FRAME_LEN (23 + MAC_PAN_CONFLICT_PAYLOAD)
- #define MAC_ORPHAN_NOTIF_FRAME_LEN (17 + MAC_ORPHAN_NOTIF_PAYLOAD)
- #define MAC_BEACON_REQ_FRAME_LEN (7 + MAC_BEACON_REQ_PAYLOAD)
- #define MAC_COORD_REALIGN_FRAME_LEN (23 + MAC_COORD_REALIGN_PAYLOAD)
- #define MAC_GTS_REQ_FRAME_LEN (7 + MAC_GTS_REQ_PAYLOAD)
- /* Beacon frame base length (max header plus minimum payload) */
- #define MAC_BEACON_FRAME_BASE_LEN (13 + 4)
- /* Maximum number of pending addresses in a beacon */
- #define MAC_PEND_ADDR_MAX 7
- /* Associate response command frame status values */
- #define MAC_ASSOC_SUCCESS 0 /* association successful */
- #define MAC_ASSOC_CAPACITY 1 /* PAN at capacity */
- #define MAC_ASSOC_DENIED 2 /* PAN access denied */
- /* Beacon order and superframe order maximum values */
- #define MAC_BO_NON_BEACON 15
- #define MAC_SO_NONE 15
- /* Broadcast PAN ID */
- #define MAC_PAN_ID_BROADCAST 0xFFFF
- /* Number of symbols per octet */
- #define MAC_SYMBOLS_PER_OCTET 2
- /* Maximum phy frame size in bytes */
- #define MAC_A_MAX_PHY_PACKET_SIZE 127
- /* Phy RX <--> TX turnaround time in symbols */
- #define MAC_A_TURNAROUND_TIME 12
- /* Number of backoffs forming a superframe slot when the superframe order is equal to 0 */
- #define MAC_A_BASE_SLOT_DURATION 3
- /* Number of backoffs forming a superframe when the superframe order is equal to 0 */
- #define MAC_A_BASE_SUPERFRAME_DURATION (MAC_A_BASE_SLOT_DURATION * MAC_A_NUM_SUPERFRAME_SLOTS)
- /* Maximum number of bytes added by the MAC sublayer to the payload of its beacon frame */
- #define MAC_A_MAX_BEACON_OVERHEAD 75
- /* Maximum size in bytes of a beacon payload */
- #define MAC_A_MAX_BEACON_PAYLOAD_LENGTH (MAC_A_MAX_PHY_PACKET_SIZE - MAC_A_MAX_BEACON_OVERHEAD)
- /* The number of superframes a GTS descriptor exists for in the beacon frame */
- #define MAC_A_GTS_DESC_PERSISTENCE_TIME 4
- /* Maximum size in bytes of a MAC frame header */
- #define MAC_A_MAX_FRAME_OVERHEAD 25
- /* The number of consecutive lost beacons that will case the MAC to declare a sync loss */
- #define MAC_A_MAX_LOST_BEACONS 4
- /* The maximum number of bytes that can be transmitted in the MAC frame payload */
- #define MAC_A_MAX_FRAME_SIZE (MAC_A_MAX_PHY_PACKET_SIZE - MAC_A_MAX_FRAME_OVERHEAD)
- /* The maximum frame size in bytes that can be followed by a short interframe spacing period */
- #define MAC_A_MAX_SIFS_FRAME_SIZE 18
- /* The minimum number of symbols forming the CAP */
- #define MAC_A_MIN_CAP_LENGTH 440
- /* The minimum number of symbols forming a long interframe spacing period */
- #define MAC_A_MIN_LIFS_PERIOD 40
- /* The minimum number of symbols forming a short interframe spacing period */
- #define MAC_A_MIN_SIFS_PERIOD 12
- /* The number of slots contained in any superframe */
- #define MAC_A_NUM_SUPERFRAME_SLOTS 16
- /* The number of symbols forming a basic CSMA-CA time period */
- #define MAC_A_UNIT_BACKOFF_PERIOD 20
- /* Maximum value for energy detect */
- #define MAC_SPEC_ED_MAX 0xFF
- /* Threshold above receiver sensitivity for minimum energy detect in dBm (see 6.9.7) */
- #define MAC_SPEC_ED_MIN_DBM_ABOVE_RECEIVER_SENSITIVITY 10
- /* ----- values specific to 2450 MHz PHY ----- */
- /* minimum receiver sensitivity in dBm (see 6.5.3.3) */
- #define MAC_SPEC_MIN_RECEIVER_SENSITIVITY -85
- /* Length of preamble field in symbols */
- #define MAC_SPEC_PREAMBLE_FIELD_LENGTH 8
- /* Length of SFD field in symbols */
- #define MAC_SPEC_SFD_FIELD_LENGTH 2
- /* Microseconds in one symbol */
- #define MAC_SPEC_USECS_PER_SYMBOL 16
- /* Microseconds in one backoff period */
- #define MAC_SPEC_USECS_PER_BACKOFF (MAC_SPEC_USECS_PER_SYMBOL * MAC_A_UNIT_BACKOFF_PERIOD)
- /* octets (or bytes) per symbol */
- #define MAC_SPEC_OCTETS_PER_SYMBOL 2
- /* ------------------------------------------------------------------------------------------------
- * Macros
- * ------------------------------------------------------------------------------------------------
- */
- /* Length of GTS fields in a beacon, not including one byte for GTS specification */
- #define MAC_GTS_FIELDS_LEN(gtsSpec) ((uint8)((((gtsSpec) & 0x07) * 3) + (((gtsSpec) & 0x07) ? 1 : 0)))
- /*
- * Macros to decode FCF and sequence number. For efficiency, the FCF is accessed as separate
- * bytes instead of as a 16-bit word. The first byte (+0) is the lowest significant byte.
- * The second byte (+1) is the most signficant byte. NOTE! Any change to the specification
- * involving FCF would require updating these macros.
- *
- * Macro parameter is pointer to start of frame.
- */
- #define MAC_FRAME_TYPE(p) ((p)[MAC_FCF_OFFSET+0] & 0x07)
- #define MAC_SEC_ENABLED(p) ((p)[MAC_FCF_OFFSET+0] & 0x08) /* note: value is *non-zero* if true */
- #define MAC_FRAME_PENDING(p) ((p)[MAC_FCF_OFFSET+0] & 0x10) /* note: value is *non-zero* if true */
- #define MAC_ACK_REQUEST(p) ((p)[MAC_FCF_OFFSET+0] & 0x20) /* note: value is *non-zero* if true */
- #define MAC_INTRA_PAN(p) ((p)[MAC_FCF_OFFSET+0] & 0x40) /* note: value is *non-zero* if true */
- #define MAC_DEST_ADDR_MODE(p) (((p)[MAC_FCF_OFFSET+1] >> 2) & 0x3)
- #define MAC_FRAME_VERSION(p) (((p)[MAC_FCF_OFFSET+1] >> 4) & 0x3)
- #define MAC_SRC_ADDR_MODE(p) (((p)[MAC_FCF_OFFSET+1] >> 6) & 0x3)
- #define MAC_SEQ_NUMBER(p) ((p)[MAC_SEQ_NUM_OFFSET])
- /**************************************************************************************************
- */
- #endif /* MAC_SPEC_H */
|