Comtrol API (6508) for the MS-DOS User Manual
Page 37
![background image](/manuals/672111/37/background.png)
Troubleshooting
37
Troubleshooting
aaEnPeriodicEvent(TRUE);
/* Test background transmit and receive on device 0. A loopback
plug can be installed on device 0 so that all transmitted data is
received on the same device. */
printf("To stop test press any key\n");
if((Err = aaOpen(0,
COM_TX | COM_RX,
COM_BAUD_38400,
COM_PAR_NONE,
COM_DATABIT_8,
COM_STOPBIT_1,
COM_FLOW_NONE,
COM_DEN_RDA,
COM_MDM_RTS | COM_MDM_DTR)) != 0)
{
printf("Open Failure - Device %d, Error %d\n","0",Err);
aaExit();
exit(1);
}
q[0].OpenTx = TRUE;
while(!kbhit())
/* test loop */
{
Cnt = EnqTxData(0,
(unsigned char *)"This string is being written to device 0",
40);
if(Cnt > 0)
printf("Tx %d bytes\n",Cnt);
delay(100);
/* wait for loopback data */
Cnt = DeqRxData(0,Buf,RXBUF_SIZE-1);
/* dequeue all Rx data available */
Buf[Cnt] = NULL; /* null terminate received string */
if(Cnt > 0)
printf("Rx %d bytes, String = %s\n",Cnt,Buf);
}
getch();
/* Exit application */
q[0].OpenTx = FALSE;
aaClose(0,COM_MDM_RTS | COM_MDM_DTR);
aaExit();
return(0);
}
/********************************************************
Function:
EnqTxData
Purpose:
Add data to a Tx queue.
Call:
EnqTxData(Dev,Buf,Cnt)
int Dev; Device number
unsigned char *Buf; Buffer with data to add
int Cnt; Count of bytes to add
Return:
int: Number of bytes added to Tx queue
*/
int EnqTxData(int Dev,unsigned char *Buf,int Cnt)
{
int i;
/* balance of bytes to copy after q wrap */
int NumOpen;
/* num bytes open in Tx buffer */
int In;
/* In index into Tx buffer */
asm cli;
/* no interrupts until done, do not want
periodic event function modifying q
while we are working on it */
In = q[Dev].TxIn;
/* local copy of In index */
/* Get number bytes open in Tx buffer */
if((NumOpen = q[Dev].TxOut - In - 1) < 0)
NumOpen += TXBUF_SIZE; /* adjust for q wrap */
if(NumOpen > Cnt)
NumOpen = Cnt;
/* don't move more than are incoming */
if(NumOpen == 0)
return(0);
/* no room in Tx buffer */
i = NumOpen - (TXBUF_SIZE - In); /* i = whats left after wrap around */
if (i < 0)
i = 0;
/* Copy to end of Tx buffer */
memcpy(&q[Dev].TxBuf[In],Buf,NumOpen - i);
/* Update In index, pnt to beginning of buff if already at end of it */
In = (In + (NumOpen - i)) % TXBUF_SIZE;
/* Copy the rest of the buffer, if any left */
if (i != 0)
{
memcpy(q[Dev].TxBuf,&Buf[NumOpen - i],i);
In = i;
}