mesh: Add reset link functionality to provisioning bearers
Reset provisioning bearers when bt_mesh_reset() is called. Accept another provisioning attempt after link close. Signed-off-by: Michał Narajowski <michal.narajowski@codecoup.pl>
This commit is contained in:
parent
5e543a2366
commit
9a0602417a
4 changed files with 37 additions and 5 deletions
|
@ -189,11 +189,20 @@ static void reset_adv_link(void)
|
|||
|
||||
k_delayed_work_cancel(&link.prot_timer);
|
||||
|
||||
if (atomic_test_bit(link.flags, PROVISIONER)) {
|
||||
/* Clear everything except the retransmit and protocol timer
|
||||
* delayed work objects.
|
||||
*/
|
||||
(void)memset(&link, 0, offsetof(struct pb_adv, tx.retransmit));
|
||||
link.rx.id = XACT_ID_NVAL;
|
||||
} else {
|
||||
/* Accept another provisioning attempt */
|
||||
link.id = 0;
|
||||
atomic_clear(link.flags);
|
||||
link.rx.id = XACT_ID_MAX;
|
||||
link.tx.id = XACT_ID_NVAL;
|
||||
}
|
||||
|
||||
link.tx.pending_ack = XACT_ID_NVAL;
|
||||
link.rx.buf = &rx_buf;
|
||||
net_buf_simple_reset(link.rx.buf);
|
||||
|
@ -839,6 +848,11 @@ void pb_adv_init(void)
|
|||
k_delayed_work_init(&link.tx.retransmit, prov_retransmit);
|
||||
}
|
||||
|
||||
void pb_adv_reset(void)
|
||||
{
|
||||
reset_adv_link();
|
||||
}
|
||||
|
||||
const struct prov_bearer pb_adv = {
|
||||
.type = BT_MESH_PROV_ADV,
|
||||
.link_open = prov_link_open,
|
||||
|
|
|
@ -141,6 +141,11 @@ void pb_gatt_init(void)
|
|||
k_delayed_work_init(&link.prot_timer, protocol_timeout);
|
||||
}
|
||||
|
||||
void pb_gatt_reset(void)
|
||||
{
|
||||
reset_state();
|
||||
}
|
||||
|
||||
const struct prov_bearer pb_gatt = {
|
||||
.type = BT_MESH_PROV_GATT,
|
||||
.link_accept = link_accept,
|
||||
|
|
|
@ -1247,6 +1247,16 @@ void bt_mesh_prov_complete(uint16_t net_idx, uint16_t addr)
|
|||
|
||||
void bt_mesh_prov_reset(void)
|
||||
{
|
||||
if (IS_ENABLED(CONFIG_BT_MESH_PB_ADV)) {
|
||||
pb_adv_reset();
|
||||
}
|
||||
|
||||
if (IS_ENABLED(CONFIG_BT_MESH_PB_GATT)) {
|
||||
pb_gatt_reset();
|
||||
}
|
||||
|
||||
reset_state();
|
||||
|
||||
if (prov->reset) {
|
||||
prov->reset();
|
||||
}
|
||||
|
|
|
@ -111,3 +111,6 @@ extern const struct prov_bearer pb_gatt;
|
|||
|
||||
void pb_adv_init(void);
|
||||
void pb_gatt_init(void);
|
||||
|
||||
void pb_adv_reset(void);
|
||||
void pb_gatt_reset(void);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue