<div dir="ltr"><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Sep 19, 2022 at 7:51 AM Christo Crause <<a href="mailto:christo.crause@gmail.com">christo.crause@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="auto"><div><br><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, 19 Sep 2022, 03:18 James Richters via fpc-pascal, <<a href="mailto:fpc-pascal@lists.freepascal.org" target="_blank">fpc-pascal@lists.freepascal.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">I can't seem to find any documentation or SerRead or SerReadTimeout..<br>
searching for either along with Freepascal doesn't get me any results.  <br>
If it exists somewhere and I am just missing it, can someone tell me where<br>
it is?<br>
<br>
Anyway, what I'm trying to figure out is when the timeout timer starts...<br></blockquote></div></div><div dir="auto"><br></div><div dir="auto">FPC uses the OS provided functionality to interact with the serial port. On Windows the timeout seems to start when the read request is made (<a href="https://learn.microsoft.com/en-us/previous-versions/ff547486(v=vs.85)" target="_blank">https://learn.microsoft.com/en-us/previous-versions/ff547486(v=vs.85)</a>). On POSIX (at least Linux) it depends on the specific set of flags specified , scroll down to the discussion on canonical/noncanonical mode for the details (<a href="https://linux.die.net/man/3/termios" target="_blank">https://linux.die.net/man/3/termios</a>). </div></div></blockquote><div><br></div><div>A bit more information after peeking into the source code: on win32 the timeout information can be read or set using Get/SetCommTimeouts. The  COMMTIMEOUTS structure (<a href="https://learn.microsoft.com/en-us/windows/win32/api/winbase/ns-winbase-commtimeouts">https://learn.microsoft.com/en-us/windows/win32/api/winbase/ns-winbase-commtimeouts</a>) contains a read interval timeout and total timeouts for read & write operations. SerReadTimeout sets the ReadTotalTimeoutConstant value, so basically the total timeout duration.<br></div><div><br></div><div>On Linux SerReadTimeout uses a fpSelect on the handle with the specified timeout, so in principle it is the same behaviour as on Windows, i.e. a total timeout.</div><div><br></div><div>While both OSs provide some functionality to specify inter character timeouts, FPC does not directly expose this functionality in the Serial unit.<br></div></div></div>