🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: comp.os.msdos.programmer
2 messages
2 total messages Started by Gord Kurtenbach Thu, 26 Jul 1990 01:57
Help! serial comm problems
#1674
Author: Gord Kurtenbach
Date: Thu, 26 Jul 1990 01:57
32 lines
1480 bytes
I'm not a DOS programmer and I`m trying to write a program to read and 
write over the serial port. The basic structure is:

while (1) {

	<if there is something to send out then stuff it down the serial port >

	<if something has been sent to the serial port then read it>
}


I've tried opening "com2" using fopen and I can successsfully stuff
data down the stream. But when I try to read from the stream with say
a call to fgetc, I get a "General failure reading com2:" errormessage.
I've fopened com2 for reading and writing and the baud rates etc are
correct and I can read data from the hardware port using bioscom so
communication is working.  What is wrong here? Will this approach work
or am I on the wrong track?

My second question is, if I do get the read working how can I avoid 
blocking on it?

If some kind soul out there has a stitch of code (C would be great)
that does what I want I would be most thankful for their help.

Thanks.

Gord Kurtenbach

PS: I've notice that the DOS command "copy com2: junk" also gives the
same error. Could my system be configured wrong?
Re: Help! serial comm problems
#1699
Author: Stephen B Coy
Date: Fri, 27 Jul 1990 19:51
89 lines
2677 bytes
In article <487@roo.UUCP>, kurtenba@parc.xerox.com (Gord Kurtenbach) writes:
> 
> I'm not a DOS programmer and I`m trying to write a program to read and 
> write over the serial port. The basic structure is:
> 
> while (1) {
> 
> 	<if there is something to send out then stuff it down the serial port >
> 
> 	<if something has been sent to the serial port then read it>
> }
> 
> If some kind soul out there has a stitch of code (C would be great)
> that does what I want I would be most thankful for their help.
> 
> Thanks.
> 
> Gord Kurtenbach

This is for Microsoft C although I think the only thing you'll need
to change for Turbo C or others is the _bios_serialcom() function
calls.  Since its not a standard function everyone has created their
own standards.  Hope this helps.

Stephen Coy
uw-beaver!ssc-vax!coy


/*
	Test serial port interaction.  Keyboard hits are sent across
	the serial line, characters received are displayed on the
	screen.  Hit ESC to exit.
*/

#include <stdio.h>
#include <stdlib.h>
#include <bios.h>

#define COM1	(0)
#define COM2    (1)

#define COM	COM1
#define PARITY	_COM_NOPARITY
#define BITS	_COM_CHR8
#define STOP	_COM_STOP1
#define BAUD	_COM_9600

main(int ac, char **av)
{
	int     c, status, error;

	/* init serial port, 8bits, 1s stop bit, no parity, 9600 baud */

	_bios_serialcom(_COM_INIT, COM, BITS | STOP | PARITY | BAUD);

	for(;;) {
		/* Is DATA_READY set? If so, grab the character. */
		status = 0x0100 & _bios_serialcom(_COM_STATUS, COM, 0);
		if(status) {
			c = 0x00ff & _bios_serialcom(_COM_RECEIVE, COM, 0);
			printf("%c", c);
		}

		/* Do we have data to send? */

		if(kbhit()) {
			c = getch();

			/* bail if esc as hit */
			if(c == 27) {
				printf("\n\nbye...\n");
				exit(0);
			}

			/* wait until transmit hold reg empty */

			status = 0x2000 &_bios_serialcom(_COM_STATUS, COM, 0);
			while(status != 0x2000) {
				status = 0x2000 &_bios_serialcom(_COM_STATUS, COM, 0);
			}

			status = _bios_serialcom(_COM_SEND, COM, c);
			if(status & 0x8000) {
				fprintf(stderr, "\nError send %c\n", c);
			}
		}       /* end of if kbrd hit loop */
	}       /* end of forever loop */

}       /* end of main */
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads