mirror of
https://github.com/reactos/reactos.git
synced 2025-08-03 15:36:04 +00:00
Saveliy Tretiakov <saveliyt@mail.ru>
- Implement ClearCommError - Correct badly implemented apis: ClearCommBreak, EscapeCommFunction, GetCommMask, GetCommModemStatus, GetCommState, GetCommTimeouts, PurgeComm, SetCommBreak, SetCommMask, SetCommTimeouts, SetCommState, SetupComm, TransmitCommChar, WaitCommEvent svn path=/trunk/; revision=14346
This commit is contained in:
parent
fce0440b32
commit
577b88645b
1 changed files with 73 additions and 125 deletions
|
@ -7,10 +7,14 @@
|
||||||
* PROGRAMMER: Ariadne ( ariadne@xs4all.nl)
|
* PROGRAMMER: Ariadne ( ariadne@xs4all.nl)
|
||||||
* modified from WINE [ Onno Hovers, (onno@stack.urc.tue.nl) ]
|
* modified from WINE [ Onno Hovers, (onno@stack.urc.tue.nl) ]
|
||||||
* Robert Dickenson (robd@mok.lvcom.com)
|
* Robert Dickenson (robd@mok.lvcom.com)
|
||||||
|
* Saveliy Tretiakov (saveliyt@mail.ru)
|
||||||
* UPDATE HISTORY:
|
* UPDATE HISTORY:
|
||||||
* Created 01/11/98
|
* Created 01/11/98
|
||||||
* RDD (30/09/2002) implemented many function bodies to call serial driver.
|
* RDD (30/09/2002) implemented many function bodies to call serial driver.
|
||||||
* KJK (11/02/2003) implemented BuildCommDCB & BuildCommDCBAndTimeouts
|
* KJK (11/02/2003) implemented BuildCommDCB & BuildCommDCBAndTimeouts
|
||||||
|
* ST (21/03/2005) implemented GetCommProperties
|
||||||
|
* ST (24/03/2005) implemented ClearCommError. Corrected many functions.
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <k32.h>
|
#include <k32.h>
|
||||||
|
@ -760,65 +764,69 @@ BOOL
|
||||||
STDCALL
|
STDCALL
|
||||||
ClearCommBreak(HANDLE hFile)
|
ClearCommBreak(HANDLE hFile)
|
||||||
{
|
{
|
||||||
BOOL result = FALSE;
|
DWORD dwBytesReturned;
|
||||||
DWORD dwBytesReturned;
|
return DeviceIoControl(hFile, IOCTL_SERIAL_SET_BREAK_OFF,
|
||||||
|
NULL, 0, NULL, 0, &dwBytesReturned, NULL);
|
||||||
if (hFile == INVALID_HANDLE_VALUE) {
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
result = DeviceIoControl(hFile, IOCTL_SERIAL_SET_BREAK_OFF, NULL, 0, NULL, 0, &dwBytesReturned, NULL);
|
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
BOOL
|
BOOL
|
||||||
STDCALL
|
STDCALL
|
||||||
ClearCommError(HANDLE hFile, LPDWORD lpErrors, LPCOMSTAT lpStat)
|
ClearCommError(HANDLE hFile, LPDWORD lpErrors, LPCOMSTAT lpComStat)
|
||||||
{
|
{
|
||||||
BOOL result = FALSE;
|
BOOL status = FALSE;
|
||||||
DWORD dwBytesReturned;
|
DWORD dwBytesReturned;
|
||||||
|
SERIAL_STATUS SerialStatus;
|
||||||
|
|
||||||
if (hFile == INVALID_HANDLE_VALUE) {
|
status = DeviceIoControl(hFile, IOCTL_SERIAL_GET_COMMSTATUS, NULL, 0,
|
||||||
//SetLastError(CE_MODE);
|
&SerialStatus, sizeof(SERIAL_STATUS), &dwBytesReturned, NULL);
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
if (lpErrors == NULL) {
|
|
||||||
DPRINT("ERROR: GetCommState() - NULL Errors pointer\n");
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
// *lpErrors = CE_BREAK;
|
|
||||||
// *lpErrors = CE_FRAME;
|
|
||||||
// *lpErrors = CE_IOE;
|
|
||||||
// *lpErrors = CE_MODE;
|
|
||||||
// *lpErrors = CE_OVERRUN;
|
|
||||||
// *lpErrors = CE_RXOVER;
|
|
||||||
// *lpErrors = CE_RXPARITY;
|
|
||||||
// *lpErrors = CE_TXFULL;
|
|
||||||
/*
|
|
||||||
CE_BREAK The hardware detected a break condition.
|
|
||||||
CE_FRAME The hardware detected a framing error.
|
|
||||||
CE_IOE An I/O error occurred during communications with the device.
|
|
||||||
CE_MODE The requested mode is not supported, or the hFile parameter is invalid. If this value is specified, it is the only valid error.
|
|
||||||
CE_OVERRUN A character-buffer overrun has occurred. The next character is lost.
|
|
||||||
CE_RXOVER An input buffer overflow has occurred. There is either no room in the input buffer, or a character was received after the end-of-file (EOF) character.
|
|
||||||
CE_RXPARITY The hardware detected a parity error.
|
|
||||||
CE_TXFULL The application tried to transmit a character, but the output buffer was full.
|
|
||||||
*/
|
|
||||||
result = DeviceIoControl(hFile, IOCTL_SERIAL_RESET_DEVICE, NULL, 0, NULL, 0, &dwBytesReturned, NULL);
|
|
||||||
|
|
||||||
if (lpStat != NULL) {
|
if(!NT_SUCCESS(status))
|
||||||
lpStat->fCtsHold = 0;
|
{
|
||||||
lpStat->fDsrHold = 0;
|
return status;
|
||||||
lpStat->fRlsdHold = 0;
|
}
|
||||||
lpStat->fXoffHold = 0;
|
|
||||||
lpStat->fXoffSent = 0;
|
if(lpErrors)
|
||||||
lpStat->fEof = 0;
|
{
|
||||||
lpStat->fTxim = 0;
|
*lpErrors = 0;
|
||||||
lpStat->cbInQue = 0;
|
if(SerialStatus.Errors & SERIAL_ERROR_BREAK)
|
||||||
lpStat->cbOutQue = 0;
|
*lpErrors |= CE_BREAK;
|
||||||
|
if(SerialStatus.Errors & SERIAL_ERROR_FRAMING)
|
||||||
|
*lpErrors |= CE_FRAME;
|
||||||
|
if(SerialStatus.Errors & SERIAL_ERROR_OVERRUN)
|
||||||
|
*lpErrors |= CE_OVERRUN;
|
||||||
|
if(SerialStatus.Errors & SERIAL_ERROR_QUEUEOVERRUN )
|
||||||
|
*lpErrors |= CE_RXOVER;
|
||||||
|
if(SerialStatus.Errors & SERIAL_ERROR_PARITY)
|
||||||
|
*lpErrors |= CE_RXPARITY;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lpComStat)
|
||||||
|
{
|
||||||
|
ZeroMemory(lpComStat, sizeof(COMSTAT));
|
||||||
|
|
||||||
|
if(SerialStatus.HoldReasons & SERIAL_TX_WAITING_FOR_CTS)
|
||||||
|
lpComStat->fCtsHold = TRUE;
|
||||||
|
if(SerialStatus.HoldReasons & SERIAL_TX_WAITING_FOR_DSR)
|
||||||
|
lpComStat->fDsrHold = TRUE;
|
||||||
|
if(SerialStatus.HoldReasons & SERIAL_TX_WAITING_FOR_DCD)
|
||||||
|
lpComStat->fRlsdHold = TRUE;
|
||||||
|
if(SerialStatus.HoldReasons & SERIAL_TX_WAITING_FOR_XON)
|
||||||
|
lpComStat->fXoffHold = TRUE;
|
||||||
|
if(SerialStatus.HoldReasons & SERIAL_TX_WAITING_XOFF_SENT)
|
||||||
|
lpComStat->fXoffSent = TRUE;
|
||||||
|
|
||||||
|
if(SerialStatus.EofReceived)
|
||||||
|
lpComStat->fEof = TRUE;
|
||||||
|
|
||||||
|
if(SerialStatus.WaitForImmediate)
|
||||||
|
lpComStat->fTxim = TRUE;
|
||||||
|
|
||||||
|
lpComStat->cbInQue = SerialStatus.AmountInInQueue;
|
||||||
|
lpComStat->cbOutQue = SerialStatus.AmountInOutQueue;
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -858,9 +866,6 @@ EscapeCommFunction(HANDLE hFile, DWORD dwFunc)
|
||||||
BOOL result = FALSE;
|
BOOL result = FALSE;
|
||||||
DWORD dwBytesReturned;
|
DWORD dwBytesReturned;
|
||||||
|
|
||||||
if (hFile == INVALID_HANDLE_VALUE) {
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
switch (dwFunc) {
|
switch (dwFunc) {
|
||||||
case CLRDTR: // Clears the DTR (data-terminal-ready) signal.
|
case CLRDTR: // Clears the DTR (data-terminal-ready) signal.
|
||||||
result = DeviceIoControl(hFile, IOCTL_SERIAL_CLR_DTR, NULL, 0, NULL, 0, &dwBytesReturned, NULL);
|
result = DeviceIoControl(hFile, IOCTL_SERIAL_CLR_DTR, NULL, 0, NULL, 0, &dwBytesReturned, NULL);
|
||||||
|
@ -891,7 +896,7 @@ EscapeCommFunction(HANDLE hFile, DWORD dwFunc)
|
||||||
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return TRUE;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -914,15 +919,9 @@ BOOL
|
||||||
STDCALL
|
STDCALL
|
||||||
GetCommMask(HANDLE hFile, LPDWORD lpEvtMask)
|
GetCommMask(HANDLE hFile, LPDWORD lpEvtMask)
|
||||||
{
|
{
|
||||||
BOOL result = FALSE;
|
|
||||||
DWORD dwBytesReturned;
|
DWORD dwBytesReturned;
|
||||||
|
return DeviceIoControl(hFile, IOCTL_SERIAL_GET_WAIT_MASK,
|
||||||
if (hFile == INVALID_HANDLE_VALUE) {
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
result = DeviceIoControl(hFile, IOCTL_SERIAL_GET_WAIT_MASK,
|
|
||||||
NULL, 0, lpEvtMask, sizeof(DWORD), &dwBytesReturned, NULL);
|
NULL, 0, lpEvtMask, sizeof(DWORD), &dwBytesReturned, NULL);
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -933,15 +932,10 @@ BOOL
|
||||||
STDCALL
|
STDCALL
|
||||||
GetCommModemStatus(HANDLE hFile, LPDWORD lpModemStat)
|
GetCommModemStatus(HANDLE hFile, LPDWORD lpModemStat)
|
||||||
{
|
{
|
||||||
BOOL result = FALSE;
|
|
||||||
DWORD dwBytesReturned;
|
DWORD dwBytesReturned;
|
||||||
|
|
||||||
if (hFile == INVALID_HANDLE_VALUE) {
|
return DeviceIoControl(hFile, IOCTL_SERIAL_GET_MODEMSTATUS,
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
result = DeviceIoControl(hFile, IOCTL_SERIAL_GET_MODEMSTATUS,
|
|
||||||
NULL, 0, lpModemStat, sizeof(DWORD), &dwBytesReturned, NULL);
|
NULL, 0, lpModemStat, sizeof(DWORD), &dwBytesReturned, NULL);
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -975,10 +969,6 @@ GetCommState(HANDLE hFile, LPDCB lpDCB)
|
||||||
|
|
||||||
DPRINT("GetCommState(%d, %p)\n", hFile, lpDCB);
|
DPRINT("GetCommState(%d, %p)\n", hFile, lpDCB);
|
||||||
|
|
||||||
if (hFile == INVALID_HANDLE_VALUE) {
|
|
||||||
DPRINT("ERROR: GetCommState() - INVALID_HANDLE_VALUE\n");
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
if (lpDCB == NULL) {
|
if (lpDCB == NULL) {
|
||||||
DPRINT("ERROR: GetCommState() - NULL DCB pointer\n");
|
DPRINT("ERROR: GetCommState() - NULL DCB pointer\n");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@ -1079,20 +1069,16 @@ BOOL
|
||||||
STDCALL
|
STDCALL
|
||||||
GetCommTimeouts(HANDLE hFile, LPCOMMTIMEOUTS lpCommTimeouts)
|
GetCommTimeouts(HANDLE hFile, LPCOMMTIMEOUTS lpCommTimeouts)
|
||||||
{
|
{
|
||||||
BOOL result = FALSE;
|
|
||||||
DWORD dwBytesReturned;
|
DWORD dwBytesReturned;
|
||||||
|
|
||||||
if (hFile == INVALID_HANDLE_VALUE) {
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
if (lpCommTimeouts == NULL) {
|
if (lpCommTimeouts == NULL) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
result = DeviceIoControl(hFile, IOCTL_SERIAL_GET_TIMEOUTS,
|
|
||||||
|
return DeviceIoControl(hFile, IOCTL_SERIAL_GET_TIMEOUTS,
|
||||||
NULL, 0,
|
NULL, 0,
|
||||||
lpCommTimeouts, sizeof(COMMTIMEOUTS),
|
lpCommTimeouts, sizeof(COMMTIMEOUTS),
|
||||||
&dwBytesReturned, NULL);
|
&dwBytesReturned, NULL);
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1127,15 +1113,10 @@ BOOL
|
||||||
STDCALL
|
STDCALL
|
||||||
PurgeComm(HANDLE hFile, DWORD dwFlags)
|
PurgeComm(HANDLE hFile, DWORD dwFlags)
|
||||||
{
|
{
|
||||||
BOOL result = FALSE;
|
|
||||||
DWORD dwBytesReturned;
|
DWORD dwBytesReturned;
|
||||||
|
|
||||||
if (hFile == INVALID_HANDLE_VALUE) {
|
return DeviceIoControl(hFile, IOCTL_SERIAL_PURGE,
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
result = DeviceIoControl(hFile, IOCTL_SERIAL_PURGE,
|
|
||||||
&dwFlags, sizeof(DWORD), NULL, 0, &dwBytesReturned, NULL);
|
&dwFlags, sizeof(DWORD), NULL, 0, &dwBytesReturned, NULL);
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1146,14 +1127,9 @@ BOOL
|
||||||
STDCALL
|
STDCALL
|
||||||
SetCommBreak(HANDLE hFile)
|
SetCommBreak(HANDLE hFile)
|
||||||
{
|
{
|
||||||
BOOL result = FALSE;
|
|
||||||
DWORD dwBytesReturned;
|
DWORD dwBytesReturned;
|
||||||
|
|
||||||
if (hFile == INVALID_HANDLE_VALUE) {
|
return DeviceIoControl(hFile, IOCTL_SERIAL_SET_BREAK_ON, NULL, 0, NULL, 0, &dwBytesReturned, NULL);
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
result = DeviceIoControl(hFile, IOCTL_SERIAL_SET_BREAK_ON, NULL, 0, NULL, 0, &dwBytesReturned, NULL);
|
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1176,15 +1152,10 @@ BOOL
|
||||||
STDCALL
|
STDCALL
|
||||||
SetCommMask(HANDLE hFile, DWORD dwEvtMask)
|
SetCommMask(HANDLE hFile, DWORD dwEvtMask)
|
||||||
{
|
{
|
||||||
BOOL result = FALSE;
|
|
||||||
DWORD dwBytesReturned;
|
DWORD dwBytesReturned;
|
||||||
|
|
||||||
if (hFile == INVALID_HANDLE_VALUE) {
|
return DeviceIoControl(hFile, IOCTL_SERIAL_SET_WAIT_MASK,
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
result = DeviceIoControl(hFile, IOCTL_SERIAL_SET_WAIT_MASK,
|
|
||||||
&dwEvtMask, sizeof(DWORD), NULL, 0, &dwBytesReturned, NULL);
|
&dwEvtMask, sizeof(DWORD), NULL, 0, &dwBytesReturned, NULL);
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1205,10 +1176,6 @@ SetCommState(HANDLE hFile, LPDCB lpDCB)
|
||||||
|
|
||||||
DPRINT("SetCommState(%d, %p) - ENTERED\n", hFile, lpDCB);
|
DPRINT("SetCommState(%d, %p) - ENTERED\n", hFile, lpDCB);
|
||||||
|
|
||||||
if (hFile == INVALID_HANDLE_VALUE) {
|
|
||||||
DPRINT("SetCommState() - ERROR: INVALID_HANDLE_VALUE\n");
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
if (lpDCB == NULL) {
|
if (lpDCB == NULL) {
|
||||||
DPRINT("SetCommState() - ERROR: NULL DCB pointer passed\n");
|
DPRINT("SetCommState() - ERROR: NULL DCB pointer passed\n");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@ -1326,13 +1293,9 @@ BOOL
|
||||||
STDCALL
|
STDCALL
|
||||||
SetCommTimeouts(HANDLE hFile, LPCOMMTIMEOUTS lpCommTimeouts)
|
SetCommTimeouts(HANDLE hFile, LPCOMMTIMEOUTS lpCommTimeouts)
|
||||||
{
|
{
|
||||||
BOOL result = FALSE;
|
|
||||||
DWORD dwBytesReturned;
|
DWORD dwBytesReturned;
|
||||||
SERIAL_TIMEOUTS Timeouts;
|
SERIAL_TIMEOUTS Timeouts;
|
||||||
|
|
||||||
if (hFile == INVALID_HANDLE_VALUE) {
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
if (lpCommTimeouts == NULL) {
|
if (lpCommTimeouts == NULL) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -1341,9 +1304,9 @@ SetCommTimeouts(HANDLE hFile, LPCOMMTIMEOUTS lpCommTimeouts)
|
||||||
Timeouts.ReadTotalTimeoutConstant = lpCommTimeouts->ReadTotalTimeoutConstant;
|
Timeouts.ReadTotalTimeoutConstant = lpCommTimeouts->ReadTotalTimeoutConstant;
|
||||||
Timeouts.WriteTotalTimeoutMultiplier = lpCommTimeouts->WriteTotalTimeoutMultiplier;
|
Timeouts.WriteTotalTimeoutMultiplier = lpCommTimeouts->WriteTotalTimeoutMultiplier;
|
||||||
Timeouts.WriteTotalTimeoutConstant = lpCommTimeouts->WriteTotalTimeoutConstant;
|
Timeouts.WriteTotalTimeoutConstant = lpCommTimeouts->WriteTotalTimeoutConstant;
|
||||||
result = DeviceIoControl(hFile, IOCTL_SERIAL_SET_TIMEOUTS,
|
|
||||||
|
return DeviceIoControl(hFile, IOCTL_SERIAL_SET_TIMEOUTS,
|
||||||
&Timeouts, sizeof(Timeouts), NULL, 0, &dwBytesReturned, NULL);
|
&Timeouts, sizeof(Timeouts), NULL, 0, &dwBytesReturned, NULL);
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1378,18 +1341,13 @@ BOOL
|
||||||
STDCALL
|
STDCALL
|
||||||
SetupComm(HANDLE hFile, DWORD dwInQueue, DWORD dwOutQueue)
|
SetupComm(HANDLE hFile, DWORD dwInQueue, DWORD dwOutQueue)
|
||||||
{
|
{
|
||||||
BOOL result = FALSE;
|
|
||||||
DWORD dwBytesReturned;
|
DWORD dwBytesReturned;
|
||||||
SERIAL_QUEUE_SIZE QueueSize;
|
SERIAL_QUEUE_SIZE QueueSize;
|
||||||
|
|
||||||
if (hFile == INVALID_HANDLE_VALUE) {
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
QueueSize.InSize = dwInQueue;
|
QueueSize.InSize = dwInQueue;
|
||||||
QueueSize.OutSize = dwOutQueue;
|
QueueSize.OutSize = dwOutQueue;
|
||||||
result = DeviceIoControl(hFile, IOCTL_SERIAL_SET_QUEUE_SIZE,
|
return DeviceIoControl(hFile, IOCTL_SERIAL_SET_QUEUE_SIZE,
|
||||||
&QueueSize, sizeof(QueueSize), NULL, 0, &dwBytesReturned, NULL);
|
&QueueSize, sizeof(QueueSize), NULL, 0, &dwBytesReturned, NULL);
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1400,15 +1358,9 @@ BOOL
|
||||||
STDCALL
|
STDCALL
|
||||||
TransmitCommChar(HANDLE hFile, char cChar)
|
TransmitCommChar(HANDLE hFile, char cChar)
|
||||||
{
|
{
|
||||||
BOOL result = FALSE;
|
|
||||||
DWORD dwBytesReturned;
|
DWORD dwBytesReturned;
|
||||||
|
return DeviceIoControl(hFile, IOCTL_SERIAL_IMMEDIATE_CHAR,
|
||||||
if (hFile == INVALID_HANDLE_VALUE) {
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
result = DeviceIoControl(hFile, IOCTL_SERIAL_IMMEDIATE_CHAR,
|
|
||||||
&cChar, sizeof(cChar), NULL, 0, &dwBytesReturned, NULL);
|
&cChar, sizeof(cChar), NULL, 0, &dwBytesReturned, NULL);
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1419,18 +1371,14 @@ BOOL
|
||||||
STDCALL
|
STDCALL
|
||||||
WaitCommEvent(HANDLE hFile, LPDWORD lpEvtMask, LPOVERLAPPED lpOverlapped)
|
WaitCommEvent(HANDLE hFile, LPDWORD lpEvtMask, LPOVERLAPPED lpOverlapped)
|
||||||
{
|
{
|
||||||
BOOL result = FALSE;
|
|
||||||
DWORD dwBytesReturned;
|
DWORD dwBytesReturned;
|
||||||
|
|
||||||
if (hFile == INVALID_HANDLE_VALUE) {
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
if (lpEvtMask == NULL) {
|
if (lpEvtMask == NULL) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
result = DeviceIoControl(hFile, IOCTL_SERIAL_WAIT_ON_MASK,
|
|
||||||
|
return DeviceIoControl(hFile, IOCTL_SERIAL_WAIT_ON_MASK,
|
||||||
NULL, 0, lpEvtMask, sizeof(DWORD), &dwBytesReturned, lpOverlapped);
|
NULL, 0, lpEvtMask, sizeof(DWORD), &dwBytesReturned, lpOverlapped);
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* EOF */
|
/* EOF */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue