132 lines
3.1 KiB
C
132 lines
3.1 KiB
C
/*
|
|
* Copyright (c) 2020 Libre Solar Technologies GmbH
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
/**
|
|
* @file
|
|
* @brief DAC public API header file.
|
|
*/
|
|
|
|
#ifndef ZEPHYR_INCLUDE_DRIVERS_DAC_H_
|
|
#define ZEPHYR_INCLUDE_DRIVERS_DAC_H_
|
|
|
|
#include <device.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/**
|
|
* @brief DAC driver APIs
|
|
* @defgroup dac_interface DAC driver APIs
|
|
* @ingroup io_interfaces
|
|
* @{
|
|
*/
|
|
|
|
/**
|
|
* @struct dac_channel_cfg
|
|
* @brief Structure for specifying the configuration of a DAC channel.
|
|
*
|
|
* @param channel_id Channel identifier of the DAC that should be configured.
|
|
* @param resolution Desired resolution of the DAC (depends on device
|
|
* capabilities).
|
|
*/
|
|
struct dac_channel_cfg {
|
|
u8_t channel_id;
|
|
u8_t resolution;
|
|
};
|
|
|
|
/**
|
|
* @cond INTERNAL_HIDDEN
|
|
*
|
|
* For internal use only, skip these in public documentation.
|
|
*/
|
|
|
|
/*
|
|
* Type definition of DAC API function for configuring a channel.
|
|
* See dac_channel_setup() for argument descriptions.
|
|
*/
|
|
typedef int (*dac_api_channel_setup)(struct device *dev,
|
|
const struct dac_channel_cfg *channel_cfg);
|
|
|
|
/*
|
|
* Type definition of DAC API function for setting a write request.
|
|
* See dac_write_value() for argument descriptions.
|
|
*/
|
|
typedef int (*dac_api_write_value)(struct device *dev,
|
|
u8_t channel, u32_t value);
|
|
|
|
/*
|
|
* DAC driver API
|
|
*
|
|
* This is the mandatory API any DAC driver needs to expose.
|
|
*/
|
|
__subsystem struct dac_driver_api {
|
|
dac_api_channel_setup channel_setup;
|
|
dac_api_write_value write_value;
|
|
};
|
|
|
|
/**
|
|
* @endcond
|
|
*/
|
|
|
|
/**
|
|
* @brief Configure a DAC channel.
|
|
*
|
|
* It is required to call this function and configure each channel before it is
|
|
* selected for a write request.
|
|
*
|
|
* @param dev Pointer to the device structure for the driver instance.
|
|
* @param channel_cfg Channel configuration.
|
|
*
|
|
* @retval 0 On success.
|
|
* @retval -EINVAL If a parameter with an invalid value has been provided.
|
|
* @retval -ENOTSUP If the requested resolution is not supported.
|
|
*/
|
|
__syscall int dac_channel_setup(struct device *dev,
|
|
const struct dac_channel_cfg *channel_cfg);
|
|
|
|
static inline int z_impl_dac_channel_setup(struct device *dev,
|
|
const struct dac_channel_cfg *channel_cfg)
|
|
{
|
|
const struct dac_driver_api *api =
|
|
(const struct dac_driver_api *)dev->driver_api;
|
|
|
|
return api->channel_setup(dev, channel_cfg);
|
|
}
|
|
|
|
/**
|
|
* @brief Write a single value to a DAC channel
|
|
*
|
|
* @param dev Pointer to the device structure for the driver instance.
|
|
* @param channel Number of the channel to be used.
|
|
* @param value Data to be written to DAC output registers.
|
|
*
|
|
* @retval 0 On success.
|
|
* @retval -EINVAL If a parameter with an invalid value has been provided.
|
|
*/
|
|
__syscall int dac_write_value(struct device *dev, u8_t channel, u32_t value);
|
|
|
|
static inline int z_impl_dac_write_value(struct device *dev,
|
|
u8_t channel, u32_t value)
|
|
{
|
|
const struct dac_driver_api *api =
|
|
(const struct dac_driver_api *)dev->driver_api;
|
|
|
|
return api->write_value(dev, channel, value);
|
|
}
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#include <syscalls/dac.h>
|
|
|
|
#endif /* ZEPHYR_INCLUDE_DRIVERS_DAC_H_ */
|