blob: 1d78ed8e2acad36ce120cd06909bd666004437e9 [file] [log] [blame]
/*
*
* 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);