public void CloseSerial() { try { KillMe = true; Thread.Sleep(1000); Win32Com.CloseHandle(_hPort); } catch (Exception) { // ignored } }
public void InitSerial(string port) { var portDcb = new DCB(); COMSTAT cs; uint er; _hPort = Win32Com.CreateFile(port, Win32Com.GENERIC_READ | Win32Com.GENERIC_WRITE, 0, IntPtr.Zero, Win32Com.OPEN_EXISTING, 0, IntPtr.Zero); if (_hPort == (IntPtr)Win32Com.INVALID_HANDLE_VALUE) { if (Marshal.GetLastWin32Error() == Win32Com.ERROR_ACCESS_DENIED) { return; } throw new CommPortException("Port Open Failure"); } bool isError = Win32Com.ClearCommError(_hPort, out er, out cs); Win32Com.SetupComm(_hPort, 516, 516); Win32Com.GetCommState(_hPort, ref portDcb); //portDcb.Init(false, false, false, 0, false, false, false, false, 0); portDcb.BaudRate = 115200; portDcb.DCBlength = Marshal.SizeOf(typeof(DCB)); portDcb.ByteSize = 8; portDcb.Parity = 0; portDcb.StopBits = 0; Win32Com.SetCommState(_hPort, ref portDcb); Win32Com.EscapeCommFunction(_hPort, Win32Com.CLRRTS); Win32Com.EscapeCommFunction(_hPort, Win32Com.SETDTR); Win32Com.SetCommMask(_hPort, Win32Com.EV_RXCHAR); Win32Com.GetCommTimeouts(_hPort, out var commTimeouts); commTimeouts.ReadTotalTimeoutConstant = 0; commTimeouts.ReadTotalTimeoutMultiplier = 0; Win32Com.SetCommTimeouts(_hPort, ref commTimeouts); JvsClient.HPort = _hPort; }