Changeset 18054


Ignore:
Timestamp:
Nov 30, 2001, 2:52:32 PM (23 years ago)
Author:
sandervl
Message:

implemented PurgeComm

Location:
tags/trunk/src/kernel32
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified tags/trunk/src/kernel32/hmcomm.cpp

    r18046 r18054  
    1 /* $Id: hmcomm.cpp,v 1.21 2001-11-29 13:38:50 sandervl Exp $ */
     1/* $Id: hmcomm.cpp,v 1.22 2001-11-30 13:52:32 sandervl Exp $ */
    22
    33/*
     
    318318  if(lpNumberOfBytesWritten) {
    319319       *lpNumberOfBytesWritten = (ret) ? ulBytesWritten : 0;
    320        dprintf2(("KERNEL32:HMDeviceCommClass::WriteFile %d bytes written", ulBytesWritten));
     320       dprintf2(("KERNEL32:HMDeviceCommClass::WriteFile %d byte(s) written", *lpNumberOfBytesWritten));
    321321  }
    322322  if(ret == FALSE) {
     
    412412  }
    413413
     414  RXQUEUE qInfo;
     415  ULONG ulLen = sizeof(qInfo);
     416  ULONG rc = OSLibDosDevIOCtl( pHMHandleData->hHMHandle,
     417                        IOCTL_ASYNC,
     418                        ASYNC_GETINQUECOUNT,
     419                        0,0,0,
     420                        &qInfo,ulLen,&ulLen);
     421  dprintf(("ASYNC_GETINQUECOUNT -> qInfo.cch %d (queue size %d) rc %d", qInfo.cch, qInfo.cb, rc));
     422
    414423  ret = OSLibDosRead(pHMHandleData->hHMHandle, (LPVOID)lpBuffer, nNumberOfBytesToRead,
    415424                     &ulBytesRead);
     
    417426  if(lpNumberOfBytesRead) {
    418427       *lpNumberOfBytesRead = (ret) ? ulBytesRead : 0;
    419        dprintf2(("KERNEL32:HMDeviceCommClass::ReadFile %d bytes read", ulBytesRead));
     428       dprintf2(("KERNEL32:HMDeviceCommClass::ReadFile %d bytes read", *lpNumberOfBytesRead));
    420429  }
    421430  if(ret == FALSE) {
     
    617626          DosSleep(TIMEOUT_COMM);
    618627      }
     628      if(pDevData->fClosing) {
     629          dprintf(("Cleaning up async comm thread"));
     630          SetEvent(hEvent); //signal to CloseHandle that we're done
     631          return 0;
     632      }
     633      else
     634      if(pDevData->fCancelIo) {
     635          pDevData->overlapped.Internal = 0;
     636          pDevData->dwLastError = ERROR_OPERATION_ABORTED;
     637          if(pDevData->lpfdwEvtMask) *pDevData->lpfdwEvtMask = 0;
     638          dprintf(("Overlapped: WaitCommEvent ERROR_OPERATION_ABORTED"));
     639
     640          //signal to app that a comm event has occurred
     641          SetEvent(hOverlappedEvent);
     642      }
     643      else
    619644      if((dwEvent & dwMask) && (dwMask == pDevData->dwEventMask)) {
    620645          pDevData->overlapped.Internal |= (rc==0) ? (dwEvent & dwMask) : 0;
     
    876901                                   DWORD fdwAction)
    877902{
    878   dprintf(("HMDeviceCommClass::PurgeComm (flags 0x%x) unimplemented stub!",fdwAction));
     903  ULONG ulParLen, ulDataLen, rc = ERROR_SUCCESS;
     904  BYTE par  = 0;
     905  WORD data = 0;
     906
     907  dprintf(("HMDeviceCommClass::PurgeComm (flags 0x%x) partly implemented",fdwAction));
    879908  // ToDo: find a way to stop the current transmision didn't find
    880909  // any clue how to in Control Program Guide and reference
    881910
    882   return(TRUE);
     911  ulParLen  = sizeof(par);
     912  ulDataLen = sizeof(data);
     913  if(fdwAction & PURGE_TXCLEAR) {
     914    rc = OSLibDosDevIOCtl( pHMHandleData->hHMHandle,
     915                           IOCTL_GENERAL,
     916                           DEV_FLUSHOUTPUT,
     917                           &par,ulParLen,&ulParLen,
     918                           &data,ulDataLen,&ulDataLen);
     919  }
     920  if(fdwAction & PURGE_RXCLEAR) {
     921    rc = OSLibDosDevIOCtl( pHMHandleData->hHMHandle,
     922                           IOCTL_GENERAL,
     923                           DEV_FLUSHINPUT,
     924                           &par,ulParLen,&ulParLen,
     925                           &data,ulDataLen,&ulDataLen);
     926  }
     927  if(rc) {
     928      dprintf(("!WARNING! OSLibDosDevIOCtl failed with rc %d", rc));
     929  }
     930  return (rc == ERROR_SUCCESS);
    883931}
    884932//******************************************************************************
  • TabularUnified tags/trunk/src/kernel32/hmcomm.h

    r18028 r18054  
    1 /* $Id: hmcomm.h,v 1.10 2001-11-28 15:35:15 sandervl Exp $ */
     1/* $Id: hmcomm.h,v 1.11 2001-11-30 13:52:32 sandervl Exp $ */
    22
    33/*
     
    4040#define ASYNC_STOPTRANSMIT   0x47
    4141#define ASYNC_GETMODEMOUTPUT 0x66
     42
     43#define IOCTL_GENERAL        0x0B
     44#define DEV_FLUSHINPUT       0x01
     45#define DEV_FLUSHOUTPUT      0x02
    4246
    4347
Note: See TracChangeset for help on using the changeset viewer.