comp.lang.ada
 help / color / mirror / Atom feed
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 





  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