[Com0com-cvs] com0com/sys bufutils.c,1.12,1.13 io.c,1.39,1.40
The virtual serial port driver for Windows.
Brought to you by:
vfrolov
From: Vyacheslav F. <vf...@us...> - 2008-09-01 16:54:32
|
Update of /cvsroot/com0com/com0com/sys In directory sc8-pr-cvs4.sourceforge.net:/tmp/cvs-serv16340 Modified Files: bufutils.c io.c Log Message: Replaced SERIAL_LSRMST_LSR_NODATA by SERIAL_LSRMST_LSR_DATA for BREAK Index: io.c =================================================================== RCS file: /cvsroot/com0com/com0com/sys/io.c,v retrieving revision 1.39 retrieving revision 1.40 diff -C2 -d -r1.39 -r1.40 *** io.c 19 Aug 2008 12:40:58 -0000 1.39 --- io.c 1 Sep 2008 16:54:28 -0000 1.40 *************** *** 20,23 **** --- 20,26 ---- * * $Log$ + * Revision 1.40 2008/09/01 16:54:28 vfrolov + * Replaced SERIAL_LSRMST_LSR_NODATA by SERIAL_LSRMST_LSR_DATA for BREAK + * * Revision 1.39 2008/08/19 12:40:58 vfrolov * Replaces C0CE_INSERT_ENABLE_LSR_NBI (insertion on BREAK OFF) *************** *** 944,969 **** } - VOID InsertChar( - PC0C_IO_PORT pIoPortRead, - UCHAR value, - PLIST_ENTRY pQueueToComplete) - { - C0C_RAW_DATA insertData; - - insertData.size = 1; - insertData.data[0] = value; - - if (FdoPortIo( - C0C_IO_TYPE_INSERT, - &insertData, - pIoPortRead, - &pIoPortRead->irpQueues[C0C_QUEUE_READ], - pQueueToComplete) == STATUS_PENDING) - { - AlertOverrun(pIoPortRead, pQueueToComplete); - Trace0((PC0C_COMMON_EXTENSION)pIoPortRead->pDevExt, L"WARNING: Lost char"); - } - } - VOID InsertRemoteBr( PC0C_IO_PORT pIoPortRead, --- 947,950 ---- *************** *** 1392,1424 **** pIoPortWrite->sendXonXoff = 0; break; - case RW_DATA_TYPE_CHR_BREAK: - if (pIoPortWrite->sendBreak) { - pIoPortWrite->sendBreak = FALSE; - - pIoPortRead->errors |= SERIAL_ERROR_BREAK; - pIoPortRead->eventMask |= pIoPortRead->waitMask & (SERIAL_EV_BREAK | SERIAL_EV_ERR); - - if (pIoPortRead->eventMask) - WaitComplete(pIoPortRead, pQueueToComplete); - - if (pIoPortRead->escapeChar && - (pIoPortRead->insertMask & (C0CE_INSERT_ENABLE_LSR|C0CE_INSERT_ENABLE_LSR_BI))) - { - UCHAR lsr = 0x10; /* break interrupt indicator */ - - if (C0C_TX_BUFFER_THR_EMPTY(&pIoPortRead->txBuf)) { - lsr |= 0x20; /* transmit holding register empty */ - - if (C0C_TX_BUFFER_EMPTY(&pIoPortRead->txBuf)) - lsr |= 0x40; /* transmit holding register empty and line is idle */ - } - - InsertLsrMst(pIoPortRead, FALSE, lsr, pQueueToComplete); - } - - if (pIoPortRead->handFlow.FlowReplace & SERIAL_BREAK_CHAR) - InsertChar(pIoPortRead, pIoPortRead->specialChars.BreakChar, pQueueToComplete); - } - break; } } --- 1373,1376 ---- Index: bufutils.c =================================================================== RCS file: /cvsroot/com0com/com0com/sys/bufutils.c,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** bufutils.c 11 Jul 2008 10:30:39 -0000 1.12 --- bufutils.c 1 Sep 2008 16:54:28 -0000 1.13 *************** *** 20,23 **** --- 20,26 ---- * * $Log$ + * Revision 1.13 2008/09/01 16:54:28 vfrolov + * Replaced SERIAL_LSRMST_LSR_NODATA by SERIAL_LSRMST_LSR_DATA for BREAK + * * Revision 1.12 2008/07/11 10:30:39 vfrolov * Added missing data available bit to LSR *************** *** 68,71 **** --- 71,75 ---- #include "bufutils.h" #include "noise.h" + #include "../include/cncext.h" /* *************** *** 190,197 **** } } - else - if (pFlowFilter->flags & C0C_FLOW_FILTER_FL_IGNORE_RECEIVED) { - writeDone = writeLength; - } else { PC0C_IO_PORT pIoPort = pFlowFilter->pIoPort; --- 194,197 ---- *************** *** 207,212 **** curChar = *pWriteBuf++; ! if (pIoPortRemote->brokeCharsProbability > 0) ! BrokeChar(pIoPortRemote, pIoPort, &curChar, &lsr); } else { if (pIoPortRemote->writeHolding & SERIAL_TX_WAITING_ON_BREAK && !pIoPortRemote->sendBreak) { --- 207,217 ---- curChar = *pWriteBuf++; ! if (pIoPortRemote->sendBreak) { ! pIoPortRemote->sendBreak = FALSE; ! BreakError(pIoPort, &lsr); ! } else { ! if (pIoPortRemote->brokeCharsProbability > 0) ! BrokeChar(pIoPortRemote, pIoPort, &curChar, &lsr); ! } } else { if (pIoPortRemote->writeHolding & SERIAL_TX_WAITING_ON_BREAK && !pIoPortRemote->sendBreak) { *************** *** 221,244 **** if (lsr) { pFlowFilter->events |= SERIAL_EV_ERR; ! if (pIoPort->handFlow.FlowReplace & SERIAL_ERROR_CHAR) { ! UCHAR errorChar = pIoPort->specialChars.ErrorChar; ! ! if (!readLength--) { ! #if DBG ! SIZE_T done = ! #endif /* DBG */ ! AddRawData(&pBuf->insertData, &errorChar, sizeof(errorChar)); ! HALT_UNLESS1(done == sizeof(errorChar), done); ! ! readLength++; ! } else { ! *pReadBuf++ = errorChar; ! readDone++; ! } ! } ! ! if (pIoPort->escapeChar) { UCHAR buf[4]; SIZE_T length = sizeof(buf); --- 226,236 ---- if (lsr) { + BOOLEAN noCurChar = FALSE; + BOOLEAN isBreak = ((lsr & 0x10) != 0); pFlowFilter->events |= SERIAL_EV_ERR; ! if (pIoPort->escapeChar && ! (pIoPort->insertMask & (C0CE_INSERT_ENABLE_LSR|C0CE_INSERT_ENABLE_LSR_BI))) ! { UCHAR buf[4]; SIZE_T length = sizeof(buf); *************** *** 263,266 **** --- 255,259 ---- writeDone++; + noCurChar = TRUE; if (length > readLength) *************** *** 286,294 **** break; } ! continue; } } if (!curChar && (pFlowFilter->flags & C0C_FLOW_FILTER_FL_NULL_STRIPPING)) { } --- 279,327 ---- break; } + } ! if (isBreak) { ! if (pIoPort->handFlow.FlowReplace & SERIAL_BREAK_CHAR) { ! UCHAR errorChar = pIoPort->specialChars.BreakChar; ! ! if (!readLength--) { ! #if DBG ! SIZE_T done = ! #endif /* DBG */ ! AddRawData(&pBuf->insertData, &errorChar, sizeof(errorChar)); ! HALT_UNLESS1(done == sizeof(errorChar), done); ! ! readLength++; ! } else { ! *pReadBuf++ = errorChar; ! readDone++; ! } ! } } + else + if (pIoPort->handFlow.FlowReplace & SERIAL_ERROR_CHAR) { + UCHAR errorChar = pIoPort->specialChars.ErrorChar; + + if (!readLength--) { + #if DBG + SIZE_T done = + #endif /* DBG */ + AddRawData(&pBuf->insertData, &errorChar, sizeof(errorChar)); + HALT_UNLESS1(done == sizeof(errorChar), done); + + readLength++; + } else { + *pReadBuf++ = errorChar; + readDone++; + } + } + + if (noCurChar) + continue; } + if (pFlowFilter->flags & C0C_FLOW_FILTER_FL_IGNORE_RECEIVED) { + } + else if (!curChar && (pFlowFilter->flags & C0C_FLOW_FILTER_FL_NULL_STRIPPING)) { } |