/// <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);
            }
        }
Example #2
0
 /// <summary>
 /// Создает экземпляр класса
 /// </summary>
 /// <param name="dcb">Управляющая структура порта</param>
 public CommStateEventArgs(DCB dcb)
     : base()
 {
     _dcb     = dcb;
     _handled = false;
 }
 /// <summary>
 /// Создает экземпляр класса
 /// </summary>
 /// <param name="dcb">Управляющая структура порта</param>
 public CommStateEventArgs(DCB dcb)
     : base()
 {
     _dcb = dcb;
     _handled = false;
 }
Example #4
0
 internal extern static Boolean SetCommState(
     SafeFileHandle hFile,
     ref DCB lpDCB
     );