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