65 lines
2.3 KiB
TeX
65 lines
2.3 KiB
TeX
% ===================================================================
|
|
|
|
\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
|
|
|
|
|
|
% ===================================================================
|