Bluetooth: Mesh: Add poll callback for friend role

Adds a "polled" function to the friend callback structure, that gets
called every time the friend receives a poll message. The polled
callback is called before the establish callback, to match the LPN
behavior.

Signed-off-by: Trond Einar Snekvik <Trond.Einar.Snekvik@nordicsemi.no>
This commit is contained in:
Trond Einar Snekvik 2021-03-04 08:16:04 +01:00 committed by Johan Hedberg
commit 243e29cc29
2 changed files with 19 additions and 0 deletions

View file

@ -610,6 +610,19 @@ struct bt_mesh_friend_cb {
* @param lpn_addr Low Power Node address.
*/
void (*terminated)(uint16_t net_idx, uint16_t lpn_addr);
/** @brief Friend Poll Request.
*
* This callback notifies the application that the low power node has
* polled the friend node.
*
* This callback will be called before @ref bt_mesh_friend_cb::established
* when attempting to establish a friendship.
*
* @param net_idx NetKeyIndex used during friendship establishment.
* @param lpn_addr LPN address.
*/
void (*polled)(uint16_t net_idx, uint16_t lpn_addr);
};
/** @def BT_MESH_FRIEND_CB_DEFINE

View file

@ -705,6 +705,12 @@ int bt_mesh_friend_poll(struct bt_mesh_net_rx *rx, struct net_buf_simple *buf)
friend_recv_delay(frnd);
Z_STRUCT_SECTION_FOREACH(bt_mesh_friend_cb, cb) {
if (cb->polled) {
cb->polled(frnd->subnet->net_idx, frnd->lpn);
}
}
if (!frnd->established) {
BT_DBG("Friendship established with 0x%04x", frnd->lpn);
frnd->established = 1U;