/*******************************************************************/ /* */ /* Serial Port Driver Test Program */ /* */ /* (c)Copyright Sealevel Systems Incorporated, 1993 - 1995 */ /* */ /* Please refer to the READ.ME file for Technical Support */ /*******************************************************************/ /* SCTEST.C */ /*******************************************************************/ #include #include #include #include "scom.h" int main (void); unsigned char GetInitByte(void); unsigned char GetBaud(void); unsigned char GetParity(void); unsigned char GetDataBits(void); unsigned char GetStopBits(void); void printMenu(void); #define RX_LENGTH 0x45 #define TX_LENGTH 0x45 int c = 0; unsigned char c1 ,c2; unsigned char Shake; unsigned long LStat; unsigned short PortX, Stat, Baud, B1; SYS_INFO_COM __far *lpSYS_INFO_COM; unsigned char __far *lpReadPtr; unsigned char __far *lpWritePtr; SYS_INFO_COM COMInfo; unsigned char TempString[80]; unsigned char ReadBuffer[RX_LENGTH]; /* RX_BUFFER */ unsigned char WriteBuffer[TX_LENGTH]="THE QUICK BROWN FOX JUMPED OVER THE LAZY DOG\n"; /*******************************************************************/ int getkey(void) { int c; c = _getch(); if (c == 0) c = _getch(); return(c); } int main (void) { PortX = 0; printf("\nSerial Driver Test Program 1994.\n"); printMenu(); while ((c = getkey()) != 27) /* ESC */ { printf("\n"); switch(c) { case '0': /* InitPortCOM */ c1 = GetInitByte(); Stat = InitPortCOM(PortX,c1); break; case '1': /* PutCharCOM */ printf("Character: "); c1 = (unsigned char)getkey(); if (c != 13) printf("%c", c1); Stat = PutCharCOM(PortX,c1); printf("\n\nLow Byte (Char Unchanged): %d High Byte : %d ",LOBYTE(Stat),HIBYTE(Stat)); break; case '2': /* GetCharCOM */ Stat = GetCharCOM(PortX); printf("Low Byte : %d High Byte : %d ",LOBYTE(Stat),HIBYTE(Stat)); break; case '3': /* ReqPortStatCOM */ /* Get port status for port 1 */ Stat = ReqPortStatCOM(PortX); printf("%X",Stat); break; case '4': /* InitPortExCOM */ Stat = InitPortExCOM(PortX,GetBaud(),GetParity(),DATA_BITS_8,STOP_BIT_1); break; case '5': /* ReqPortStatExCOM */ printf("Press <1> for Read MCR or <2> for Write MCR:"); c1 = 0; c1 = (unsigned char)_getch(); if(c1 == '1') Stat = ReqPortStatExCOM(PortX,READ_MCR); else { printf("MCR :"); scanf("%X",&c2); Stat = ReqPortStatExCOM(PortX,WRITE_MCR|(unsigned short)c2); } printf("\nLow Byte : %X High Byte : %X ",LOBYTE(Stat),HIBYTE(Stat)); break; case '6': /* GetBufferCountCOM */ /* get # char in tx buffer */ Stat = GetBufferCountCOM(PortX,TX_BUFF_COUNT); printf("Tx Buffer Count = %d\n",Stat); Stat = GetBufferCountCOM(PortX,TX_BUFF_FREE); printf("Tx Buffer Free = %d\n",Stat); Stat = GetBufferCountCOM(PortX,RX_BUFF_COUNT); printf("Rx Buffer Count = %d\n",Stat); Stat = GetBufferCountCOM(PortX,RX_BUFF_FREE); printf("Rx Buffer Free = %d\n",Stat); break; case '7': /* FlushBufferCOM */ /* flush both buffers */ printf("Press <1> to flush TX <2> for Rx <3> for both:"); scanf("%X",&c1); switch(c1) { case 1: FlushBufferCOM(PortX,TX_FLUSH); break; case 2: FlushBufferCOM(PortX,RX_FLUSH); break; case 3: FlushBufferCOM(PortX,TX_FLUSH|RX_FLUSH); break; default:; } break; case '8': /* PutBlockCOM */ lpWritePtr = WriteBuffer; LStat = PutBlockCOM(PortX,lpWritePtr, TX_LENGTH); if((LOWORD(LStat)) & PARTIAL_TX) printf("Only partial string transmitted."); printf("Number of Bytes Transfered is %d.\n",HIWORD(LStat)); printf("One if Partial Tx : %d \n",LOWORD(LStat)); break; case '9': /* GetBlockCOM */ lpReadPtr = ReadBuffer; LStat = GetBlockCOM(PortX,lpReadPtr, RX_LENGTH); printf("%d bytes received.\n",HIWORD(LStat)); printf("%d bytes remainig.\n",LOWORD(LStat)); printf("%s",lpReadPtr); lpReadPtr[0]=0; break; case 'a': case 'A': /* HandShakeConfigCOM */ printf("Press <0> for Set HS or <1> for Get HS :"); scanf("%x",&c1); if (c1 == 0) { printf("Shake Setup Byte: "); scanf("%x",&c2); HandShakeConfigCOM(PortX,SET_HAND_SHAKE|(unsigned short)c2); } if (c1 == 1) { Shake = HandShakeConfigCOM(PortX,GET_HAND_SHAKE); printf("Shake Setup Byte = %X\n ",Shake); } break; case 'b': case 'B': /* BaudRateConfigCOM */ /* Set Baud Rate to 7200 */ printf("Baud Rate: "); scanf("%x",&B1); Baud = BaudRateConfigCOM(PortX,B1); printf("Baud divisor = %X\n",Baud); break; case 'c': case 'C': /* WritePortRegCOM */ printf("\nRegister: "); scanf("%i",&c1); printf("\nValue: "); scanf("%i",&c2); WritePortRegCOM(PortX,c1,c2); break; case 'd': case 'D': /* ReadPortRegCOM */ printf("\nRegister: "); scanf("%i",&c2); c1 = ReadPortRegCOM(PortX,c2); printf("\nRegister = %d ",c1); break; case 'e': case 'E': /* GetDrvInfo */ lpSYS_INFO_COM = &COMInfo; GetDrvInfoCOM(lpSYS_INFO_COM); printf("Resident Code Size: %X \nMaximum Ports: %d\nInt 2Fh ID: %X\n" \ "Driver Segment: %X \n",COMInfo.CodeSize, COMInfo.MaxPorts,COMInfo.Mux2F_ID, COMInfo.DriverSeg); break; case 'f': case 'F': /* Change port to test */ printf("Port : "); scanf("%i",&PortX); break; default: break; } printMenu(); } printf("\n\n"); return(0); } /*******************************************************************/ unsigned char GetInitByte(void) { unsigned char cc; printf("\nPort %d : 9600, N, 8, 1\n"); cc = LBAUD_9600|PARITY_NONE|WORD_LENGTH_8|LSTOP_BIT_1; return cc; } /*******************************************************************/ unsigned char GetBaud(void) { unsigned char cc,ca; printf("\nSelect Baud Rate: 1) 110 2) 150 3) 300 4) 600 5) 1200\n"); printf(" 6) 2400 7) 4800 8) 9600 9) 19.2K 10) 38.4K\n"); printf(" 11) 115.2K\n"); scanf("%d",&ca); switch(ca) { case 1: cc = BAUD_110; break; case 2: cc = BAUD_150; break; case 3: cc = BAUD_300; break; case 4: cc = BAUD_600; break; case 5: cc = BAUD_1200; break; case 6: cc = BAUD_4800; break; case 7: cc = BAUD_9600; break; case 8: cc = BAUD_19_2K; break; case 9: cc = BAUD_38_4K; break; case 10: cc = BAUD_56K; break; case 11: cc = BAUD_115_2K; break; default: cc= BAUD_9600; /* default to 9600 */ break; } return cc; } /*******************************************************************/ unsigned char GetParity(void) { unsigned char cc,ca; printf("\nSelect Parity: 1) NONE 2) ODD 3) EVEN \n"); scanf("%d",&ca); switch(ca) { case 1: cc = NO_PARITY; break; case 2: cc = ODD_PARITY; break; case 3: cc = EVEN_PARITY; break; default: cc = NO_PARITY; /* default to NONE */ break; } return cc; } /*******************************************************************/ unsigned char GetDataBits(void) { unsigned char cc,ca; printf("\nSelect Data Bits: 1) 5 Bits 2) 6 Bits 3) 7 Bits 4) 8 Bits \n"); scanf("%d",&ca); switch(ca) { case 1: cc = DATA_BITS_5; break; case 2: cc = DATA_BITS_6; break; case 3: cc = DATA_BITS_7; break; case 4: cc = DATA_BITS_8; break; default: cc= DATA_BITS_8; /* default to 8 */ break; } return cc; } /*******************************************************************/ unsigned char GetStopBits(void) { unsigned char cc,ca; printf("\nSelect Stop Bit(s): 1) 1 Bit 2) 2 Bits 3) 1.5 Bits \n"); scanf("%d",&ca); switch(ca) { case 1: cc = STOP_BIT_1; break; case 2: cc = STOP_BIT_2; break; case 3: cc = STOP_BIT_1_5; break; default: cc= STOP_BIT_1_5; /* default to NONE */ break; } return cc; } /*******************************************************************/ void printMenu(void) { printf("\nCurrent Port: %X \n",PortX); printf("\n\t0) InitPortCOM * \t" \ "\t1) PutCharCOM \n" \ "\t2) GetCharCOM \t\t"\ "\t3) ReqPortStatCOM \n"\ "\t4) InitPortExCOM *\t"\ "\t5) ReqPortStatExCOM \n"\ "\t6) GetBufferCountCOM \t"\ "\t7) FlushBufferCOM \n"\ "\t8) PutBlockCOM \t"\ "\t9) GetBlockCOM \n"\ "\tA) HandShakeConfigCOM\t "\ "\tB) BaudRateConfigCOM \n"\ "\tC) WritePortRegCOM \t"\ "\tD) ReadPortRegCOM \n"\ "\tE) GetDrvInfo \t" \ "\tF) Change port to test\n"); printf("Selection: "); } /*******************************************************************/