1 /* 2 * Copyright (c) 2016 Intel Corporation 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7 #ifndef ZEPHYR_INCLUDE_BLUETOOTH_SERVICES_HRS_H_ 8 #define ZEPHYR_INCLUDE_BLUETOOTH_SERVICES_HRS_H_ 9 10 /** 11 * @brief Heart Rate Service (HRS) 12 * @defgroup bt_hrs Heart Rate Service (HRS) 13 * @ingroup bluetooth 14 * @{ 15 * 16 * [Experimental] Users should note that the APIs can change 17 * as a part of ongoing development. 18 */ 19 20 #include <stdint.h> 21 22 #include <zephyr/sys/slist.h> 23 24 #ifdef __cplusplus 25 extern "C" { 26 #endif 27 28 /** 29 * @brief Server shall restart the accumulation of energy expended from zero 30 */ 31 #define BT_HRS_CONTROL_POINT_RESET_ENERGY_EXPANDED_REQ 0x01 32 33 /** @brief Heart rate service callback structure */ 34 struct bt_hrs_cb { 35 /** @brief Heart rate notifications changed 36 * 37 * @param enabled Flag that is true if notifications were enabled, false 38 * if they were disabled. 39 */ 40 void (*ntf_changed)(bool enabled); 41 42 /** 43 * @brief Heart rate control point write callback 44 * 45 * @note if Server supports the Energy Expended feature then application 46 * shall implement and support @ref BT_HRS_CONTROL_POINT_RESET_ENERGY_EXPANDED_REQ 47 * request code 48 * 49 * @param request control point request code 50 * 51 * @return 0 on successful handling of control point request 52 * @return -ENOTSUP if not supported. It can be used to pass handling to other 53 * listeners in case of multiple listeners 54 * @return other negative error codes will result in immediate error response 55 */ 56 int (*ctrl_point_write)(uint8_t request); 57 58 /** Internal member to form a list of callbacks */ 59 sys_snode_t _node; 60 }; 61 62 /** @brief Heart rate service callback register 63 * 64 * This function will register callbacks that will be called in 65 * certain events related to Heart rate service. 66 * 67 * @param cb Pointer to callbacks structure. Must point to memory that remains valid 68 * until unregistered. 69 * 70 * @return 0 on success 71 * @return -EINVAL in case @p cb is NULL 72 */ 73 int bt_hrs_cb_register(struct bt_hrs_cb *cb); 74 75 /** @brief Heart rate service callback unregister 76 * 77 * This function will unregister callback from Heart rate service. 78 * 79 * @param cb Pointer to callbacks structure 80 * 81 * @return 0 on success 82 * @return -EINVAL in case @p cb is NULL 83 * @return -ENOENT in case the @p cb was not found in registered callbacks 84 */ 85 int bt_hrs_cb_unregister(struct bt_hrs_cb *cb); 86 87 /** @brief Notify heart rate measurement. 88 * 89 * This will send a GATT notification to all current subscribers. 90 * 91 * @param heartrate The heartrate measurement in beats per minute. 92 * 93 * @return Zero in case of success and error code in case of error. 94 */ 95 int bt_hrs_notify(uint16_t heartrate); 96 97 #ifdef __cplusplus 98 } 99 #endif 100 101 /** 102 * @} 103 */ 104 105 #endif /* ZEPHYR_INCLUDE_BLUETOOTH_SERVICES_HRS_H_ */ 106