summaryrefslogtreecommitdiff
path: root/components/drivers
diff options
context:
space:
mode:
authorRuncheng Lu <[email protected]>2026-04-28 15:36:40 +0800
committerRbb666 <[email protected]>2026-05-20 10:05:02 +0800
commitec9eaadf85dfa60e6327de37bde8c4f04bfbde5d (patch)
tree0156e059f29a2ec1bf9d86e24c2c253460d18f97 /components/drivers
parentad205d2bf36f009a723288638f22fd162e6f327f (diff)
[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 <[email protected]>
Diffstat (limited to 'components/drivers')
-rw-r--r--components/drivers/serial/dev_serial_v2.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/components/drivers/serial/dev_serial_v2.c b/components/drivers/serial/dev_serial_v2.c
index 78d590857c..d8cc2e0cb5 100644
--- a/components/drivers/serial/dev_serial_v2.c
+++ b/components/drivers/serial/dev_serial_v2.c
@@ -92,8 +92,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;