From 2a23da6db556fa3f03ef00b14a85c4496001a7a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20H=C3=B6glinger-Stelzer?= Date: Mon, 3 Oct 2022 19:03:33 +0200 Subject: [PATCH] Ported more code --- Nefarius.Peripherals.SerialPort/SerialPort.cs | 9 +++--- .../Win32PInvoke/COMMTIMEOUTS.cs | 15 ---------- .../Win32PInvoke/Win32Com.cs | 29 ------------------- 3 files changed, 4 insertions(+), 49 deletions(-) delete mode 100644 Nefarius.Peripherals.SerialPort/Win32PInvoke/COMMTIMEOUTS.cs diff --git a/Nefarius.Peripherals.SerialPort/SerialPort.cs b/Nefarius.Peripherals.SerialPort/SerialPort.cs index 5c8b1b5..d4ea3d5 100644 --- a/Nefarius.Peripherals.SerialPort/SerialPort.cs +++ b/Nefarius.Peripherals.SerialPort/SerialPort.cs @@ -9,7 +9,6 @@ using Windows.Win32.Storage.FileSystem; using Microsoft.Win32.SafeHandles; using Nefarius.Peripherals.SerialPort.Win32PInvoke; using COMMPROP = Nefarius.Peripherals.SerialPort.Win32PInvoke.COMMPROP; -using COMMTIMEOUTS = Nefarius.Peripherals.SerialPort.Win32PInvoke.COMMTIMEOUTS; using COMSTAT = Nefarius.Peripherals.SerialPort.Win32PInvoke.COMSTAT; using DCB = Windows.Win32.Devices.Communication.DCB; @@ -369,8 +368,8 @@ namespace Nefarius.Peripherals.SerialPort commTimeouts.ReadIntervalTimeout = 0; commTimeouts.ReadTotalTimeoutConstant = 0; commTimeouts.ReadTotalTimeoutMultiplier = 0; - commTimeouts.WriteTotalTimeoutConstant = SendTimeoutConstant; - commTimeouts.WriteTotalTimeoutMultiplier = SendTimeoutMultiplier; + commTimeouts.WriteTotalTimeoutConstant = (uint)SendTimeoutConstant; + commTimeouts.WriteTotalTimeoutMultiplier = (uint)SendTimeoutMultiplier; portDcb.Init(Parity is Parity.Odd or Parity.Even, TxFlowCts, TxFlowDsr, (int)UseDtr, RxGateDsr, !TxWhenRxXoff, TxFlowX, RxFlowX, (int)UseRts); portDcb.BaudRate = (uint)BaudRate; @@ -383,13 +382,13 @@ namespace Nefarius.Peripherals.SerialPort portDcb.XonLim = (ushort)RxLowWater; if (RxQueue != 0 || TxQueue != 0) - if (!Win32Com.SetupComm(_hPort.DangerousGetHandle(), (uint)RxQueue, (uint)TxQueue)) + if (!PInvoke.SetupComm(_hPort, (uint)RxQueue, (uint)TxQueue)) ThrowException("Bad queue settings"); if (!PInvoke.SetCommState(_hPort, portDcb)) ThrowException("Bad com settings"); - if (!Win32Com.SetCommTimeouts(_hPort.DangerousGetHandle(), ref commTimeouts)) + if (!PInvoke.SetCommTimeouts(_hPort, commTimeouts)) ThrowException("Bad timeout settings"); _stateBrk = 0; diff --git a/Nefarius.Peripherals.SerialPort/Win32PInvoke/COMMTIMEOUTS.cs b/Nefarius.Peripherals.SerialPort/Win32PInvoke/COMMTIMEOUTS.cs deleted file mode 100644 index 6f74e2b..0000000 --- a/Nefarius.Peripherals.SerialPort/Win32PInvoke/COMMTIMEOUTS.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System; -using System.Runtime.InteropServices; - -namespace Nefarius.Peripherals.SerialPort.Win32PInvoke -{ - [StructLayout(LayoutKind.Sequential)] - internal struct COMMTIMEOUTS - { - internal Int32 ReadIntervalTimeout; - internal Int32 ReadTotalTimeoutMultiplier; - internal Int32 ReadTotalTimeoutConstant; - internal Int32 WriteTotalTimeoutMultiplier; - internal Int32 WriteTotalTimeoutConstant; - } -} \ No newline at end of file diff --git a/Nefarius.Peripherals.SerialPort/Win32PInvoke/Win32Com.cs b/Nefarius.Peripherals.SerialPort/Win32PInvoke/Win32Com.cs index 9bf4895..58b9e11 100644 --- a/Nefarius.Peripherals.SerialPort/Win32PInvoke/Win32Com.cs +++ b/Nefarius.Peripherals.SerialPort/Win32PInvoke/Win32Com.cs @@ -5,33 +5,10 @@ namespace Nefarius.Peripherals.SerialPort.Win32PInvoke { internal class Win32Com { - /// - /// Opening Testing and Closing the Port Handle. - /// - [DllImport("kernel32.dll", SetLastError = true)] - internal static extern IntPtr CreateFile(String lpFileName, UInt32 dwDesiredAccess, UInt32 dwShareMode, - IntPtr lpSecurityAttributes, UInt32 dwCreationDisposition, UInt32 dwFlagsAndAttributes, - IntPtr hTemplateFile); - //Constants for errors: - internal const UInt32 ERROR_FILE_NOT_FOUND = 2; - internal const UInt32 ERROR_INVALID_NAME = 123; internal const UInt32 ERROR_ACCESS_DENIED = 5; internal const UInt32 ERROR_IO_PENDING = 997; - //Constants for return value: - internal const Int32 INVALID_HANDLE_VALUE = -1; - - //Constants for dwFlagsAndAttributes: - internal const UInt32 FILE_FLAG_OVERLAPPED = 0x40000000; - - //Constants for dwCreationDisposition: - internal const UInt32 OPEN_EXISTING = 3; - - //Constants for dwDesiredAccess: - internal const UInt32 GENERIC_READ = 0x80000000; - internal const UInt32 GENERIC_WRITE = 0x40000000; - [DllImport("kernel32.dll")] internal static extern Boolean GetHandleInformation(IntPtr hObject, out UInt32 lpdwFlags); @@ -40,12 +17,6 @@ namespace Nefarius.Peripherals.SerialPort.Win32PInvoke /// Manipulating the communications settings. /// - [DllImport("kernel32.dll")] - internal static extern Boolean SetCommTimeouts(IntPtr hFile, [In] ref COMMTIMEOUTS lpCommTimeouts); - - [DllImport("kernel32.dll")] - internal static extern Boolean SetupComm(IntPtr hFile, UInt32 dwInQueue, UInt32 dwOutQueue); - /// /// Reading and writing. ///