Пример #1
0
        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);
        }
Пример #2
0
        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());
        }