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_ */