summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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;