The file token-stack.h should not be included directly. It is accessed by the other token files.

License#

Copyright 2018 Silicon Laboratories Inc. www.silabs.com

SPDX-License-Identifier: Zlib

The licensor of this software is Silicon Laboratories Inc.

This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.

Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:

  1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.

  2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.

  3. This notice may not be removed or altered from any source distribution.

/***************************************************************************/
//force include some sections for doxygen
#ifdef DOXYGEN
#define DEFINETYPES
#endif

// The basic TOKEN_DEF macro should not be used directly since the simplified
//  definitions are safer to use. For completeness of information, the basic
//  macro has the following format:
//
//  TOKEN_DEF(name,creator,iscnt,isidx,type,arraysize,...)
//  name - The root name used for the token
//  creator - a "creator code" used to uniquely identify the token
//  iscnt - a boolean flag that is set to identify a counter token
//  isidx - a boolean flag that is set to identify an indexed token
//  type - the basic type or typdef of the token
//  arraysize - the number of elements making up an indexed token
//  ... - initializers used when reseting the tokens to default values
//
//
// The following convenience macros are used to simplify the definition
//  process for commonly specified parameters to the basic TOKEN_DEF macro
//  DEFINE_BASIC_TOKEN(name, type, ...)
//  DEFINE_INDEXED_TOKEN(name, type, arraysize, ...)
//  DEFINE_COUNTER_TOKEN(name, type, ...)
//  DEFINE_FIXED_BASIC_TOKEN(name, type, address, ...)
//  DEFINE_FIXED_INDEXED_TOKEN(name, type, arraysize, address, ...)
//  DEFINE_FIXED_COUNTER_TOKEN(name, type, address, ...)
//  DEFINE_MFG_TOKEN(name, type, address, ...)
//

#ifndef DOXYGEN_SHOULD_SKIP_THIS

#define DEFINE_BASIC_TOKEN(name, type, ...) \
  TOKEN_DEF(name, CREATOR_##name, 0, 0, type, 1, __VA_ARGS__)

#define DEFINE_COUNTER_TOKEN(name, type, ...) \
  TOKEN_DEF(name, CREATOR_##name, 1, 0, type, 1, __VA_ARGS__)

#define DEFINE_INDEXED_TOKEN(name, type, arraysize, ...) \
  TOKEN_DEF(name, CREATOR_##name, 0, 1, type, (arraysize), __VA_ARGS__)

#define DEFINE_FIXED_BASIC_TOKEN(name, type, address, ...) \
  TOKEN_NEXT_ADDRESS(name, (address))                      \
  TOKEN_DEF(name, CREATOR_##name, 0, 0, type, 1, __VA_ARGS__)

#define DEFINE_FIXED_COUNTER_TOKEN(name, type, address, ...) \
  TOKEN_NEXT_ADDRESS(name, (address))                        \
  TOKEN_DEF(name, CREATOR_##name, 1, 0, type, 1, __VA_ARGS__)

#define DEFINE_FIXED_INDEXED_TOKEN(name, type, arraysize, address, ...) \
  TOKEN_NEXT_ADDRESS(name, (address))                                   \
  TOKEN_DEF(name, CREATOR_##name, 0, 1, type, (arraysize), __VA_ARGS__)
#endif //DOXYGEN_SHOULD_SKIP_THIS

// The Simulated EEPROM unit tests define all of their own tokens.
#ifndef SIM_EEPROM_TEST

// The creator codes are here in one list instead of next to their token
// definitions so comparison of the code is easier.  The only requirement
// on these creator definitions is that they all must be unique.  A favorite
// method for picking creator codes is to use two ASCII characters
// to make the codes more memorable.

#ifndef DOXYGEN_SHOULD_SKIP_THIS
// STACK CREATORS
#define CREATOR_STACK_NVDATA_VERSION                         0x0001
#define CREATOR_STACK_NODE_DATA                              0x0003
#define CREATOR_STACK_SECURITY_KEY                           0x0004
#define CREATOR_STACK_NONCE_COUNTER                          0x0005
#define CREATOR_STACK_CHILD_TABLE                            0x0006
#define CREATOR_STACK_LAST_ASSIGNED_ID                       0x0007
#define CREATOR_STACK_BOOT_COUNTER                           0x0008
#define CREATOR_STACK_PARENT_LONG_ID                         0x0009
#define CREATOR_STACK_SECURITY_KEY_ID                        0x000A

// NVM3KEY domain base keys
#define NVM3KEY_DOMAIN_USER    0x00000U
#define NVM3KEY_DOMAIN_CONNECT 0x30000U
#define NVM3KEY_DOMAIN_COMMON  0x80000U

// STACK KEYS
#define NVM3KEY_STACK_NVDATA_VERSION           (NVM3KEY_DOMAIN_CONNECT | 0x0001)
#define NVM3KEY_STACK_NODE_DATA                (NVM3KEY_DOMAIN_CONNECT | 0x0003)
#define NVM3KEY_STACK_SECURITY_KEY             (NVM3KEY_DOMAIN_CONNECT | 0x0004)
#define NVM3KEY_STACK_NONCE_COUNTER            (NVM3KEY_DOMAIN_CONNECT | 0x0005)
#define NVM3KEY_STACK_SECURITY_KEY_ID          (NVM3KEY_DOMAIN_CONNECT | 0x009A)
// This key is used for an indexed token and the subsequent 0x7F keys are also
// reserved.
#define NVM3KEY_STACK_CHILD_TABLE              (NVM3KEY_DOMAIN_CONNECT | 0x0010)
#define NVM3KEY_STACK_LAST_ASSIGNED_ID         (NVM3KEY_DOMAIN_CONNECT | 0x0090)
#define NVM3KEY_STACK_BOOT_COUNTER             (NVM3KEY_DOMAIN_CONNECT | 0x0091)
#define NVM3KEY_STACK_PARENT_LONG_ID           (NVM3KEY_DOMAIN_CONNECT | 0x0092)

#endif //DOXYGEN_SHOULD_SKIP_THIS

// MANUFACTURING DATA
// Since the manufacturing data is platform specific, we pull in the proper
// file here.
#if defined(EMBER_TEST)
  #include "hal/micro/cortexm3/efm32/token-manufacturing.h"
#endif

// STACK DATA
// *the addresses of these tokens must not change*

#define CURRENT_STACK_TOKEN_VERSION 0x03FC //MSB is version, LSB is complement

#ifdef DEFINETYPES

typedef uint16_t tokTypeStackNvdataVersion;

typedef uint32_t tokTypeStackNonceCounter;

typedef struct {
  uint8_t networkKey[16]; 
} tokTypeStackKey;

typedef uint32_t tokTypeStackKeyID;

typedef struct {
  uint16_t panId; 
  int16_t radioTxPower; 
  uint16_t radioFreqChannel; 
  uint8_t nodeType; 
  uint16_t nodeId; 
  uint16_t parentId; 
} tokTypeStackNodeData;

typedef struct {
  EmberEUI64 longId; 
  EmberNodeId shortId; 
  uint8_t flags; 
} tokTypeStackChildTableEntry;

typedef uint16_t tokTypeStackLastAllocatedId;

typedef uint32_t tokTypeStackBootCounter;

typedef EmberEUI64 tokTypeParentLongId;

#endif //DEFINETYPES

#ifdef DEFINETOKENS

DEFINE_BASIC_TOKEN(STACK_NVDATA_VERSION,
                   tokTypeStackNvdataVersion,
                   CURRENT_STACK_TOKEN_VERSION)

DEFINE_BASIC_TOKEN(STACK_SECURITY_KEY,
                   tokTypeStackKey,
                   { 0, })

DEFINE_BASIC_TOKEN(STACK_SECURITY_KEY_ID,
                   tokTypeStackKeyID,
                   0x00000000)

DEFINE_BASIC_TOKEN(STACK_NODE_DATA,
                   tokTypeStackNodeData,
                   { 0xFFFF, 0, 0xFF, 0xFF, 0xFFFF, 0xFFFF })

DEFINE_BASIC_TOKEN(STACK_LAST_ASSIGNED_ID,
                   tokTypeStackLastAllocatedId,
                   0x0000)

DEFINE_INDEXED_TOKEN(STACK_CHILD_TABLE,
                     tokTypeStackChildTableEntry,
                     EMBER_CHILD_TABLE_TOKEN_SIZE,
                     { 0, })

DEFINE_COUNTER_TOKEN(STACK_NONCE_COUNTER,
                     tokTypeStackNonceCounter,
                     0x00000000)

DEFINE_COUNTER_TOKEN(STACK_BOOT_COUNTER,
                     tokTypeStackBootCounter,
                     0x0000)

DEFINE_BASIC_TOKEN(STACK_PARENT_LONG_ID,
                   tokTypeParentLongId,
                   { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF })

#endif //DEFINETOKENS

#ifdef MAC_DEBUG_TOKEN
// MAC DEBUG DATA
#include "stack/mac/token-mac-debug.h"
#endif

// APPLICATION DATA

#include "sl_token_manager_config.h"
#if (SL_TOKEN_MANAGER_CUSTOM_TOKENS_PRESENT)
  #include SL_TOKEN_MANAGER_CUSTOM_TOKEN_HEADER
#endif

#else //SIM_EEPROM_TEST

//The Simulated EEPROM unit tests define all of their tokens via the
//APPLICATION_TOKEN_HEADER macro.
  #ifdef APPLICATION_TOKEN_HEADER
    #include APPLICATION_TOKEN_HEADER
  #endif

#endif //SIM_EEPROM_TEST

Modules#

tokTypeStackKey

tokTypeStackNodeData

tokTypeStackChildTableEntry

Token types#

The types used for each stack token.

typedef uint16_t

Type for TOKEN_STACK_NVDATA_VERSION. Keeps the version number of stack tokens.

typedef uint32_t

Type for TOKEN_STACK_NONCE_COUNTER. Used to make sure that Nonce used for security is not repeated even after unexpected reboot.

typedef uint32_t

Type for TOKEN_STACK_SECURITY_KEY_ID. Used to make sure that Nonce used for security is not repeated even after unexpected reboot.

typedef uint16_t

Type for TOKEN_STACK_LAST_ASSIGNED_ID. Stores the last assigned NodeId if the device is EMBER_STAR_COORDINATOR.

typedef uint32_t

Type for TOKEN_STACK_BOOT_COUNTER. Increments at boot (during emberInit()).

typedef EmberEUI64

Type for TOKEN_STACK_PARENT_LONG_ID. Stores the Long Id of the parent of this device. Only used for EMBER_MAC_MODE_DEVICE and EMBER_MAC_MODE_SLEEPY_DEVICE device types.

Macros#

#define
#define

The current version number of the stack tokens. MSB is the version. LSB is a complement.

Token types Documentation#

tokTypeStackNvdataVersion#

typedef uint16_t tokTypeStackNvdataVersion

Type for TOKEN_STACK_NVDATA_VERSION. Keeps the version number of stack tokens.


Definition at line 220 of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/config/token-stack.h

tokTypeStackNonceCounter#

typedef uint32_t tokTypeStackNonceCounter

Type for TOKEN_STACK_NONCE_COUNTER. Used to make sure that Nonce used for security is not repeated even after unexpected reboot.


Definition at line 226 of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/config/token-stack.h

tokTypeStackKeyID#

typedef uint32_t tokTypeStackKeyID

Type for TOKEN_STACK_SECURITY_KEY_ID. Used to make sure that Nonce used for security is not repeated even after unexpected reboot.


Definition at line 241 of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/config/token-stack.h

tokTypeStackLastAllocatedId#

typedef uint16_t tokTypeStackLastAllocatedId

Type for TOKEN_STACK_LAST_ASSIGNED_ID. Stores the last assigned NodeId if the device is EMBER_STAR_COORDINATOR.


Definition at line 272 of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/config/token-stack.h

tokTypeStackBootCounter#

typedef uint32_t tokTypeStackBootCounter

Type for TOKEN_STACK_BOOT_COUNTER. Increments at boot (during emberInit()).


Definition at line 278 of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/config/token-stack.h

tokTypeParentLongId#

typedef EmberEUI64 tokTypeParentLongId

Type for TOKEN_STACK_PARENT_LONG_ID. Stores the Long Id of the parent of this device. Only used for EMBER_MAC_MODE_DEVICE and EMBER_MAC_MODE_SLEEPY_DEVICE device types.


Definition at line 285 of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/config/token-stack.h

Macro Definition Documentation#

DEFINETYPES#

#define DEFINETYPES

Definition at line 34 of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/config/token-stack.h

CURRENT_STACK_TOKEN_VERSION#

#define CURRENT_STACK_TOKEN_VERSION
Value:
0x03FC

The current version number of the stack tokens. MSB is the version. LSB is a complement.

See hal/micro/token.h for a more complete explanation.


Definition at line 206 of file /mnt/raid/workspaces/ws.Iq463TQni/overlay/gsdk/protocol/flex/stack/config/token-stack.h