1 /*
2  * Copyright (c) 2017, NXP
3  * Copyright (c) 2025, CATIE
4  *
5  * SPDX-License-Identifier: Apache-2.0
6  */
7 
8 #include <zephyr/kernel.h>
9 #include <zephyr/drivers/sensor.h>
10 #include <stdio.h>
11 
12 #define MAX30101_SENSOR_CHANNEL SENSOR_CHAN_GREEN
13 
print_sample_fetch(const struct device * dev)14 static void print_sample_fetch(const struct device *dev)
15 {
16 	static struct sensor_value green;
17 
18 	sensor_sample_fetch(dev);
19 	sensor_channel_get(dev, MAX30101_SENSOR_CHANNEL, &green);
20 
21 	/* Print LED data*/
22 	printf("GREEN = %d\n", green.val1);
23 }
24 
25 #if CONFIG_MAX30101_TRIGGER
26 static struct sensor_trigger trig_drdy;
27 
sensor_data_ready(const struct device * dev,const struct sensor_trigger * trigger)28 void sensor_data_ready(const struct device *dev, const struct sensor_trigger *trigger)
29 {
30 	print_sample_fetch(dev);
31 }
32 #endif /* CONFIG_MAX30101_TRIGGER */
33 
main(void)34 int main(void)
35 {
36 	const struct device *const dev = DEVICE_DT_GET(DT_ALIAS(heart_rate_sensor));
37 
38 	if (dev == NULL) {
39 		printf("Could not get heart_rate_sensor\n");
40 		return 0;
41 	}
42 	if (!device_is_ready(dev)) {
43 		printf("Device %s is not ready\n", dev->name);
44 		return 0;
45 	}
46 
47 #if CONFIG_MAX30101_TRIGGER
48 	trig_drdy.type = SENSOR_TRIG_DATA_READY;
49 	trig_drdy.chan = MAX30101_SENSOR_CHANNEL;
50 	sensor_trigger_set(dev, &trig_drdy, sensor_data_ready);
51 #endif /* CONFIG_MAX30101_TRIGGER */
52 
53 	while (1) {
54 #if !CONFIG_MAX30101_TRIGGER
55 		print_sample_fetch(dev);
56 #endif /* !CONFIG_MAX30101_TRIGGER */
57 
58 		k_sleep(K_MSEC(20));
59 	}
60 	return 0;
61 }
62