1 /*
2  * Copyright (c) 2024 TDK Invensense
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 #include <zephyr/kernel.h>
8 #include <zephyr/device.h>
9 #include <zephyr/devicetree.h>
10 #include <zephyr/drivers/sensor.h>
11 #include <stdio.h>
12 
13 /*
14  * Get a device structure from a devicetree node from alias
15  * "pressure_sensor".
16  */
get_pressure_sensor_device(void)17 static const struct device *get_pressure_sensor_device(void)
18 {
19 	const struct device *const dev = DEVICE_DT_GET(DT_ALIAS(pressure_sensor));
20 
21 	if (!device_is_ready(dev)) {
22 		printk("\nError: Device \"%s\" is not ready; "
23 		       "check the driver initialization logs for errors.\n",
24 		       dev->name);
25 		return NULL;
26 	}
27 
28 	printk("Found device \"%s\", getting sensor data\n", dev->name);
29 	return dev;
30 }
31 
main(void)32 int main(void)
33 {
34 	const struct device *dev = get_pressure_sensor_device();
35 	int ret;
36 
37 	if (dev == NULL) {
38 		return 0;
39 	}
40 	struct sensor_value pressure;
41 	struct sensor_value temperature;
42 	struct sensor_value altitude;
43 
44 	printk("Starting pressure, temperature and altitude polling sample.\n");
45 
46 	while (1) {
47 		if (sensor_sample_fetch_chan(dev, SENSOR_CHAN_ALL) == 0) {
48 			sensor_channel_get(dev, SENSOR_CHAN_PRESS, &pressure);
49 			sensor_channel_get(dev, SENSOR_CHAN_AMBIENT_TEMP, &temperature);
50 			ret = sensor_channel_get(dev, SENSOR_CHAN_ALTITUDE, &altitude);
51 
52 			printk("temp %.2f Cel, pressure %f kPa",
53 			       sensor_value_to_double(&temperature),
54 			       sensor_value_to_double(&pressure));
55 			if (ret == 0) {
56 				printk(", altitude %f m", sensor_value_to_double(&altitude));
57 			}
58 			printk("\n");
59 		}
60 
61 		k_msleep(1000);
62 	}
63 	return 0;
64 }
65