private void SerialPortDataReceived(object sender, SerialDataReceivedEventArgs e) { _buffer += _serialPort.ReadExisting(); if (_buffer.EndsWith("\r")) { var data = _buffer.TrimEnd('\r'); if (data.StartsWith("$")) { ConfigurationEvent?.Invoke(this, new ConfigurationEventArgs(_lastCommand, data)); _buffer = null; return; } _buffer = null; switch (data) { case "S1": case "F1": ButtonPressedAction(sender, Button.F1); break; case "S2": case "F2": ButtonPressedAction(sender, Button.F2); break; case "Up": ButtonPressedAction(sender, Button.Up); break; case "Dwn": case "Down": ButtonPressedAction(sender, Button.Down); break; default: ScanAction(sender, data); break; } } }