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 "joining.h"
12 #include "aessw.h"
13 
14 /* Wirepas Provisioning Protocol endpoints :
15  * - Downlink: Source: 255 ; Destination: 246
16  * - Uplink: Source: 246 ; Destination: 255
17  */
19 #define PROV_DOWNLINK_EP 255
20 
21 #define PROV_UPLINK_EP 246
22 
24 #define PROV_PDU_SIZE 102
25 
27 #define PROV_CTR_SIZE 2
28 
30 #define PROV_MIC_SIZE 5
31 
33 #define ENC_KEY_OFFSET 16
34 
38 #define PROV_DATA_OFFSET (sizeof(pdu_prov_hdr_t) + 1 + PROV_CTR_SIZE)
39 
41 #define PROV_DATA_MIN_USER_ID 128
42 
44 #define PROV_DATA_MAX_USER_ID 255
45 
47 #define JOINING_NETWORK_ADDRESS 0x89d3b8 // "JBTX"
48 
50 #define JOINING_NETWORK_CHANNEL 4
51 
56 #define JOINING_RX_TIMEOUT 600
57 
59 #define JOINING_TX_INTERVAL 500
60 
64 #define JOINING_BEACON_TYPE 0x647650fb // "PROVIS"
65 
67 typedef enum
68 {
76 
77 typedef enum
78 {
84 
85 typedef enum
86 {
92 
93 typedef struct __attribute__((__packed__))
94 {
95  uint8_t type;
97  uint8_t session_id;
99 
100 typedef struct __attribute__((__packed__))
101 {
103  uint8_t method;
105  uint8_t uid[PROV_PDU_SIZE -
108 
109 typedef struct __attribute__((__packed__))
110 {
112  uint8_t key_index;
113  uint16_t counter;
115  /* Mic is added at the end of the data packet.
116  * uint8_t mic[PROV_MIC_SIZE];
117  */
119 
120 typedef struct __attribute__((__packed__))
121 {
124 
125 typedef struct __attribute__((__packed__))
126 {
128  uint8_t nack_type;
130 
131 typedef union __attribute__((__packed__))
132 {
133  union __attribute__((__packed__))
134  {
135  pdu_prov_hdr_t pdu_header;
136  uint8_t pld[PROV_PDU_SIZE - sizeof(pdu_prov_hdr_t)];
137  };
142 } pdu_prov_t;
143 
147 typedef struct
148 {
154  uint8_t * buffer;
156  uint8_t length;
158 
166 
170 typedef struct
171 {
177  uint8_t nb_retry;
179 
190  bool dry_run);
191 
206 
214 
224 
225 #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:87
prov_nack_type_e
prov_nack_type_e
Definition: provisioning_int.h:85
PROV_PACKET_TYPE_NACK
@ PROV_PACKET_TYPE_NACK
Definition: provisioning_int.h:82
pdu_prov_data_t::key_index
uint8_t key_index
Definition: provisioning_int.h:112
provisioning_res_e
provisioning_res_e
Provisioning result.
Definition: provisioning.h:26
pdu_prov_t
Definition: provisioning_int.h:131
PROV_DATA_OFFSET
#define PROV_DATA_OFFSET
Definition: provisioning_int.h:38
joining.h
PROV_DATA_ID_NODE_ROLE
@ PROV_DATA_ID_NODE_ROLE
Definition: provisioning_int.h:74
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:165
provisioning_joining_conf_t::joining_cb
provisioning_joining_beacon_cb_f joining_cb
Definition: provisioning_int.h:173
provisioning_joining_conf_t::nb_retry
uint8_t nb_retry
Definition: provisioning_int.h:177
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:70
pdu_prov_data_t
Definition: provisioning_int.h:109
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:138
pdu_prov_data_t::counter
uint16_t counter
Definition: provisioning_int.h:113
pdu_prov_hdr_t
Definition: provisioning_int.h:93
pdu_prov_start_t::pdu_header
pdu_prov_hdr_t pdu_header
Definition: provisioning_int.h:102
pdu_prov_t::data
pdu_prov_data_t data
Definition: provisioning_int.h:139
PROV_NACK_TYPE_INVALID_DATA
@ PROV_NACK_TYPE_INVALID_DATA
Definition: provisioning_int.h:89
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:140
PROV_PDU_SIZE
#define PROV_PDU_SIZE
Definition: provisioning_int.h:24
PROV_DATA_ID_AUTH_KEY
@ PROV_DATA_ID_AUTH_KEY
Definition: provisioning_int.h:70
pdu_prov_hdr_t::type
uint8_t type
Definition: provisioning_int.h:95
app_addr_t
uint32_t app_addr_t
Definition: app.h:228
pdu_prov_start_t::method
uint8_t method
Definition: provisioning_int.h:103
pdu_prov_t::nack
pdu_prov_nack_t nack
Definition: provisioning_int.h:141
provisioning_data_conf_t::buffer
uint8_t * buffer
Definition: provisioning_int.h:154
PROV_MIC_SIZE
#define PROV_MIC_SIZE
Definition: provisioning_int.h:30
provisioning_data_ids_e
provisioning_data_ids_e
List of Wirepas Ids for CBOR encoded provisioning data.
Definition: provisioning_int.h:67
provisioning_data_conf_t::user_data_cb
provisioning_user_data_cb_f user_data_cb
Definition: provisioning_int.h:152
PROV_NACK_TYPE_METHOD_NOT_SUPPORTED
@ PROV_NACK_TYPE_METHOD_NOT_SUPPORTED
Definition: provisioning_int.h:88
provisioning_data_conf_t::end_cb
provisioning_end_cb_f end_cb
Definition: provisioning_int.h:150
pdu_prov_hdr_t::address
app_addr_t address
Definition: provisioning_int.h:96
provisioning_ret_e
provisioning_ret_e
Return codes of provisioning functions.
Definition: provisioning.h:15
pdu_prov_nack_t::nack_type
uint8_t nack_type
Definition: provisioning_int.h:128
pdu_prov_data_ack_t
Definition: provisioning_int.h:120
prov_packet_type_e
prov_packet_type_e
Definition: provisioning_int.h:77
provisioning_joining_conf_t::end_cb
provisioning_joining_end_cb_f end_cb
Definition: provisioning_int.h:175
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_NET_CHAN
@ PROV_DATA_ID_NET_CHAN
Definition: provisioning_int.h:72
PROV_NACK_TYPE_INVALID_KEY_IDX
@ PROV_NACK_TYPE_INVALID_KEY_IDX
Definition: provisioning_int.h:90
pdu_prov_start_t
Definition: provisioning_int.h:100
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:57
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:80
provisioning_joining_conf_t
This structure holds the joining node parameters.
Definition: provisioning_int.h:170
PROV_NACK_TYPE_NOT_AUTHORIZED
@ PROV_NACK_TYPE_NOT_AUTHORIZED
Definition: provisioning_int.h:87
PROV_PACKET_TYPE_START
@ PROV_PACKET_TYPE_START
Definition: provisioning_int.h:79
provisioning_data_conf_t::length
uint8_t length
Definition: provisioning_int.h:156
pdu_prov_hdr_t::session_id
uint8_t session_id
Definition: provisioning_int.h:97
pdu_prov_nack_t
Definition: provisioning_int.h:125
aessw.h
PROV_DATA_ID_NET_ADDR
@ PROV_DATA_ID_NET_ADDR
Definition: provisioning_int.h:71
PROV_DATA_ID_ENC_KEY
@ PROV_DATA_ID_ENC_KEY
Definition: provisioning_int.h:69
PROV_DATA_ID_NODE_ADDR
@ PROV_DATA_ID_NODE_ADDR
Definition: provisioning_int.h:73
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_data_conf_t
This structure holds the provisioning data parameters.
Definition: provisioning_int.h:147
PROV_PACKET_TYPE_DATA_ACK
@ PROV_PACKET_TYPE_DATA_ACK
Definition: provisioning_int.h:81
api.h