LCOV - code coverage report
Current view: top level - zephyr/bluetooth/mesh - rpr_cli.h Hit Total Coverage
Test: new.info Lines: 21 32 65.6 %
Date: 2024-12-22 00:14:23

          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_BT_MESH_RPR_CLI_H__
       8             : #define ZEPHYR_INCLUDE_BT_MESH_RPR_CLI_H__
       9             : 
      10             : #include <zephyr/kernel.h>
      11             : #include <zephyr/bluetooth/mesh/access.h>
      12             : #include <zephyr/bluetooth/mesh/rpr.h>
      13             : 
      14             : #ifdef __cplusplus
      15             : extern "C" {
      16             : #endif
      17             : 
      18             : /**
      19             :  * @defgroup bt_mesh_rpr_cli Remote Provisioning Client model
      20             :  * @ingroup bt_mesh
      21             :  * @{
      22             :  */
      23             : 
      24             : /** Special value for the @c max_devs parameter of @ref bt_mesh_rpr_scan_start.
      25             :  *
      26             :  *  Tells the Remote Provisioning Server not to put restrictions on the max
      27             :  *  number of devices reported to the Client.
      28             :  */
      29           1 : #define BT_MESH_RPR_SCAN_MAX_DEVS_ANY 0
      30             : 
      31             : struct bt_mesh_rpr_cli;
      32             : 
      33             : /**
      34             :  *
      35             :  * @brief Remote Provisioning Client model composition data entry.
      36             :  *
      37             :  * @param _cli Pointer to a @ref bt_mesh_rpr_cli instance.
      38             :  */
      39           1 : #define BT_MESH_MODEL_RPR_CLI(_cli)                                            \
      40             :         BT_MESH_MODEL_CB(BT_MESH_MODEL_ID_REMOTE_PROV_CLI,                     \
      41             :                          _bt_mesh_rpr_cli_op, NULL, _cli, &_bt_mesh_rpr_cli_cb)
      42             : 
      43             : /** Scan status response */
      44           1 : struct bt_mesh_rpr_scan_status {
      45             :         /** Current scan status */
      46           1 :         enum bt_mesh_rpr_status status;
      47             :         /** Current scan state */
      48           1 :         enum bt_mesh_rpr_scan scan;
      49             :         /** Max number of devices to report in current scan. */
      50           1 :         uint8_t max_devs;
      51             :         /** Seconds remaining of the scan. */
      52           1 :         uint8_t timeout;
      53             : };
      54             : 
      55             : /** Remote Provisioning Server scanning capabilities */
      56           1 : struct bt_mesh_rpr_caps {
      57             :         /** Max number of scannable devices */
      58           1 :         uint8_t max_devs;
      59             :         /** Supports active scan */
      60           1 :         bool active_scan;
      61             : };
      62             : 
      63             : /** Remote Provisioning Client model instance. */
      64           1 : struct bt_mesh_rpr_cli {
      65             :         /** @brief Scan report callback.
      66             :          *
      67             :          *  @param cli      Remote Provisioning Client.
      68             :          *  @param srv      Remote Provisioning Server.
      69             :          *  @param unprov   Unprovisioned device.
      70             :          *  @param adv_data Advertisement data for the unprovisioned device, or
      71             :          *                  NULL if extended scanning hasn't been enabled. An
      72             :          *                  empty buffer indicates that the extended scanning
      73             :          *                  finished without collecting additional information.
      74             :          */
      75           1 :         void (*scan_report)(struct bt_mesh_rpr_cli *cli,
      76             :                             const struct bt_mesh_rpr_node *srv,
      77             :                             struct bt_mesh_rpr_unprov *unprov,
      78             :                             struct net_buf_simple *adv_data);
      79             : 
      80             :         /* Internal parameters */
      81             : 
      82           0 :         struct bt_mesh_msg_ack_ctx scan_ack_ctx;
      83           0 :         struct bt_mesh_msg_ack_ctx prov_ack_ctx;
      84             : 
      85             :         struct {
      86           0 :                 struct k_work_delayable timeout;
      87           0 :                 struct bt_mesh_rpr_node srv;
      88           0 :                 uint8_t time;
      89           0 :                 uint8_t tx_pdu;
      90           0 :                 uint8_t rx_pdu;
      91           0 :                 enum bt_mesh_rpr_link_state state;
      92           0 :         } link;
      93             : 
      94           0 :         const struct bt_mesh_model *mod;
      95             : };
      96             : 
      97             : /** @brief Get scanning capabilities of Remote Provisioning Server.
      98             :  *
      99             :  *  @param cli  Remote Provisioning Client.
     100             :  *  @param srv  Remote Provisioning Server.
     101             :  *  @param caps Capabilities response buffer.
     102             :  *
     103             :  *  @return 0 on success, or (negative) error code otherwise.
     104             :  */
     105           1 : int bt_mesh_rpr_scan_caps_get(struct bt_mesh_rpr_cli *cli,
     106             :                               const struct bt_mesh_rpr_node *srv,
     107             :                               struct bt_mesh_rpr_caps *caps);
     108             : 
     109             : /** @brief Get current scanning state of Remote Provisioning Server.
     110             :  *
     111             :  *  @param cli    Remote Provisioning Client.
     112             :  *  @param srv    Remote Provisioning Server.
     113             :  *  @param status Scan status response buffer.
     114             :  *
     115             :  *  @return 0 on success, or (negative) error code otherwise.
     116             :  */
     117           1 : int bt_mesh_rpr_scan_get(struct bt_mesh_rpr_cli *cli,
     118             :                          const struct bt_mesh_rpr_node *srv,
     119             :                          struct bt_mesh_rpr_scan_status *status);
     120             : 
     121             : /** @brief Start scanning for unprovisioned devices.
     122             :  *
     123             :  *  Tells the Remote Provisioning Server to start scanning for unprovisioned
     124             :  *  devices. The Server will report back the results through the @ref
     125             :  *  bt_mesh_rpr_cli::scan_report callback.
     126             :  *
     127             :  *  Use the @c uuid parameter to scan for a specific device, or leave it as NULL
     128             :  *  to report all unprovisioned devices.
     129             :  *
     130             :  *  The Server will ignore duplicates, and report up to @c max_devs number of
     131             :  *  devices. Requesting a @c max_devs number that's higher than the Server's
     132             :  *  capability will result in an error.
     133             :  *
     134             :  *  @param cli      Remote Provisioning Client.
     135             :  *  @param srv      Remote Provisioning Server.
     136             :  *  @param uuid     Device UUID to scan for, or NULL to report all devices.
     137             :  *  @param timeout  Scan timeout in seconds. Must be at least 1 second.
     138             :  *  @param max_devs Max number of devices to report, or 0 to report as many as
     139             :  *                  possible.
     140             :  *  @param status   Scan status response buffer.
     141             :  *
     142             :  *  @return 0 on success, or (negative) error code otherwise.
     143             :  */
     144           1 : int bt_mesh_rpr_scan_start(struct bt_mesh_rpr_cli *cli,
     145             :                            const struct bt_mesh_rpr_node *srv,
     146             :                            const uint8_t uuid[16], uint8_t timeout,
     147             :                            uint8_t max_devs,
     148             :                            struct bt_mesh_rpr_scan_status *status);
     149             : 
     150             : /** @brief Start extended scanning for unprovisioned devices.
     151             :  *
     152             :  *  Extended scanning supplements regular unprovisioned scanning, by allowing
     153             :  *  the Server to report additional data for a specific device. The Remote
     154             :  *  Provisioning Server will use active scanning to request a scan
     155             :  *  response from the unprovisioned device, if supported. If no UUID is
     156             :  *  provided, the Server will report a scan on its own OOB information and
     157             :  *  advertising data.
     158             :  *
     159             :  *  Use the ad_types array to specify which AD types to include in the scan
     160             :  *  report. Some AD types invoke special behavior:
     161             :  *  - @ref BT_DATA_NAME_COMPLETE Will report both the complete and the
     162             :  *    shortened name.
     163             :  *  - @ref BT_DATA_URI If the unprovisioned beacon contains a URI hash, the
     164             :  *    Server will extend the scanning to include packets other than
     165             :  *    the scan response, to look for URIs matching the URI hash. Only matching
     166             :  *    URIs will be reported.
     167             :  *
     168             :  *  The following AD types should not be used:
     169             :  *  - @ref BT_DATA_NAME_SHORTENED
     170             :  *  - @ref BT_DATA_UUID16_SOME
     171             :  *  - @ref BT_DATA_UUID32_SOME
     172             :  *  - @ref BT_DATA_UUID128_SOME
     173             :  *
     174             :  *  Additionally, each AD type should only occur once.
     175             :  *
     176             :  *  @param cli      Remote Provisioning Client.
     177             :  *  @param srv      Remote Provisioning Server.
     178             :  *  @param uuid     Device UUID to start extended scanning for, or NULL to scan
     179             :  *                  the remote server.
     180             :  *  @param timeout  Scan timeout in seconds. Valid values from @ref BT_MESH_RPR_EXT_SCAN_TIME_MIN
     181             :  *                  to @ref BT_MESH_RPR_EXT_SCAN_TIME_MAX. Ignored if UUID is NULL.
     182             :  *  @param ad_types List of AD types to include in the scan report. Must contain 1 to
     183             :  *                  CONFIG_BT_MESH_RPR_AD_TYPES_MAX entries.
     184             :  *  @param ad_count Number of AD types in @c ad_types.
     185             :  *
     186             :  *  @return 0 on success, or (negative) error code otherwise.
     187             :  */
     188           1 : int bt_mesh_rpr_scan_start_ext(struct bt_mesh_rpr_cli *cli,
     189             :                                const struct bt_mesh_rpr_node *srv,
     190             :                                const uint8_t uuid[16], uint8_t timeout,
     191             :                                const uint8_t *ad_types, size_t ad_count);
     192             : 
     193             : /** @brief Stop any ongoing scanning on the Remote Provisioning Server.
     194             :  *
     195             :  *  @param cli    Remote Provisioning Client.
     196             :  *  @param srv    Remote Provisioning Server.
     197             :  *  @param status Scan status response buffer.
     198             :  *
     199             :  *  @return 0 on success, or (negative) error code otherwise.
     200             :  */
     201           1 : int bt_mesh_rpr_scan_stop(struct bt_mesh_rpr_cli *cli,
     202             :                           const struct bt_mesh_rpr_node *srv,
     203             :                           struct bt_mesh_rpr_scan_status *status);
     204             : 
     205             : /** @brief Get the current link status of the Remote Provisioning Server.
     206             :  *
     207             :  *  @param cli Remote Provisioning Client.
     208             :  *  @param srv Remote Provisioning Server.
     209             :  *  @param rsp Link status response buffer.
     210             :  *
     211             :  *  @return 0 on success, or (negative) error code otherwise.
     212             :  */
     213           1 : int bt_mesh_rpr_link_get(struct bt_mesh_rpr_cli *cli,
     214             :                          const struct bt_mesh_rpr_node *srv,
     215             :                          struct bt_mesh_rpr_link *rsp);
     216             : 
     217             : /** @brief Close any open link on the Remote Provisioning Server.
     218             :  *
     219             :  *  @param cli Remote Provisioning Client.
     220             :  *  @param srv Remote Provisioning Server.
     221             :  *  @param rsp Link status response buffer.
     222             :  *
     223             :  *  @return 0 on success, or (negative) error code otherwise.
     224             :  */
     225           1 : int bt_mesh_rpr_link_close(struct bt_mesh_rpr_cli *cli,
     226             :                            const struct bt_mesh_rpr_node *srv,
     227             :                            struct bt_mesh_rpr_link *rsp);
     228             : 
     229             : /** @brief Get the current transmission timeout value.
     230             :  *
     231             :  *  @return The configured transmission timeout in milliseconds.
     232             :  */
     233           1 : int32_t bt_mesh_rpr_cli_timeout_get(void);
     234             : 
     235             : /** @brief Set the transmission timeout value.
     236             :  *
     237             :  *  The transmission timeout controls the amount of time the Remote Provisioning
     238             :  *  Client models will wait for a response from the Server.
     239             :  *
     240             :  *  @param timeout The new transmission timeout.
     241             :  */
     242           1 : void bt_mesh_rpr_cli_timeout_set(int32_t timeout);
     243             : 
     244             : /** @cond INTERNAL_HIDDEN */
     245             : extern const struct bt_mesh_model_op _bt_mesh_rpr_cli_op[];
     246             : extern const struct bt_mesh_model_cb _bt_mesh_rpr_cli_cb;
     247             : /** @endcond */
     248             : 
     249             : /** @} */
     250             : 
     251             : #ifdef __cplusplus
     252             : }
     253             : #endif
     254             : 
     255             : #endif /* ZEPHYR_INCLUDE_BT_MESH_RPR_CLI_H__ */

Generated by: LCOV version 1.14