Wirepas SDK
provisioning_int.h
Go to the documentation of this file.
1 /* Copyright 2019 Wirepas Ltd. All Rights Reserved.
2  *
3  * See file LICENSE.txt for full license details.
4  *
5  */
6 #ifndef _PROVISIONING_INT_H_
7 #define _PROVISIONING_INT_H_
8 
9 #include <stdint.h>
10 #include "api.h"
11 #include "aessw.h"
12 
13 #if defined(MAC_PROFILE_DECTNR)
14 
15 /* Wirepas Provisioning Protocol endpoints for 5GMesh
16  *
17  * - Downlink: Source: 0xA0 ; Destination: 0x28
18  * - Uplink: Source: 0xA0 ; Destination: 0x27
19  */
21 #define PROV_DOWNLINK_SRC_EP 0xA0
22 #define PROV_DOWNLINK_DST_EP 0x28
23 
24 #define PROV_UPLINK_SRC_EP 0xA0
25 #define PROV_UPLINK_DST_EP 0x27
26 #endif
27 
28 
29 
31 #define PROV_PDU_SIZE 135
32 
34 #define PROV_CTR_SIZE 2
35 
37 #define PROV_MIC_SIZE 5
38 
40 #define ENC_KEY_OFFSET 16
41 
45 #define PROV_DATA_OFFSET (sizeof(pdu_prov_hdr_t) + 1 + PROV_CTR_SIZE)
46 
48 #define PROV_DATA_MIN_USER_ID 128
49 
51 #define PROV_DATA_MAX_USER_ID 255
52 
54 #define JOINING_NETWORK_ADDRESS 0x9E4ADC // "JBTX"
55 
56 
57 #if defined(MAC_PROFILE_DECTNR) || defined(MAC_PROFILE_SUBG)
58 // For SubGhz and 5G Mesh MAC profiles, joining network channel 4 is used
59 #define JOINING_NETWORK_CHANNEL 4
60 #endif
61 
62 #if defined(MAC_PROFILE_DECTNR)
63 
67 #define JOINING_RX_TIMEOUT 2100
68 #endif
69 
70 #if defined(MAC_PROFILE_DECTNR)
71 
72 #define JOINING_TX_INTERVAL 2000
73 #endif
74 
78 #if defined(MAC_PROFILE_DECTNR)
79 // For 5G Mesh the beacon type equals the provisioning data EP
80 #define JOINING_BEACON_TYPE 0xA027
81 #endif
82 
83 
87 #define PROV_START_FLAGS_NONE 0
88 
92 #define PROV_START_FLAGS_NW_PARAM_EQUAL_CHECK 1
93 
95 typedef enum {
107 
108 typedef enum
109 {
115 
116 typedef enum
117 {
123 
124 typedef struct __attribute__((__packed__))
125 {
126  uint8_t type;
128  uint8_t session_id;
130 
131 typedef struct __attribute__((__packed__))
132 {
134  uint8_t method;
136  uint8_t uid[PROV_PDU_SIZE -
139 
140 
141 typedef struct __attribute__((__packed__))
142 {
144  uint8_t key_index;
145  uint16_t counter;
147  /* Mic is added at the end of the data packet.
148  * uint8_t mic[PROV_MIC_SIZE];
149  */
151 
152 typedef struct __attribute__((__packed__))
153 {
156 
157 typedef struct __attribute__((__packed__))
158 {
160  uint8_t nack_type;
162 
163 typedef union __attribute__((__packed__))
164 {
165  union __attribute__((__packed__))
166  {
167  pdu_prov_hdr_t pdu_header;
168  uint8_t pld[PROV_PDU_SIZE - sizeof(pdu_prov_hdr_t)];
169  };
174 } pdu_prov_t;
175 
179 typedef struct
180 {
186  uint8_t * buffer;
188  uint8_t length;
190  uint8_t method;
192 
200 
204 typedef struct
205 {
211  uint8_t nb_retry;
213  uint8_t flags;
215 
221 
225 typedef struct
226 {
230  uint16_t timeout_sec;
232 
243  bool dry_run);
244 
259 
267 
277 
286  const provisioning_failsafe_conf_t * conf);
287 
295 
303 
313 
321 const app_lib_joining_received_beacon_t *
323  const app_lib_joining_received_beacon_t * beacons);
324 
325 #endif //_PROVISIONING_INT_H_
provisioning_joining_beacon_cb_f
const typedef app_lib_joining_received_beacon_t *(* provisioning_joining_beacon_cb_f)(const app_lib_joining_received_beacon_t *beacons)
Selects which joining beacon to connect to at the end of a scan.
Definition: provisioning.h:149
prov_nack_type_e
prov_nack_type_e
Definition: provisioning_int.h:116
PROV_DATA_ID_NET_KEY_SEQ
@ PROV_DATA_ID_NET_KEY_SEQ
Definition: provisioning_int.h:102
PROV_PACKET_TYPE_NACK
@ PROV_PACKET_TYPE_NACK
Definition: provisioning_int.h:113
pdu_prov_data_t::key_index
uint8_t key_index
Definition: provisioning_int.h:144
provisioning_res_e
provisioning_res_e
Provisioning result.
Definition: provisioning.h:48
pdu_prov_t
Definition: provisioning_int.h:163
PROV_DATA_OFFSET
#define PROV_DATA_OFFSET
Definition: provisioning_int.h:45
PROV_DATA_ID_MGMT_ENC_KEY
@ PROV_DATA_ID_MGMT_ENC_KEY
Definition: provisioning_int.h:103
provisioning_failsafe_conf_t
Structure to hold failsafe parameters.
Definition: provisioning_int.h:225
PROV_DATA_ID_NODE_ROLE
@ PROV_DATA_ID_NODE_ROLE
Definition: provisioning_int.h:101
provisioning_joining_end_cb_f
void(* provisioning_joining_end_cb_f)(provisioning_res_e result)
The end joining callback. This function is called at the end of the joining process.
Definition: provisioning_int.h:199
provisioning_joining_conf_t::joining_cb
provisioning_joining_beacon_cb_f joining_cb
Definition: provisioning_int.h:207
provisioning_joining_conf_t::nb_retry
uint8_t nb_retry
Definition: provisioning_int.h:211
provisioning_user_data_cb_f
void(* provisioning_user_data_cb_f)(uint32_t id, CborType type, uint8_t *data, uint8_t len)
Received User provisioning data callback. Provisioning data is received as a map of id:data....
Definition: provisioning.h:132
pdu_prov_data_t
Definition: provisioning_int.h:141
Provisioning_Joining_init
provisioning_ret_e Provisioning_Joining_init(provisioning_joining_conf_t *conf)
Initialize the Joining module.
pdu_prov_t::start
pdu_prov_start_t start
Definition: provisioning_int.h:170
pdu_prov_data_t::counter
uint16_t counter
Definition: provisioning_int.h:145
pdu_prov_hdr_t
Definition: provisioning_int.h:124
Provisioning_Failsafe_init
provisioning_ret_e Provisioning_Failsafe_init(const provisioning_failsafe_conf_t *conf)
Initialize the failsafe module.
pdu_prov_start_t::pdu_header
pdu_prov_hdr_t pdu_header
Definition: provisioning_int.h:133
pdu_prov_t::data
pdu_prov_data_t data
Definition: provisioning_int.h:171
PROV_NACK_TYPE_INVALID_DATA
@ PROV_NACK_TYPE_INVALID_DATA
Definition: provisioning_int.h:120
AES_128_KEY_BLOCK_SIZE
#define AES_128_KEY_BLOCK_SIZE
AES 128 block size in bytes.
Definition: aessw.h:13
pdu_prov_t::data_ack
pdu_prov_data_ack_t data_ack
Definition: provisioning_int.h:172
Provisioning_Failsafe_stop
provisioning_ret_e Provisioning_Failsafe_stop(void)
Stop failsafe.
PROV_PDU_SIZE
#define PROV_PDU_SIZE
Definition: provisioning_int.h:31
PROV_DATA_ID_AUTH_KEY
@ PROV_DATA_ID_AUTH_KEY
Definition: provisioning_int.h:97
pdu_prov_hdr_t::type
uint8_t type
Definition: provisioning_int.h:126
provisioning_start_cb_f
provisioning_ret_e(* provisioning_start_cb_f)(void)
Provisioning start callback.
Definition: provisioning_int.h:220
pdu_prov_start_t::method
uint8_t method
Definition: provisioning_int.h:134
pdu_prov_t::nack
pdu_prov_nack_t nack
Definition: provisioning_int.h:173
provisioning_data_conf_t::buffer
uint8_t * buffer
Definition: provisioning_int.h:186
PROV_MIC_SIZE
#define PROV_MIC_SIZE
Definition: provisioning_int.h:37
provisioning_data_ids_e
provisioning_data_ids_e
List of Wirepas Ids for CBOR encoded provisioning data.
Definition: provisioning_int.h:95
provisioning_data_conf_t::user_data_cb
provisioning_user_data_cb_f user_data_cb
Definition: provisioning_int.h:184
PROV_NACK_TYPE_METHOD_NOT_SUPPORTED
@ PROV_NACK_TYPE_METHOD_NOT_SUPPORTED
Definition: provisioning_int.h:119
provisioning_data_conf_t::end_cb
provisioning_end_cb_f end_cb
Definition: provisioning_int.h:182
pdu_prov_hdr_t::address
app_addr_t address
Definition: provisioning_int.h:127
provisioning_ret_e
provisioning_ret_e
Return codes of provisioning functions.
Definition: provisioning.h:37
pdu_prov_nack_t::nack_type
uint8_t nack_type
Definition: provisioning_int.h:160
pdu_prov_data_ack_t
Definition: provisioning_int.h:152
prov_packet_type_e
prov_packet_type_e
Definition: provisioning_int.h:108
provisioning_joining_conf_t::end_cb
provisioning_joining_end_cb_f end_cb
Definition: provisioning_int.h:209
provisioning_joining_conf_t::flags
uint8_t flags
Definition: provisioning_int.h:213
Provisioning_Joining_start
provisioning_ret_e Provisioning_Joining_start(void)
Start the joining process (listen to joining beacon and select a network to join).
PROV_DATA_ID_MGMT_KEY_SEQ
@ PROV_DATA_ID_MGMT_KEY_SEQ
Definition: provisioning_int.h:105
PROV_DATA_ID_NET_CHAN
@ PROV_DATA_ID_NET_CHAN
Definition: provisioning_int.h:99
PROV_NACK_TYPE_INVALID_KEY_IDX
@ PROV_NACK_TYPE_INVALID_KEY_IDX
Definition: provisioning_int.h:121
pdu_prov_start_t
Definition: provisioning_int.h:131
app_addr_t
uint32_t app_addr_t
Definition: wms_app.h:228
provisioning_end_cb_f
bool(* provisioning_end_cb_f)(provisioning_res_e result)
The end provisioning callback. This function is called at the end of the provisioning process.
Definition: provisioning.h:119
Provisioning_Failsafe_start
provisioning_ret_e Provisioning_Failsafe_start(void)
Start failsafe.
Provisioning_Joining_stop
provisioning_ret_e Provisioning_Joining_stop(void)
Stops the joining process.
PROV_PACKET_TYPE_DATA
@ PROV_PACKET_TYPE_DATA
Definition: provisioning_int.h:111
provisioning_joining_conf_t
This structure holds the joining node parameters.
Definition: provisioning_int.h:204
Provisioning_Failsafe_callback_end
bool Provisioning_Failsafe_callback_end(provisioning_res_e result)
Callback for ending provisioning.
PROV_NACK_TYPE_NOT_AUTHORIZED
@ PROV_NACK_TYPE_NOT_AUTHORIZED
Definition: provisioning_int.h:118
PROV_PACKET_TYPE_START
@ PROV_PACKET_TYPE_START
Definition: provisioning_int.h:110
provisioning_data_conf_t::length
uint8_t length
Definition: provisioning_int.h:188
pdu_prov_hdr_t::session_id
uint8_t session_id
Definition: provisioning_int.h:128
pdu_prov_nack_t
Definition: provisioning_int.h:157
provisioning_failsafe_conf_t::start_cb
provisioning_start_cb_f start_cb
Definition: provisioning_int.h:228
aessw.h
provisioning_failsafe_conf_t::timeout_sec
uint16_t timeout_sec
Definition: provisioning_int.h:230
PROV_DATA_ID_NET_ADDR
@ PROV_DATA_ID_NET_ADDR
Definition: provisioning_int.h:98
PROV_DATA_ID_ENC_KEY
@ PROV_DATA_ID_ENC_KEY
Definition: provisioning_int.h:96
PROV_DATA_ID_NODE_ADDR
@ PROV_DATA_ID_NODE_ADDR
Definition: provisioning_int.h:100
Provisioning_Data_decode
provisioning_ret_e Provisioning_Data_decode(provisioning_data_conf_t *conf, bool dry_run)
Decode (and apply if valid) the received provisioning data.
Provisioning_Failsafe_callback_beacons
const app_lib_joining_received_beacon_t * Provisioning_Failsafe_callback_beacons(const app_lib_joining_received_beacon_t *beacons)
Callback for joining beacon filtering.
provisioning_data_conf_t
This structure holds the provisioning data parameters.
Definition: provisioning_int.h:179
PROV_DATA_ID_MGMT_AUTH_KEY
@ PROV_DATA_ID_MGMT_AUTH_KEY
Definition: provisioning_int.h:104
PROV_PACKET_TYPE_DATA_ACK
@ PROV_PACKET_TYPE_DATA_ACK
Definition: provisioning_int.h:112
api.h