summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2017-08-06 12:04:05 +0800
committerGitHub <[email protected]>2017-08-06 12:04:05 +0800
commit5ea03f5e121903279636a40cfc1fccf75cc033f3 (patch)
tree48455f6352cd450905b072a954a41bef20b17163
parent25d415a28c52533415f5cfaa0b0dfd4ba57f6b2d (diff)
parent3007b34ad382f8785d39115bf3873afedec267ac (diff)
Merge pull request #787 from emlslxl/master
[log trace] add log_file flush function
-rw-r--r--components/utilities/logtrace/log_file.c28
1 files changed, 24 insertions, 4 deletions
diff --git a/components/utilities/logtrace/log_file.c b/components/utilities/logtrace/log_file.c
index 2f4a28b63c..7a77008798 100644
--- a/components/utilities/logtrace/log_file.c
+++ b/components/utilities/logtrace/log_file.c
@@ -93,6 +93,25 @@ static rt_size_t fdevice_write(rt_device_t dev, rt_off_t pos, const void *buffer
return write(fdev->fd, buffer, size);
}
+static rt_err_t fdevice_control(rt_device_t dev, rt_uint8_t cmd, void *arg)
+{
+ struct file_device *fdev = (struct file_device *)dev;
+
+ if (fdev->fd < 0)
+ return 0;
+
+ switch (cmd)
+ {
+ case LOG_TRACE_CTRL_FLUSH:
+ if (fsync(fdev->fd) != 0)
+ return RT_ERROR;
+ break;
+ default:
+ break;
+ }
+ return RT_EOK;
+}
+
void log_trace_file_init(const char *filename)
{
rt_device_t device;
@@ -104,10 +123,11 @@ void log_trace_file_init(const char *filename)
_file_device.parent.type = RT_Device_Class_Char;
- _file_device.parent.init = RT_NULL;
- _file_device.parent.open = fdevice_open;
- _file_device.parent.close = fdevice_close;
- _file_device.parent.write = fdevice_write;
+ _file_device.parent.init = RT_NULL;
+ _file_device.parent.open = fdevice_open;
+ _file_device.parent.close = fdevice_close;
+ _file_device.parent.write = fdevice_write;
+ _file_device.parent.control = fdevice_control;
rt_device_register(&_file_device.parent, "logfile", O_RDWR);
}