1 /*
2  * Copyright (c) 2022 Nordic Semiconductor ASA
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 #ifndef BT_MESH_OD_PRIV_PROXY_CLI_H__
8 #define BT_MESH_OD_PRIV_PROXY_CLI_H__
9 
10 #include <zephyr/bluetooth/mesh.h>
11 
12 #ifdef __cplusplus
13 extern "C" {
14 #endif
15 
16 /**
17  * @defgroup bt_mesh_od_priv_proxy_cli Bluetooth Mesh On-Demand Private GATT Proxy Client
18  * @ingroup bt_mesh
19  * @{
20  */
21 
22 /** On-Demand Private Proxy Client Model Context */
23 struct bt_mesh_od_priv_proxy_cli {
24 	/** Solicitation PDU RPL model entry pointer. */
25 	const struct bt_mesh_model *model;
26 
27 	/* Internal parameters for tracking message responses. */
28 	struct bt_mesh_msg_ack_ctx ack_ctx;
29 
30 	/** @brief Optional callback for On-Demand Private Proxy Status messages.
31 	 *
32 	 *  Handles received On-Demand Private Proxy Status messages from a On-Demand Private Proxy
33 	 *  server.The @c state param represents state of On-Demand Private Proxy server.
34 	 *
35 	 *  @param cli         On-Demand Private Proxy client that received the status message.
36 	 *  @param addr        Address of the sender.
37 	 *  @param state       State value.
38 	 */
39 	void (*od_status)(struct bt_mesh_od_priv_proxy_cli *cli, uint16_t addr, uint8_t state);
40 };
41 
42 /**
43  *  @brief On-Demand Private Proxy Client model composition data entry.
44  */
45 #define BT_MESH_MODEL_OD_PRIV_PROXY_CLI(cli_data)                                  \
46 	BT_MESH_MODEL_CB(BT_MESH_MODEL_ID_ON_DEMAND_PROXY_CLI,                     \
47 			 _bt_mesh_od_priv_proxy_cli_op, NULL, cli_data,            \
48 			 &_bt_mesh_od_priv_proxy_cli_cb)
49 
50 /** @brief Get the target's On-Demand Private GATT Proxy state.
51  *
52  *  This method can be used asynchronously by setting @p val_rsp as NULL.
53  *  This way the method will not wait for response and will
54  *  return immediately after sending the command.
55  *
56  *  To process the response arguments of an async method, register
57  *  the @c od_status callback in @c bt_mesh_od_priv_proxy_cli struct.
58  *
59  *  @param net_idx    Network index to encrypt with.
60  *  @param addr       Target node address.
61  *  @param val_rsp    Response buffer for On-Demand Private GATT Proxy value.
62  *
63  *  @return 0 on success, or (negative) error code otherwise.
64  */
65 int bt_mesh_od_priv_proxy_cli_get(uint16_t net_idx, uint16_t addr, uint8_t *val_rsp);
66 
67 /** @brief Set the target's On-Demand Private GATT Proxy state.
68  *
69  *  This method can be used asynchronously by setting @p val_rsp as NULL.
70  *  This way the method will not wait for response and will
71  *  return immediately after sending the command.
72  *
73  *  To process the response arguments of an async method, register
74  *  the @c od_status callback in @c bt_mesh_od_priv_proxy_cli struct.
75  *
76  *  @param net_idx    Network index to encrypt with.
77  *  @param addr       Target node address.
78  *  @param val        On-Demand Private GATT Proxy state to be set
79  *  @param val_rsp    Response buffer for On-Demand Private GATT Proxy value.
80  *
81  *  @return 0 on success, or (negative) error code otherwise.
82  */
83 int bt_mesh_od_priv_proxy_cli_set(uint16_t net_idx, uint16_t addr, uint8_t val, uint8_t *val_rsp);
84 
85 /** @brief Set the transmission timeout value.
86  *
87  *  @param timeout The new transmission timeout in milliseconds.
88  */
89 void bt_mesh_od_priv_proxy_cli_timeout_set(int32_t timeout);
90 
91 /** @cond INTERNAL_HIDDEN */
92 extern const struct bt_mesh_model_op _bt_mesh_od_priv_proxy_cli_op[];
93 extern const struct bt_mesh_model_cb _bt_mesh_od_priv_proxy_cli_cb;
94 /** @endcond */
95 
96 /** @} */
97 
98 #ifdef __cplusplus
99 }
100 #endif
101 
102 #endif /* BT_MESH_OD_PRIV_PROXY_CLI_H__ */
103