summaryrefslogtreecommitdiff
path: root/2004/n/asserv/src/serial.c
diff options
context:
space:
mode:
Diffstat (limited to '2004/n/asserv/src/serial.c')
-rw-r--r--2004/n/asserv/src/serial.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/2004/n/asserv/src/serial.c b/2004/n/asserv/src/serial.c
index ef18c02..16374bf 100644
--- a/2004/n/asserv/src/serial.c
+++ b/2004/n/asserv/src/serial.c
@@ -78,10 +78,12 @@ serial_recv ()
if (serial_recv_buf_n)
serial_recv_full = 1;
}
- else if (c == '!' || serial_recv_buf_n >= SERIAL_RECV_BUF_LEN)
- serial_recv_buf_n = 0;
else
+ {
+ if (c == '!' || serial_recv_buf_n >= SERIAL_RECV_BUF_LEN)
+ serial_recv_buf_n = 0;
serial_recv_buf[serial_recv_buf_n++] = c;
+ }
}
/* Envois des caractères. */
@@ -139,8 +141,9 @@ serial_parse (void)
/* Si le tampon n'est pas plein, bye, bye. */
if (!serial_recv_full || serial_recv_working) return;
serial_recv_working = 1;
- /* Vérifie la taille du tampon. */
- if (serial_recv_buf_n)
+ /* Vérifie la présence de caractère de début de séquence et la taille du
+ * tampon. */
+ if (serial_recv_buf_n > 1 && serial_recv_buf[0] == '!')
{
/* Est-ce une commande moteur. */
if (!motor_parse ())
@@ -156,6 +159,8 @@ serial_parse (void)
}
}
}
+ else
+ serial_send_error ('?');
serial_recv_buf_n = 0;
serial_recv_working = 0;
serial_recv_full = 0;