From 1ec5d15a60bb0e437e36b104881ee93804fa2160 Mon Sep 17 00:00:00 2001 From: usualtree <1340399194@qq.com> Date: Sat, 31 Oct 2026 21:08:44 +0800 Subject: [PATCH] [bsp][bluetrum] validate AB32 ADC channels --- bsp/bluetrum/libraries/hal_drivers/drv_adc.c | 25 ++++++++++++++++---- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/bsp/bluetrum/libraries/hal_drivers/drv_adc.c b/bsp/bluetrum/libraries/hal_drivers/drv_adc.c index d9c5bf768ddd..340c36f39715 100644 --- a/bsp/bluetrum/libraries/hal_drivers/drv_adc.c +++ b/bsp/bluetrum/libraries/hal_drivers/drv_adc.c @@ -41,18 +41,23 @@ static struct ab32_adc ab32_adc_obj[] = #endif }; -static rt_err_t ab32_adc_enabled(struct rt_adc_device *device, rt_uint32_t channel, rt_bool_t enabled) +static rt_err_t ab32_adc_enabled(struct rt_adc_device *device, rt_int8_t channel, rt_bool_t enabled) { RT_ASSERT(device != RT_NULL); + if (channel < 0 || channel > 15) + { + return -RT_EINVAL; + } + hal_adc_enable(enabled); return RT_EOK; } -static rt_uint32_t ab32_adc_get_channel(rt_uint32_t channel) +static rt_int32_t ab32_adc_get_channel(rt_int8_t channel) { - rt_uint32_t ab32_channel = 0; + rt_int32_t ab32_channel = 0; switch (channel) { @@ -104,21 +109,31 @@ static rt_uint32_t ab32_adc_get_channel(rt_uint32_t channel) case 15: ab32_channel = ADC_CHANNEL_15; break; + default: + ab32_channel = -RT_EINVAL; + break; } return ab32_channel; } -static rt_err_t ab32_get_adc_value(struct rt_adc_device *device, rt_uint32_t channel, rt_uint32_t *value) +static rt_err_t ab32_get_adc_value(struct rt_adc_device *device, rt_int8_t channel, rt_uint32_t *value) { hal_sfr_t ab32_adc_handler; + rt_int32_t ab32_channel; RT_ASSERT(device != RT_NULL); RT_ASSERT(value != RT_NULL); + ab32_channel = ab32_adc_get_channel(channel); + if (ab32_channel < 0) + { + return ab32_channel; + } + ab32_adc_handler = device->parent.user_data; - hal_adc_start(ab32_adc_get_channel(channel)); + hal_adc_start((rt_uint32_t)ab32_channel); hal_adc_poll_for_conversion(1000); *value = ab32_adc_handler[channel];