Beispiel #1
0
 private CComPort()
 {
     AutoConnect = false;
     UseSLIP = false;
     _rxBuf = new List<byte>();
     RxData = new Queue<Pack>();
     Status = EPortStatus.Closed;
     _statusUpdaterTimer = new Timer(StatusTimerHandler, null,Timeout.Infinite, 2000);      
     var rxThread = new Thread(RxThreadHandler){IsBackground = true, Priority = ThreadPriority.Normal};
     rxThread.Start(_rxManualResetEvent);
 }
Beispiel #2
0
 /// <summary>
 /// Метод разрыва соединения и остановки потока вычитки
 /// </summary>
 public bool Disconnect()
 {
     if (_port.IsOpen)
     {
         _port.Close();
         Status = EPortStatus.Closed;
     }
     _rxManualResetEvent.Reset();
     RxData.Clear();
     _rxBuf.Clear();
     return(true);
 }
Beispiel #3
0
        private CComPort()
        {
            AutoConnect         = false;
            UseSLIP             = false;
            _rxBuf              = new List <byte>();
            RxData              = new Queue <Pack>();
            Status              = EPortStatus.Closed;
            _statusUpdaterTimer = new Timer(StatusTimerHandler, null, Timeout.Infinite, 2000);
            var rxThread = new Thread(RxThreadHandler)
            {
                IsBackground = true, Priority = ThreadPriority.Normal
            };

            rxThread.Start(_rxManualResetEvent);
        }
Beispiel #4
0
        private void StatusTimerHandler(object state)
        {
            if (!_port.IsOpen)               //Если порт оказался закрытым
            {
                Status = EPortStatus.Closed; //Меняем статус
                if (AutoConnect)             //и надо его открывать автоматически
                {
                    string s;
                    Connect(out s); //пробуем открыть
                }
            }

            if (PortStatusChanged != null)  //Если на событие статуса кто-то подписался, то вызываем обработчик, передав ему туда текущий статус
            {
                PortStatusChanged.BeginInvoke(this, new PortStatusChangedEventArgs {
                    Status = Status
                }, null, null);
            }
        }
Beispiel #5
0
 /// <summary>
 /// Метод открытия порта RS-232.
 /// </summary>
 /// <returns>true - если порт успешно открыт; false - если порт открыть не удалось, тогда msg содержит описание ошибки</returns>
 public bool Connect(out string msg)
 {
     try
     {
         if (!_port.IsOpen)
         {
             _port.Open();
             Status = EPortStatus.Open;
             _rxManualResetEvent.Set();
         }
         msg = "OK";
         return(true);
     }
     catch (Exception e)
     {
         Status = EPortStatus.Closed;
         msg    = e.Message;
         return(false);
     }
 }
Beispiel #6
0
        private void StatusTimerHandler(object state)
        {
            if (!_port.IsOpen) //Если порт оказался закрытым 
            {
              Status = EPortStatus.Closed; //Меняем статус
              if(AutoConnect) //и надо его открывать автоматически
              {
                  string s;
                  Connect(out s); //пробуем открыть
              }
            }

            if (PortStatusChanged != null)  //Если на событие статуса кто-то подписался, то вызываем обработчик, передав ему туда текущий статус
                PortStatusChanged.BeginInvoke(this, new PortStatusChangedEventArgs { Status = Status }, null, null);
        }
Beispiel #7
0
 /// <summary>
 /// Метод разрыва соединения и остановки потока вычитки
 /// </summary>
 public bool Disconnect()
 {
     if (_port.IsOpen)
     {
         _port.Close();
         Status = EPortStatus.Closed;
     }
    _rxManualResetEvent.Reset();
     RxData.Clear();
     _rxBuf.Clear();
     return true;
 }
Beispiel #8
0
 /// <summary>
 /// Метод открытия порта RS-232.
 /// </summary>
 /// <returns>true - если порт успешно открыт; false - если порт открыть не удалось, тогда msg содержит описание ошибки</returns>
 public bool Connect(out string msg)
 {
     try
     {
         if (!_port.IsOpen)
         {
             _port.Open();
             Status = EPortStatus.Open;
             _rxManualResetEvent.Set();
         }
         msg = "OK";
         return true;
     }
     catch (Exception e)
     {
         Status = EPortStatus.Closed;
         msg = e.Message;
         return false;
     }
 }