/** * @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 #include #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_ */