mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-31 12:54:13 +00:00
ntdll: Implemented IOCTL for char transmission: IMMEDIATE_CHAR.
This commit is contained in:
parent
5973955e4e
commit
3c2abaf45e
2 changed files with 22 additions and 10 deletions
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue