From: "Steve" <nospam_steved94@comcast.net>
Subject: Re: Port LPT + ADA (whta do I wrong?)
Date: Tue, 7 Dec 2004 20:28:11 -0800
Date: 2004-12-07T20:28:11-08:00 [thread overview]
Message-ID: <VbKdnfKmSI1LHyvcRVn-2A@comcast.com> (raw)
In-Reply-To: 1olbt9ia2fuuo$.qbyglb1cl3g8.dlg@40tude.net
"Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> wrote in message
news:1olbt9ia2fuuo$.qbyglb1cl3g8.dlg@40tude.net...
> On Tue, 7 Dec 2004 19:13:52 +0100, Slawo - MIR wrote:
[snip]
>
> Calm down, you'll get it! (:-))
>
> 1. Do you really need overlapped I/O? This requires a lot of understanding
> of how Windows works. Note that overlapped I/O is asynchronous to the
> calling thread. It means that ReadFile will not wait for any data. It will
> end immediately. After that you should periodically check the fields of
> the
> OVERLAPPED structure for the results. Alternatively you can provide an
> event object and enter wait for I/O completion (see WaitForSingleObject).
> Note also that overlapped I/O fails at the file end (i.e. whne nobody
> writes into the port). Maybe that's the case. Carefully read what MSDN
> tells about ReadFile and OVERLAPPED.
Unless you're speaking about something specific to handling of the parallel
port, I can say for certain that with serial I/O you must use OVERLAPPED I/O
if you want to do full duplex communication. This is not obvious from the
documentation, but if you dig far enough (and try it) you'll find that this
is the case.
Using overlapped I/O does NOT mean that ReadFile will not wait for any data
before returning. It does mean that if ReadFile returns FALSE, then you'll
have to call "WinBase.GetLastError" to get the error code, and if the error
code is "ERROR_IO_PENDING" than you'll have to read again. In my serial
driver I do exactly that.
Before using OVERLAPPED operations I found the little ideosyncracy that if I
had one thread waiting on a read, another thread couldn't do a write until
the read finished. Using overlapped the write causes the read to wake up,
the write does it's thing. When my code detects that the read hasn't
finished, it goes back and reads again. A pain in the butt, but it works.
I remember finding an article on Microsofts site describing overlapped I/O
and how it was a new and special feature that they had implemented. That
was news to me since I have written communications applications on other
operating systems where you don't have to do anything special to have a read
task and a write task work on the same communications port.
This isn't really an Ada question, you should try searching microsoft's site
for specific information regarding the parallel port.
If you use google you can make your search something like:
<your search string> site:microsoft.com
and it will restrict the search to the microsoft site. Sometimes this saves
sifting through a bunch of garbage (sometimes not).
I hope this helps,
Steve
(The Duck)
>
> 2. When a Windows API fails, you should query for the failure reason using
> GetLastError. Do it! Further, apply FormatMessage to the result of
> GetLastError. Then you will exactly know what's going on.
>
> Good luck!
>
> --
> Regards,
> Dmitry A. Kazakov
> http://www.dmitry-kazakov.de
next prev parent reply other threads:[~2004-12-08 4:28 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-12-03 13:56 Port LPT + ADA S�awo - MIR
2004-12-03 14:40 ` Martin Krischik
2004-12-03 15:29 ` Slawo - MIR
2004-12-03 18:46 ` Martin Krischik
2004-12-03 18:43 ` tmoran
[not found] ` <u111r0db4fsoj9u3hlkachspjt0r2vvup7@4ax.com>
2004-12-03 23:03 ` Adrien Plisson
2004-12-03 23:51 ` Slawo - MIR
2004-12-04 0:51 ` Jeffrey Carter
2004-12-04 18:05 ` Port LPT + ADA (whta do I wrong?) S�awo - MIR
2004-12-04 20:20 ` Dmitry A. Kazakov
2004-12-07 18:13 ` Slawo - MIR
2004-12-07 20:55 ` Dmitry A. Kazakov
2004-12-08 4:28 ` Steve [this message]
2004-12-08 8:27 ` Dmitry A. Kazakov
2004-12-12 22:25 ` Brian May
2004-12-14 2:41 ` Steve
2004-12-12 22:46 ` Brian May
2004-12-12 23:03 ` Adrien Plisson
[not found] ` <rt8dr09tuvgbqaeq9vmujd1pqtb72hbamv@4ax.com>
2004-12-09 8:17 ` Jerry van Dijk
2004-12-05 6:45 ` Brian May
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox