summaryrefslogtreecommitdiff
path: root/mesh/provision.h
diff options
context:
space:
mode:
authorBrian Gix <brian.gix@intel.com>2018-12-14 14:00:56 -0800
committerBrian Gix <brian.gix@intel.com>2019-01-08 08:26:22 -0800
commit7005bb77bf43ab0d1cb01ad6a30261c1e1d10fee (patch)
tree3205a61133983a3dc25df0b4f23cbb9dec16d1f1 /mesh/provision.h
parent72486a78967e57299d2f35754ea740b45fa9825c (diff)
downloadbluez-7005bb77bf43ab0d1cb01ad6a30261c1e1d10fee.tar.gz
mesh: Re-arrange provisioning for DBus API
This restructures provisioning so that it is a service of high level d-Bus based API and may be potentially used on mulitple provisioning transports.
Diffstat (limited to 'mesh/provision.h')
-rw-r--r--mesh/provision.h112
1 files changed, 102 insertions, 10 deletions
diff --git a/mesh/provision.h b/mesh/provision.h
index 0c59bf037..6b61a45be 100644
--- a/mesh/provision.h
+++ b/mesh/provision.h
@@ -17,14 +17,106 @@
*
*/
+
+/*
+ * size: hard define (mesh.conf - OOB_NUMBEROOB_NUMBER)
+ * oob size - 8 if alpha or numeric
+ * else 1 if mask is non zero
+ * else 0
+ */
+struct bt_mesh;
struct mesh_prov;
-struct l_queue;
-
-void initiator_prov_open(struct mesh_prov *prov);
-void initiator_prov_close(struct mesh_prov *prov, uint8_t reason);
-void initiator_prov_receive(const void *pkt, uint16_t size,
- struct mesh_prov *prov);
-void acceptor_prov_open(struct mesh_prov *prov);
-void acceptor_prov_close(struct mesh_prov *prov, uint8_t reason);
-void acceptor_prov_receive(const void *pkt, uint16_t size,
- struct mesh_prov *prov);
+struct mesh_agent;
+
+/* Provisioner Agent Response Types */
+#define OOB_CANCEL 0x00
+#define OOB_PRIV_KEY 0x01
+#define OOB_PUB_KEY 0x02
+#define OOB_NUMBER 0x03
+#define OOB_STATIC 0x04
+#define OOB_NUMBER_DISPLAY 0x05
+
+/* Spec defined Provisioning message types */
+#define PROV_INVITE 0x00
+#define PROV_CAPS 0x01
+#define PROV_START 0x02
+#define PROV_PUB_KEY 0x03
+#define PROV_INP_CMPLT 0x04
+#define PROV_CONFIRM 0x05
+#define PROV_RANDOM 0x06
+#define PROV_DATA 0x07
+#define PROV_COMPLETE 0x08
+#define PROV_FAILED 0x09
+
+/* Spec defined Error Codes */
+#define PROV_ERR_SUCCESS 0x00
+#define PROV_ERR_INVALID_PDU 0x01
+#define PROV_ERR_INVALID_FORMAT 0x02
+#define PROV_ERR_UNEXPECTED_PDU 0x03
+#define PROV_ERR_CONFIRM_FAILED 0x04
+#define PROV_ERR_INSUF_RESOURCE 0x05
+#define PROV_ERR_DECRYPT_FAILED 0x06
+#define PROV_ERR_UNEXPECTED_ERR 0x07
+#define PROV_ERR_CANT_ASSIGN_ADDR 0x08
+/* Internally generated Error Codes */
+#define PROV_ERR_TIMEOUT 0xFF
+
+/* Provisioner Action values */
+/* IN */
+#define PROV_ACTION_PUSH 0x00
+#define PROV_ACTION_TWIST 0x01
+#define PROV_ACTION_IN_NUMERIC 0x02
+#define PROV_ACTION_IN_ALPHA 0x03
+/* OUT */
+#define PROV_ACTION_BLINK 0x00
+#define PROV_ACTION_BEEP 0x01
+#define PROV_ACTION_VIBRATE 0x02
+#define PROV_ACTION_OUT_NUMERIC 0x03
+#define PROV_ACTION_OUT_ALPHA 0x04
+
+/* OOB_Info defines from Table 3.54 of Mesh profile Specification v1.0 */
+#define OOB_INFO_URI_HASH 0x0002
+
+/* PB_REMOTE not supported from unprovisioned state */
+enum trans_type {
+ PB_ADV = 0,
+ PB_GATT,
+};
+
+#define PROV_FLAG_KR 0x01
+#define PROV_FLAG_IVU 0x02
+
+struct mesh_prov_node_info {
+ uint32_t iv_index;
+ uint16_t unicast;
+ uint16_t net_index;
+ uint8_t net_key[16];
+ uint8_t device_key[16];
+ uint8_t flags; /* IVU and KR bits */
+};
+
+typedef bool (*mesh_prov_acceptor_complete_func_t)(void *user_data,
+ uint8_t status,
+ struct mesh_prov_node_info *info);
+
+typedef bool (*mesh_prov_initiator_complete_func_t)(void *user_data,
+ uint8_t status,
+ struct mesh_prov_node_info *info);
+
+/* This starts unprovisioned device beacon */
+bool acceptor_start(uint8_t num_ele, uint8_t uuid[16],
+ uint16_t algorithms, uint32_t timeout,
+ struct mesh_agent *agent,
+ mesh_prov_acceptor_complete_func_t complete_cb,
+ void *caller_data);
+void acceptor_cancel(void *user_data);
+
+bool initiator_start(enum trans_type transport,
+ uint8_t uuid[16],
+ uint16_t max_ele,
+ uint16_t server, /* Only valid for PB-Remote */
+ uint32_t timeout, /* in seconds from mesh.conf */
+ struct mesh_agent *agent,
+ mesh_prov_initiator_complete_func_t complete_cb,
+ void *caller_data);
+void initiator_cancel(void *user_data);