Commit 3c2abaf4 authored by Eric Pouech's avatar Eric Pouech Committed by Alexandre Julliard

ntdll: Implemented IOCTL for char transmission: IMMEDIATE_CHAR.

parent 5973955e
......@@ -1652,23 +1652,20 @@ BOOL WINAPI GetCommState(
* Transmits a single character in front of any pending characters in the
* output buffer. Usually used to send an interrupt character to a host.
*
* PARAMS
* hComm [in] The communication device in need of a command character
* chTransmit [in] The character to transmit
*
* RETURNS
*
* True if the call succeeded, false if the previous command character to the
* same device has not been sent yet the handle is bad etc.
*
* BUGS
*
* Stub.
*/
BOOL WINAPI TransmitCommChar(
HANDLE hComm, /* [in] The communication device in need of a command character. */
CHAR chTransmit) /* [in] The character to transmit. */
BOOL WINAPI TransmitCommChar(HANDLE hComm, CHAR chTransmit)
{
DWORD w;
WARN("(%p,'%c') not perfect!\n",hComm,chTransmit);
return WriteFile( hComm, &chTransmit, 1, &w, NULL );
return DeviceIoControl(hComm, IOCTL_SERIAL_IMMEDIATE_CHAR,
&chTransmit, sizeof(chTransmit), NULL, 0, NULL, NULL);
}
......
......@@ -211,6 +211,15 @@ static NTSTATUS set_wait_mask(HANDLE hDevice, DWORD mask)
return status;
}
static NTSTATUS xmit_immediate(HANDLE hDevice, int fd, char* ptr)
{
/* FIXME: not perfect as it should bypass the in-queue */
WARN("(%p,'%c') not perfect!\n", hDevice, *ptr);
if (write(fd, ptr, 1) != 1)
return FILE_GetNtStatus();
return STATUS_SUCCESS;
}
/******************************************************************
* COMM_DeviceIoControl
*
......@@ -255,6 +264,12 @@ NTSTATUS COMM_DeviceIoControl(HANDLE hDevice,
else
status = STATUS_INVALID_PARAMETER;
break;
case IOCTL_SERIAL_IMMEDIATE_CHAR:
if (lpInBuffer && nInBufferSize == sizeof(CHAR))
status = xmit_immediate(hDevice, fd, lpInBuffer);
else
status = STATUS_INVALID_PARAMETER;
break;
case IOCTL_SERIAL_PURGE:
if (lpInBuffer && nInBufferSize == sizeof(DWORD))
status = purge(fd, *(DWORD*)lpInBuffer);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment