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);
|
k_delayed_work_cancel(&link.prot_timer);
|
||||||
|
|
||||||
/* Clear everything except the retransmit and protocol timer
|
if (atomic_test_bit(link.flags, PROVISIONER)) {
|
||||||
* delayed work objects.
|
/* 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;
|
(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.tx.pending_ack = XACT_ID_NVAL;
|
||||||
link.rx.buf = &rx_buf;
|
link.rx.buf = &rx_buf;
|
||||||
net_buf_simple_reset(link.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);
|
k_delayed_work_init(&link.tx.retransmit, prov_retransmit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void pb_adv_reset(void)
|
||||||
|
{
|
||||||
|
reset_adv_link();
|
||||||
|
}
|
||||||
|
|
||||||
const struct prov_bearer pb_adv = {
|
const struct prov_bearer pb_adv = {
|
||||||
.type = BT_MESH_PROV_ADV,
|
.type = BT_MESH_PROV_ADV,
|
||||||
.link_open = prov_link_open,
|
.link_open = prov_link_open,
|
||||||
|
|
|
@ -141,6 +141,11 @@ void pb_gatt_init(void)
|
||||||
k_delayed_work_init(&link.prot_timer, protocol_timeout);
|
k_delayed_work_init(&link.prot_timer, protocol_timeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void pb_gatt_reset(void)
|
||||||
|
{
|
||||||
|
reset_state();
|
||||||
|
}
|
||||||
|
|
||||||
const struct prov_bearer pb_gatt = {
|
const struct prov_bearer pb_gatt = {
|
||||||
.type = BT_MESH_PROV_GATT,
|
.type = BT_MESH_PROV_GATT,
|
||||||
.link_accept = link_accept,
|
.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)
|
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) {
|
if (prov->reset) {
|
||||||
prov->reset();
|
prov->reset();
|
||||||
}
|
}
|
||||||
|
|
|
@ -111,3 +111,6 @@ extern const struct prov_bearer pb_gatt;
|
||||||
|
|
||||||
void pb_adv_init(void);
|
void pb_adv_init(void);
|
||||||
void pb_gatt_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