65 lines
2.7 KiB
TeX
65 lines
2.7 KiB
TeX
\subsection{Serial Wait}
|
|
This module is a very SINQ specific function. At SINQ, serial devices are
|
|
controlled through a serial port server program running on a Macintosh PC.
|
|
This program blocks, if the serial device is very slow. This blocks the
|
|
Macintosh as well as the SICS server. This module solves this problem. It
|
|
does so using the following logic:
|
|
|
|
The command to execute is sent with a zero timeout.
|
|
|
|
A special sics task, the SerialPoller, is started to monitor the device.
|
|
|
|
The routine issuing the command waits for the SerialPoller to finish. If
|
|
somebody issues new commands while this is going on, an error must be
|
|
returned.
|
|
|
|
The SerialPoller sends commands of zero length and with a zero timeout to
|
|
the Macintosh. Usually the reply will be a ?TMO because no data is
|
|
available. If data becomes available, two situations have to be handled:
|
|
In the first case all data was read including the terminator. Then a reply
|
|
without a ?TMO will be returned. If there is a slight delay in getting all
|
|
the data, a ?TMO followed by data bytes is returned. In that case the data
|
|
has to be appended to the data buffer. Then a null command with a sensible
|
|
timeout is sent. If a new timeout comes in on that onew, there is an error.
|
|
Else the data is appended to the data already read and we are finished.
|
|
|
|
It has been choosen to implement this logic separatly from the serialsinq
|
|
stuff as it interacts very much with rest of SICS.
|
|
|
|
Just one function is exported:
|
|
\begin{flushleft} \small
|
|
\begin{minipage}{\linewidth} \label{scrap1}
|
|
\verb@"serialwait.h"@ {\footnotesize ? }$\equiv$
|
|
\vspace{-1ex}
|
|
\begin{list}{}{} \item
|
|
\mbox{}\verb@@\\
|
|
\mbox{}\verb@/*--------------------------------------------------------------------------@\\
|
|
\mbox{}\verb@ S E R I A L W A I T@\\
|
|
\mbox{}\verb@@\\
|
|
\mbox{}\verb@ Executes a command on a serial port and waits for replies coming@\\
|
|
\mbox{}\verb@ along by polling with null commands.@\\
|
|
\mbox{}\verb@@\\
|
|
\mbox{}\verb@ copyright: see copyright.h@\\
|
|
\mbox{}\verb@@\\
|
|
\mbox{}\verb@ Mark Koennecke, June 1998@\\
|
|
\mbox{}\verb@---------------------------------------------------------------------------*/@\\
|
|
\mbox{}\verb@#ifndef SERIALSICSWAIT@\\
|
|
\mbox{}\verb@#define SERIALSICSWAIT@\\
|
|
\mbox{}\verb@#include "sics.h"@\\
|
|
\mbox{}\verb@#include "psi/hardsup/serialsinq.h"@\\
|
|
\mbox{}\verb@ int SerialSicsExecute(void **pData, char *pCommand, char *pReply, @\\
|
|
\mbox{}\verb@ int iBufLen);@\\
|
|
\mbox{}\verb@@\\
|
|
\mbox{}\verb@#endif@\\
|
|
\mbox{}\verb@@$\diamond$
|
|
\end{list}
|
|
\vspace{-2ex}
|
|
\end{minipage}\\[4ex]
|
|
\end{flushleft}
|
|
Parameters and return values are the same as defined for the
|
|
SerialWriteRead function.
|
|
|
|
I am not sure if this facility works as expected. I think there was a
|
|
problem with crosstalk on the serial line.
|
|
|