From 175ca2ee09698f554993fb2ff440cad1c9af89f4 Mon Sep 17 00:00:00 2001 From: Meco Man <920369182@qq.com> Date: Fri, 22 Apr 2022 18:59:27 -0400 Subject: [PATCH] [dac] add get resolution method --- bsp/stm32/libraries/HAL_Drivers/drv_dac.c | 13 +++++++++++++ components/drivers/include/drivers/dac.h | 2 ++ components/drivers/misc/adc.c | 2 +- components/drivers/misc/dac.c | 20 +++++++++++++------- 4 files changed, 29 insertions(+), 8 deletions(-) diff --git a/bsp/stm32/libraries/HAL_Drivers/drv_dac.c b/bsp/stm32/libraries/HAL_Drivers/drv_dac.c index 4916f65513..a3ea4a58c6 100644 --- a/bsp/stm32/libraries/HAL_Drivers/drv_dac.c +++ b/bsp/stm32/libraries/HAL_Drivers/drv_dac.c @@ -105,6 +105,18 @@ static rt_err_t stm32_dac_disabled(struct rt_dac_device *device, rt_uint32_t cha return RT_EOK; } +static rt_uint8_t stm32_dac_get_resolution(struct rt_dac_device *device) +{ + DAC_HandleTypeDef *stm32_dac_handler; + + RT_ASSERT(device != RT_NULL); + + stm32_dac_handler = device->parent.user_data; + (void)stm32_dac_handler; + + return 12; /* TODO */ +} + static rt_err_t stm32_set_dac_value(struct rt_dac_device *device, rt_uint32_t channel, rt_uint32_t *value) { uint32_t dac_channel; @@ -162,6 +174,7 @@ static const struct rt_dac_ops stm_dac_ops = .disabled = stm32_dac_disabled, .enabled = stm32_dac_enabled, .convert = stm32_set_dac_value, + .get_resolution = stm32_dac_get_resolution, }; static int stm32_dac_init(void) diff --git a/components/drivers/include/drivers/dac.h b/components/drivers/include/drivers/dac.h index dcda0ef68f..0270b988ba 100644 --- a/components/drivers/include/drivers/dac.h +++ b/components/drivers/include/drivers/dac.h @@ -18,6 +18,7 @@ struct rt_dac_ops rt_err_t (*disabled)(struct rt_dac_device *device, rt_uint32_t channel); rt_err_t (*enabled)(struct rt_dac_device *device, rt_uint32_t channel); rt_err_t (*convert)(struct rt_dac_device *device, rt_uint32_t channel, rt_uint32_t *value); + rt_uint8_t (*get_resolution)(struct rt_dac_device *device); }; struct rt_dac_device @@ -31,6 +32,7 @@ typedef enum { RT_DAC_CMD_ENABLE = RT_DEVICE_CTRL_BASE(DAC) + 0, RT_DAC_CMD_DISABLE = RT_DEVICE_CTRL_BASE(DAC) + 1, + RT_DAC_CMD_GET_RESOLUTION = RT_DEVICE_CTRL_BASE(DAC) + 2, } rt_dac_cmd_t; rt_err_t rt_hw_dac_register(rt_dac_device_t dac,const char *name, const struct rt_dac_ops *ops, const void *user_data); diff --git a/components/drivers/misc/adc.c b/components/drivers/misc/adc.c index ae324a16ec..9c87919793 100644 --- a/components/drivers/misc/adc.c +++ b/components/drivers/misc/adc.c @@ -58,7 +58,7 @@ static rt_err_t _adc_control(rt_device_t dev, int cmd, void *args) if(resolution != 0) { *((rt_uint8_t*)args) = resolution; - LOG_D("ADC resolution:%d", resolution); + LOG_D("resolution: %d bits", resolution); result = RT_EOK; } } diff --git a/components/drivers/misc/dac.c b/components/drivers/misc/dac.c index 548a7bde99..ecbadfd502 100644 --- a/components/drivers/misc/dac.c +++ b/components/drivers/misc/dac.c @@ -40,21 +40,27 @@ static rt_size_t _dac_write(rt_device_t dev, rt_off_t pos, const void *buffer, r static rt_err_t _dac_control(rt_device_t dev, int cmd, void *args) { - rt_err_t result = RT_EOK; + rt_err_t result = -RT_EINVAL; rt_dac_device_t dac = (struct rt_dac_device *)dev; - if (dac->ops->enabled == RT_NULL) - { - return -RT_ENOSYS; - } - if (cmd == RT_DAC_CMD_ENABLE) + if (cmd == RT_DAC_CMD_ENABLE && dac->ops->enabled) { result = dac->ops->enabled(dac, (rt_uint32_t)args); } - else if (cmd == RT_DAC_CMD_DISABLE) + else if (cmd == RT_DAC_CMD_DISABLE && dac->ops->enabled) { result = dac->ops->disabled(dac, (rt_uint32_t)args); } + else if (cmd == RT_DAC_CMD_GET_RESOLUTION && dac->ops->get_resolution) + { + rt_uint8_t resolution = dac->ops->get_resolution(dac); + if(resolution != 0) + { + *((rt_uint8_t*)args) = resolution; + LOG_D("resolution: %d bits", resolution); + result = RT_EOK; + } + } return result; } -- GitLab