Alexandre Julliard : ntdll: Add partial implementation for IOCTL_SERIAL_GET_PROPERTIES.

Alexandre Julliard julliard at winehq.org
Tue Sep 10 16:49:28 CDT 2019


Module: wine
Branch: master
Commit: 0617b490b339e7bcf7a17daa91c750bc601ee7a2
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=0617b490b339e7bcf7a17daa91c750bc601ee7a2

Author: Alexandre Julliard <julliard at 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 at 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);




More information about the wine-cvs mailing list