private IEnumerable <CanMessageBMO> GetCanMessages(NetworkNodeBMO networkNode) { List <CanMessageBMO> list = new List <CanMessageBMO>(); int i = 0; foreach (var line in LIST) { if (line.StartsWith("BO_ ")) { var messages = line.Split(' ').ToList(); if (messages.Count > 0) { messages.RemoveAt(0); } if (messages.Count == 0) { throw new Exception("File does not contain Can Messages."); } CanMessageBMO message = new CanMessageBMO(); message.ID = long.Parse(messages[0]); message.Name = messages[1]?.Replace(":", ""); message.CanSignals = GetCanSignals(networkNode, i); // should we ignore this if there is no signals (as a side effect, of not having relations to any network node)? list.Add(message); } i++; } return(list); }
private IEnumerable <CanSignalBMO> GetCanSignals(NetworkNodeBMO networkNode, int boLineIndex) { List <CanSignalBMO> list = new List <CanSignalBMO>(); for (var i = boLineIndex + 1; i < LIST.Count; i++) { if (string.IsNullOrEmpty(LIST[i])) { break; } if (LIST[i].StartsWith(" SG_ ") && LIST[i].Split(' ').LastOrDefault().Contains(networkNode.Name)) { var lineBase = LIST[i].Split(":"); if (lineBase.Length != 2) { throw new Exception("File is corrupted!"); } var signalName = lineBase[0].Split(" ")[2]; var info = lineBase[1].Split(" ")[1]; var info1 = info.Split("|"); var signal = new CanSignalBMO(); signal.Name = signalName; signal.StartBit = ushort.Parse(info1[0]); signal.Length = ushort.Parse(info1[1].Split("@")[0]); list.Add(signal); } else if (LIST[i].StartsWith(" SG_ ") && !LIST[i].Split(' ').LastOrDefault().Contains(networkNode.Name)) { continue; // these ones should go maybe in a seperate list? } else { throw new Exception("File is corrupted."); } } return(list); }