Преглед изворни кода

vfs: implement fsync for UART VFS

Ivan Grokhotkov пре 7 година
родитељ
комит
aa692b3483
1 измењених фајлова са 11 додато и 0 уклоњено
  1. 11 0
      components/vfs/vfs_uart.c

+ 11 - 0
components/vfs/vfs_uart.c

@@ -26,6 +26,7 @@
 #include "driver/uart.h"
 #include "sdkconfig.h"
 #include "driver/uart_select.h"
+#include "rom/uart.h"
 
 // TODO: make the number of UARTs chip dependent
 #define UART_NUM 3
@@ -304,6 +305,15 @@ static int uart_access(const char *path, int amode)
     return ret;
 }
 
+static int uart_fsync(int fd)
+{
+    assert(fd >= 0 && fd < 3);
+    _lock_acquire_recursive(&s_uart_write_locks[fd]);
+    uart_tx_wait_idle((uint8_t) fd);
+    _lock_release_recursive(&s_uart_write_locks[fd]);
+    return 0;
+}
+
 static void select_notif_callback(uart_port_t uart_num, uart_select_notif_t uart_select_notif, BaseType_t *task_woken)
 {
     switch (uart_select_notif) {
@@ -883,6 +893,7 @@ void esp_vfs_dev_uart_register()
         .close = &uart_close,
         .read = &uart_read,
         .fcntl = &uart_fcntl,
+        .fsync = &uart_fsync,
         .access = &uart_access,
         .start_select = &uart_start_select,
         .end_select = &uart_end_select,