[comp.lang.c] reading data from serial/parallel port

davidd@june.cs.washington.edu (David Doll) (05/14/91)

Hello,
	I was wondering if any of you would mind sharing some of your 
experience with low level codeing dealing with reading data from a serial (or
parallel port - does it matter?) port. I haven't done anything like this before
and appreciate any help you could offer.

The objective is:
	I'll have some C-code being the master program. It'll be reading 
data from a serial( or maybe parallel, but probility serial?) port which is
just five buttons (like joy stick or mouse buttons) that can be pushed. the 
other component (of the overall incoming data picture) is data coming from an
RS232, which is data that will be polled at some small time unit.

I would like to be able to read the button(s) push as just an on/off and if
the button is held on then a steady stream of on's. If two buttons are 
pushed at the same time, I don't want any thing to happen. The data coming from
the RS232 will be just a change in six different parameters.

I looked around and it seems like I'll need something like ioctl. Now is where
the confusion comes in! So I found some  structures:

	struct sgttyb {
		char  sg_ispeed;  /* input speed */
		char  sg_ospeed;  /* output speed */
		char  sg_erase;   /* erase char */
		char  sg_kill;    /* kill char */
		char  sg_flags;   /* mode flag */
	};

	struct tchars {
		char  t_intrc;  /* interrupt */
		char  t_quitrc; /* quit */
		char  t_startc; /* start ouput */
		char  t_stopc;  /* stop output */
		char  t_eofc;   /* end of file */
		char  t_brkc;   /* input delimiter */
	};

Ok, so I (assume) need to set up some event loop which is going to act on some
change in data from both data sets. Now I'm not sure how to handle using the
above (or something else which I don't know about) to read the data. I'm 
confused, how do I know what to set the baud rate to be? I saw something that
had ioctl(fd, TIOGETD, &ldisc) in it's code; fd is supposed to be the file
descripter refering to a serial line: what exactly is the name you're supposed
to use? I couldn't find any examples to help illustrate the enlightened path! 
and my brain is acting like tofo right now...I assume there are other issues 
to consider here; timing of everything, A friend also mumbled something about 
non-blocking I/O needed,what's the value of using serial verus parallel ports-
isn't serial a little more verstal than parallel?, etc. Perhaps this is more 
on the harware side(?); the determination of which button is pushed, i.e. 
button A pushed means something different (a different parameter will be 
changed, i.e.some graphic object gets smaller or larger, etc) than if button B
is pushed. 

If you could e-mail me that would be great. Thanks for your time and help.








--
David Doll
Human Interface Technology Laboratory
University of Washington
Seattle, WA 98195
MS: FJ-15
(206) 685-3061
davidd@hitl.vrnet.washington.edu