GATT Heart Rate Service (HRS) Client
The GATT Heart Rate Service Client is used to retrieve information about heart rate measurements.
Overview
The GATT HRS Client can retrieve information such as the sensor location from a device that provides the Heart Rate Service. It can also configure the Heart Rate Service on a remote device by writing specific values to the Heart Rate Control Point characteristic.
Configuration
Applications use the scanning module for detecting advertising devices that support the Heart Rate Service. If the advertising device is detected, the application will connect to it automatically and will start receiving HRS data.
Once a connection with a remote device providing a Heart Rate Service is established, the client needs service discovery to discover Heart Rate Service handles.
If this succeeds, the handles of the Heart Rate Service must be assigned to a HRS client instance using the bt_hrs_client_handles_assign()
function.
The application is ready to operate with the remote Heart Rate Service.
Usage
Retrieve data from Heart Rate Service or configure its behavior using the following functions:
bt_hrs_client_measurement_subscribe()
- Enable notifications for the Heart Rate Measurement characteristic.The notifications are passed to the provided callback function. You will receive the current heart rate measurement data.
bt_hrs_client_sensor_location_read()
- Read a heart rate sensor location.Check the possible locations in
bt_hrs_client_sensor_location
.bt_hrs_client_control_point_write()
- Configure a remote Heart Rate Service.Check the possible values for a Heart Rate Control Point characteristic in
bt_hrs_client_cp_value
.
Samples using the library
The following nRF Connect SDK samples use this library:
Additional information
Do not use any of the values in the bt_hrs_client
object structure directly.
All values that should be accessed have accessory functions.
The structure is fully defined because the application must be able to allocate memory for it.
Dependencies
-
include/bluetooth/gatt.h
include/bluetooth/conn.h
API documentation
include/bluetooth/services/hrs_client.h
subsys/bluetooth/services/hrs_client.c
- group bt_hrs_client
Heart Rate (HR) Service Client API.
Typedefs
-
typedef void (*bt_hrs_client_notify_cb)(struct bt_hrs_client *hrs_c, const struct bt_hrs_client_measurement *meas, int err)
Heart Rate Measurement notification callback.
This function is called every time the client receives a notification with Heart Rate Measurement data.
- Param hrs_c
[in] Heart Rate Service Client instance.
- Param meas
[in] Heart Rate Measurement received data.
- Param err
[in] 0 if the notification is valid. Otherwise, contains a (negative) error code.
-
typedef void (*bt_hrs_client_read_sensor_location_cb)(struct bt_hrs_client *hrs_c, enum bt_hrs_client_sensor_location location, int err)
Heart Rate Body Sensor Location read callback.
- Param hrs_c
[in] Heart Rate Service Client instance.
- Param location
[in] Body Sensor Location value.
- Param err
[in] 0 if read operation succeeded and data is valid. Otherwise, contains an error code.
-
typedef void (*bt_hrs_client_write_cb)(struct bt_hrs_client *hrs_c, uint8_t err)
Heart Rate Control Point write callback.
- Param hrs_c
[in] Heart Rate client instance.
- Param err
[in] 0 if write operation succeeded. Otherwise, contains an error code.
Enums
-
enum bt_hrs_client_error
Heart Rate Service error codes.
This service defines the following Attribute Protocol Application error codes.
Values:
-
enumerator BT_HRS_CLIENT_ERROR_CP_NOT_SUPPORTED
Control Point value not supported.
-
enumerator BT_HRS_CLIENT_ERROR_CP_NOT_SUPPORTED
-
enum bt_hrs_client_cp_value
Heart Rate Control Point values.
The values of the Control Point characteristic.
Values:
-
enumerator BT_HRS_CLIENT_CP_VALUE_RESET_EE
Resets the value if the Energy Expended field in the Heart Rate Measurement characteristic to 0.
-
enumerator BT_HRS_CLIENT_CP_VALUE_RESET_EE
-
enum bt_hrs_client_sensor_location
Body sensor location values.
Values:
-
enumerator BT_HRS_CLIENT_SENSOR_LOCATION_OTHER
Body Sensor Location: Other.
-
enumerator BT_HRS_CLIENT_SENSOR_LOCATION_CHEST
Body Sensor Location: Chest.
-
enumerator BT_HRS_CLIENT_SENSOR_LOCATION_WRIST
Body Sensor Location: Wrist.
-
enumerator BT_HRS_CLIENT_SENSOR_LOCATION_FINGER
Body Sensor Location: Finger.
-
enumerator BT_HRS_CLIENT_SENSOR_LOCATION_HAND
Body Sensor Location: Hand.
-
enumerator BT_HRS_CLIENT_SENSOR_LOCATION_EAR_LOBE
Body Sensor Location: Ear Lobe.
-
enumerator BT_HRS_CLIENT_SENSOR_LOCATION_FOOT
Body Sensor Location: Foot.
-
enumerator BT_HRS_CLIENT_SENSOR_LOCATION_OTHER
Functions
-
int bt_hrs_client_init(struct bt_hrs_client *hrs_c)
Function for initializing the Heart Rate Service Client.
- Parameters
hrs_c – [inout] Heart Rate Service Client instance. This structure must be supplied by the application. It is initialized by this function and will later be used to identify this particular client instance.
- Return values
0 – If the client was initialized successfully. Otherwise, a (negative) error code is returned.
-
int bt_hrs_client_measurement_subscribe(struct bt_hrs_client *hrs_c, bt_hrs_client_notify_cb notify_cb)
Subscribe to Heart Rate Measurement notification.
This function writes CCC descriptor of the Heart Rate Measurement characteristic to enable notification.
- Parameters
hrs_c – [in] Heart Rate Service Client instance.
notify_cb – [in] Notification callback.
- Return values
0 – If the operation was successful. Otherwise, a (negative) error code is returned.
-
int bt_hrs_client_measurement_unsubscribe(struct bt_hrs_client *hrs_c)
Remove subscription to the Heart Rate Measurement notification.
This function writes CCC descriptor of the Heart Rate Measurement characteristic to disable notification.
- Parameters
hrs_c – [in] Heart Rate Service Client instance.
- Return values
0 – If the operation was successful. Otherwise, a (negative) error code is returned.
-
int bt_hrs_client_sensor_location_read(struct bt_hrs_client *hrs_c, bt_hrs_client_read_sensor_location_cb read_cb)
Read Body Sensor Location characteristic.
- Parameters
hrs_c – [in] Heart Rate Service Client instance.
read_cb – [in] Read complete callback.
- Return values
0 – If the operation was successful. Otherwise, a (negative) error code is returned.
-
bool bt_hrs_client_has_sensor_location(struct bt_hrs_client *hrs_c)
Check if Heart Rate Service has the Body Sensor Location characteristic.
This function can be called after bt_hrs_client_handles_assign to check if the Body Sensor Location characteristic was found during service discovery.
- Return values
true – If the Body Sensor Location is found.
false – If the Body Sensor Location is not found.
-
int bt_hrs_client_control_point_write(struct bt_hrs_client *hrs_c, enum bt_hrs_client_cp_value value, bt_hrs_client_write_cb write_cb)
Write Heart Rate Control Point characteristic.
- Parameters
hrs_c – [in] Heart Rate Service Client instance.
value – [in] Control Point value to write.
write_cb – [in] Write complete callback.
- Return values
0 – If the operation was successful. Otherwise, a (negative) error code is returned.
-
bool bt_hrs_client_has_control_point(struct bt_hrs_client *hrs_c)
Check if Heart Rate Service has the Heart Rate Control Point characteristic.
This function can be called after bt_hrs_client_handles_assign to check if the Heart Rate Control Point characteristic was found during service discovery.
- Return values
true – If the Heart Rate Control Point is found.
false – If the Heart Rate Control Point is not found.
-
int bt_hrs_client_handles_assign(struct bt_gatt_dm *dm, struct bt_hrs_client *hrs_c)
Function for assigning handles to Heart Rate Service Client instance.
Call this function when a link has been established with a peer to associate the link to this instance of the module. This makes it possible to handle several links and associate each link to a particular instance of this module.
- Parameters
dm – [in] Discovery object.
hrs_c – [inout] Heart Rate Service Client instance for associating the link.
- Return values
0 – If the operation is successful. Otherwise, a (negative) error code is returned.
-
struct bt_hrs_flags
- #include <hrs_client.h>
Heart Measurement flags structure.
Public Members
-
uint8_t value_format
Value Format flag.
-
uint8_t sensor_contact_detected
Sensor Contact detected flag.
-
uint8_t sensor_contact_supported
Sensor Contact supported flag.
-
uint8_t energy_expended_present
Energy Expended preset flag.
-
uint8_t rr_intervals_present
RR-intervals present flag.
-
uint8_t value_format
-
struct bt_hrs_client_measurement
- #include <hrs_client.h>
Data structure of the Heart Rate Measurement characteristic.
Public Members
-
struct bt_hrs_flags flags
Flags structure.
-
uint8_t rr_intervals_count
RR-intervals count.
-
uint16_t rr_intervals[CONFIG_BT_HRS_CLIENT_RR_INTERVALS_COUNT]
RR-intervals represented by 1/1024 second as unit. Present if bt_hrs_flags::rr_intervals_present is set. The interval with index 0 is older than the interval with index 1.
-
uint16_t hr_value
Heart Rate Measurement Value in beats per minute unit.
-
uint16_t energy_expended
Energy Expended in joule unit. Present if bt_hrs_flags::energy_expended_present is set.
-
struct bt_hrs_flags flags
-
struct bt_hrs_client_hr_meas
- #include <hrs_client.h>
Heart Rate Measurement characteristic structure.
Public Members
-
uint16_t handle
Value handle.
-
uint16_t ccc_handle
Handle of the characteristic CCC descriptor.
-
struct bt_gatt_subscribe_params notify_params
GATT subscribe parameters for notification.
-
bt_hrs_client_notify_cb notify_cb
Notification callback.
-
uint16_t handle
-
struct bt_hrs_client_body_sensor_location
- #include <hrs_client.h>
Body Sensor Location characteristic structure.
Public Members
-
uint16_t handle
Value handle.
-
struct bt_gatt_read_params read_params
Read parameters.
-
bt_hrs_client_read_sensor_location_cb read_cb
Read complete callback.
-
uint16_t handle
-
struct bt_hrs_client_control_point
- #include <hrs_client.h>
Heart Rate Control Point characteristic structure.
Public Members
-
uint16_t handle
Value handle.
-
struct bt_gatt_write_params write_params
Write parameters.
-
bt_hrs_client_write_cb write_cb
Write complete callback.
-
uint16_t handle
-
struct bt_hrs_client
- #include <hrs_client.h>
Heart Rate Service Client instance structure. This structure contains status information for the client.
Public Members
-
struct bt_conn *conn
Connection object.
-
struct bt_hrs_client_hr_meas measurement_char
Heart Rate Measurement characteristic.
-
struct bt_hrs_client_body_sensor_location sensor_location_char
Sensor Body Location characteristic.
-
struct bt_hrs_client_control_point cp_char
Heart Rate Control Point characteristic.
-
atomic_t state
Internal state.
-
struct bt_conn *conn
-
typedef void (*bt_hrs_client_notify_cb)(struct bt_hrs_client *hrs_c, const struct bt_hrs_client_measurement *meas, int err)