kdb103: Using the QNX4 qnx_ioctl() to Raise and Lower RTS and DTR

Title: Using the QNX4 qnx_ioctl() to Raise and Lower RTS and DTR
Keywords: QNX4, qnx_ioctl, RTS, DTR
Date: May 15, 1996
KDB: KDB-103
Revision: 0.00
Author: KAM
Distribution: External

Below is an example of how to use the QNX4 qnx_ioctl function call to raise and lower DTR on a serial port. Look at bits defs to see which bit is for RTS.

Bit defs
========
Bit 0 = DTR power = 1
Bit 1 = RTS power = 2

/************************************************************************** */
#include        
#include        
#include        
#include        
#include        

/* Function to set/clear dtr            */
/* Look in sys/qioctl.h for definitions */

void    dropDTR( FILE *fp );
void    raiseDTR( FILE *fp );


void    main( int argc, char *argv[] ) {

	FILE    *fpin;
	if( argc < 1 ){
		printf( "USE: ioctl deviceName\n" );
		exit( -1 );
	}

	fpin = fopen( argv[1], "r" );
	if( fpin == NULL ){
		printf( "Error opening device %s for input\n", argv[1] );
		exit( -1 );
	}
	setbuf( fpin, NULL );

	while( 1 ){
		printf("Raising DTR\n");
		raiseDTR( fpin );
		sleep( 1 );
		printf("Dropping DTR\n");
		dropDTR( fpin );
		sleep( 1 );     
		
		printf("Raising RTS\n");
		raiseRTS( fpin );
		sleep( 1 );
		printf("Dropping RTS\n");
		dropRTS( fpin );
		sleep( 1 );     
	}
}

void raiseDTR( FILE     *fp ) {
	unsigned long sendbuf[2];

	sendbuf[0] = 1L; /* state to set bit */
	sendbuf[1] = 1L; /* power of bit to change */

	qnx_ioctl( fileno( fp ), QCTL_DEV_CTL, sendbuf, 8, (void *)0, 0 );
}

void dropDTR( FILE     *fp ){
	unsigned long sendbuf[2];

	sendbuf[0] = 0L; /* state to set bit */
	sendbuf[1] = 1L; /* power of bit to change */

	qnx_ioctl( fileno( fp ), QCTL_DEV_CTL, sendbuf, 8, (void *)0, 0 );
}

void raiseRTS( FILE     *fp ) {
	unsigned long sendbuf[2];

	sendbuf[0] = 2L; /* state to set bit */
	sendbuf[1] = 2L; /* power of bit to change */

	qnx_ioctl( fileno( fp ), QCTL_DEV_CTL, sendbuf, 8, (void *)0, 0 );
}

void dropRTS( FILE     *fp ) {
	unsigned long sendbuf[2];

	sendbuf[0] = 0L; /* state to set bit */
	sendbuf[1] = 2L; /* power of bit to change */

	qnx_ioctl( fileno( fp ), QCTL_DEV_CTL, sendbuf, 8, (void *)0, 0 );
}

End of KDB-103

Go to Top