xref: /nrf52832-nimble/packages/NimBLE-latest/nimble/host/mesh/src/lpn.h (revision 042d53a763ad75cb1465103098bb88c245d95138)
1*042d53a7SEvalZero /*  Bluetooth Mesh */
2*042d53a7SEvalZero 
3*042d53a7SEvalZero /*
4*042d53a7SEvalZero  * Copyright (c) 2017 Intel Corporation
5*042d53a7SEvalZero  *
6*042d53a7SEvalZero  * SPDX-License-Identifier: Apache-2.0
7*042d53a7SEvalZero  */
8*042d53a7SEvalZero #ifndef __LPN_H__
9*042d53a7SEvalZero #define __LPN_H__
10*042d53a7SEvalZero 
11*042d53a7SEvalZero #include "mesh/mesh.h"
12*042d53a7SEvalZero 
13*042d53a7SEvalZero int bt_mesh_lpn_friend_update(struct bt_mesh_net_rx *rx,
14*042d53a7SEvalZero 			      struct os_mbuf *buf);
15*042d53a7SEvalZero int bt_mesh_lpn_friend_offer(struct bt_mesh_net_rx *rx,
16*042d53a7SEvalZero 			     struct os_mbuf *buf);
17*042d53a7SEvalZero int bt_mesh_lpn_friend_clear_cfm(struct bt_mesh_net_rx *rx,
18*042d53a7SEvalZero 				 struct os_mbuf *buf);
19*042d53a7SEvalZero int bt_mesh_lpn_friend_sub_cfm(struct bt_mesh_net_rx *rx,
20*042d53a7SEvalZero 			       struct os_mbuf *buf);
21*042d53a7SEvalZero 
bt_mesh_lpn_established(void)22*042d53a7SEvalZero static inline bool bt_mesh_lpn_established(void)
23*042d53a7SEvalZero {
24*042d53a7SEvalZero #if (MYNEWT_VAL(BLE_MESH_LOW_POWER))
25*042d53a7SEvalZero 	return bt_mesh.lpn.established;
26*042d53a7SEvalZero #else
27*042d53a7SEvalZero 	return false;
28*042d53a7SEvalZero #endif
29*042d53a7SEvalZero }
30*042d53a7SEvalZero 
bt_mesh_lpn_match(u16_t addr)31*042d53a7SEvalZero static inline bool bt_mesh_lpn_match(u16_t addr)
32*042d53a7SEvalZero {
33*042d53a7SEvalZero #if (MYNEWT_VAL(BLE_MESH_LOW_POWER))
34*042d53a7SEvalZero 	if (bt_mesh_lpn_established()) {
35*042d53a7SEvalZero 		return (addr == bt_mesh.lpn.frnd);
36*042d53a7SEvalZero 	}
37*042d53a7SEvalZero #endif
38*042d53a7SEvalZero 	return false;
39*042d53a7SEvalZero }
40*042d53a7SEvalZero 
bt_mesh_lpn_waiting_update(void)41*042d53a7SEvalZero static inline bool bt_mesh_lpn_waiting_update(void)
42*042d53a7SEvalZero {
43*042d53a7SEvalZero #if (MYNEWT_VAL(BLE_MESH_LOW_POWER))
44*042d53a7SEvalZero 	return (bt_mesh.lpn.state == BT_MESH_LPN_WAIT_UPDATE);
45*042d53a7SEvalZero #else
46*042d53a7SEvalZero 	return false;
47*042d53a7SEvalZero #endif
48*042d53a7SEvalZero }
49*042d53a7SEvalZero 
bt_mesh_lpn_timer(void)50*042d53a7SEvalZero static inline bool bt_mesh_lpn_timer(void)
51*042d53a7SEvalZero {
52*042d53a7SEvalZero #if MYNEWT_VAL(BLE_MESH_LOW_POWER) && MYNEWT_VAL(BLE_MESH_LPN_AUTO)
53*042d53a7SEvalZero 	return (bt_mesh.lpn.state == BT_MESH_LPN_TIMER);
54*042d53a7SEvalZero #else
55*042d53a7SEvalZero 	return false;
56*042d53a7SEvalZero #endif
57*042d53a7SEvalZero }
58*042d53a7SEvalZero 
59*042d53a7SEvalZero void bt_mesh_lpn_msg_received(struct bt_mesh_net_rx *rx);
60*042d53a7SEvalZero 
61*042d53a7SEvalZero void bt_mesh_lpn_group_add(u16_t group);
62*042d53a7SEvalZero void bt_mesh_lpn_group_del(u16_t *groups, size_t group_count);
63*042d53a7SEvalZero 
64*042d53a7SEvalZero void bt_mesh_lpn_disable(bool force);
65*042d53a7SEvalZero 
66*042d53a7SEvalZero int bt_mesh_lpn_init(void);
67*042d53a7SEvalZero 
68*042d53a7SEvalZero #endif
69