mirror of
https://git.kernel.org/pub/scm/bluetooth/bluez.git
synced 2024-11-15 16:24:28 +08:00
f333ce2d95
As provisioner's capabilities might change during application lifetime (e.g. no network link to download OOB key), let's query the agent again after application calls AddNode().
131 lines
3.7 KiB
C
131 lines
3.7 KiB
C
/*
|
|
*
|
|
* BlueZ - Bluetooth protocol stack for Linux
|
|
*
|
|
* Copyright (C) 2018 Intel Corporation. All rights reserved.
|
|
*
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
*/
|
|
|
|
|
|
/*
|
|
* 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 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 num_ele;
|
|
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 void (*mesh_prov_initiator_start_func_t)(void *user_data, int err);
|
|
|
|
typedef bool (*mesh_prov_initiator_data_req_func_t)(void *user_data,
|
|
uint8_t num_elem);
|
|
|
|
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,
|
|
uint32_t timeout, /* in seconds from mesh.conf */
|
|
struct mesh_agent *agent,
|
|
mesh_prov_initiator_start_func_t start_cb,
|
|
mesh_prov_initiator_data_req_func_t data_req_cb,
|
|
mesh_prov_initiator_complete_func_t complete_cb,
|
|
void *node, void *caller_data);
|
|
void initiator_prov_data(uint16_t net_idx, uint16_t primary, void *caller_data);
|
|
void initiator_cancel(void *caller_data);
|