1 /* 2 * Copyright (c) 2020 Nordic Semiconductor ASA 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7 #ifndef ZEPHYR_INCLUDE_BLUETOOTH_MESH_PRIV_BEACON_CLI_H__ 8 #define ZEPHYR_INCLUDE_BLUETOOTH_MESH_PRIV_BEACON_CLI_H__ 9 10 #include <zephyr/bluetooth/mesh.h> 11 12 #ifdef __cplusplus 13 extern "C" { 14 #endif 15 16 /** 17 * @defgroup bt_mesh_priv_beacon_cli Bluetooth Mesh Private Beacon Client 18 * @ingroup bt_mesh 19 * @{ 20 */ 21 22 /** 23 * 24 * @brief Private Beacon Client model composition data entry. 25 * 26 * @param cli_data Pointer to a @ref bt_mesh_priv_beacon_cli instance. 27 */ 28 #define BT_MESH_MODEL_PRIV_BEACON_CLI(cli_data) \ 29 BT_MESH_MODEL_CB(BT_MESH_MODEL_ID_PRIV_BEACON_CLI, \ 30 bt_mesh_priv_beacon_cli_op, NULL, cli_data, \ 31 &bt_mesh_priv_beacon_cli_cb) 32 33 struct bt_mesh_priv_beacon_cli; 34 35 /** Private Beacon */ 36 struct bt_mesh_priv_beacon { 37 /** Private beacon is enabled */ 38 uint8_t enabled; 39 /** Random refresh interval (in 10 second steps), or 0 to keep current 40 * value. 41 */ 42 uint8_t rand_interval; 43 }; 44 45 /** Private Node Identity */ 46 struct bt_mesh_priv_node_id { 47 /** Index of the NetKey. */ 48 uint16_t net_idx; 49 /** Private Node Identity state */ 50 uint8_t state; 51 /** Response status code. */ 52 uint8_t status; 53 }; 54 55 /** Private Beacon Client Status messages callbacks */ 56 struct bt_mesh_priv_beacon_cli_cb { 57 /** @brief Optional callback for Private Beacon Status message. 58 * 59 * Handles received Private Beacon Status messages from a Private Beacon server. 60 * 61 * @param cli Private Beacon client context. 62 * @param addr Address of the sender. 63 * @param priv_beacon Mesh Private Beacon state received from the server. 64 */ 65 void (*priv_beacon_status)(struct bt_mesh_priv_beacon_cli *cli, uint16_t addr, 66 struct bt_mesh_priv_beacon *priv_beacon); 67 68 /** @brief Optional callback for Private GATT Proxy Status message. 69 * 70 * Handles received Private GATT Proxy Status messages from a Private Beacon server. 71 * 72 * @param cli Private Beacon client context. 73 * @param addr Address of the sender. 74 * @param gatt_proxy Private GATT Proxy state received from the server. 75 */ 76 void (*priv_gatt_proxy_status)(struct bt_mesh_priv_beacon_cli *cli, uint16_t addr, 77 uint8_t gatt_proxy); 78 79 /** @brief Optional callback for Private Node Identity Status message. 80 * 81 * Handles received Private Node Identity Status messages from a Private Beacon server. 82 * 83 * @param cli Private Beacon client context. 84 * @param addr Address of the sender. 85 * @param priv_node_id Private Node Identity state received from the server. 86 */ 87 void (*priv_node_id_status)(struct bt_mesh_priv_beacon_cli *cli, uint16_t addr, 88 struct bt_mesh_priv_node_id *priv_node_id); 89 }; 90 91 /** Mesh Private Beacon Client model */ 92 struct bt_mesh_priv_beacon_cli { 93 const struct bt_mesh_model *model; 94 95 /* Internal parameters for tracking message responses. */ 96 struct bt_mesh_msg_ack_ctx ack_ctx; 97 98 /** Optional callback for Private Beacon Client Status messages. */ 99 const struct bt_mesh_priv_beacon_cli_cb *cb; 100 }; 101 102 /** @brief Set the target's Private Beacon state. 103 * 104 * This method can be used asynchronously by setting @p rsp as NULL. 105 * This way the method will not wait for response and will return 106 * immediately after sending the command. 107 108 * @param net_idx Network index to encrypt with. 109 * @param addr Target node address. 110 * @param val New Private Beacon value. 111 * @param rsp If set, returns response status on success. 112 * 113 * @return 0 on success, or (negative) error code otherwise. 114 */ 115 int bt_mesh_priv_beacon_cli_set(uint16_t net_idx, uint16_t addr, 116 struct bt_mesh_priv_beacon *val, 117 struct bt_mesh_priv_beacon *rsp); 118 119 /** @brief Get the target's Private Beacon state. 120 * 121 * @param net_idx Network index to encrypt with. 122 * @param addr Target node address. 123 * @param val Response buffer for Private Beacon value. 124 * 125 * @return 0 on success, or (negative) error code otherwise. 126 */ 127 int bt_mesh_priv_beacon_cli_get(uint16_t net_idx, uint16_t addr, 128 struct bt_mesh_priv_beacon *val); 129 130 /** @brief Set the target's Private GATT Proxy state. 131 * 132 * This method can be used asynchronously by setting @p rsp as NULL. 133 * This way the method will not wait for response and will return 134 * immediately after sending the command. 135 * 136 * @param net_idx Network index to encrypt with. 137 * @param addr Target node address. 138 * @param val New Private GATT Proxy value. 139 * @param rsp If set, returns response status on success. 140 * 141 * @return 0 on success, or (negative) error code otherwise. 142 */ 143 int bt_mesh_priv_beacon_cli_gatt_proxy_set(uint16_t net_idx, uint16_t addr, 144 uint8_t val, uint8_t *rsp); 145 146 /** @brief Get the target's Private GATT Proxy state. 147 * 148 * @param net_idx Network index to encrypt with. 149 * @param addr Target node address. 150 * @param val Response buffer for Private GATT Proxy value. 151 * 152 * @return 0 on success, or (negative) error code otherwise. 153 */ 154 int bt_mesh_priv_beacon_cli_gatt_proxy_get(uint16_t net_idx, uint16_t addr, 155 uint8_t *val); 156 157 /** @brief Set the target's Private Node Identity state. 158 * 159 * This method can be used asynchronously by setting @p rsp as NULL. 160 * This way the method will not wait for response and will return 161 * immediately after sending the command. 162 * 163 * @param net_idx Network index to encrypt with. 164 * @param addr Target node address. 165 * @param val New Private Node Identity value. 166 * @param rsp If set, returns response status on success. 167 * 168 * @return 0 on success, or (negative) error code otherwise. 169 */ 170 int bt_mesh_priv_beacon_cli_node_id_set(uint16_t net_idx, uint16_t addr, 171 struct bt_mesh_priv_node_id *val, 172 struct bt_mesh_priv_node_id *rsp); 173 174 /** @brief Get the target's Private Node Identity state. 175 * 176 * @param net_idx Network index to encrypt with. 177 * @param addr Target node address. 178 * @param key_net_idx Network index to get the Private Node Identity state of. 179 * @param val Response buffer for Private Node Identity value. 180 * 181 * @return 0 on success, or (negative) error code otherwise. 182 */ 183 int bt_mesh_priv_beacon_cli_node_id_get(uint16_t net_idx, uint16_t addr, 184 uint16_t key_net_idx, 185 struct bt_mesh_priv_node_id *val); 186 187 /** @cond INTERNAL_HIDDEN */ 188 extern const struct bt_mesh_model_op bt_mesh_priv_beacon_cli_op[]; 189 extern const struct bt_mesh_model_cb bt_mesh_priv_beacon_cli_cb; 190 /** @endcond */ 191 192 /** @} */ 193 194 #ifdef __cplusplus 195 } 196 #endif 197 198 #endif /* ZEPHYR_INCLUDE_BLUETOOTH_MESH_PRIV_BEACON_CLI_H__ */ 199