示例#1
0
        private void SetTimeouts()
        {
            if (IsOpen)
            {
                CommTimeouts ct = new CommTimeouts();
                ct.ReadIntervalTimeout        = readTimeout;
                ct.ReadTotalTimeoutMultiplier = 1;
                ct.ReadTotalTimeoutConstant   = 0;
                ct.WriteTotalTimeoutConstant  = writeTimeout;
                ct.WriteTotalTimeoutConstant  = 0;

                if (!SetCommTimeouts(comPortHandle, ref ct))
                {
                    throw new IOException("Error setting timeouts");
                }
            }
        }
示例#2
0
 static extern bool SetCommTimeouts(IntPtr hFile, [In] ref CommTimeouts lpCommTimeouts);
        private void Initialize()
        {
            _ReadSafeFileHandle = ApiService.CreateReadConnection(DeviceId, FileAccessRights.GenericRead | FileAccessRights.GenericWrite);

            if (_ReadSafeFileHandle.IsInvalid)
            {
                return;
            }

            var dcb = new Dcb();

            var isSuccess = ApiService.AGetCommState(_ReadSafeFileHandle, ref dcb);

            WindowsDeviceBase.HandleError(isSuccess, Messages.ErrorCouldNotGetCommState);

            dcb.ByteSize          = _ByteSize;
            dcb.fDtrControl       = 1;
            dcb.BaudRate          = (uint)_BaudRate;
            dcb.fBinary           = 1;
            dcb.fTXContinueOnXoff = 0;
            dcb.fAbortOnError     = 0;

            dcb.fParity = 1;
            switch (_Parity)
            {
            case Parity.Even:
                dcb.Parity = 2;
                break;

            case Parity.Mark:
                dcb.Parity = 3;
                break;

            case Parity.Odd:
                dcb.Parity = 1;
                break;

            case Parity.Space:
                dcb.Parity = 4;
                break;

            default:
                dcb.Parity = 0;
                break;
            }

            switch (_StopBits)
            {
            case StopBits.One:
                dcb.StopBits = 0;
                break;

            case StopBits.OnePointFive:
                dcb.StopBits = 1;
                break;

            case StopBits.Two:
                dcb.StopBits = 2;
                break;

            default:
                throw new ArgumentException(Messages.ErrorMessageStopBitsMustBeSpecified);
            }

            isSuccess = ApiService.ASetCommState(_ReadSafeFileHandle, ref dcb);
            WindowsDeviceBase.HandleError(isSuccess, Messages.ErrorCouldNotSetCommState);

            var timeouts = new CommTimeouts
            {
                WriteTotalTimeoutConstant   = 0,
                ReadIntervalTimeout         = 1,
                WriteTotalTimeoutMultiplier = 0,
                ReadTotalTimeoutMultiplier  = 0,
                ReadTotalTimeoutConstant    = 0
            };

            isSuccess = ApiService.ASetCommTimeouts(_ReadSafeFileHandle, ref timeouts);
            WindowsDeviceBase.HandleError(isSuccess, Messages.ErrorCouldNotSetCommTimeout);
        }
示例#4
0
 private static extern int WinSetCommTimeouts(IntPtr hFile, CommTimeouts timeouts);
示例#5
0
 override internal bool SetCommTimeouts(IntPtr hPort, CommTimeouts timeouts)
 {
     return(Convert.ToBoolean(WinSetCommTimeouts(hPort, timeouts)));
 }
示例#6
0
 private static extern int SetCommTimeouts(int hFile, ref CommTimeouts lpCommTimeouts);