Add the generic kfile resync.
[bertos.git] / bertos / kern / kfile.c
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;
+               }
+
+       }
+}
+
+