Changeset 7564 for trunk/src/kernel32/hmparport.cpp
- Timestamp:
- Dec 7, 2001, 12:28:11 PM (24 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kernel32/hmparport.cpp
r7550 r7564 1 /* $Id: hmparport.cpp,v 1.1 7 2001-12-05 18:06:02sandervl Exp $ */1 /* $Id: hmparport.cpp,v 1.18 2001-12-07 11:28:10 sandervl Exp $ */ 2 2 3 3 /* … … 48 48 #define PRT_QUERDEVICEID 0x0074 49 49 50 51 #if 052 #pragma pack(1)53 typedef struct _DCBINFO54 {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 _RXQUEUE69 {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 _MODEMSTATUS78 {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 #endif90 91 92 50 // Hardwired parallel port configuration information. 93 51 // @@@PH better query the Resource Manager … … 121 79 } HMDEVPARPORTDATA, *PHMDEVPARPORTDATA; 122 80 81 //****************************************************************************** 82 //****************************************************************************** 123 83 static VOID *CreateDevData() 124 84 { … … 135 95 return pData; 136 96 } 137 138 97 //****************************************************************************** 98 //****************************************************************************** 139 99 HMDeviceParPortClass::HMDeviceParPortClass(LPCSTR lpDeviceName) : 140 100 HMDeviceHandler(lpDeviceName) … … 231 191 return FALSE; 232 192 } 233 193 //****************************************************************************** 194 //****************************************************************************** 234 195 DWORD HMDeviceParPortClass::CreateFile(LPCSTR lpFileName, 235 196 PHMHANDLEDATA pHMHandleData, … … 298 259 } 299 260 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 273 DWORD 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 //****************************************************************************** 302 283 BOOL HMDeviceParPortClass::CloseHandle(PHMHANDLEDATA pHMHandleData) 303 284 { … … 426 407 return ret; 427 408 } 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 //****************************************************************************** 560 411 BOOL HMDeviceParPortClass::DeviceIoControl(PHMHANDLEDATA pHMHandleData, 561 412 DWORD dwIoControlCode, … … 719 570 return FALSE; 720 571 } 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.