From 92cad2a3a4c4f159fc437681e581085b58dbb8a5 Mon Sep 17 00:00:00 2001 From: "@lin12345678" Date: Wed, 18 Aug 2021 11:08:28 +0800 Subject: [PATCH 1/3] =?UTF-8?q?console=E6=B7=BB=E5=8A=A0contorl=E5=92=8Cio?= =?UTF-8?q?ctl?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/drivers/serial/serial.c | 2 ++ components/lwp/lwp_console.c | 33 +++++++++++++++++++++++++++--- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/components/drivers/serial/serial.c b/components/drivers/serial/serial.c index 276d7219d3..e6d13bde77 100644 --- a/components/drivers/serial/serial.c +++ b/components/drivers/serial/serial.c @@ -1130,6 +1130,8 @@ static rt_err_t rt_serial_control(struct rt_device *dev, break; case TCXONC: break; + case TIOCGWINSZ: + break; #endif #ifdef RT_USING_POSIX case FIONREAD: diff --git a/components/lwp/lwp_console.c b/components/lwp/lwp_console.c index f1ffdb3609..5b91700a8d 100644 --- a/components/lwp/lwp_console.c +++ b/components/lwp/lwp_console.c @@ -293,6 +293,16 @@ static int console_fops_write(struct dfs_fd *fd, const void *buf, size_t count) return size; } +static int console_fops_ioctl(struct dfs_fd *fd, int cmd, void *args) +{ + int size = 0; + struct rt_device *device = RT_NULL; + + device = (struct rt_device *)fd->fnode->data; + RT_ASSERT(device != RT_NULL); + size = rt_device_control(device, cmd, args); + return size; +} static int console_fops_poll(struct dfs_fd *fd, struct rt_pollreq *req) { rt_base_t level = 0; @@ -332,7 +342,7 @@ const static struct dfs_file_ops _console_fops = { console_fops_open, console_fops_close, - RT_NULL, + console_fops_ioctl, console_fops_read, console_fops_write, RT_NULL, /* flush */ @@ -451,6 +461,23 @@ static rt_size_t rt_console_write(struct rt_device *dev, return len; } + +static rt_err_t rt_console_control(rt_device_t dev, int cmd, void *args) +{ + rt_base_t level = 0; + rt_size_t len = 0; + struct rt_console_device *console = RT_NULL; + + console = (struct rt_console_device *)dev; + RT_ASSERT(console != RT_NULL); + RT_ASSERT(console->init_flag == CONSOLE_INIT_FLAG_INITED); + + level = rt_hw_interrupt_disable(); + len = rt_device_control((struct rt_device *)console->iodev, cmd, args); + rt_hw_interrupt_enable(level); + + return len; +} #ifdef RT_USING_DEVICE_OPS const static struct rt_device_ops console_ops = @@ -460,7 +487,7 @@ const static struct rt_device_ops console_ops = rt_console_close, rt_console_read, rt_console_write, - RT_NULL, + rt_console_control, }; #endif @@ -490,7 +517,7 @@ rt_err_t rt_console_register(const char *name, struct rt_device *iodev) device->close = rt_console_close; device->read = rt_console_read; device->write = rt_console_write; - device->control = RT_NULL; + device->control = rt_console_control; #endif /* register a character device */ -- Gitee From ead9ac0130abc07a00dcff94be57b34e1d303367 Mon Sep 17 00:00:00 2001 From: "@lin12345678" Date: Wed, 18 Aug 2021 11:11:17 +0800 Subject: [PATCH 2/3] format code --- components/drivers/serial/serial.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/components/drivers/serial/serial.c b/components/drivers/serial/serial.c index e6d13bde77..f85ab3e31d 100644 --- a/components/drivers/serial/serial.c +++ b/components/drivers/serial/serial.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006-2018, RT-Thread Development Team + * Copyright (c) 2006-2021, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * @@ -469,7 +469,7 @@ static void rt_dma_recv_update_put_index(struct rt_serial_device *serial, rt_siz rx_fifo->is_full = RT_TRUE; } } - + if(rx_fifo->is_full == RT_TRUE) { _serial_check_buffer_size(); @@ -626,7 +626,7 @@ static rt_err_t rt_serial_open(struct rt_device *dev, rt_uint16_t oflag) /* initialize the Rx/Tx structure according to open flag */ if (serial->serial_rx == RT_NULL) - { + { if (oflag & RT_DEVICE_FLAG_INT_RX) { struct rt_serial_rx_fifo* rx_fifo; @@ -645,7 +645,7 @@ static rt_err_t rt_serial_open(struct rt_device *dev, rt_uint16_t oflag) /* configure low level device */ serial->ops->control(serial, RT_DEVICE_CTRL_SET_INT, (void *)RT_DEVICE_FLAG_INT_RX); } -#ifdef RT_SERIAL_USING_DMA +#ifdef RT_SERIAL_USING_DMA else if (oflag & RT_DEVICE_FLAG_DMA_RX) { if (serial->config.bufsz == 0) { @@ -686,7 +686,7 @@ static rt_err_t rt_serial_open(struct rt_device *dev, rt_uint16_t oflag) #ifdef RT_SERIAL_USING_DMA else if (oflag & RT_DEVICE_FLAG_DMA_RX) dev->open_flag |= RT_DEVICE_FLAG_DMA_RX; -#endif /* RT_SERIAL_USING_DMA */ +#endif /* RT_SERIAL_USING_DMA */ } if (serial->serial_tx == RT_NULL) @@ -734,7 +734,7 @@ static rt_err_t rt_serial_open(struct rt_device *dev, rt_uint16_t oflag) #ifdef RT_SERIAL_USING_DMA else if (oflag & RT_DEVICE_FLAG_DMA_TX) dev->open_flag |= RT_DEVICE_FLAG_DMA_TX; -#endif /* RT_SERIAL_USING_DMA */ +#endif /* RT_SERIAL_USING_DMA */ } /* set stream flag */ @@ -792,7 +792,7 @@ static rt_err_t rt_serial_close(struct rt_device *dev) serial->ops->control(serial, RT_DEVICE_CTRL_CLR_INT, (void *) RT_DEVICE_FLAG_DMA_RX); } #endif /* RT_SERIAL_USING_DMA */ - + if (dev->open_flag & RT_DEVICE_FLAG_INT_TX) { struct rt_serial_tx_fifo* tx_fifo; @@ -853,7 +853,7 @@ static rt_size_t rt_serial_read(struct rt_device *dev, { return _serial_dma_rx(serial, (rt_uint8_t *)buffer, size); } -#endif /* RT_SERIAL_USING_DMA */ +#endif /* RT_SERIAL_USING_DMA */ return _serial_poll_rx(serial, (rt_uint8_t *)buffer, size); } @@ -874,7 +874,7 @@ static rt_size_t rt_serial_write(struct rt_device *dev, { return _serial_int_tx(serial, (const rt_uint8_t *)buffer, size); } -#ifdef RT_SERIAL_USING_DMA +#ifdef RT_SERIAL_USING_DMA else if (dev->open_flag & RT_DEVICE_FLAG_DMA_TX) { return _serial_dma_tx(serial, (const rt_uint8_t *)buffer, size); @@ -1130,8 +1130,8 @@ static rt_err_t rt_serial_control(struct rt_device *dev, break; case TCXONC: break; - case TIOCGWINSZ: - break; + case TIOCGWINSZ: + break; #endif #ifdef RT_USING_POSIX case FIONREAD: @@ -1157,7 +1157,7 @@ static rt_err_t rt_serial_control(struct rt_device *dev, } #ifdef RT_USING_DEVICE_OPS -const static struct rt_device_ops serial_ops = +const static struct rt_device_ops serial_ops = { rt_serial_init, rt_serial_open, -- Gitee From 28fb06bda804f0c0e1b9a81d87a311f2a483cc21 Mon Sep 17 00:00:00 2001 From: "@lin12345678" Date: Wed, 18 Aug 2021 14:04:39 +0800 Subject: [PATCH 3/3] format code --- components/drivers/serial/serial.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/components/drivers/serial/serial.c b/components/drivers/serial/serial.c index f85ab3e31d..f0050278ed 100644 --- a/components/drivers/serial/serial.c +++ b/components/drivers/serial/serial.c @@ -682,11 +682,15 @@ static rt_err_t rt_serial_open(struct rt_device *dev, rt_uint16_t oflag) else { if (oflag & RT_DEVICE_FLAG_INT_RX) + { dev->open_flag |= RT_DEVICE_FLAG_INT_RX; + } #ifdef RT_SERIAL_USING_DMA else if (oflag & RT_DEVICE_FLAG_DMA_RX) + { dev->open_flag |= RT_DEVICE_FLAG_DMA_RX; -#endif /* RT_SERIAL_USING_DMA */ + } +#endif /* RT_SERIAL_USING_DMA */ } if (serial->serial_tx == RT_NULL) @@ -730,10 +734,14 @@ static rt_err_t rt_serial_open(struct rt_device *dev, rt_uint16_t oflag) else { if (oflag & RT_DEVICE_FLAG_INT_TX) + { dev->open_flag |= RT_DEVICE_FLAG_INT_TX; + } #ifdef RT_SERIAL_USING_DMA else if (oflag & RT_DEVICE_FLAG_DMA_TX) + { dev->open_flag |= RT_DEVICE_FLAG_DMA_TX; + } #endif /* RT_SERIAL_USING_DMA */ } -- Gitee