Line data Source code
1 1 : /*
2 : * Copyright (c) 2022, Thomas Stranger
3 : *
4 : * SPDX-License-Identifier: Apache-2.0
5 : */
6 :
7 : /**
8 : * @file
9 : * @brief Extended public API for 1-Wire Sensors
10 : *
11 : * This header file exposes an attribute an helper function to allow the
12 : * runtime configuration of ROM IDs for 1-Wire Sensors.
13 : */
14 :
15 : #ifndef ZEPHYR_INCLUDE_DRIVERS_SENSOR_W1_SENSOR_H_
16 : #define ZEPHYR_INCLUDE_DRIVERS_SENSOR_W1_SENSOR_H_
17 :
18 : #ifdef __cplusplus
19 : extern "C" {
20 : #endif
21 :
22 : #include <zephyr/drivers/sensor.h>
23 : #include <zephyr/drivers/w1.h>
24 :
25 : /**
26 : * @brief 1-Wire Sensor API
27 : * @defgroup w1_sensor 1-Wire Sensor API
28 : * @ingroup w1_interface
29 : * @{
30 : */
31 :
32 0 : enum sensor_attribute_w1 {
33 : /** Device unique 1-Wire ROM */
34 : SENSOR_ATTR_W1_ROM = SENSOR_ATTR_PRIV_START,
35 : };
36 :
37 : /**
38 : * @brief Function to write a w1_rom struct to an sensor value ptr.
39 : *
40 : * @param rom Pointer to the rom struct.
41 : * @param val Pointer to the sensor value.
42 : */
43 1 : static inline void w1_rom_to_sensor_value(const struct w1_rom *rom,
44 : struct sensor_value *val)
45 : {
46 : val->val1 = sys_get_be64((uint8_t *)rom) & BIT64_MASK(32);
47 : val->val2 = sys_get_be64((uint8_t *)rom) >> 32;
48 : }
49 :
50 : /**
51 : * @brief Function to write an rom id stored in a sensor value to a struct w1_rom ptr.
52 : *
53 : * @param val Sensor_value representing the rom.
54 : * @param rom The rom struct ptr.
55 : */
56 1 : static inline void w1_sensor_value_to_rom(const struct sensor_value *val,
57 : struct w1_rom *rom)
58 : {
59 : uint64_t temp64 = ((uint64_t)((uint32_t)val->val2) << 32)
60 : | (uint32_t)val->val1;
61 : sys_put_be64(temp64, (uint8_t *)rom);
62 : }
63 :
64 : /**
65 : * @}
66 : */
67 :
68 : #ifdef __cplusplus
69 : }
70 : #endif
71 :
72 : #endif /* ZEPHYR_INCLUDE_DRIVERS_SENSOR_W1_SENSOR_H_ */
|