From: Ivan Grokhotkov Date: Thu, 25 Oct 2018 04:54:53 +0000 (+0800) Subject: vfs: implement fsync for UART VFS X-Git-Tag: v3.3-beta1~96^2~4 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=aa692b34834f0b12be421ff02ded24debbbef7ac;p=esp-idf vfs: implement fsync for UART VFS --- 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,