Add the generic kfile resync.
authorasterix <asterix@38d2e660-2303-0410-9eaa-f027e97ec537>
Thu, 4 Dec 2008 17:55:11 +0000 (17:55 +0000)
committerasterix <asterix@38d2e660-2303-0410-9eaa-f027e97ec537>
Thu, 4 Dec 2008 17:55:11 +0000 (17:55 +0000)
git-svn-id: https://src.develer.com/svnoss/bertos/trunk@1974 38d2e660-2303-0410-9eaa-f027e97ec537

bertos/kern/kfile.c
bertos/kern/kfile.h

index 5a44019d6914148c4e0a888419aea6b6905e9947..81cd9d0a422d941717250c0e84cdb3c71d166ce5 100644 (file)
@@ -44,6 +44,7 @@
 #include <cfg/debug.h>
 #include <cfg/log.h>
 
+#include <drv/timer.h>
 #include <mware/formatwr.h>
 
 #include <string.h>
@@ -228,3 +229,30 @@ int kfile_genericClose(UNUSED_ARG(struct KFile *, fd))
 };
 
 
+/**
+ * Discard input to resynchronize with remote end.
+ *
+ * Discard incoming data until the kfile_getc stops receiving
+ * characters for at least \a delay milliseconds.
+ *
+ * \note If the timeout occur, we reset the error before to
+ * quit.
+ */
+void kfile_resync(KFile *fd, mtime_t delay)
+{
+       ticks_t start_time = timer_clock();
+       for(;;)
+       {
+               if(kfile_getc(fd) != EOF)
+                       start_time = timer_clock();
+
+               if ((timer_clock() - start_time) > ms_to_ticks(delay))
+               {
+                       kfile_clearerr(fd);
+                       break;
+               }
+
+       }
+}
+
+
index b959b9596153d256de1712172c2011d54bf7594f..a42defddd8a4447d9b82f97ba7e7a0fd577726bc 100644 (file)
@@ -216,6 +216,7 @@ int kfile_printf(struct KFile *fd, const char *format, ...);
 int kfile_print(struct KFile *fd, const char *s);
 int kfile_gets(struct KFile *fd, char *buf, int size);
 int kfile_gets_echo(struct KFile *fd, char *buf, int size, bool echo);
+void kfile_resync(KFile *fd, mtime_t delay);
 
 /**
  * Interface functions for KFile access.