/**************************************************************************//** \file nwkCommon.h \brief Declarations of common NWK layer constants and types. \author Atmel Corporation: http://www.atmel.com \n Support email: avr@atmel.com Copyright (c) 2008-2011, Atmel Corporation. All rights reserved. Licensed under Atmel's Limited License Agreement (BitCloudTM). \internal History: 2009-04-13 Max Gekk - Created. Last change: $Id: nwkCommon.h 17470 2011-06-10 11:31:00Z mgekk $ ******************************************************************************/ #if !defined _NWK_COMMON_H #define _NWK_COMMON_H /****************************************************************************** Includes section ******************************************************************************/ #include #include /****************************************************************************** Definitions section ******************************************************************************/ /** Base NWK header length of data packet: * - frame control field (2 octets), * - destination address (2 octets), * - source address (2 octets), * - radius (1 octet), * - sequence number (1 octet), * - multicast control field (1 octet). */ #define NWK_DATA_FRAME_HEADER_LENGTH 9U /** Length of auxiliary frame header. See ZigBee spec r18, Figure 4.3. */ #if defined _SECURITY_ #define NWK_AUXILIARY_HEADER_SIZE 14U #define NWK_MAX_DATA_FRAME_FOOTER_LENGTH 4U #else #define NWK_AUXILIARY_HEADER_SIZE 0U #define NWK_MAX_DATA_FRAME_FOOTER_LENGTH 0U #endif /* _SECURITY_ */ /** The hop count radius for concentrator route discoveries. * ZigBee spec r18, Table 3.44, page 348. */ #define NWK_CONCENTRATOR_RADIUS 8U /* hop */ /** The maximum number of hops in a source route. ZigBee spec r18, Table 3.44. **/ #define NWK_MAX_SOURCE_ROUTE (NWK_CONCENTRATOR_RADIUS) /** Maximum length of the source route subframe: * - relay count field (1 octet), * - relay index field (1 octet), * - relay list (NWK_MAX_SOURCE_ROUTE * size of short address). * See ZigBee spec r18, 3.3.1.9, page 316. */ #if defined _NWK_SOURCE_ROUTING_ #define NWK_MAX_SOURCE_ROUTE_SUBFRAME_LENGTH (2U+(2U*NWK_MAX_SOURCE_ROUTE)) #else #define NWK_MAX_SOURCE_ROUTE_SUBFRAME_LENGTH 0U #endif /* _NWK_SOURCE_ROUTING_ */ /** Maximum lenght of NWK header. */ #define NWK_MAX_UNSECURE_HEADER_LEHGTH \ (NWK_DATA_FRAME_HEADER_LENGTH + NWK_MAX_SOURCE_ROUTE_SUBFRAME_LENGTH) #define NWK_MAX_DATA_FRAME_HEADER_LEHGTH \ (NWK_MAX_UNSECURE_HEADER_LEHGTH + NWK_AUXILIARY_HEADER_SIZE) /** Length of the reserved part in the data frame. */ #define NWK_AFFIX_LENGTH (MAC_AFFIX_LENGTH + \ NWK_MAX_DATA_FRAME_HEADER_LEHGTH + NWK_MAX_DATA_FRAME_FOOTER_LENGTH) /** Length of the reserved header in the data frame. */ #define NWK_NSDU_OFFSET (MAC_MSDU_OFFSET + NWK_MAX_DATA_FRAME_HEADER_LEHGTH) /** Maximum lenght of NWK payload. */ #define NWK_MAX_NSDU_SIZE (MAC_MAX_MSDU_SIZE \ - NWK_MAX_DATA_FRAME_HEADER_LEHGTH - NWK_MAX_DATA_FRAME_FOOTER_LENGTH) /** Valid broadcast addresses. See ZigBee spec r18, Table 3.54, page 411. */ #define IS_BROADCAST_ADDR(A) (LE16_TO_CPU(A) >= 0xFFF8U) #define IS_CORRECT_SHORT_ADDR(A) (LE16_TO_CPU(A) < 0xFFF8U) /** Low power routers only. */ #define LOW_POWER_ROUT_ADDR CCPU_TO_LE16(0xFFFBU) #define BROADCAST_ADDR_LOWPOWER_ROUTERS LOW_POWER_ROUT_ADDR /** All routers and coordinator in a network. */ #define ALL_ROUT_AND_COORD_ADDR CCPU_TO_LE16(0xFFFCU) #define BROADCAST_ADDR_ROUTERS ALL_ROUT_AND_COORD_ADDR /** All devices with MAC attribute macRxOnWhenIdle = TRUE. */ #define RX_ON_WHEN_IDLE_ADDR CCPU_TO_LE16(0xFFFDU) #define BROADCAST_ADDR_RX_ON_WHEN_IDLE RX_ON_WHEN_IDLE_ADDR /** All devices in PAN. */ #define ALL_DEVICES_IN_PAN_ADDR 0xFFFFU #define BROADCAST_ADDR_ALL ALL_DEVICES_IN_PAN_ADDR /** The value of the nwkNetworkAddress attribute of its NIB has * a value of 0xffff indicating that it is not currently joined to a network. */ #define NWK_NO_SHORT_ADDR 0xFFFFU /** The maximum broadcast jitter time measured in number of octets. * ZigBee spec r18, Table 3.43. */ #define NWKC_MAX_BROADCAST_JITTER 2000U /*