+void
+tty_parse_reset (Context * c)
+{
+ TTY_Parser *p = c->tp;
+ memset (p->bitfreq, 0, sizeof (p->bitfreq));
+ p->biterrs = 0;
+ p->guessed_baud = 0;
+}
+
+void
+analyse (Context * c)
+{
+ TTY_Parser *p = c->tp;
+ struct timeval now, dif;
+ int i;
+
+ if (!p->biterrs)
+ {
+ p->guessed_baud = 0;
+ return;
+ }
+
+ gettimeofday (&now, NULL);
+
+ timersub (&now, &p->lasterr, &dif);
+
+ if (dif.tv_sec > 10)
+ {
+ tty_parse_reset (c);
+ return;
+ }
+
+#define TTY_BITFREQ_LEN 10
+
+ for (i = 0; i < TTY_BITFREQ_LEN && (!p->bitfreq[i]); ++i);
+
+ if (!i)
+ {
+ /*Closest bit edge is one bit, so the baud rate is too low */
+ p->guessed_baud = -1;
+
+ }
+
+ p->guessed_baud = i;
+
+}
+
+TTY_Parser *
+tty_parser_new (void)
+{
+ TTY_Parser *p;
+
+ p = (TTY_Parser *) malloc (sizeof (TTY_Parser));
+
+ memset (p, 0, sizeof (TTY_Parser));
+
+ return p;
+}
+