Module: wine Branch: master Commit: 0617b490b339e7bcf7a17daa91c750bc601ee7a2 URL: https://source.winehq.org/git/wine.git/?a=commit;h=0617b490b339e7bcf7a17daa9...
Author: Alexandre Julliard julliard@winehq.org Date: Mon Sep 9 21:04:49 2019 +0200
ntdll: Add partial implementation for IOCTL_SERIAL_GET_PROPERTIES.
Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/ntdll/serial.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+)
diff --git a/dlls/ntdll/serial.c b/dlls/ntdll/serial.c index 66081d2865..66fb840167 100644 --- a/dlls/ntdll/serial.c +++ b/dlls/ntdll/serial.c @@ -338,6 +338,31 @@ static NTSTATUS get_modem_status(int fd, DWORD* lpModemStat) return status; }
+static NTSTATUS get_properties(int fd, SERIAL_COMMPROP *prop) +{ + /* FIXME: get actual properties from the device */ + memset( prop, 0, sizeof(*prop) ); + prop->PacketLength = 1; + prop->PacketVersion = 1; + prop->ServiceMask = SP_SERIALCOMM; + prop->MaxTxQueue = 4096; + prop->MaxRxQueue = 4096; + prop->MaxBaud = BAUD_115200; + prop->ProvSubType = PST_RS232; + prop->ProvCapabilities = PCF_DTRDSR | PCF_PARITY_CHECK | PCF_RTSCTS | PCF_TOTALTIMEOUTS | PCF_INTTIMEOUTS; + prop->SettableParams = SP_BAUD | SP_DATABITS | SP_HANDSHAKING | + SP_PARITY | SP_PARITY_CHECK | SP_STOPBITS ; + prop->SettableBaud = BAUD_075 | BAUD_110 | BAUD_134_5 | BAUD_150 | + BAUD_300 | BAUD_600 | BAUD_1200 | BAUD_1800 | BAUD_2400 | BAUD_4800 | + BAUD_9600 | BAUD_19200 | BAUD_38400 | BAUD_57600 | BAUD_115200 ; + prop->SettableData = DATABITS_5 | DATABITS_6 | DATABITS_7 | DATABITS_8 ; + prop->SettableStopParity = STOPBITS_10 | STOPBITS_15 | STOPBITS_20 | + PARITY_NONE | PARITY_ODD |PARITY_EVEN | PARITY_MARK | PARITY_SPACE; + prop->CurrentTxQueue = prop->MaxTxQueue; + prop->CurrentRxQueue = prop->MaxRxQueue; + return STATUS_SUCCESS; +} + static NTSTATUS get_special_chars(int fd, SERIAL_CHARS* sc) { struct termios port; @@ -1193,6 +1218,14 @@ static inline NTSTATUS io_control(HANDLE hDevice, } else status = STATUS_INVALID_PARAMETER; break; + case IOCTL_SERIAL_GET_PROPERTIES: + if (lpOutBuffer && nOutBufferSize == sizeof(SERIAL_COMMPROP)) + { + if (!(status = get_properties(fd, lpOutBuffer))) + sz = sizeof(SERIAL_COMMPROP); + } + else status = STATUS_INVALID_PARAMETER; + break; case IOCTL_SERIAL_IMMEDIATE_CHAR: if (lpInBuffer && nInBufferSize == sizeof(CHAR)) status = xmit_immediate(hDevice, fd, lpInBuffer);