public void TrimDbcRawStream(StringReader reader) { var line = String.Empty; MessageDescriptor msgDesc = null; while ((line = reader.ReadLine()) != null) { if (line.StartsWith("BO_ ")) { if (msgDesc != null) { // this means that new message was met and previous message needs to be added to list msgDesc.AddSignals(msgDesc.Signals.OrderBy(o => o.StartBit).ToList()); Messages.Add(msgDesc); } msgDesc = new MessageDescriptor(); if (!msgDesc.ParseVectorDbcLine(line)) { // bad unparsing. clear message reference msgDesc = null; } } if (regSigStart.IsMatch(line) && (msgDesc != null)) { var sig = new SignalBitsDesc(); sig.ParseFromVectorDbcString(line); msgDesc.Signals.Add(sig); } else if (line.StartsWith("BA_ ")) { // try parse this section for getting cycle time var bastr = new AttrDescriptor(); if (bastr.ParseBA_(line) == true) { if (ba_.Where(b => b.MsgId == bastr.MsgId).FirstOrDefault() == null) { // there is no this message in collection yet ba_.Add(bastr); } } } if (line.StartsWith("CM_ ") || commenter.IsCollectingData) { if (commenter.PassString(line) == true) { if (commenter.Info.Type == CommentType.MessageComment) { var msg = Messages.Where(m => m.MessageId == commenter.Info.MsgId).FirstOrDefault(); if (msg != null) { // appropriate message was found msg.CommentText = commenter.Info.Text; } } else if (commenter.Info.Type == CommentType.SignalComment) { var msg = Messages.Where(m => m.MessageId == commenter.Info.MsgId).FirstOrDefault(); if (msg != null) { // appropriate message was found var sig = msg.Signals.Where(s => s.FieldName == commenter.Info.SigName).FirstOrDefault(); if (sig != null) { sig.CommentText = commenter.Info.Text; if (IsRollingCounterCodeAvailalbe && sig.CommentText.Contains(RollingCounterMatch)) { if (msg.RollSig == null) { msg.RollSig = sig; } } else if (IsChecksumMatchCodeAvailable && sig.CommentText.Contains(ChecksumMatch)) { if (msg.CsmSig == null) { msg.CsmType = "kCRCUndefined"; if (sig.CommentText.Contains("CRC8_SAEJ1850")) { msg.CsmType = "kSAEJ1850"; } else if (sig.CommentText.Contains("XOR8_Generic")) { msg.CsmType = "kXOR8"; } else if (sig.CommentText.Contains("XOR4_generic") || sig.CommentText.Contains("XOR4_SAS")) { msg.CsmType = "kXOR4"; } else if (sig.CommentText.Contains("XOR")) { // common case for XOR-base algorythms msg.CsmType = "kXOR8"; } msg.CsmSig = sig; } } } } } } } else if (line.StartsWith("VAL_ ")) { valuator.PassString(line); var msg = Messages.Where(m => m.MessageId == valuator.MsgId).FirstOrDefault(); if (msg != null) { // appropriate message was found var sig = msg.Signals.Where(s => s.FieldName == valuator.SigName).FirstOrDefault(); if (sig != null) { sig.ValueText = valuator.Text; } } } Messages = Messages.OrderBy(m => m.MessageId).ToList(); } if (msgDesc != null) { msgDesc.Signals = msgDesc.Signals.OrderBy(o => o.StartBit).ToList(); Messages.Add(msgDesc); } foreach (var ba in ba_) { // update all the messages with parsed succesfully cycle time var msg = Messages.Where(d => d.MessageId == ba.MsgId).FirstOrDefault(); if (msg != null) { msg.CycTime = ba.CycTime; } } }