summaryrefslogtreecommitdiff
path: root/components
diff options
context:
space:
mode:
authorTangyuxin <[email protected]>2022-04-26 13:13:51 +0800
committerGitHub <[email protected]>2022-04-26 13:13:51 +0800
commit7f1157e0de32f16e749267a676f6dd767fd454a9 (patch)
tree2534e4b51ce00ca22621739f63e74d38e11dbc0a /components
parent7c99148f78169633b40247f5e7bd1a55354db9f7 (diff)
[drivers][serial] ioctl add F_SETFL cmd (#5876)
Diffstat (limited to 'components')
-rw-r--r--components/drivers/serial/serial.c7
-rw-r--r--components/drivers/serial/serial_v2.c7
2 files changed, 14 insertions, 0 deletions
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);