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 }
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(); }
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); }
// 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); } }