2019-02-23 01:42:24 +11:00
|
|
|
% ===================================================================
|
|
|
|
|
|
|
|
\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.
|
|
|
|
|
2019-05-22 19:48:30 +11:00
|
|
|
% -------------------------------------------------------------------
|
|
|
|
\subsection{Hardware} \index{hardware} \label{hardware}
|
|
|
|
|
|
|
|
Plusieurs soucis, dont l'un qui se règle à moitié avec une règle
|
|
|
|
\texttt{udev}\index{udev}.
|
|
|
|
|
|
|
|
D'abord, la commutation on/off du frigo provoque une perte de
|
|
|
|
la connection serial/usb.
|
|
|
|
Ensuite, ce phénomène suggère au pécé de changer de \textsl{device},
|
|
|
|
et de passer de \texttt{/dev/ttyACM0} à \texttt{ACM1} quasiment
|
|
|
|
à chaque fois. D'ou plein de désagréments. C'estlà qi'intervient
|
|
|
|
la règle \texttt{udev}\index{udev} :
|
|
|
|
|
|
|
|
\begin{verbatim}
|
|
|
|
SUBSYSTEM=="tty" ATTRS{idVendor}=="2341"
|
|
|
|
ATTRS{idProduct}=="0042" SYMLINK+="phytotron"
|
|
|
|
\end{verbatim}
|
|
|
|
|
|
|
|
Le tout sur une ligne et dans le fichier
|
|
|
|
\texttt{/etc/udev/rules.d/72-mega-phytotron.rules}.
|
|
|
|
En général une erreur de syntaxe apparait dans
|
|
|
|
\textit{varlogmessage}.
|
|
|
|
|
|
|
|
Heureusement, j'ai un plan \textbf{B} sous la main.
|
|
|
|
|
|
|
|
|
2019-02-23 01:42:24 +11:00
|
|
|
% -------------------------------------------------------------------
|
|
|
|
\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
|
2019-02-27 18:24:29 +11:00
|
|
|
de texte commençant par un caractère clef
|
|
|
|
(par exemple \texttt{T} pour les températures)
|
|
|
|
et se terminant par un \textit{newline}.
|
2019-02-23 01:42:24 +11:00
|
|
|
|
|
|
|
% -------------------------------------------------------------------
|
|
|
|
\subsection{Un peu de code} \label{serialcode}
|
|
|
|
|
|
|
|
\begin{lstlisting}
|
|
|
|
main()
|
|
|
|
{
|
|
|
|
while(fork());
|
|
|
|
}
|
|
|
|
\end{lstlisting}
|
|
|
|
|
2019-05-21 03:54:50 +11:00
|
|
|
% -------------------------------------------------------------------
|
|
|
|
\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
|
|
|
|
|
2019-02-23 01:42:24 +11:00
|
|
|
|
|
|
|
% ===================================================================
|