static bool PrintDataTypeEntry(StreamWriter outStream, UdsReader.DataTypeEntry dataTypeEntry) { StringBuilder sb = new StringBuilder(); if (dataTypeEntry.NameDetailArray != null) { sb.Clear(); foreach (string entry in dataTypeEntry.NameDetailArray) { if (sb.Length > 0) { sb.Append("; "); } sb.Append("\""); sb.Append(entry); sb.Append("\""); } sb.Insert(0, "Name Detail: "); outStream.WriteLine(sb.ToString()); } sb.Clear(); sb.Append(string.Format(CultureInfo.InvariantCulture, "Data type: {0}", UdsReader.DataTypeEntry.DataTypeIdToString(dataTypeEntry.DataTypeId))); if (dataTypeEntry.FixedEncodingId != null) { sb.Append($" (Fixed {dataTypeEntry.FixedEncodingId}"); if (dataTypeEntry.FixedEncoding == null) { sb.Append(" ,Unknown ID"); if (_unknownIdDict.TryGetValue(dataTypeEntry.FixedEncodingId.Value, out UInt32 oldValue)) { _unknownIdDict[dataTypeEntry.FixedEncodingId.Value] = oldValue + 1; } else { _unknownIdDict[dataTypeEntry.FixedEncodingId.Value] = 1; } } else { if (dataTypeEntry.FixedEncoding.ConvertFunc != null) { sb.Append(" ,Function"); } } sb.Append(")"); } if (dataTypeEntry.NumberOfDigits.HasValue) { sb.Append(string.Format(CultureInfo.InvariantCulture, "; Digits: {0}", dataTypeEntry.NumberOfDigits.Value)); } if (dataTypeEntry.ScaleOffset.HasValue) { sb.Append(string.Format(CultureInfo.InvariantCulture, "; Offset: {0}", dataTypeEntry.ScaleOffset.Value)); } if (dataTypeEntry.ScaleMult.HasValue) { sb.Append(string.Format(CultureInfo.InvariantCulture, "; Mult: {0}", dataTypeEntry.ScaleMult.Value)); } if (dataTypeEntry.ScaleDiv.HasValue) { sb.Append(string.Format(CultureInfo.InvariantCulture, "; Div: {0}", dataTypeEntry.ScaleDiv.Value)); } if (dataTypeEntry.UnitText != null) { sb.Append(string.Format(CultureInfo.InvariantCulture, "; Unit: \"{0}\"", dataTypeEntry.UnitText)); } if (dataTypeEntry.ByteOffset.HasValue) { sb.Append(string.Format(CultureInfo.InvariantCulture, "; Byte: {0}", dataTypeEntry.ByteOffset.Value)); } if (dataTypeEntry.BitOffset.HasValue) { sb.Append(string.Format(CultureInfo.InvariantCulture, "; Bit: {0}", dataTypeEntry.BitOffset.Value)); } if (dataTypeEntry.BitLength.HasValue) { sb.Append(string.Format(CultureInfo.InvariantCulture, "; Len: {0}", dataTypeEntry.BitLength.Value)); } if (dataTypeEntry.MinTelLength.HasValue) { sb.Append(string.Format(CultureInfo.InvariantCulture, "; MinTelLen: {0}", dataTypeEntry.MinTelLength.Value)); } else { sb.Append("*** No MinTelLen"); } outStream.WriteLine(sb.ToString()); if (dataTypeEntry.NameValueList != null) { foreach (UdsReader.ValueName valueName in dataTypeEntry.NameValueList) { sb.Clear(); foreach (string entry in valueName.LineArray) { if (sb.Length > 0) { sb.Append("; "); } sb.Append("\""); sb.Append(entry); sb.Append("\""); } if (valueName.NameArray != null) { sb.Append(": "); foreach (string nameEntry in valueName.NameArray) { sb.Append("\""); sb.Append(nameEntry); sb.Append("\" "); } } sb.Insert(0, "Value Name: "); outStream.WriteLine(sb.ToString()); } } if (dataTypeEntry.MuxEntryList != null) { foreach (UdsReader.MuxEntry muxEntry in dataTypeEntry.MuxEntryList) { sb.Clear(); foreach (string entry in muxEntry.LineArray) { if (sb.Length > 0) { sb.Append("; "); } sb.Append("\""); sb.Append(entry); sb.Append("\""); } sb.Insert(0, "Mux: "); outStream.WriteLine(sb.ToString()); sb.Clear(); if (muxEntry.Default) { sb.Append(string.Format(CultureInfo.InvariantCulture, "Default")); } if (muxEntry.MinValue != null) { sb.Append(string.Format(CultureInfo.InvariantCulture, "Min: {0}", muxEntry.MinValue)); } if (muxEntry.MaxValue != null) { sb.Append(string.Format(CultureInfo.InvariantCulture, " Max: {0}", muxEntry.MaxValue)); } if (sb.Length > 0) { outStream.WriteLine(sb.ToString()); } if (muxEntry.DataTypeEntry != null) { if (!PrintDataTypeEntry(outStream, muxEntry.DataTypeEntry)) { return(false); } } } } return(true); }
static string TestDataType(string fileName, UdsReader.ParseInfoMwb parseInfoMwb) { UdsReader.DataTypeEntry dataTypeEntry = parseInfoMwb.DataTypeEntry; StringBuilder sb = new StringBuilder(); sb.Append("Test: "); byte[] testData = null; string baseFileName = Path.GetFileNameWithoutExtension(fileName) ?? string.Empty; if (baseFileName.StartsWith("EV_ECM20TDI01103L906018DQ", true, CultureInfo.InvariantCulture)) { switch (parseInfoMwb.ServiceId) { case 0xF40C: // Motordrehzahl testData = new byte[] { 0x0F, 0xA0 }; break; case 0x11F1: // Getriebeeingangsdrehzahl testData = new byte[] { 0x07, 0xD0 }; break; case 0x0100: // Status des Stellgliedtests testData = new byte[] { 0x80 }; break; case 0xF40D: // Fahrzeuggeschwindigkeit testData = new byte[] { 0x64 }; break; case 0x2001: // Status der Kraftstofferstbefüllung testData = new byte[] { 0xC0 }; break; case 0xF41F: // Zeit seit Motorstart testData = new byte[] { 0x27, 0x10 }; break; case 0x100D: // eingelegter Gang testData = new byte[] { 0x02 }; break; case 0x02A7: // SSEUI testData = new byte[] { 0xE8, 0x03, 0xE9, 0x03, 0xEA, 0x03, 0xEB, 0x03, 0xEC, 0x03, 0xED, 0x03, 0xEE, 0x03, 0xEF, 0x03, 0xF0, 0x03, 0xF1, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; break; } } else if (baseFileName.StartsWith("EV_Kombi_UDS_VDD_RM09_A04_VW32", true, CultureInfo.InvariantCulture)) { switch (parseInfoMwb.ServiceId) { case 0xF442: // Spannung Klemme 30 testData = new byte[] { 0x8F }; break; case 0x2203: // Wegstrecke testData = new byte[] { 0x03, 0xE8 }; //testData = new byte[] { 0xFF, 0xFF }; break; } } if (testData != null) { sb.Append(" \""); sb.Append(dataTypeEntry.ToString(testData)); sb.Append("\""); } else { sb.Append(" \""); sb.Append(dataTypeEntry.ToString(new byte[] { 0x10 })); sb.Append("\""); sb.Append(" \""); sb.Append(dataTypeEntry.ToString(new byte[] { 0x10, 0x20 })); sb.Append("\""); sb.Append(" \""); sb.Append(dataTypeEntry.ToString(new byte[] { 0xFF, 0x10 })); sb.Append("\""); sb.Append(" \""); sb.Append(dataTypeEntry.ToString(new byte[] { 0xFF, 0x10, 0x20 })); sb.Append("\""); sb.Append(" \""); sb.Append(dataTypeEntry.ToString(new byte[] { 0xFF, 0xAB, 0xCD })); sb.Append("\""); sb.Append(" \""); sb.Append(dataTypeEntry.ToString(new byte[] { 0xFF, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xCD, 0xEF, 0x01, 0x23, 0x45, 0x67, 0x89 })); sb.Append("\""); } return(sb.ToString()); }