beautypg.com

Comtrol API (6508) for the MS-DOS User Manual

Page 37

background image

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;
}