Ignore:
Timestamp:
Dec 7, 2001, 12:28:11 PM (24 years ago)
Author:
sandervl
Message:

overlappedio, com & lpt updates

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kernel32/hmparport.cpp

    r7550 r7564  
    1 /* $Id: hmparport.cpp,v 1.17 2001-12-05 18:06:02 sandervl Exp $ */
     1/* $Id: hmparport.cpp,v 1.18 2001-12-07 11:28:10 sandervl Exp $ */
    22
    33/*
     
    4848#define PRT_QUERDEVICEID                   0x0074
    4949
    50 
    51 #if 0
    52 #pragma pack(1)
    53 typedef struct _DCBINFO
    54 {
    55   USHORT   usWriteTimeout;         /*  Time period used for Write Timeout processing. */
    56   USHORT   usReadTimeout;          /*  Time period used for Read Timeout processing. */
    57   BYTE     fbCtlHndShake;          /*  HandShake Control flag. */
    58   BYTE     fbFlowReplace;          /*  Flow Control flag. */
    59   BYTE     fbTimeOut;              /*  Timeout flag. */
    60   BYTE     bErrorReplacementChar;  /*  Error Replacement Character. */
    61   BYTE     bBreakReplacementChar;  /*  Break Replacement Character. */
    62   BYTE     bXONChar;               /*  Character XON. */
    63   BYTE     bXOFFChar;              /*  Character XOFF. */
    64 } DCBINFO;
    65 typedef DCBINFO *PDCBINFO;
    66 
    67 
    68 typedef struct _RXQUEUE
    69 {
    70   USHORT   cch;  /*  Number of characters in the queue. */
    71   USHORT   cb;   /*  Size of receive/transmit queue. */
    72 } RXQUEUE;
    73 
    74 typedef RXQUEUE *PRXQUEUE;
    75 
    76 
    77 typedef struct _MODEMSTATUS
    78 {
    79   BYTE   fbModemOn;   /*  Modem Control Signals ON Mask. */
    80   BYTE   fbModemOff;  /*  Modem Control Signals OFF Mask. */
    81 } MODEMSTATUS;
    82 
    83 typedef MODEMSTATUS *PMODEMSTATUS;
    84 
    85 
    86 #pragma pack()
    87 
    88 
    89 #endif
    90 
    91 
    9250// Hardwired parallel port configuration information.
    9351// @@@PH better query the Resource Manager
     
    12179} HMDEVPARPORTDATA, *PHMDEVPARPORTDATA;
    12280
     81//******************************************************************************
     82//******************************************************************************
    12383static VOID *CreateDevData()
    12484{
     
    13595  return pData;
    13696}
    137 
    138 
     97//******************************************************************************
     98//******************************************************************************
    13999HMDeviceParPortClass::HMDeviceParPortClass(LPCSTR lpDeviceName) :
    140100  HMDeviceHandler(lpDeviceName)
     
    231191  return FALSE;
    232192}
    233 
     193//******************************************************************************
     194//******************************************************************************
    234195DWORD HMDeviceParPortClass::CreateFile(LPCSTR lpFileName,
    235196                                       PHMHANDLEDATA pHMHandleData,
     
    298259}
    299260
    300 
    301                       /* this is a handler method for calls to CloseHandle() */
     261/*****************************************************************************
     262 * Name      : DWORD HMDeviceParPortClass::GetFileType
     263 * Purpose   : determine the handle type
     264 * Parameters: PHMHANDLEDATA pHMHandleData
     265 * Variables :
     266 * Result    : API returncode
     267 * Remark    :
     268 * Status    :
     269 *
     270 * Author    : SvL
     271 *****************************************************************************/
     272
     273DWORD HMDeviceParPortClass::GetFileType(PHMHANDLEDATA pHMHandleData)
     274{
     275    dprintf(("KERNEL32: HMDeviceParPortClass::GetFileType %s(%08x)\n",
     276             lpHMDeviceName, pHMHandleData));
     277
     278    return FILE_TYPE_PIPE; //this is what NT4 returns
     279}
     280//******************************************************************************
     281/* this is a handler method for calls to CloseHandle() */
     282//******************************************************************************
    302283BOOL HMDeviceParPortClass::CloseHandle(PHMHANDLEDATA pHMHandleData)
    303284{
     
    426407  return ret;
    427408}
    428 
    429 BOOL HMDeviceParPortClass::GetCommProperties( PHMHANDLEDATA pHMHandleData,
    430                                              LPCOMMPROP lpcmmp)
    431 {
    432   dprintf(("HMDeviceParPortClass::GetCommProperties(%08xh, %08xh)\n",
    433            pHMHandleData,
    434            lpcmmp));
    435  
    436   APIRET rc;
    437   ULONG ulLen;
    438   int i;
    439  
    440 #if 0
    441   USHORT COMErr;
    442   EXTBAUDGET BaudInfo;
    443   ulLen = sizeof(EXTBAUDGET);
    444   rc = OSLibDosDevIOCtl( pHMHandleData->hHMHandle,
    445                     IOCTL_ASYNC,
    446                     ASYNC_EXTGETBAUDRATE,
    447                     0,0,0,
    448                         &BaudInfo,ulLen,&ulLen);
    449 #endif
    450   rc = NO_ERROR;
    451  
    452   memset(lpcmmp,0,sizeof(COMMPROP));
    453   lpcmmp->wPacketLength  = sizeof(COMMPROP);
    454   lpcmmp->wPacketVersion = 1; //???
    455   lpcmmp->dwProvSubType =  PST_PARALLELPORT;
    456  
    457 #if 0
    458   lpcmmp->dwServiceMask  = SP_SERIALCOMM;
    459   for(i=0;i<BaudTableSize && BaudInfo.ulMaxBaud <= BaudTable[i].dwBaudRate;i++);
    460   lpcmmp->dwMaxBaud      = BaudTable[i].dwBaudFlag;
    461   lpcmmp->dwProvCapabilities = PCF_DTRDSR | PCF_PARITY_CHECK |
    462                                PCF_RTSCTS | PCF_SETXCHAR |
    463                                PCF_XONXOFF;
    464   lpcmmp->dwSettableParams   = SP_BAUD | SP_DATABITS |
    465                                SP_HANDSHAKEING | SP_PARITY |
    466                                SP_PARITY_CHECK | SP_STOPBIT;
    467   lpcmmp->dwSettableBaud = 0;
    468   for(i=0;i<BaudTableSize;i++)
    469   {
    470     if ( (BaudTable[i].dwBaudRate>=BaudInfo.ulMinBaud) &&
    471          (BaudTable[i].dwBaudRate<=BaudInfo.ulMaxBaud) )
    472       lpcmmp->dwSettableBaud |= BaudTable[i].dwBaudFlag;
    473   }
    474   lpcmmp->dwSettableBaud |= BAUD_USER;
    475   lpcmmp->wSettableData = DATABITS_5 | DATABITS_6 | DATABITS_7 | DATABITS_8;
    476   lpcmmp->wSettableStopParity = STOPBITS_10 | STOPBITS_15 | STOPBITS_20 |
    477                                 PARITY_NONE | PARITY_ODD | PARITY_EVEN |
    478     PARITY_MARK | PARITY_SPACE;
    479 #endif
    480  
    481   return(rc==0);
    482 }
    483 
    484 BOOL HMDeviceParPortClass::ClearCommError( PHMHANDLEDATA pHMHandleData,
    485                                           LPDWORD lpdwErrors,
    486                                           LPCOMSTAT lpcst)
    487 {
    488   dprintf(("HMDeviceParPortClass::ClearCommError(%08xh,%08xh,%08xh)\n",
    489            pHMHandleData,
    490            lpdwErrors,
    491            lpcst));
    492  
    493   APIRET rc;
    494   ULONG ulLen;
    495   USHORT COMErr;
    496 
    497   ulLen = sizeof(USHORT);
    498  
    499   *lpdwErrors = 0;
    500   rc = NO_ERROR;
    501  
    502 #if 0
    503   // ParPort: CE_DNS, CE_OOP CE_PTO
    504  
    505   rc = OSLibDosDevIOCtl( pHMHandleData->hHMHandle,
    506                     IOCTL_ASYNC,
    507                     ASYNC_GETCOMMERROR,
    508                     0,0,0,
    509                     &COMErr,2,&ulLen);
    510   *lpdwErrors |= (COMErr & 0x0001)?CE_OVERRUN:0;
    511   *lpdwErrors |= (COMErr & 0x0002)?CE_RXOVER:0;
    512   *lpdwErrors |= (COMErr & 0x0004)?CE_RXPARITY:0;
    513   *lpdwErrors |= (COMErr & 0x0008)?CE_FRAME:0;
    514 
    515   if(lpcst)
    516   {
    517     UCHAR ucStatus;
    518     RXQUEUE qInfo;
    519     ulLen = 1;
    520     rc = OSLibDosDevIOCtl( pHMHandleData->hHMHandle,
    521                       IOCTL_ASYNC,
    522                       ASYNC_GETCOMMSTATUS,
    523                       0,0,0,
    524                       &ucStatus,ulLen,&ulLen);
    525     if(!rc)
    526     {
    527       lpcst->fCtsHold  = ((ucStatus & 0x01)>0);
    528       lpcst->fDsrHold  = ((ucStatus & 0x02)>0);
    529       lpcst->fRlsdHold = FALSE;//(ucStatus & 0x04)>0);
    530       lpcst->fXoffHold = ((ucStatus & 0x08)>0);
    531       lpcst->fXoffSend = ((ucStatus & 0x10)>0);
    532       lpcst->fEof      = ((ucStatus & 0x20)>0);// Is break = Eof ??
    533       lpcst->fTxim     = ((ucStatus & 0x40)>0);
    534 
    535       ulLen = sizeof(qInfo);
    536       rc = OSLibDosDevIOCtl( pHMHandleData->hHMHandle,
    537                         IOCTL_ASYNC,
    538                         ASYNC_GETINQUECOUNT,
    539                         0,0,0,
    540                         &qInfo,ulLen,&ulLen);
    541       if(!rc)
    542       {
    543         lpcst->cbInQue   = qInfo.cch;
    544         rc = OSLibDosDevIOCtl( pHMHandleData->hHMHandle,
    545                           IOCTL_ASYNC,
    546                           ASYNC_GETOUTQUECOUNT,
    547                           0,0,0,
    548                           &qInfo,ulLen,&ulLen);
    549         if(!rc)
    550           lpcst->cbOutQue = qInfo.cch;
    551       }
    552     }
    553   }
    554 #endif
    555  
    556   return(rc==NO_ERROR);
    557 }
    558 
    559 
     409//******************************************************************************
     410//******************************************************************************
    560411BOOL HMDeviceParPortClass::DeviceIoControl(PHMHANDLEDATA pHMHandleData,
    561412                                           DWORD dwIoControlCode,
     
    719570    return FALSE;
    720571}
    721 
    722 
    723 BOOL HMDeviceParPortClass::SetDefaultCommConfig( PHMHANDLEDATA pHMHandleData,
    724                                                 LPCOMMCONFIG lpCC,
    725                                                 DWORD dwSize)
    726 {
    727   dprintf(("HMDeviceParPortClass::SetDefaultCommConfig(%08xh,%08xh,%08xh)\n",
    728            pHMHandleData,
    729            lpCC,
    730            dwSize));
    731  
    732   PHMDEVPARPORTDATA pDevData = (PHMDEVPARPORTDATA)pHMHandleData->lpDeviceData;
    733   if((NULL==pDevData) || (pDevData->ulMagic != MAGIC_PARPORT) )
    734   {
    735     SetLastError(ERROR_INVALID_HANDLE);
    736     return FALSE;
    737   }
    738   memset(&pDevData->CommCfg,0, sizeof(COMMCONFIG));
    739   memcpy(&pDevData->CommCfg,lpCC,dwSize>sizeof(COMMCONFIG)?sizeof(COMMCONFIG):dwSize);
    740 
    741   return(TRUE);
    742 }
    743 
    744 
    745 BOOL HMDeviceParPortClass::GetDefaultCommConfig( PHMHANDLEDATA pHMHandleData,
    746                                                 LPCOMMCONFIG lpCC,
    747                                                 LPDWORD lpdwSize)
    748 {
    749   dprintf(("HMDeviceParPortClass::GetDefaultCommConfig(%08xh,%08xh,%08xh)\n",
    750            pHMHandleData,
    751            lpCC,
    752            lpdwSize));
    753 
    754  
    755   PHMDEVPARPORTDATA pDevData = (PHMDEVPARPORTDATA)pHMHandleData->lpDeviceData;
    756 
    757   if( O32_IsBadWritePtr(lpCC,sizeof(COMMCONFIG)) ||
    758       *lpdwSize< sizeof(COMMCONFIG) )
    759   {
    760     SetLastError(ERROR_INSUFFICIENT_BUFFER);
    761     *lpdwSize= sizeof(COMMCONFIG);
    762     return FALSE;
    763   }
    764 
    765   if((NULL==pDevData) || (pDevData->ulMagic != MAGIC_PARPORT) )
    766   {
    767     SetLastError(ERROR_INVALID_HANDLE);
    768     return FALSE;
    769   }
    770 
    771   memcpy(lpCC,&pDevData->CommCfg,sizeof(COMMCONFIG));
    772   *lpdwSize = sizeof(COMMCONFIG);
    773   return(TRUE);
    774 }
    775 
    776 
    777 BOOL HMDeviceParPortClass::SetCommConfig( PHMHANDLEDATA pHMHandleData,
    778                                          LPCOMMCONFIG lpCC,
    779                                          DWORD dwSize )
    780 {
    781   dprintf(("HMDeviceParPortClass::SetCommConfig not implemented"));
    782 
    783   return(TRUE);
    784 }
    785 
    786 
    787 BOOL HMDeviceParPortClass::GetCommConfig( PHMHANDLEDATA pHMHandleData,
    788                                          LPCOMMCONFIG lpCC,
    789                                          LPDWORD lpdwSize )
    790 {
    791   PHMDEVPARPORTDATA pDevData = (PHMDEVPARPORTDATA)pHMHandleData->lpHandlerData;
    792 
    793   dprintf(("HMDeviceParPortClass::GetCommConfig(%08xh,%08xh,%08xh)\n",
    794            pHMHandleData,
    795            lpCC,
    796            lpdwSize));
    797 
    798   if( O32_IsBadWritePtr(lpCC,sizeof(COMMCONFIG)) ||
    799       *lpdwSize< sizeof(COMMCONFIG) )
    800   {
    801     SetLastError(ERROR_INSUFFICIENT_BUFFER);
    802     *lpdwSize= sizeof(COMMCONFIG);
    803     return FALSE;
    804   }
    805 
    806   if((NULL==pDevData) || (pDevData->ulMagic != MAGIC_PARPORT) )
    807   {
    808     SetLastError(ERROR_INVALID_HANDLE);
    809     return FALSE;
    810   }
    811 
    812   memcpy(lpCC,&pDevData->CommCfg,sizeof(COMMCONFIG));
    813   *lpdwSize = sizeof(COMMCONFIG);
    814   return(TRUE);
    815 }
     572//******************************************************************************
     573//******************************************************************************
     574
     575
Note: See TracChangeset for help on using the changeset viewer.