summaryrefslogtreecommitdiff
path: root/2004/n/asserv/src
diff options
context:
space:
mode:
authorschodet2004-01-01 17:56:42 +0000
committerschodet2004-01-01 17:56:42 +0000
commit99d75ed6142cd3c05cf440ec61aba55ed2f0ac71 (patch)
treee9a1fb63abb55c8b49ab8c6e98f9865f198110c9 /2004/n/asserv/src
parentf5dc1b604b0fa17f0be6c5368e7841e841ef9cea (diff)
Ajout de la vérification de la présence du '!'.
Diffstat (limited to '2004/n/asserv/src')
-rw-r--r--2004/n/asserv/src/serial.c13
-rw-r--r--2004/n/asserv/src/serial.h16
2 files changed, 17 insertions, 12 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;
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 */