1 /** @file
2  *  @brief Proxy APIs.
3  */
4 
5 /*
6  * Copyright (c) 2017 Intel Corporation
7  *
8  * SPDX-License-Identifier: Apache-2.0
9  */
10 #ifndef ZEPHYR_INCLUDE_BLUETOOTH_MESH_PROXY_H_
11 #define ZEPHYR_INCLUDE_BLUETOOTH_MESH_PROXY_H_
12 
13 #include <stdint.h>
14 
15 #include <zephyr/kernel.h>
16 #include <zephyr/sys/iterable_sections.h>
17 
18 /**
19  * @brief Proxy
20  * @defgroup bt_mesh_proxy Proxy
21  * @ingroup bt_mesh
22  * @{
23  */
24 
25 #ifdef __cplusplus
26 extern "C" {
27 #endif
28 
29 /** Callbacks for the Proxy feature.
30  *
31  *  Should be instantiated with @ref BT_MESH_PROXY_CB_DEFINE.
32  */
33 struct bt_mesh_proxy_cb {
34 	/** @brief Started sending Node Identity beacons on the given subnet.
35 	 *
36 	 *  @param net_idx Network index the Node Identity beacons are running
37 	 *                 on.
38 	 */
39 	void (*identity_enabled)(uint16_t net_idx);
40 	/** @brief Stopped sending Node Identity beacons on the given subnet.
41 	 *
42 	 *  @param net_idx Network index the Node Identity beacons were running
43 	 *                 on.
44 	 */
45 	void (*identity_disabled)(uint16_t net_idx);
46 };
47 
48 /**
49  *  @brief Register a callback structure for Proxy events.
50  *
51  *  Registers a structure with callback functions that gets called on various
52  *  Proxy events.
53  *
54  *  @param _name Name of callback structure.
55  */
56 #define BT_MESH_PROXY_CB_DEFINE(_name)                                         \
57 	static const STRUCT_SECTION_ITERABLE(                                  \
58 		bt_mesh_proxy_cb, _CONCAT(bt_mesh_proxy_cb_, _name))
59 
60 /** @brief Enable advertising with Node Identity.
61  *
62  *  This API requires that GATT Proxy support has been enabled. Once called
63  *  each subnet will start advertising using Node Identity for the next
64  *  60 seconds.
65  *
66  *  @return 0 on success, or (negative) error code on failure.
67  */
68 int bt_mesh_proxy_identity_enable(void);
69 
70 /** @brief Enable advertising with Private Node Identity.
71  *
72  *  This API requires that GATT Proxy support has been enabled. Once called
73  *  each subnet will start advertising using Private Node Identity for the next
74  *  60 seconds.
75  *
76  *  @return 0 on success, or (negative) error code on failure.
77  */
78 int bt_mesh_proxy_private_identity_enable(void);
79 
80 /** @brief Allow Proxy Client to auto connect to a network.
81  *
82  *  This API allows a proxy client to auto-connect a given network.
83  *
84  *  @param net_idx Network Key Index
85  *
86  *  @return 0 on success, or (negative) error code on failure.
87  */
88 int bt_mesh_proxy_connect(uint16_t net_idx);
89 
90 /** @brief Disallow Proxy Client to auto connect to a network.
91  *
92  *  This API disallows a proxy client to connect a given network.
93  *
94  *  @param net_idx Network Key Index
95  *
96  *  @return 0 on success, or (negative) error code on failure.
97  */
98 int bt_mesh_proxy_disconnect(uint16_t net_idx);
99 
100 /** @brief Schedule advertising of Solicitation PDUs.
101  *
102  *  Once called, the device will schedule advertising Solicitation PDUs for the amount of time
103  *  defined by @c adv_int * (@c CONFIG_BT_MESH_SOL_ADV_XMIT + 1), where @c adv_int is 20ms
104  *  for Bluetooth v5.0 or higher, or 100ms otherwise.
105  *
106  *  If the number of advertised Solicitation PDUs reached 0xFFFFFF, the advertisements will
107  *  no longer be started until the node is reprovisioned.
108  *
109  *  @param net_idx  Network Key Index
110  *
111  *  @return 0 on success, or (negative) error code on failure.
112  */
113 int bt_mesh_proxy_solicit(uint16_t net_idx);
114 
115 #ifdef __cplusplus
116 }
117 #endif
118 
119 /**
120  * @}
121  */
122 
123 #endif /* ZEPHYR_INCLUDE_BLUETOOTH_MESH_PROXY_H_ */
124