| /** |
| * @file |
| * |
| * @brief Backend API for emulated ADC |
| */ |
| |
| /* |
| * Copyright 2021 Google LLC |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| #ifndef ZEPHYR_INCLUDE_DRIVERS_ADC_ADC_EMUL_H_ |
| #define ZEPHYR_INCLUDE_DRIVERS_ADC_ADC_EMUL_H_ |
| |
| #include <zephyr/types.h> |
| #include <drivers/adc.h> |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| /** |
| * @brief Emulated ADC backend API |
| * @defgroup adc_emul Emulated ADC |
| * @ingroup adc_interface |
| * @{ |
| * |
| * Behaviour of emulated ADC is application-defined. As-such, each |
| * application may |
| * |
| * - define a Device Tree overlay file to indicate the number of ADC |
| * controllers as well as the number of channels for each controller |
| * - set default reference voltages in Device Tree or using |
| * @ref adc_emul_ref_voltage_set |
| * - asynchronously call @ref adc_emul_const_value_set in order to set |
| * constant mV value on emulated ADC input |
| * - asynchronously call @ref adc_emul_value_func_set in order to assign |
| * function which will be used to obtain voltage on emulated ADC input |
| * |
| * An example of an appropriate Device Tree overlay file is in |
| * tests/drivers/adc/adc_api/boards/native_posix.overlay |
| * |
| * An example of using emulated ADC backend API is in the file |
| * tests/drivers/adc/adc_emul/src/main.c |
| */ |
| |
| /** |
| * @brief Type definition of the function which is used to obtain ADC |
| * mV input values |
| * |
| * @param dev Pointer to the device structure for the driver instance |
| * @param chan ADC channel to sample |
| * @param data User data which was passed on @ref adc_emul_value_func_set |
| * @param result The result value which will be set as input for ADC @p chan |
| * |
| * @return 0 on success |
| * @return other as error code which ends ADC context |
| */ |
| typedef int (*adc_emul_value_func)(const struct device *dev, unsigned int chan, |
| void *data, uint32_t *result); |
| |
| /** |
| * @brief Set constant mV value input for emulated ADC @p chan |
| * |
| * @param dev The emulated ADC device |
| * @param chan The channel of ADC which input is assigned |
| * @param value New voltage in mV to assign to @p chan input |
| * |
| * @return 0 on success |
| * @return -EINVAL if an invalid argument is provided |
| */ |
| int adc_emul_const_value_set(const struct device *dev, unsigned int chan, |
| uint32_t value); |
| |
| /** |
| * @brief Set function used to obtain voltage for input of emulated |
| * ADC @p chan |
| * |
| * @param dev The emulated ADC device |
| * @param chan The channel of ADC to which @p func is assigned |
| * @param func New function to assign to @p chan |
| * @param data Pointer to data passed to @p func on call |
| * |
| * @return 0 on success |
| * @return -EINVAL if an invalid argument is provided |
| */ |
| int adc_emul_value_func_set(const struct device *dev, unsigned int chan, |
| adc_emul_value_func func, void *data); |
| |
| /** |
| * @brief Set reference voltage |
| * |
| * @param dev The emulated ADC device |
| * @param ref Reference config which is changed |
| * @param value New reference voltage in mV |
| * |
| * @return 0 on success |
| * @return -EINVAL if an invalid argument is provided |
| */ |
| int adc_emul_ref_voltage_set(const struct device *dev, enum adc_reference ref, |
| uint16_t value); |
| /** |
| * @} |
| */ |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* ZEPHYR_INCLUDE_DRIVERS_ADC_ADC_EMUL_H_ */ |