blob: 97f13113ee42a1e24f75df4fdb12271507ed3e01 [file] [log] [blame]
/*
* Copyright (c) 2022, Thomas Stranger
*
* SPDX-License-Identifier: Apache-2.0
*/
/**
* @file
* @brief Extended public API for 1-Wire Sensors
*
* This header file exposes an attribute an helper function to allow the
* runtime configuration of ROM IDs for 1-Wire Sensors.
*/
#ifndef ZEPHYR_INCLUDE_DRIVERS_SENSOR_W1_SENSOR_H_
#define ZEPHYR_INCLUDE_DRIVERS_SENSOR_W1_SENSOR_H_
#ifdef __cplusplus
extern "C" {
#endif
#include <zephyr/drivers/sensor.h>
#include <zephyr/drivers/w1.h>
/**
* @brief 1-Wire Sensor API
* @defgroup w1_sensor 1-Wire Sensor API
* @ingroup w1_interface
* @{
*/
enum sensor_attribute_w1 {
/** Device unique 1-Wire ROM */
SENSOR_ATTR_W1_ROM = SENSOR_ATTR_PRIV_START,
};
/**
* @brief Function to write a w1_rom struct to an sensor value ptr.
*
* @param rom Pointer to the rom struct.
* @param val Pointer to the sensor value.
*/
static inline void w1_rom_to_sensor_value(const struct w1_rom *rom,
struct sensor_value *val)
{
val->val1 = sys_get_be64((uint8_t *)rom) & BIT64_MASK(32);
val->val2 = sys_get_be64((uint8_t *)rom) >> 32;
}
/**
* @brief Function to write an rom id stored in a sensor value to a struct w1_rom ptr.
*
* @param val Sensor_value representing the rom.
* @param rom The rom struct ptr.
*/
static inline void w1_sensor_value_to_rom(const struct sensor_value *val,
struct w1_rom *rom)
{
uint64_t temp64 = ((uint64_t)((uint32_t)val->val2) << 32)
| (uint32_t)val->val1;
sys_put_be64(temp64, (uint8_t *)rom);
}
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* ZEPHYR_INCLUDE_DRIVERS_SENSOR_W1_SENSOR_H_ */