This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Remote provisioning link open timeout not triggering

Hello, I am using SDK 16.0 and mesh SDK 4.2.

We successfully implemented remote provisioning capabilities in our devices' firmware. One thing we are noticing though is that the remote provisioner does not timeout after some time if no PDU is received during the provisioning process as the local provisioner does.

Inspecting the code that initializes the local and remote bearers, I noticed suspicious differences that may be the cause of the process not timing out, namely in the initialization routine we have:

ERROR_CHECK(nrf_mesh_prov_bearer_add(&m_prov_ctx, nrf_mesh_prov_bearer_adv_interface_get(&m_prov_bearer_adv)));
ERROR_CHECK(nrf_mesh_prov_bearer_add(&m_prov_ctx, pb_remote_client_bearer_interface_get(&m_remote_client)));

Inspecting the content of nrf_mesh_prov_bearer_adv_interface_get and pb_remote_client_bearer_interface_get, we see that the callbacks of the interface .link_open are prov_bearer_adv_link_open for the local provisioner and pb_if_link_open_cb for the remote one.

While prov_bearer_adv_link_open has a mention for link_timeout_us inside the callback, where the structure of the bearer is initialized with init_bearer_structurepb_if_link_open_cb still receives the same link_timeout_us as an argument, but makes no use of it inside the callback, leaving me to believe that the timeout feature is not implemented in the SDK.

So, in prov_provisioner.c, when uint32_t status = p_bearer->p_interface->link_open(p_bearer, p_uuid, NRF_MESH_PROV_LINK_TIMEOUT_MIN_US); is called, the NRF_MESH_PROV_LINK_TIMEOUT_MIN_US is correctly used in the local provisioner but not on the remote one.

Can you please confirm if this is a bug on the SDK side? Did I misunderstand something? Thank you.

Related