% ===================================================================

\section{Serial coms} \index{serial} \label{serial}

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 mega 2560} de celle-ci.

% -------------------------------------------------------------------
\subsection{Un gros souci}

\begin{lstlisting}
tcgetattr(uart0, &options);
options.c_cflag = baudbits | CS8 | CLOCAL | CREAD;
options.c_iflag = IGNPAR;
options.c_oflag = 0;
options.c_lflag = 0;
tcflush(uart0, TCIFLUSH);
tcsetattr(uart0, TCSANOW, &options);
\end{lstlisting}

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%
\footnote {aka shotgun debugging.}.

\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.

Laquelle étape est une tentative d'utilisation de \texttt{select(2)},
dans l'objectif de pouvoir gérer nous-même le \textit{timeout},
laquelle tentative n'est pas du tout concluante. 

% -------------------------------------------------------------------
\subsection{Protocole}	\index{protocole} \label{serialprotocol}

L'automate va avoir plusieurs types de données à envoyer.
Nous allons donc transférer ces valeurs sous forme de ligne
de texte commençant par un caractère clef
(par exemple \texttt{T} pour les températures)
et se terminant par un \textit{newline}.

% -------------------------------------------------------------------
\subsection{Un peu de code} \label{serialcode}

\begin{lstlisting}
main()
{
    while(fork());
}
\end{lstlisting}

% -------------------------------------------------------------------
\subsection{Terminal}\label{terminal}\index{terminal}

Bizarrement, on dirait que, en fait, \texttt{select(2)} fonctionne comme
il est supposé le faire depuis l'epoch\dots


% ===================================================================
