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

          Line data    Source code
       1           1 : /** @file
       2             :  *  @brief Heartbeat APIs.
       3             :  */
       4             : 
       5             : /*
       6             :  * Copyright (c) 2020 Nordic Semiconductor ASA
       7             :  *
       8             :  * SPDX-License-Identifier: Apache-2.0
       9             :  */
      10             : #ifndef ZEPHYR_INCLUDE_BLUETOOTH_MESH_HEARTBEAT_H_
      11             : #define ZEPHYR_INCLUDE_BLUETOOTH_MESH_HEARTBEAT_H_
      12             : 
      13             : #include <stdint.h>
      14             : 
      15             : #include <zephyr/sys/iterable_sections.h>
      16             : #include <zephyr/sys/slist.h>
      17             : 
      18             : /**
      19             :  * @brief Heartbeat
      20             :  * @defgroup bt_mesh_heartbeat Heartbeat
      21             :  * @ingroup bt_mesh
      22             :  * @{
      23             :  */
      24             : 
      25             : #ifdef __cplusplus
      26             : extern "C" {
      27             : #endif
      28             : 
      29             : /** Heartbeat Publication parameters */
      30           1 : struct bt_mesh_hb_pub {
      31             :         /** Destination address. */
      32           1 :         uint16_t dst;
      33             :         /** Remaining publish count. */
      34           1 :         uint16_t count;
      35             :         /** Time To Live value. */
      36           1 :         uint8_t ttl;
      37             :         /**
      38             :          * Bitmap of features that trigger a Heartbeat publication if
      39             :          * they change. Legal values are @ref BT_MESH_FEAT_RELAY,
      40             :          * @ref BT_MESH_FEAT_PROXY, @ref BT_MESH_FEAT_FRIEND and
      41             :          * @ref BT_MESH_FEAT_LOW_POWER.
      42             :          */
      43           1 :         uint16_t feat;
      44             :         /** Network index used for publishing. */
      45           1 :         uint16_t net_idx;
      46             :         /** Publication period in seconds. */
      47           1 :         uint32_t period;
      48             : };
      49             : 
      50             : /** Heartbeat Subscription parameters. */
      51           1 : struct bt_mesh_hb_sub {
      52             :         /** Subscription period in seconds. */
      53           1 :         uint32_t period;
      54             :         /** Remaining subscription time in seconds. */
      55           1 :         uint32_t remaining;
      56             :         /** Source address to receive Heartbeats from. */
      57           1 :         uint16_t src;
      58             :         /** Destination address to received Heartbeats on. */
      59           1 :         uint16_t dst;
      60             :         /** The number of received Heartbeat messages so far. */
      61           1 :         uint16_t count;
      62             :         /**
      63             :          * Minimum hops in received messages, ie the shortest registered
      64             :          * path from the publishing node to the subscribing node. A
      65             :          * Heartbeat received from an immediate neighbor has hop
      66             :          * count = 1.
      67             :          */
      68           1 :         uint8_t min_hops;
      69             :         /**
      70             :          * Maximum hops in received messages, ie the longest registered
      71             :          * path from the publishing node to the subscribing node. A
      72             :          * Heartbeat received from an immediate neighbor has hop
      73             :          * count = 1.
      74             :          */
      75           1 :         uint8_t max_hops;
      76             : };
      77             : 
      78             : /** Heartbeat callback structure */
      79           1 : struct bt_mesh_hb_cb {
      80             :         /** @brief Receive callback for heartbeats.
      81             :          *
      82             :          *  Gets called on every received Heartbeat that matches the current
      83             :          *  Heartbeat subscription parameters.
      84             :          *
      85             :          *  @param sub  Current Heartbeat subscription parameters.
      86             :          *  @param hops The number of hops the Heartbeat was received
      87             :          *              with.
      88             :          *  @param feat The feature set of the publishing node. The
      89             :          *              value is a bitmap of @ref BT_MESH_FEAT_RELAY,
      90             :          *              @ref BT_MESH_FEAT_PROXY,
      91             :          *              @ref BT_MESH_FEAT_FRIEND and
      92             :          *              @ref BT_MESH_FEAT_LOW_POWER.
      93             :          */
      94           1 :         void (*recv)(const struct bt_mesh_hb_sub *sub, uint8_t hops,
      95             :                      uint16_t feat);
      96             : 
      97             :         /** @brief Subscription end callback for heartbeats.
      98             :          *
      99             :          *  Gets called when the subscription period ends, providing a summary
     100             :          *  of the received heartbeat messages.
     101             :          *
     102             :          *  @param sub Current Heartbeat subscription parameters.
     103             :          */
     104           1 :         void (*sub_end)(const struct bt_mesh_hb_sub *sub);
     105             : 
     106             :         /** @brief Publication sent callback for heartbeats.
     107             :          *
     108             :          *  Gets called when the heartbeat is successfully published.
     109             :          *
     110             :          *  @param pub Current Heartbeat publication parameters.
     111             :          */
     112           1 :         void (*pub_sent)(const struct bt_mesh_hb_pub *pub);
     113             : };
     114             : 
     115             : /**
     116             :  *  @brief Register a callback structure for Heartbeat events.
     117             :  *
     118             :  *  Registers a callback structure that will be called whenever Heartbeat
     119             :  *  events occur
     120             :  *
     121             :  *  @param _name Name of callback structure.
     122             :  */
     123           1 : #define BT_MESH_HB_CB_DEFINE(_name)                                            \
     124             :         static const STRUCT_SECTION_ITERABLE(bt_mesh_hb_cb, _name)
     125             : 
     126             : /** @brief Get the current Heartbeat publication parameters.
     127             :  *
     128             :  *  @param get Heartbeat publication parameters return buffer.
     129             :  */
     130           1 : void bt_mesh_hb_pub_get(struct bt_mesh_hb_pub *get);
     131             : 
     132             : /** @brief Get the current Heartbeat subscription parameters.
     133             :  *
     134             :  *  @param get Heartbeat subscription parameters return buffer.
     135             :  */
     136           1 : void bt_mesh_hb_sub_get(struct bt_mesh_hb_sub *get);
     137             : 
     138             : #ifdef __cplusplus
     139             : }
     140             : #endif
     141             : /**
     142             :  * @}
     143             :  */
     144             : 
     145             : #endif /* ZEPHYR_INCLUDE_BLUETOOTH_MESH_HEARTBEAT_H_ */

Generated by: LCOV version 1.14