From 99d75ed6142cd3c05cf440ec61aba55ed2f0ac71 Mon Sep 17 00:00:00 2001 From: schodet Date: Thu, 1 Jan 2004 17:56:42 +0000 Subject: Ajout de la vérification de la présence du '!'. --- 2004/n/asserv/src/serial.c | 13 +++++++++---- 2004/n/asserv/src/serial.h | 16 ++++++++-------- 2 files changed, 17 insertions(+), 12 deletions(-) (limited to '2004/n') 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; diff --git a/2004/n/asserv/src/serial.h b/2004/n/asserv/src/serial.h index 0dfbf9d..223d5bf 100644 --- a/2004/n/asserv/src/serial.h +++ b/2004/n/asserv/src/serial.h @@ -33,18 +33,18 @@ int serial_recv_buf_n; /* Macros de récupération de la commande recu. */ #define HEXBIN(a) (((a) >= '0' && (a) <= '9') ? (a) - '0' : (a) - ('a' - 10)) #define serial_recv_com() \ - (serial_recv_buf[0]) + (serial_recv_buf[1]) #define serial_recv_int(v) \ - ((v) = HEXBIN (serial_recv_buf[1]) << 4 | HEXBIN (serial_recv_buf[2])) + ((v) = HEXBIN (serial_recv_buf[2]) << 4 | HEXBIN (serial_recv_buf[3])) #define serial_recv_int1(v) \ - ((v) = HEXBIN (serial_recv_buf[3]) << 4 | HEXBIN (serial_recv_buf[4])) + ((v) = HEXBIN (serial_recv_buf[4]) << 4 | HEXBIN (serial_recv_buf[5])) #define serial_recv_long(v) \ - ((v) = make16 (HEXBIN (serial_recv_buf[0]) << 4 | HEXBIN \ - (serial_recv_buf[1]), \ - HEXBIN (serial_recv_buf[2]) << 4 | HEXBIN \ - (serial_recv_buf[3]))) + ((v) = make16 (HEXBIN (serial_recv_buf[2]) << 4 | HEXBIN \ + (serial_recv_buf[3]), \ + HEXBIN (serial_recv_buf[4]) << 4 | HEXBIN \ + (serial_recv_buf[5]))) #define serial_recv_bool(v) \ - ((v) = serial_recv_buf[1] == '1') + ((v) = serial_recv_buf[2] == '1') /* +AutoDec */ -- cgit v1.2.3