提交 175ca2ee 编写于 作者: mysterywolf's avatar mysterywolf 提交者: guo

[dac] add get resolution method

上级 778be73c
...@@ -105,6 +105,18 @@ static rt_err_t stm32_dac_disabled(struct rt_dac_device *device, rt_uint32_t cha ...@@ -105,6 +105,18 @@ static rt_err_t stm32_dac_disabled(struct rt_dac_device *device, rt_uint32_t cha
return RT_EOK; 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) 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; uint32_t dac_channel;
...@@ -162,6 +174,7 @@ static const struct rt_dac_ops stm_dac_ops = ...@@ -162,6 +174,7 @@ static const struct rt_dac_ops stm_dac_ops =
.disabled = stm32_dac_disabled, .disabled = stm32_dac_disabled,
.enabled = stm32_dac_enabled, .enabled = stm32_dac_enabled,
.convert = stm32_set_dac_value, .convert = stm32_set_dac_value,
.get_resolution = stm32_dac_get_resolution,
}; };
static int stm32_dac_init(void) static int stm32_dac_init(void)
......
...@@ -18,6 +18,7 @@ struct rt_dac_ops ...@@ -18,6 +18,7 @@ struct rt_dac_ops
rt_err_t (*disabled)(struct rt_dac_device *device, rt_uint32_t channel); 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 (*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_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 struct rt_dac_device
...@@ -31,6 +32,7 @@ typedef enum ...@@ -31,6 +32,7 @@ typedef enum
{ {
RT_DAC_CMD_ENABLE = RT_DEVICE_CTRL_BASE(DAC) + 0, RT_DAC_CMD_ENABLE = RT_DEVICE_CTRL_BASE(DAC) + 0,
RT_DAC_CMD_DISABLE = RT_DEVICE_CTRL_BASE(DAC) + 1, 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_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); 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);
......
...@@ -58,7 +58,7 @@ static rt_err_t _adc_control(rt_device_t dev, int cmd, void *args) ...@@ -58,7 +58,7 @@ static rt_err_t _adc_control(rt_device_t dev, int cmd, void *args)
if(resolution != 0) if(resolution != 0)
{ {
*((rt_uint8_t*)args) = resolution; *((rt_uint8_t*)args) = resolution;
LOG_D("ADC resolution:%d", resolution); LOG_D("resolution: %d bits", resolution);
result = RT_EOK; result = RT_EOK;
} }
} }
......
...@@ -40,21 +40,27 @@ static rt_size_t _dac_write(rt_device_t dev, rt_off_t pos, const void *buffer, r ...@@ -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) 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; rt_dac_device_t dac = (struct rt_dac_device *)dev;
if (dac->ops->enabled == RT_NULL) if (cmd == RT_DAC_CMD_ENABLE && dac->ops->enabled)
{
return -RT_ENOSYS;
}
if (cmd == RT_DAC_CMD_ENABLE)
{ {
result = dac->ops->enabled(dac, (rt_uint32_t)args); 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); 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; return result;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册