control函数cmd不支持应该返回什么错误代码

发布于 2018-12-23 12:59:35
    本帖最后由 moss 于 2018-12-23 13:02 编辑


static rt_err_t stm32_control(struct rt_serial_device *serial, int cmd, void *arg)
{
struct stm32_uart *uart;
rt_err_t ret = RT_EOK;

RT_ASSERT(serial != RT_NULL);

uart = (struct stm32_uart *)serial->parent.user_data;
RT_ASSERT(uart != RT_NULL);

switch (cmd)
{
case RT_DEVICE_CTRL_CLR_INT:
/* disable rx irq */
NVIC_DisableIRQ(uart->irq);
/* disable interrupt */
__HAL_UART_DISABLE_IT(&uart->UartHandle, UART_IT_RXNE);
break;

case RT_DEVICE_CTRL_SET_INT:
/* enable rx irq */
NVIC_EnableIRQ(uart->irq);
/* enable interrupt */
__HAL_UART_ENABLE_IT(&uart->UartHandle, UART_IT_RXNE);
break;

#ifdef BSP_UART_USING_DMA_RX
case RT_DEVICE_CTRL_CONFIG:
if ((rt_ubase_t)arg == RT_DEVICE_FLAG_DMA_RX)
{
stm32_dma_config(serial);
}
break;
#endif
default:
ret = -RT_ERROR;
break;
}

return ret;
}
如上面函数,如果不是支持的 cmd 应该返回下面哪个错误代码?
#define RT_ERROR                        1               /**< A generic error happens */

#define RT_ENOSYS 6 /**< No system */

#define RT_EINVAL 10 /**< Invalid argument */









查看更多

关注者
0
被浏览
774
5 个回答
yqiu
yqiu 2018-12-23
不支持的 cmd,不就跑到 default 分支去了?
moss
moss 2018-12-23
yqiu 发表于 2018-12-23 14:03
不支持的 cmd,不就跑到 default 分支去了?


原来没有default分支,是我刚加上去的。
但是有个疑问是返回 generic error还是返回具体错误 -- cmd 不支持
如果是cmd不支持,应返回ENOSYS还是EINVAL
yqiu
yqiu 2018-12-23
    本帖最后由 yqiu 于 2018-12-23 14:52 编辑


moss 发表于 2018-12-23 14:13
原来没有default分支,是我刚加上去的。
但是有个疑问是返回 generic error还是返回具体错误 -- cmd 不支 ...

了解了,原来是你后来加上的 default;https://github.com/RT-Thread/rtt ... on/driver/drv_pwm.c 这儿用的是 RT_EINVAL,建议使用这个。
moss
moss 2018-12-23
yqiu 发表于 2018-12-23 14:50
了解了,原来是你后来加上的 default;https://github.com/RT-Thread/rtt ... on/driver/drv_pwm.c 这儿用 ...


原来这里应该返回正值 RT_EINVAL,什么时候需要返回负值-RT_EINVAL ?
我贴的代码是iotboard里的。
这个uart代码drv_uart.c也没有default
yqiu
yqiu 2018-12-23
moss 发表于 2018-12-23 14:57
原来这里应该返回正值 RT_EINVAL,什么时候需要返回负值-RT_EINVAL ?
我贴的代码是iotboard里的。
这个u ...


可以先使用 RT_EINVAL,系统中后续这部分需要将返回值的正负进行统一;
这儿的 drv_uart.c 也需要修下了。

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友