From 86eea673395f3aea87a2e533b999637e8eea2164 Mon Sep 17 00:00:00 2001 From: Runcheng Lu Date: Tue, 28 Apr 2026 15:36:40 +0800 Subject: [PATCH] [fix] components: serial_v2: preserve RT_DEVICE_FLAG_STREAM when reopening serial device - The serial_fops_open function closes and reopens the serial device,but the RT_DEVICE_FLAG_STREAM flag was not preserved across the close/open cycle. This change saves the STREAM flag before close and restores it during reopen to ensure consistent behavior. Signed-off-by: Runcheng Lu --- components/drivers/serial/dev_serial_v2.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/components/drivers/serial/dev_serial_v2.c b/components/drivers/serial/dev_serial_v2.c index 4f21494634c..02d62b7619a 100644 --- a/components/drivers/serial/dev_serial_v2.c +++ b/components/drivers/serial/dev_serial_v2.c @@ -91,8 +91,17 @@ static int serial_fops_open(struct dfs_file *fd) if ((fd->flags & O_ACCMODE) != O_WRONLY) rt_device_set_rx_indicate(device, serial_fops_rx_ind); + flags |= RT_SERIAL_RX_BLOCKING | RT_SERIAL_TX_BLOCKING; + + /* preserve RT_DEVICE_FLAG_STREAM if it was set before close */ + if (device->open_flag & RT_DEVICE_FLAG_STREAM) + { + flags |= RT_DEVICE_FLAG_STREAM; + } + rt_device_close(device); - ret = rt_device_open(device, flags | RT_SERIAL_RX_BLOCKING | RT_SERIAL_TX_BLOCKING); + ret = rt_device_open(device, flags); + if (ret == RT_EOK) { serial = (struct rt_serial_device *)device;