From 7f1157e0de32f16e749267a676f6dd767fd454a9 Mon Sep 17 00:00:00 2001 From: Tangyuxin <462747508@qq.com> Date: Tue, 26 Apr 2022 13:13:51 +0800 Subject: [PATCH] [drivers][serial] ioctl add F_SETFL cmd (#5876) --- components/drivers/serial/serial.c | 7 +++++++ components/drivers/serial/serial_v2.c | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/components/drivers/serial/serial.c b/components/drivers/serial/serial.c index c749897a08..d39acb298f 100644 --- a/components/drivers/serial/serial.c +++ b/components/drivers/serial/serial.c @@ -115,6 +115,8 @@ static int serial_fops_close(struct dfs_fd *fd) static int serial_fops_ioctl(struct dfs_fd *fd, int cmd, void *args) { rt_device_t device; + int flags = (int)(rt_base_t)args; + int mask = O_NONBLOCK | O_APPEND; device = (rt_device_t)fd->data; switch (cmd) @@ -123,6 +125,11 @@ static int serial_fops_ioctl(struct dfs_fd *fd, int cmd, void *args) break; case FIONWRITE: break; + case F_SETFL: + flags &= mask; + fd->flags &= ~mask; + fd->flags |= flags; + break; } return rt_device_control(device, cmd, args); diff --git a/components/drivers/serial/serial_v2.c b/components/drivers/serial/serial_v2.c index 17a37a9a3e..5925a9eb6c 100644 --- a/components/drivers/serial/serial_v2.c +++ b/components/drivers/serial/serial_v2.c @@ -94,6 +94,8 @@ static int serial_fops_close(struct dfs_fd *fd) static int serial_fops_ioctl(struct dfs_fd *fd, int cmd, void *args) { rt_device_t device; + int flags = (int)(rt_base_t)args; + int mask = O_NONBLOCK | O_APPEND; device = (rt_device_t)fd->data; switch (cmd) @@ -102,6 +104,11 @@ static int serial_fops_ioctl(struct dfs_fd *fd, int cmd, void *args) break; case FIONWRITE: break; + case F_SETFL: + flags &= mask; + fd->flags &= ~mask; + fd->flags |= flags; + break; } return rt_device_control(device, cmd, args); -- GitLab