From aa692b34834f0b12be421ff02ded24debbbef7ac Mon Sep 17 00:00:00 2001 From: Ivan Grokhotkov Date: Thu, 25 Oct 2018 12:54:53 +0800 Subject: [PATCH] vfs: implement fsync for UART VFS --- components/vfs/vfs_uart.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/components/vfs/vfs_uart.c b/components/vfs/vfs_uart.c index 7a1fb59143..594002d78f 100644 --- a/components/vfs/vfs_uart.c +++ b/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,