www.pudn.com > rs232 > RTERM.C
#include#include #define TRUE 1 #define FALSE 0 #define F1KEY 0x13b #define F2KEY 0x13c #define F10KEY 0x144 typedef unsigned char BYTE; typedef unsigned char BOOL; #include "rcomm.h" COM_PORT cpPort=CP_COM1; unsigned long nBaud=9600L; COM_DATA_BITS cdbBits=CDB_8_BITS; COM_STOP_BITS csbStop=CSB_1_BIT; COM_PARITY cpParity=CP_NO_PARITY; char *szStatusInfo[16]={ "DCD","RI","DSR","CTS","ëDCD","ëRI","ëDSR","ëCTS","RESERVED", "TX EMPTY","TX READY","BREAK","FRAMING ERROR","PARITY ERROR", "DATA OVERRUN","RX_READY" }; int inkey( void ) { int key=0; if ( kbhit() ) { key=getch(); if ( key==0 ) key=getch()+256; } return( key ); } void emulate( void ); void OpenSerialPort( void ); void CloseSerialPort( void ); void main( int argc, char *argv[] ) { int i,j; long lValue; char c; for ( i=1; i ='1' && c<='4' ) cpPort=(int) (c-'1'); break; case 'b': case 'B': lValue = atol( argv[i]+2 ); if ( lValue>0L ) nBaud=lValue; break; case 'd': case 'D': j = atoi( argv[i]+2 ); if ( j==8 || j==7 ) cdbBits=(j==8?CDB_8_BITS:CDB_7_BITS); break; case 'p': case 'P': switch( *(argv[i]+2) ) { case 'N': case 'n': cpParity=CP_NO_PARITY; break; case 'O': case 'o': cpParity=CP_ODD_PARITY; break; case 'E': case 'e': cpParity=CP_EVEN_PARITY; break; } break; case 's': case 'S': j = atoi( argv[i]+2 ); if ( j==1 || j==2 ) csbStop=(j==1?CSB_1_BIT:CSB_2_BIT); break; default: printf( "\n\aError - Unknown parameter '%s'", argv[i] ); exit( 1 ); } } } printf( "\n\nRocSoft (c) 1997 - RTERM Comms Test Utility\n\n" ); printf( "Settings: COM Port = COM%d\n", cpPort+1 ); printf( " Baud = %lu\n", nBaud ); printf( " Parity = %s\n", (cpParity==CP_NO_PARITY?"None":(cpParity==CP_ODD_PARITY?"Odd":"Even")) ); printf( " Data Bits = %d\n", (cdbBits==CDB_8_BITS?8:7) ); printf( " Stop Bits = %d\n", (csbStop==CSB_1_BIT?1:2) ); printf( "Use RTERM /? for command line options\n" ); printf( "Press F1 for port status info\n" ); printf( "Press F2 for detailed port diagnostics\n" ); printf( "Press F10 to exit\n\n" ); emulate(); printf( "\n\nRTERM (c) RocSoft 1997. Coded by CyberFrog.\n\n" ); } /*=================================================================*/ /* */ /* Functions used by the main program are defined hereafter. */ /* */ /*=================================================================*/ void emulate( void ) { BYTE cbChar; int nQSize, key; BOOL bAbort=FALSE; COM_STATUS csStatus; OpenSerialPort(); /* Infinite loop until we escape */ while ( !bAbort ) { /* Look for characters received */ nQSize = COM_InQueue(cpPort); if ( nQSize ) { if ( COM_Read(cpPort,&cbChar,1)==1 ) { printf( "%c",cbChar ); } else { printf( "\nRead Error\n" ); } } if ( (key=inkey())!=0 ) { switch( key ) { case F10KEY: bAbort=TRUE; break; case F1KEY: /* Status */ printf( "\nCOM%d Status:\n",cpPort+1 ); printf( " InBuffer :%d\n",COM_InQueue(cpPort) ); printf( " OutBuffer:%d\n",COM_OutQueue(cpPort) ); csStatus = COM_Status(cpPort); printf( " Status :%04X\n\n",csStatus ); break; case F2KEY: printf( "\nCOM%d Diagnostics:\n",cpPort+1 ); csStatus = COM_Status(cpPort); for ( key=0; key<16; key++ ) { if ( csStatus&(0x8000>>key) ) printf( " %s\n",szStatusInfo[key] ); } break; default: if ( key<256 ) { if ( COM_Write(cpPort,&key,1)!=1 ) { printf( "\nWrite Error\n" ); } } } } } CloseSerialPort(); } void OpenSerialPort( void ) { if ( !COM_Open(cpPort,nBaud,cdbBits,csbStop,cpParity,2048) ) { printf( "\n\aError opening COM port!\n" ); exit( 1 ); } atexit( CloseSerialPort ); COM_IOCtrl( cpPort,TRUE,TRUE ); } void CloseSerialPort( void ) { COM_Close( cpPort ); }