Line data Source code
1 0 : /* 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 1 : #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 1 : struct bt_mesh_priv_beacon { 37 : /** Private beacon is enabled */ 38 1 : uint8_t enabled; 39 : /** Random refresh interval (in 10 second steps), or 0 to keep current 40 : * value. 41 : */ 42 1 : uint8_t rand_interval; 43 : }; 44 : 45 : /** Private Node Identity */ 46 1 : struct bt_mesh_priv_node_id { 47 : /** Index of the NetKey. */ 48 1 : uint16_t net_idx; 49 : /** Private Node Identity state */ 50 1 : uint8_t state; 51 : /** Response status code. */ 52 1 : uint8_t status; 53 : }; 54 : 55 : /** Private Beacon Client Status messages callbacks */ 56 1 : 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 1 : 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 1 : 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 1 : 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 1 : struct bt_mesh_priv_beacon_cli { 93 0 : const struct bt_mesh_model *model; 94 : 95 : /* Internal parameters for tracking message responses. */ 96 0 : struct bt_mesh_msg_ack_ctx ack_ctx; 97 : 98 : /** Optional callback for Private Beacon Client Status messages. */ 99 1 : 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 1 : 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 1 : 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 1 : 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 1 : 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 1 : 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 1 : 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__ */