Trident IoT SDK
 
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
Loading...
Searching...
No Matches
tr_mfg_tokens.h
Go to the documentation of this file.
1
10#ifndef TR_MFG_TOKENS_H
11#define TR_MFG_TOKENS_H
12
13#include <stdio.h>
14#include <stdint.h>
15#include <stdbool.h>
16#include <string.h>
17#include "tr_platform_token_def.h"
18#include "tr_platform_tokens.h"
19
20// this is used to start the definition of manufacturing tokens
21#define TR_START_MFG_TOKEN_DEFS \
22 typedef struct __attribute__((packed))
23
24// this is used to end the definition of mfg tokens
25#define TR_END_MFG_TOKEN_DEFS \
26 tr_mfg_token_struct_t;
27
28// this is used to create a token which becomes an element in the
29// structure with the passed in type and name
30#define TR_CREATE_MFG_TOKEN(name, type) \
31 type name;
32
38
42#define tr_get_mfg_token_len(token) \
43 sizeof(((tr_mfg_token_struct_t*)0)->token)
44
48#define tr_get_mfg_token_offset(token) \
49 ((uint32_t)(&((tr_mfg_token_struct_t*)0)->token))
50
54#define tr_get_mfg_token(data, token) \
55 tr_platform_token_read((uint8_t*)data, \
56 (uint8_t)tr_get_mfg_token_len(token), \
57 (uint32_t)(TR_MFG_TOKEN_BASE + tr_get_mfg_token_offset(token)))
58
62#define tr_mfg_token_check_erased(token) \
63 ({ \
64 bool is_erased = true; \
65 uint8_t count = 0; \
66 uint8_t data[200]; \
67 tr_get_mfg_token(data, token); \
68 for (size_t i = 0 ; i < tr_get_mfg_token_len(token) ; i++) { \
69 if (data[i] == 0xFF) { \
70 count++; \
71 } \
72 } \
73 if (count != tr_get_mfg_token_len(token)) { \
74 is_erased = false; \
75 } \
76 is_erased; \
77 })
78
83#define tr_set_mfg_token(data, data_len, token) \
84 do { \
85 if (tr_mfg_token_check_erased(token)) { \
86 tr_platform_token_write((uint8_t*)data, \
87 (uint8_t)data_len, \
88 (uint32_t)(TR_MFG_TOKEN_BASE + tr_get_mfg_token_offset(token))); \
89 } \
90 } while (0)
91
93
94// NOTE: tokens are written into flash as byte strings which means
95// data types larger than uint8_t (not counting arrays of uint8_t's)
96// are read out in big endian format. In order to fix this, anything that
97// is a uint16_t or greater needs to use __attribute__((packed, scalar_storage_order("big-endian")))
98// to change the endian-ness during a read.
99
100// extra care must be taken when doing a write from runtime to ensure that
101// the endian-ness is written as intended as well.
102
103// mfg token types
104typedef struct __attribute__((packed, scalar_storage_order("big-endian")))
105{
106 uint16_t value;
107}
109typedef uint8_t tr_mfg_tok_type_custom_eui[8];
110typedef uint8_t tr_mfg_tok_type_mfg_name[32];
111typedef uint8_t tr_mfg_tok_type_model_name[32];
113typedef struct __attribute__((packed, scalar_storage_order("big-endian")))
114{
115 uint16_t value;
116}
118typedef uint8_t tr_mfg_tok_type_serial_num[8];
119typedef struct __attribute__((packed, scalar_storage_order("big-endian")))
120{
121 uint16_t value;
122}
124typedef struct __attribute__((packed, scalar_storage_order("big-endian")))
125{
126 uint16_t value;
127}
129typedef struct __attribute__((packed, scalar_storage_order("big-endian")))
130{
131 uint16_t value;
132}
134typedef struct
135{
136 uint8_t certificate[48];
137 uint8_t ca_public_key[22];
138 uint8_t private_key[21];
139 // The lsb indicates the token has been initialzed.
140 // Other flag bits are undefined.
141 uint8_t flags;
143typedef struct __attribute__((packed, scalar_storage_order("big-endian")))
144{
145 // The lsb indicates the token has been initialzed.
146 // Bits 1 through 4 give the size of the value. Valid options are:
147 // 6 (0x6) bytes, 8 (0x8) bytes, 12 (0xc) bytes, and 16 (0xf) bytes
148 // Other flag bits are undefined.
149 uint16_t flags;
150 uint8_t value[16];
151 uint16_t crc;
152}
155typedef struct __attribute__((packed, scalar_storage_order("big-endian")))
156{
157 uint16_t value;
158}
160typedef struct
161{
162 uint8_t certificate[74];
163 uint8_t ca_public_key[37];
164 uint8_t private_key[36];
165 // The lsb indicates the token has been initialzed.
166 // Other flag bits are undefined.
167 uint8_t flags;
175typedef struct __attribute__((packed, scalar_storage_order("big-endian")))
176{
177 uint8_t join_key[32];
179}
183typedef uint8_t tr_mfg_tok_type_zwave_qr_code[106];
184typedef uint8_t tr_mfg_tok_type_zwave_puk[32];
185typedef uint8_t tr_mfg_tok_type_zwave_prk[32];
186
188{
189 TR_CREATE_MFG_TOKEN(TR_MFG_TOKEN_VERSION, tr_mfg_tok_type_version)
190 TR_CREATE_MFG_TOKEN(TR_MFG_TOKEN_CUSTOM_EUI, tr_mfg_tok_type_custom_eui)
191 TR_CREATE_MFG_TOKEN(TR_MFG_TOKEN_MFG_NAME, tr_mfg_tok_type_mfg_name)
192 TR_CREATE_MFG_TOKEN(TR_MFG_TOKEN_MODEL_NAME, tr_mfg_tok_type_model_name)
193 TR_CREATE_MFG_TOKEN(TR_MFG_TOKEN_HW_VERSION, tr_mfg_tok_type_hw_version)
194 TR_CREATE_MFG_TOKEN(TR_MFG_TOKEN_MANUF_ID, tr_mfg_tok_type_manuf_id)
195 TR_CREATE_MFG_TOKEN(TR_MFG_TOKEN_SERIAL_NUM, tr_mfg_tok_type_serial_num)
196 TR_CREATE_MFG_TOKEN(TR_MFG_TOKEN_XTAL_TRIM, tr_mfg_tok_type_xtal_trim)
197 TR_CREATE_MFG_TOKEN(TR_MFG_TOKEN_PHY_CONFIG, tr_mfg_tok_type_phy_config)
198 TR_CREATE_MFG_TOKEN(TR_MFG_TOKEN_CCA_THRESHOLD, tr_mfg_tok_type_cca_threshold)
199 TR_CREATE_MFG_TOKEN(TR_MFG_TOKEN_CBKE_DATA, tr_mfg_tok_type_cbke_data)
200 TR_CREATE_MFG_TOKEN(TR_MFG_TOKEN_INSTALLATION_CODE, tr_mfg_tok_type_installation_code)
201 TR_CREATE_MFG_TOKEN(TR_MFG_TOKEN_DISTRIBUTED_KEY, tr_mfg_tok_type_distributed_key)
202 TR_CREATE_MFG_TOKEN(TR_MFG_TOKEN_SECURITY_CONFIG, tr_mfg_tok_type_security_config)
203 TR_CREATE_MFG_TOKEN(TR_MFG_TOKEN_CBKE_283K1_DATA, tr_mfg_tok_type_cbke_283k1_data)
204 TR_CREATE_MFG_TOKEN(TR_MFG_TOKEN_NVM_CRYPTO_KEY, tr_mfg_tok_type_nvm_crypto_key)
205 TR_CREATE_MFG_TOKEN(TR_MFG_TOKEN_BOOTLOAD_AES_KEY, tr_mfg_tok_type_bootload_aes_key)
206 TR_CREATE_MFG_TOKEN(TR_MFG_TOKEN_SECURE_BOOTLOADER_KEY, tr_mfg_tok_type_secure_bootloader_key)
207 TR_CREATE_MFG_TOKEN(TR_MFG_TOKEN_SIGNED_BOOTLOADER_KEY_X, tr_mfg_tok_type_signed_bootloader_key_x)
208 TR_CREATE_MFG_TOKEN(TR_MFG_TOKEN_SIGNED_BOOTLOADER_KEY_Y, tr_mfg_tok_type_signed_bootloader_key_y)
209 TR_CREATE_MFG_TOKEN(TR_MFG_TOKEN_SERIAL_BOOT_DELAY_SEC, tr_mfg_tok_type_serial_boot_delay_sec)
210 TR_CREATE_MFG_TOKEN(TR_MFG_TOKEN_THREAD_JOIN_KEY, tr_mfg_tok_type_thread_join_key)
211 TR_CREATE_MFG_TOKEN(TR_MFG_TOKEN_ZWAVE_COUNTRY_FREQ, tr_mfg_tok_type_zwave_region)
212 TR_CREATE_MFG_TOKEN(TR_MFG_TOKEN_ZWAVE_INITIALIZED, tr_mfg_tok_type_zwave_initialized)
213 TR_CREATE_MFG_TOKEN(TR_MFG_TOKEN_ZWAVE_QR_CODE, tr_mfg_tok_type_zwave_qr_code)
214 TR_CREATE_MFG_TOKEN(TR_MFG_TOKEN_ZWAVE_PUK, tr_mfg_tok_type_zwave_puk)
215 TR_CREATE_MFG_TOKEN(TR_MFG_TOKEN_ZWAVE_PRK, tr_mfg_tok_type_zwave_prk)
216}
218
219void tr_mfg_tokens_process(void);
220
221#endif // TR_MFG_TOKENS_H
Definition tr_mfg_tokens.h:161
uint8_t flags
Definition tr_mfg_tokens.h:167
Definition tr_mfg_tokens.h:135
uint8_t flags
Definition tr_mfg_tokens.h:141
Definition tr_mfg_tokens.h:130
uint16_t value
Definition tr_mfg_tokens.h:131
Definition tr_mfg_tokens.h:144
uint16_t flags
Definition tr_mfg_tokens.h:149
uint16_t crc
Definition tr_mfg_tokens.h:151
Definition tr_mfg_tokens.h:114
uint16_t value
Definition tr_mfg_tokens.h:115
Definition tr_mfg_tokens.h:125
uint16_t value
Definition tr_mfg_tokens.h:126
Definition tr_mfg_tokens.h:156
uint16_t value
Definition tr_mfg_tokens.h:157
Definition tr_mfg_tokens.h:176
uint16_t join_key_length
Definition tr_mfg_tokens.h:178
Definition tr_mfg_tokens.h:105
uint16_t value
Definition tr_mfg_tokens.h:106
Definition tr_mfg_tokens.h:120
uint16_t value
Definition tr_mfg_tokens.h:121
uint8_t tr_mfg_tok_type_mfg_name[32]
Definition tr_mfg_tokens.h:110
uint8_t tr_mfg_tok_type_zwave_qr_code[106]
Definition tr_mfg_tokens.h:183
uint8_t tr_mfg_tok_type_zwave_region
Definition tr_mfg_tokens.h:181
uint8_t tr_mfg_tok_type_custom_eui[8]
Definition tr_mfg_tokens.h:109
uint8_t tr_mfg_tok_type_nvm_crypto_key[16]
Definition tr_mfg_tokens.h:169
uint8_t tr_mfg_tok_type_hw_version
Definition tr_mfg_tokens.h:112
#define TR_END_MFG_TOKEN_DEFS
Definition tr_mfg_tokens.h:25
uint8_t tr_mfg_tok_type_model_name[32]
Definition tr_mfg_tokens.h:111
#define TR_CREATE_MFG_TOKEN(name, type)
Definition tr_mfg_tokens.h:30
uint8_t tr_mfg_tok_type_zwave_initialized
Definition tr_mfg_tokens.h:182
uint8_t tr_mfg_tok_type_secure_bootloader_key[16]
Definition tr_mfg_tokens.h:171
uint8_t tr_mfg_tok_type_zwave_puk[32]
Definition tr_mfg_tokens.h:184
uint8_t tr_mfg_tok_type_serial_num[8]
Definition tr_mfg_tokens.h:118
#define TR_START_MFG_TOKEN_DEFS
Definition tr_mfg_tokens.h:21
uint8_t tr_mfg_tok_type_distributed_key[16]
Definition tr_mfg_tokens.h:154
uint8_t tr_mfg_tok_type_serial_boot_delay_sec
Definition tr_mfg_tokens.h:174
uint8_t tr_mfg_tok_type_signed_bootloader_key_x[32]
Definition tr_mfg_tokens.h:172
uint8_t tr_mfg_tok_type_zwave_prk[32]
Definition tr_mfg_tokens.h:185
uint8_t tr_mfg_tok_type_signed_bootloader_key_y[32]
Definition tr_mfg_tokens.h:173
uint8_t tr_mfg_tok_type_bootload_aes_key[16]
Definition tr_mfg_tokens.h:170
platform specific token API declarations