mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2026-06-12 20:24:15 +08:00
[dac] add get resolution method
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user