/******************************************************************* MULTIDRP.C (c) Sealevel Systems, Inc. 1995 History: VSG 9-21-95 Created module This example uses the address search feature of the SCC / ESCC. The driver INI file must enable the address search features for this to work correctly. *********************************************************************/ #include #include #include "acb_rtl.h" #define ESC 27 /*keyboard character to terminate program*/ #define BUFFER_LENGTH 45 #define ALT_BUFFER_LENGTH 58 void SetAddress(void); int main(void); BYTE TxBuffer[] ="The Quick Brown Fox Jumped Over The Lazy Dog.\0"; /*45 CHARACTERS INCLUDING '.' */ BYTE Packet[46] = "\0"; BYTE RxBuffer[100]="Empty buffer\0"; #define RX_BUFFER_LENGTH 100 LPBYTE fpBuffer; UINT wAddress = 0xFF; /*initial address setting*/ /*******************************************************************/ /*******************************************************************/ int main (void) { DWORD dwTemp = 0; BYTE c = 0; WORD wTemp = 0, i; printf("\nAdvanced Communication Board Driver Test Program.\n"); /* Fist, verify driver is installed */ if(ACBVerify()) {printf("\nError: Driver not installed.\n"); return(1); } SetAddress(); printf("Type \"T\" to send a test frame and \"X\" to clear the buffers.\n"); printf("Type \"A\" to set the frame address.\n"); printf("Type \"Esc\" to exit.\n\n"); /* Init driver */ ACBStartDriver(); /* Terminal */ do {if(_bios_keybrd(_KEYBRD_READY)) {c = (unsigned char)(_bios_keybrd(_KEYBRD_READ)); if(c != ESC) {switch(c) {case 'T': case 't': fpBuffer = (LPBYTE)&Packet; /* write character to data port */ for(i = 0; i < 5; i++) /*5 frames in buffer each "t"*/ { if(ACBPutFrame(fpBuffer, BUFFER_LENGTH+1)) /*buffer avail.?*/ { break; } } break; case 'X': case 'x': ACBResetBuffers(RESET_TX_BUFFER | RESET_RX_BUFFER); printf("\nBuffers Reset\n"); break; case 'A': case 'a': SetAddress(); break; default: dwTemp = ACBGetBufferCount(); printf("TxBuffer %X of %X ",HIBYTE(LOWORD(dwTemp)), LOBYTE(LOWORD(dwTemp))); printf("RxBuffer %X of %X\n",HIBYTE(HIWORD(dwTemp)), LOBYTE(HIWORD(dwTemp))); break; } } } /* end if */ if(ACBCheckRxAvailable()) {fpBuffer = (LPBYTE)&RxBuffer; dwTemp = ACBGetFrame(fpBuffer, RX_BUFFER_LENGTH); if(HIBYTE(dwTemp)) printf("\nError: %x", HIBYTE(dwTemp) ); for (i = 0; i < LOBYTE(dwTemp); i++) printf("%c", *(fpBuffer + i)); printf("\n"); } }while(c != ESC); /* end do while*/ ACBStopDriver(); return(0); } /******************************************************************* SetAddress : NEAR This routine will set the address field that is used in each Tx frame. Please note that the address that is expected on receive is set when the driver is loaded. The address that is expected is specified in the configuration (INI) file. See RTL call ACBSetNodeAddress. *******************************************************************/ void SetAddress(void) { printf("\nEnter the address byte to send (in Hex) ...>"); scanf("%x",&wAddress); printf("Using address %.2X\n\n", wAddress); strcpy(Packet, &LOBYTE(wAddress)); strcat(Packet, TxBuffer); } /******************************************************************* END OF FILE *******************************************************************/