コード例 #1
0
        public ECUInterfaceSubtype(BinaryReader reader, long baseAddress, int index)
        {
            Index       = index;
            BaseAddress = baseAddress;
            reader.BaseStream.Seek(baseAddress, SeekOrigin.Begin);
            // we can now properly operate on the interface block
            ulong ctBitflags = reader.ReadUInt32();

            Qualifier       = CaesarReader.ReadBitflagStringWithReader(ref ctBitflags, reader, BaseAddress);
            Name_CTF        = CaesarReader.ReadBitflagInt32(ref ctBitflags, reader, -1);
            Description_CTF = CaesarReader.ReadBitflagInt32(ref ctBitflags, reader, -1);

            Unk3 = CaesarReader.ReadBitflagInt16(ref ctBitflags, reader);
            Unk4 = CaesarReader.ReadBitflagInt16(ref ctBitflags, reader);

            Unk5 = CaesarReader.ReadBitflagInt32(ref ctBitflags, reader);
            Unk6 = CaesarReader.ReadBitflagInt32(ref ctBitflags, reader);
            Unk7 = CaesarReader.ReadBitflagInt32(ref ctBitflags, reader);

            Unk8  = CaesarReader.ReadBitflagUInt8(ref ctBitflags, reader);
            Unk9  = CaesarReader.ReadBitflagUInt8(ref ctBitflags, reader);
            Unk10 = CaesarReader.ReadBitflagInt8(ref ctBitflags, reader); // might be signed
        }
コード例 #2
0
        public ECUVariant(BinaryReader reader, ECU parentEcu, CTFLanguage language, long baseAddress, int blockSize)
        {
            // int __usercall DIIFindVariantByECUID@<eax>(ECU_VARIANT *a1@<ebx>, _DWORD *a2, int a3, __int16 a4, int a5)

            BaseAddress = baseAddress;
            ParentECU   = parentEcu;
            Language    = language;
            reader.BaseStream.Seek(baseAddress, SeekOrigin.Begin);
            byte[] variantBytes = reader.ReadBytes(blockSize);

            using (BinaryReader variantReader = new BinaryReader(new MemoryStream(variantBytes)))
            {
                ulong bitFlags = variantReader.ReadUInt32();
                int   skip     = variantReader.ReadInt32();

                Qualifier       = CaesarReader.ReadBitflagStringWithReader(ref bitFlags, variantReader);
                Name_CTF        = CaesarReader.ReadBitflagInt32(ref bitFlags, variantReader, -1);
                Description_CTF = CaesarReader.ReadBitflagInt32(ref bitFlags, variantReader, -1);
                UnkStr1         = CaesarReader.ReadBitflagStringWithReader(ref bitFlags, variantReader);
                UnkStr2         = CaesarReader.ReadBitflagStringWithReader(ref bitFlags, variantReader);

                Unk1 = CaesarReader.ReadBitflagInt32(ref bitFlags, variantReader);                   // 1
                MatchingPatternCount   = CaesarReader.ReadBitflagInt32(ref bitFlags, variantReader); // 2
                MatchingPatternOffset  = CaesarReader.ReadBitflagInt32(ref bitFlags, variantReader); // 3
                SubsectionB_Count      = CaesarReader.ReadBitflagInt32(ref bitFlags, variantReader); // 4
                SubsectionB_Offset     = CaesarReader.ReadBitflagInt32(ref bitFlags, variantReader); // 5
                ComParamsCount         = CaesarReader.ReadBitflagInt32(ref bitFlags, variantReader); // 6
                ComParamsOffset        = CaesarReader.ReadBitflagInt32(ref bitFlags, variantReader); // 7
                DiagServiceCode_Count  = CaesarReader.ReadBitflagInt32(ref bitFlags, variantReader); // 8
                DiagServiceCode_Offset = CaesarReader.ReadBitflagInt32(ref bitFlags, variantReader); // 9
                DiagServicesCount      = CaesarReader.ReadBitflagInt32(ref bitFlags, variantReader); // 10
                DiagServicesOffset     = CaesarReader.ReadBitflagInt32(ref bitFlags, variantReader); // 11
                DTC_Count             = CaesarReader.ReadBitflagInt32(ref bitFlags, variantReader);  // 12
                DTC_Offset            = CaesarReader.ReadBitflagInt32(ref bitFlags, variantReader);  // 13
                EnvironmentCtx_Count  = CaesarReader.ReadBitflagInt32(ref bitFlags, variantReader);  // 14
                EnvironmentCtx_Offset = CaesarReader.ReadBitflagInt32(ref bitFlags, variantReader);  // 15
                Xref_Count            = CaesarReader.ReadBitflagInt32(ref bitFlags, variantReader);  // 16
                Xref_Offset           = CaesarReader.ReadBitflagInt32(ref bitFlags, variantReader);  // 17

                VCDomainsCount  = CaesarReader.ReadBitflagInt32(ref bitFlags, variantReader);        // 18
                VCDomainsOffset = CaesarReader.ReadBitflagInt32(ref bitFlags, variantReader);        // 19

                NegativeResponseName = CaesarReader.ReadBitflagStringWithReader(ref bitFlags, variantReader);
                UnkByte = CaesarReader.ReadBitflagInt8(ref bitFlags, variantReader);  // 20 byte

                // vcdomain
                VCDomainPoolOffsets = new List <int>();
                variantReader.BaseStream.Seek(VCDomainsOffset, SeekOrigin.Begin);
                for (int variantCodingIndex = 0; variantCodingIndex < VCDomainsCount; variantCodingIndex++)
                {
                    VCDomainPoolOffsets.Add(variantReader.ReadInt32());
                }
                // diagnostic services
                DiagServicesPoolOffsets = new List <int>();
                variantReader.BaseStream.Seek(DiagServicesOffset, SeekOrigin.Begin);
                for (int diagIndex = 0; diagIndex < DiagServicesCount; diagIndex++)
                {
                    DiagServicesPoolOffsets.Add(variantReader.ReadInt32());
                }
                // DTCs
                //DTCsPoolOffsets = new List<int>();
                DTCsPoolOffsetsWithBounds = new List <Tuple <int, int, int> >();
                variantReader.BaseStream.Seek(DTC_Offset, SeekOrigin.Begin);
                for (int dtcIndex = 0; dtcIndex < DTC_Count; dtcIndex++)
                {
                    int actualIndex = variantReader.ReadInt32();
                    int xrefStart   = variantReader.ReadInt32();
                    int xrefCount   = variantReader.ReadInt32(); // stitch with table H : int __cdecl DIECUGetNumberOfEnvForAllErrors(DI_ECUINFO *ecuh, int a2, int a3)
                    //DTCsPoolOffsets.Add(actualIndex); // todo: depreciate this
                    DTCsPoolOffsetsWithBounds.Add(new Tuple <int, int, int>(actualIndex, xrefStart, xrefCount));
                }
                // EnvCtxs
                EnvironmentContextsPoolOffsets = new List <int>();
                variantReader.BaseStream.Seek(EnvironmentCtx_Offset, SeekOrigin.Begin);
                for (int envIndex = 0; envIndex < EnvironmentCtx_Count; envIndex++)
                {
                    EnvironmentContextsPoolOffsets.Add(variantReader.ReadInt32());
                }
            }

            CreateVCDomains(parentEcu, language);
            CreateDiagServices(parentEcu, language);
            CreateVariantPatterns(reader);
            CreateComParameters(reader, parentEcu);
            CreateDTCs(parentEcu, language);
            CreateEnvironmentContexts(parentEcu, language);
            CreateXrefs(reader, parentEcu, language);
            //PrintDebug();
        }
コード例 #3
0
        public ECUVariant(BinaryReader reader, ECU parentEcu, CTFLanguage language, long baseAddress, int blockSize)
        {
            // int __usercall DIIFindVariantByECUID@<eax>(ECU_VARIANT *a1@<ebx>, _DWORD *a2, int a3, __int16 a4, int a5)

            BaseAddress = baseAddress;
            reader.BaseStream.Seek(baseAddress, SeekOrigin.Begin);
            byte[] variantBytes = reader.ReadBytes(blockSize);

            using (BinaryReader variantReader = new BinaryReader(new MemoryStream(variantBytes)))
            {
                ulong bitFlags = variantReader.ReadUInt32();
                int   skip     = variantReader.ReadInt32();

                Qualifier       = CaesarReader.ReadBitflagStringWithReader(ref bitFlags, variantReader);
                Name_CTF        = CaesarReader.ReadBitflagInt32(ref bitFlags, variantReader, -1);
                Description_CTF = CaesarReader.ReadBitflagInt32(ref bitFlags, variantReader, -1);
                UnkStr1         = CaesarReader.ReadBitflagStringWithReader(ref bitFlags, variantReader);
                UnkStr2         = CaesarReader.ReadBitflagStringWithReader(ref bitFlags, variantReader);

                Unk1 = CaesarReader.ReadBitflagInt32(ref bitFlags, variantReader);                  // 1
                MatchingPatternCount  = CaesarReader.ReadBitflagInt32(ref bitFlags, variantReader); // 2
                MatchingPatternOffset = CaesarReader.ReadBitflagInt32(ref bitFlags, variantReader); // 3
                SubsectionB_Count     = CaesarReader.ReadBitflagInt32(ref bitFlags, variantReader); // 4
                SubsectionB_Offset    = CaesarReader.ReadBitflagInt32(ref bitFlags, variantReader); // 5
                ComParamsCount        = CaesarReader.ReadBitflagInt32(ref bitFlags, variantReader); // 6
                ComParamsOffset       = CaesarReader.ReadBitflagInt32(ref bitFlags, variantReader); // 7
                SubsectionD_Count     = CaesarReader.ReadBitflagInt32(ref bitFlags, variantReader); // 8
                SubsectionD_Offset    = CaesarReader.ReadBitflagInt32(ref bitFlags, variantReader); // 9
                DiagServicesCount     = CaesarReader.ReadBitflagInt32(ref bitFlags, variantReader); // 10
                DiagServicesOffset    = CaesarReader.ReadBitflagInt32(ref bitFlags, variantReader); // 11
                SubsectionF_Count     = CaesarReader.ReadBitflagInt32(ref bitFlags, variantReader); // 12
                SubsectionF_Offset    = CaesarReader.ReadBitflagInt32(ref bitFlags, variantReader); // 13
                SubsectionG_Count     = CaesarReader.ReadBitflagInt32(ref bitFlags, variantReader); // 14
                SubsectionG_Offset    = CaesarReader.ReadBitflagInt32(ref bitFlags, variantReader); // 15
                SubsectionH_Count     = CaesarReader.ReadBitflagInt32(ref bitFlags, variantReader); // 16
                SubsectionH_Offset    = CaesarReader.ReadBitflagInt32(ref bitFlags, variantReader); // 17

                VCDomainsCount  = CaesarReader.ReadBitflagInt32(ref bitFlags, variantReader);       // 18
                VCDomainsOffset = CaesarReader.ReadBitflagInt32(ref bitFlags, variantReader);       // 19

                NegativeResponseName = CaesarReader.ReadBitflagStringWithReader(ref bitFlags, variantReader);
                UnkByte = CaesarReader.ReadBitflagInt8(ref bitFlags, variantReader);  // 20 byte

                VCDomainPoolOffsets = new List <int>();
                variantReader.BaseStream.Seek(VCDomainsOffset, SeekOrigin.Begin);
                for (int variantCodingIndex = 0; variantCodingIndex < VCDomainsCount; variantCodingIndex++)
                {
                    VCDomainPoolOffsets.Add(variantReader.ReadInt32());
                }

                DiagServicesPoolOffsets = new List <int>();
                variantReader.BaseStream.Seek(DiagServicesOffset, SeekOrigin.Begin);
                for (int diagIndex = 0; diagIndex < DiagServicesCount; diagIndex++)
                {
                    DiagServicesPoolOffsets.Add(variantReader.ReadInt32());
                }
            }

            CreateVCDomains(reader, parentEcu, language);
            CreateDiagServices(reader, parentEcu, language);
            CreateVariantPatterns(reader);
            CreateComParameters(reader, parentEcu);
        }
コード例 #4
0
        // 0x05 [6,   4,4,4,4,  4,4,4,4,  4,4,4,4,  2,2,2,4,      4,4,4,4,   4,4,4,4,   4,4,1,1,  1,1,1,4,     4,4,2,4,   4,4],

        public DiagPresentation(BinaryReader reader, long baseAddress, int presentationsIndex, CTFLanguage language)
        {
            BaseAddress       = baseAddress;
            PresentationIndex = presentationsIndex;
            Language          = language;

            reader.BaseStream.Seek(baseAddress, SeekOrigin.Begin);
            ulong bitflags = reader.ReadUInt32();

            ulong extendedBitflags = reader.ReadUInt16(); // skip 2 bytes

            Qualifier = CaesarReader.ReadBitflagStringWithReader(ref bitflags, reader, BaseAddress);

            Description_CTF  = CaesarReader.ReadBitflagInt32(ref bitflags, reader, -1);
            ScaleTableOffset = CaesarReader.ReadBitflagInt32(ref bitflags, reader, -1);
            ScaleCountMaybe  = CaesarReader.ReadBitflagInt32(ref bitflags, reader);

            Unk5 = CaesarReader.ReadBitflagInt32(ref bitflags, reader, -1);
            Unk6 = CaesarReader.ReadBitflagInt32(ref bitflags, reader);
            Unk7 = CaesarReader.ReadBitflagInt32(ref bitflags, reader);
            Unk8 = CaesarReader.ReadBitflagInt32(ref bitflags, reader);

            Unk9 = CaesarReader.ReadBitflagInt32(ref bitflags, reader);
            UnkA = CaesarReader.ReadBitflagInt32(ref bitflags, reader);
            UnkB = CaesarReader.ReadBitflagInt32(ref bitflags, reader);
            UnkC = CaesarReader.ReadBitflagInt32(ref bitflags, reader);

            UnkD = CaesarReader.ReadBitflagInt16(ref bitflags, reader);
            UnkE = CaesarReader.ReadBitflagInt16(ref bitflags, reader);
            UnkF = CaesarReader.ReadBitflagInt16(ref bitflags, reader);
            DisplayedUnit_CTF = CaesarReader.ReadBitflagInt32(ref bitflags, reader, -1);

            Unk11        = CaesarReader.ReadBitflagInt32(ref bitflags, reader);
            Unk12        = CaesarReader.ReadBitflagInt32(ref bitflags, reader);
            EnumMaxValue = CaesarReader.ReadBitflagInt32(ref bitflags, reader);
            Unk14        = CaesarReader.ReadBitflagInt32(ref bitflags, reader, -1);

            Unk15            = CaesarReader.ReadBitflagInt32(ref bitflags, reader);
            Description2_CTF = CaesarReader.ReadBitflagInt32(ref bitflags, reader, -1);
            Unk17            = CaesarReader.ReadBitflagInt32(ref bitflags, reader, -1);
            Unk18            = CaesarReader.ReadBitflagInt32(ref bitflags, reader);

            Unk19         = CaesarReader.ReadBitflagInt32(ref bitflags, reader, -1);
            TypeLength_1A = CaesarReader.ReadBitflagInt32(ref bitflags, reader, -1);
            Unk1b         = CaesarReader.ReadBitflagInt8(ref bitflags, reader, -1);
            Type_1C       = CaesarReader.ReadBitflagInt8(ref bitflags, reader, -1);

            Unk1d       = CaesarReader.ReadBitflagInt8(ref bitflags, reader);
            EnumType_1E = CaesarReader.ReadBitflagInt8(ref bitflags, reader);
            Unk1F       = CaesarReader.ReadBitflagInt8(ref bitflags, reader);
            Unk20       = CaesarReader.ReadBitflagInt32(ref bitflags, reader);

            bitflags = extendedBitflags;

            TypeLengthBytesMaybe_21 = CaesarReader.ReadBitflagInt32(ref bitflags, reader);
            Unk22 = CaesarReader.ReadBitflagInt32(ref bitflags, reader, -1);
            Unk23 = CaesarReader.ReadBitflagInt16(ref bitflags, reader);
            Unk24 = CaesarReader.ReadBitflagInt32(ref bitflags, reader);

            Unk25 = CaesarReader.ReadBitflagInt32(ref bitflags, reader);
            Unk26 = CaesarReader.ReadBitflagInt32(ref bitflags, reader);


            long scaleTableBase = BaseAddress + ScaleTableOffset;

            Scales = new List <Scale>();
            for (int i = 0; i < ScaleCountMaybe; i++)
            {
                reader.BaseStream.Seek(scaleTableBase + (i * 4), SeekOrigin.Begin);
                int entryRelativeOffset = reader.ReadInt32();

                Scale scale = new Scale(reader, scaleTableBase + entryRelativeOffset, language);
                Scales.Add(scale);
            }
        }