Initial revision
This commit is contained in:
56
serialwait.w
Normal file
56
serialwait.w
Normal file
@ -0,0 +1,56 @@
|
||||
\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:
|
||||
@o serialwait.h @{
|
||||
/*--------------------------------------------------------------------------
|
||||
S E R I A L W A I T
|
||||
|
||||
Executes a command on a serial port and waits for replies coming
|
||||
along by polling with null commands.
|
||||
|
||||
copyright: see copyright.h
|
||||
|
||||
Mark Koennecke, June 1998
|
||||
---------------------------------------------------------------------------*/
|
||||
#ifndef SERIALSICSWAIT
|
||||
#define SERIALSICSWAIT
|
||||
#include "sics.h"
|
||||
#include "hardsup/serialsinq.h"
|
||||
int SerialSicsExecute(void **pData, char *pCommand, char *pReply,
|
||||
int iBufLen);
|
||||
|
||||
#endif
|
||||
@}
|
||||
|
||||
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.
|
||||
|
Reference in New Issue
Block a user