Example #1
0
        /// <summary>
        /// Открывает коммункационный порт
        /// </summary>
        public void Open()
        {
            // если порт открыт
            if (IsOpen)
            {
                // закрываем его
                Close();
            }

            // открываем порт
            _handle = WinApi.CreateFile(
                string.Format(_portNameFormat, _portName),
                (uint)(DESIRED_ACCESS.GENERIC_READ | DESIRED_ACCESS.GENERIC_WRITE),
                0,
                IntPtr.Zero,
                CREATION_DISPOSITION.OPEN_EXISTING,
                0,
                IntPtr.Zero);

            // проверяем результат открытия
            WinApi.Win32Check(!_handle.IsInvalid);

            if (IsSerial)
            {
                // читаем настройки порта
                WinApi.Win32Check(WinApi.GetCommState(_handle, ref _dcb));

                // инициализируем настройки значениями по умолчанию
                _dcb.BaudRate     = _baudRate;
                _dcb.ByteSize     = _dataBits;
                _dcb.fOutxDsrFlow = _dsrFlow ? 1U : 0U;
                _dcb.Parity       = (byte)_parity;
                _dcb.StopBits     = (byte)_stopBits;

                // если есть обработчик события
                if (SetCommStateEvent != null)
                {
                    CommStateEventArgs e = new CommStateEventArgs(_dcb);
                    SetCommStateEvent(this, e);
                    if (e.Handled)
                    {
                        _dcb = e.DCB;
                    }
                }

                // задаем настройки
                WinApi.Win32Check(WinApi.SetCommState(_handle, ref _dcb));

                // устанавливаем маску событий
                WinApi.SetCommMask(_handle, (uint)CommEvents.EV_TXEMPTY);
            }
        }
        /// <summary>
        /// Открывает коммункационный порт
        /// </summary>
        public void Open()
        {
            // если порт открыт
            if (IsOpen)
                // закрываем его
                Close();

            // открываем порт
            _handle = WinApi.CreateFile(
                String.Format(_portNameFormat, _portName),
                (uint)(DESIRED_ACCESS.GENERIC_READ | DESIRED_ACCESS.GENERIC_WRITE),
                0, 
                IntPtr.Zero, 
                CREATION_DISPOSITION.OPEN_EXISTING, 
                0, 
                IntPtr.Zero);

            // проверяем результат открытия
            WinApi.Win32Check(!_handle.IsInvalid);

            if (IsSerial)
            {
                // читаем настройки порта
                WinApi.Win32Check(WinApi.GetCommState(_handle, ref _dcb));

                // инициализируем настройки значениями по умолчанию
                _dcb.BaudRate = _baudRate;
                _dcb.ByteSize = _dataBits;
                _dcb.fOutxDsrFlow = _dsrFlow ? 1U : 0U;
                _dcb.Parity = (byte)_parity;
                _dcb.StopBits = (byte)_stopBits;

                // если есть обработчик события
                if (SetCommStateEvent != null)
                {
                    CommStateEventArgs e = new CommStateEventArgs(_dcb);
                    SetCommStateEvent(this, e);
                    if (e.Handled)
                        _dcb = e.DCB;
                }

                // задаем настройки
                WinApi.Win32Check(WinApi.SetCommState(_handle, ref _dcb));

                // устанавливаем маску событий
                WinApi.SetCommMask(_handle, (uint)CommEvents.EV_TXEMPTY);
            }
        }