From 011a1ecd6a4f0d90dc69edd11f64fe3c9b7e7083 Mon Sep 17 00:00:00 2001 From: tth Date: Sat, 29 Dec 2018 17:45:31 +0100 Subject: [PATCH] big hup to romse the cooker --- README.md | 4 +++- doc/dd2-monitoring.tex | 12 +++++++++++- serial/funcs.c | 10 +++++++++- serial/t.c | 2 +- 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 9404e2c..6bf5abb 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,9 @@ soir au DD2, à Mixart-Myrys. # WTF status -Le `read` bloquant ne bloque pas. Ça craint grave. +Le `read` bloquant ne bloque pas. Ça craint grave. La recherche +du workaround avance. + diff --git a/doc/dd2-monitoring.tex b/doc/dd2-monitoring.tex index a1cf56e..13b0a3d 100644 --- a/doc/dd2-monitoring.tex +++ b/doc/dd2-monitoring.tex @@ -91,6 +91,10 @@ phytotron pose un problème : d'où viennent les premières mesures ? C'est pour ça qu'il y a déja un générateur de \textit{fake-values} qui ne demande qu'à grandir. +Nous avons également un générateur de nombres divers et incohérents +qui envoie des quadruplets d'entiers 10 bits précédés d'un caractere +de bonne efficacité. + \subsection{Exemples} @@ -119,7 +123,7 @@ Au programme : écriture d'un injecteur en Perl\index{Perl}. Il va y avoir deux liaisons série entre l'automate et le monitoring. La première, que nous allons juste entrevoir, passera par le port USB de la carte Arduino. La seconde passera par un port série -auxiliaire\footnote{Il y en a 4 sur le 2560} de celle-ci. +auxiliaire\footnote{Il y en a 4 sur le mega 2560} de celle-ci. \begin{lstlisting} tcgetattr(uart0, &options); @@ -135,6 +139,12 @@ Et en fait, le \texttt{read} sur le \textsl{fd} du serial device n'est pas bloquant, \texttt{perror} annonce \emph{success}, mais rien ne marche. L'année 2019 va commencer sur du vaudou programming. +\textit{29 décembre 2018} : le petit grain de magie\index{magie} +est très simple à mettre en oeuvre, mais +très difficle à spotter dans le gazillion d'options. Il semblerait +que mettre \texttt{options.c\_cc[VMIN]} à 1 permet d'avancer vers +l'étape suivante. + % ------------------------------------------------------------------- \section{Détournements} diff --git a/serial/funcs.c b/serial/funcs.c index 52eb1b3..090bf76 100644 --- a/serial/funcs.c +++ b/serial/funcs.c @@ -13,7 +13,15 @@ int vrd[4]; value=0; -foo = sscanf(data+1, "%d %d %d %d", vrd, vrd+1, vrd+2, vrd+3); +if ( 'X' != *line ) { + if (verbosity) { + fprintf(stderr, "%s line[0] 0x%x bad\n", + __func__, *line); + } + return -777; + } + +foo = sscanf(line+1, "%d %d %d %d", vrd, vrd+1, vrd+2, vrd+3); fprintf(stderr, "sscanf -> %d\n", foo); if (4 != foo) { return -666; diff --git a/serial/t.c b/serial/t.c index 84d5d05..13efc2d 100644 --- a/serial/t.c +++ b/serial/t.c @@ -37,7 +37,7 @@ for (count=0; count<10000; count++) { foo = getline_to(serial_in, ligne, 100, 0); fprintf(stderr, "getline #%d -> %d\n", count, foo); fprintf(stderr, "%s\n", ligne); - foo = parseXvalue(ligne); + foo = parseXvalue(ligne, 'X'); fprintf(stderr, "parse -> %d\n", foo); if (foo>= 0) { printf("%d %d\n", count, foo);