Changeset 7567 for trunk/src/kernel32/hmcomm.cpp
- Timestamp:
- Dec 7, 2001, 3:13:39 PM (24 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kernel32/hmcomm.cpp
r7564 r7567 1 /* $Id: hmcomm.cpp,v 1.2 8 2001-12-07 11:28:09sandervl Exp $ */1 /* $Id: hmcomm.cpp,v 1.29 2001-12-07 14:13:36 sandervl Exp $ */ 2 2 3 3 /* … … 25 25 #include "dbglocal.h" 26 26 27 //#define TESTING_COMM27 #define TESTING_COMM 28 28 #ifdef TESTING_COMM 29 29 #undef dprintf … … 58 58 #define BaudTableSize (sizeof(BaudTable)/sizeof(BAUDTABLEENTRY)) 59 59 60 static BOOLCommReadIOHandler(LPASYNCIOREQUEST lpRequest, DWORD *lpdwResult, DWORD *lpdwTimeOut);61 static BOOLCommWriteIOHandler(LPASYNCIOREQUEST lpRequest, DWORD *lpdwResult, DWORD *lpdwTimeOut);62 static BOOLCommPollIOHandler(LPASYNCIOREQUEST lpRequest, DWORD *lpdwResult, DWORD *lpdwTimeOut);60 static DWORD CommReadIOHandler(LPASYNCIOREQUEST lpRequest, DWORD *lpdwResult, DWORD *lpdwTimeOut); 61 static DWORD CommWriteIOHandler(LPASYNCIOREQUEST lpRequest, DWORD *lpdwResult, DWORD *lpdwTimeOut); 62 static DWORD CommPollIOHandler(LPASYNCIOREQUEST lpRequest, DWORD *lpdwResult, DWORD *lpdwTimeOut); 63 63 64 64 //****************************************************************************** … … 287 287 dprintf(("HMComm: Serial communication port close request")); 288 288 289 if(pDevData && pHMHandleData->dwFlags & FILE_FLAG_OVERLAPPED)290 {291 DebugInt3();292 }293 289 delete pHMHandleData->lpHandlerData; 294 290 return OSLibDosClose(pHMHandleData->hHMHandle); … … 297 293 //Overlapped read handler 298 294 //****************************************************************************** 299 BOOL CommReadIOHandler(LPASYNCIOREQUEST lpRequest, DWORD *lpdwResult, DWORD *lpdwTimeOut) 300 { 301 return FALSE; 295 DWORD CommReadIOHandler(LPASYNCIOREQUEST lpRequest, DWORD *lpdwResult, DWORD *lpdwTimeOut) 296 { 297 PHMHANDLEDATA pHMHandleData; 298 BOOL ret; 299 ULONG ulBytesRead; 300 301 pHMHandleData = HMQueryHandleData(lpRequest->hHandle); 302 if(pHMHandleData == NULL) { 303 dprintf(("!ERROR!: CommReadIOHandler handle %x not valid", lpRequest->hHandle)); 304 DebugInt3(); 305 return ERROR_INVALID_HANDLE; 306 } 307 308 #ifdef DEBUG 309 RXQUEUE qInfo; 310 ULONG ulLen = sizeof(qInfo); 311 ULONG rc = OSLibDosDevIOCtl(pHMHandleData->hHMHandle, 312 IOCTL_ASYNC, 313 ASYNC_GETINQUECOUNT, 314 0,0,0, 315 &qInfo,ulLen,&ulLen); 316 dprintf(("ASYNC_GETINQUECOUNT -> qInfo.cch %d (queue size %d) rc %d", qInfo.cch, qInfo.cb, rc)); 317 #endif 318 319 ret = OSLibDosRead(pHMHandleData->hHMHandle, (LPVOID)lpRequest->lpBuffer, lpRequest->nNumberOfBytes, 320 &ulBytesRead); 321 322 *lpdwResult = (ret) ? ulBytesRead : 0; 323 dprintf2(("KERNEL32: CommReadIOHandler %d bytes read", *lpdwResult)); 324 325 if(ret == FALSE) { 326 dprintf(("!ERROR!: CommReadIOHandler failed with rc %d", GetLastError())); 327 } 328 else { 329 //testestestest 330 dprintf2(("%d Bytes read:", ulBytesRead)); 331 for(int i=0;i<ulBytesRead;i++) { 332 dprintf2(("%x %c", ((char *)lpRequest->lpBuffer)[i], ((char *)lpRequest->lpBuffer)[i])); 333 } 334 //testestestset 335 } 336 return GetLastError(); 302 337 } 303 338 //****************************************************************************** 304 339 //Overlapped write handler 305 340 //****************************************************************************** 306 BOOL CommWriteIOHandler(LPASYNCIOREQUEST lpRequest, DWORD *lpdwResult, DWORD *lpdwTimeOut) 307 { 308 return FALSE; 341 DWORD CommWriteIOHandler(LPASYNCIOREQUEST lpRequest, DWORD *lpdwResult, DWORD *lpdwTimeOut) 342 { 343 PHMHANDLEDATA pHMHandleData; 344 BOOL ret; 345 ULONG ulBytesWritten; 346 347 pHMHandleData = HMQueryHandleData(lpRequest->hHandle); 348 if(pHMHandleData == NULL) { 349 dprintf(("!ERROR!: CommWriteIOHandler handle %x not valid", lpRequest->hHandle)); 350 DebugInt3(); 351 return ERROR_INVALID_HANDLE; 352 } 353 354 //testestestest 355 dprintf2(("Bytes to write:")); 356 for(int i=0;i<lpRequest->nNumberOfBytes;i++) { 357 dprintf2(("%x %c", ((char *)lpRequest->lpBuffer)[i], ((char *)lpRequest->lpBuffer)[i])); 358 } 359 //testestestset 360 361 ret = OSLibDosWrite(pHMHandleData->hHMHandle, (LPVOID)lpRequest->lpBuffer, lpRequest->nNumberOfBytes, 362 &ulBytesWritten); 363 364 *lpdwResult = (ret) ? ulBytesWritten : 0; 365 dprintf2(("KERNEL32:CommWriteIOHandler %d byte(s) written", *lpdwResult)); 366 367 if(ret == FALSE) { 368 dprintf(("!ERROR!: CommWriteIOHandler failed with rc %d", GetLastError())); 369 } 370 return GetLastError(); 309 371 } 310 372 //****************************************************************************** 311 373 //Overlapped WaitCommEvent handler 312 374 //****************************************************************************** 313 BOOL CommPollIOHandler(LPASYNCIOREQUEST lpRequest, DWORD *lpdwResult, DWORD *lpdwTimeOut) 314 { 375 DWORD CommPollIOHandler(LPASYNCIOREQUEST lpRequest, DWORD *lpdwResult, DWORD *lpdwTimeOut) 376 { 377 APIRET rc; 378 ULONG ulLen; 379 USHORT COMEvt; 380 DWORD dwEvent,dwMask; 381 PHMHANDLEDATA pHMHandleData; 382 PHMDEVCOMDATA pDevData; 383 384 pHMHandleData = HMQueryHandleData(lpRequest->hHandle); 385 if(pHMHandleData == NULL || pHMHandleData->lpHandlerData == NULL) { 386 dprintf(("!ERROR!: CommWriteIOHandler handle %x not valid", lpRequest->hHandle)); 387 DebugInt3(); 388 return ERROR_INVALID_HANDLE; 389 } 390 391 pDevData = (PHMDEVCOMDATA)pHMHandleData->lpHandlerData; 392 393 dprintf(("CommPollIOHandler %x %x", pHMHandleData->hHMHandle, lpRequest->dwEventMask)); 394 315 395 *lpdwTimeOut = TIMEOUT_COMM; 316 return FALSE; 396 397 ulLen = sizeof(CHAR); 398 dwEvent = 0; 399 rc = 0; 400 ulLen = sizeof(COMEvt); 401 402 if(lpRequest->dwEventMask != pDevData->dwEventMask) { 403 dprintf(("!WARNING!: CommPollIOHandler: operation aborted (event mask changed)")); 404 return ERROR_OPERATION_ABORTED; // Exit if the Mask gets changed 405 } 406 rc = OSLibDosDevIOCtl(pHMHandleData->hHMHandle, 407 IOCTL_ASYNC, 408 ASYNC_GETCOMMEVENT, 409 0,0,0, 410 &COMEvt,ulLen,&ulLen); 411 if(!rc) 412 { 413 dwEvent |= (COMEvt&0x0001)? EV_RXCHAR:0; 414 //dwEvent |= (COMEvt&0x0002)? 0:0; 415 dwEvent |= (COMEvt&0x0004)? EV_TXEMPTY:0; 416 dwEvent |= (COMEvt&0x0008)? EV_CTS:0; 417 dwEvent |= (COMEvt&0x0010)? EV_DSR:0; 418 //dwEvent |= (COMEvt&0x0020)? 0:0; DCS = RLSD? 419 dwEvent |= (COMEvt&0x0040)? EV_BREAK:0; 420 dwEvent |= (COMEvt&0x0080)? EV_ERR:0; 421 dwEvent |= (COMEvt&0x0100)? EV_RING:0; 422 if((dwEvent & dwMask)) { 423 *lpdwResult = (dwEvent & dwMask); 424 return ERROR_SUCCESS; 425 } 426 } 427 else { 428 dprintf(("!ERROR!: CommPollIOHandler: OSLibDosDevIOCtl failed with rc %d", rc)); 429 *lpdwResult = 0; 430 return ERROR_OPERATION_ABORTED; 431 } 432 return ERROR_IO_PENDING; 317 433 } 318 434 /***************************************************************************** … … 370 486 } 371 487 372 //testestestest373 dprintf2(("Bytes to write:"));374 for(int i=0;i<nNumberOfBytesToWrite;i++) {375 dprintf2(("%x %c", ((char *)lpBuffer)[i], ((char *)lpBuffer)[i]));376 }377 //testestestset378 379 488 ret = OSLibDosWrite(pHMHandleData->hHMHandle, (LPVOID)lpBuffer, nNumberOfBytesToWrite, 380 489 &ulBytesWritten); … … 445 554 } 446 555 556 #ifdef DEBUG 447 557 RXQUEUE qInfo; 448 558 ULONG ulLen = sizeof(qInfo); … … 453 563 &qInfo,ulLen,&ulLen); 454 564 dprintf(("ASYNC_GETINQUECOUNT -> qInfo.cch %d (queue size %d) rc %d", qInfo.cch, qInfo.cb, rc)); 565 #endif 455 566 456 567 ret = OSLibDosRead(pHMHandleData->hHMHandle, (LPVOID)lpBuffer, nNumberOfBytesToRead, … … 555 666 if(pHMHandleData->dwFlags & FILE_FLAG_OVERLAPPED) 556 667 { 557 return pDevData->iohandler->WaitForEvent(pHMHandleData->hWin32Handle, lpfdwEvtMask,668 return pDevData->iohandler->WaitForEvent(pHMHandleData->hWin32Handle, pDevData->dwEventMask, lpfdwEvtMask, 558 669 lpo, NULL, (DWORD)pDevData); 559 670 }
Note:
See TracChangeset
for help on using the changeset viewer.