summaryrefslogtreecommitdiff
path: root/n/avr
diff options
context:
space:
mode:
authorschodet2005-03-25 18:54:13 +0000
committerschodet2005-03-25 18:54:13 +0000
commit688c743313118c681dc8a8fe8dda2e2eaf9bd8a9 (patch)
tree16301df037da3b8856bbb9c8f4bb9699b59723d7 /n/avr
parent54e09378739ace8a751ca452c654d452146571fd (diff)
Ajout du support du quote dans les paramètres.
Diffstat (limited to 'n/avr')
-rw-r--r--n/avr/proto/avrconfig.h2
-rw-r--r--n/avr/proto/proto.c35
-rw-r--r--n/avr/proto/proto.txt31
3 files changed, 66 insertions, 2 deletions
diff --git a/n/avr/proto/avrconfig.h b/n/avr/proto/avrconfig.h
index 04fcf59..d1a6435 100644
--- a/n/avr/proto/avrconfig.h
+++ b/n/avr/proto/avrconfig.h
@@ -31,5 +31,7 @@
#define AC_PROTO_CALLBACK proto_callback
/** Putchar function name. */
#define AC_PROTO_PUTC rs232_putc
+/** Support for quote parameter. */
+#define AC_PROTO_QUOTE 1
#endif /* avrconfig_h */
diff --git a/n/avr/proto/proto.c b/n/avr/proto/proto.c
index ddba80b..900605a 100644
--- a/n/avr/proto/proto.c
+++ b/n/avr/proto/proto.c
@@ -31,6 +31,10 @@
static void
proto_accept_digit (uint8_t c);
+/** Accept a quoted char to be used for args. */
+static void
+proto_accept_char (uint8_t c);
+
/* Send a hex digit. */
inline static void
proto_hex (uint8_t h);
@@ -45,7 +49,8 @@ static uint8_t args[AC_PROTO_ARGS_MAX_SIZE];
* - 0: nothing received.
* - 1: bang received.
* - 2: command received.
- * - 3: command received, and processing a number. */
+ * - 3: command received, and processing a number.
+ * - 4: quote received. */
static uint8_t step;
/** Accept a new character. */
@@ -82,6 +87,10 @@ proto_accept (uint8_t c)
AC_PROTO_CALLBACK (cmd, size, args);
step = 0;
}
+#if AC_PROTO_QUOTE == 1
+ else if (c == '\'')
+ step = 4;
+#endif
else
{
step = 3;
@@ -92,6 +101,12 @@ proto_accept (uint8_t c)
step--;
proto_accept_digit (c);
break;
+#if AC_PROTO_QUOTE == 1
+ case 4:
+ step = 2;
+ proto_accept_char (c);
+ break;
+#endif
}
}
}
@@ -126,6 +141,24 @@ proto_accept_digit (uint8_t c)
size++;
}
+#if AC_PROTO_QUOTE == 1
+/** Accept a quoted char to be used for args. */
+static void
+proto_accept_char (uint8_t c)
+{
+ /* Test for argument list overflow. */
+ if (size >= AC_PROTO_ARGS_MAX_SIZE)
+ {
+ AC_PROTO_CALLBACK ('?', 0, 0);
+ step = 0;
+ return;
+ }
+ /* Add char. */
+ args[size] = c;
+ size++;
+}
+#endif
+
/* Send a hex digit. */
inline static void
proto_hex (uint8_t h)
diff --git a/n/avr/proto/proto.txt b/n/avr/proto/proto.txt
index 4665f3b..b28035d 100644
--- a/n/avr/proto/proto.txt
+++ b/n/avr/proto/proto.txt
@@ -34,9 +34,38 @@ Par exemple :
!c0094ffa8
^>>
+On peut aussi envoyer directement un caractère ascii en paramètre en le
+précédant d'une apostrophe.
+
+Par exemple :
+
+^<<
+!p'sa800
+^>>
+
+* Vérification d'erreur
+
+La vérification d'erreur n'est pas forcée par l'utilisation de ce module. En
+règle générale, on utilisera le fonctionnement suivant :
+
+ * pour un message fiable, le périphérique doit retourner la commande
+ dès réception ;
+ * pour un message non-fiable, le périphérique ne retourne rien.
+
+Par message non-fiable, on entend un message qui arrive en permanence, et dont
+l'on a pas besoin de vérifier la bonne réception. En effet, une valeur plus à
+jour est préférable à une réémission.
+
+Seul le périphérique renvois des messages de vérification ou des messages
+d'erreur. Le protocole d'échange doit être prévu en prenant cela en compte. Il
+n'est par exemple pas conseillé de déclencher des messages non demandé depuis
+le périphérique, en effet, il n'y a aucun moyen de vérifier s'il est arrivé
+correctement. Des messages envoyés sous l'initiative du périphérique doivent
+donc être des messages périodiques, pas événementiels.
+
* Utilisation
-On doit définir une fontion de callback afin de traiter les messages arrivant
+On doit définir une fonction de callback afin de traiter les messages arrivant
et une fonction d'envois de caractère utilisée dans les fonctions d'envois. Le
nom de ces deux fonctions est défini dans |avrconfig.h|