Просмотр исходного кода

[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 <runcheng.lu@hpmicro.com>
Runcheng Lu 3 недель назад
Родитель
Сommit
ec9eaadf85
1 измененных файлов с 10 добавлено и 1 удалено
  1. 10 1
      components/drivers/serial/dev_serial_v2.c

+ 10 - 1
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;