private void VerifyCodeBlocks(byte[] allBytes, SymbolCollection newSymbols, List<CodeBlock> newCodeBlocks) { //000001=automatic,000002=manual,000003=4wd ???? Tools.Instance.m_codeBlock5ID = 0; Tools.Instance.m_codeBlock6ID = 0; Tools.Instance.m_codeBlock7ID = 0; bool found = true; int offset = 0; int defaultCodeBlockLength = 0x10000; int currentCodeBlockLength = 0; int prevCodeBlockStart = 0; while (found) { int CodeBlockAddress = Tools.Instance.findSequence(allBytes, offset, new byte[11] { 0xC1, 0x02, 0x00, 0x68, 0x00, 0x25, 0x03, 0x00, 0x00, 0x10, 0x27 }, new byte[11] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }); if (CodeBlockAddress > 0) { CodeBlock newcodeblock = new CodeBlock(); newcodeblock.StartAddress = CodeBlockAddress - 1; if (prevCodeBlockStart == 0) prevCodeBlockStart = newcodeblock.StartAddress; else if (currentCodeBlockLength == 0) { currentCodeBlockLength = newcodeblock.StartAddress - prevCodeBlockStart; if (currentCodeBlockLength > 0x10000) currentCodeBlockLength = 0x10000; } // find the next occurence of the checksum newCodeBlocks.Add(newcodeblock); offset = CodeBlockAddress + 1; } else found = false; } foreach (CodeBlock cb in newCodeBlocks) { if (currentCodeBlockLength != 0) cb.EndAddress = cb.StartAddress + currentCodeBlockLength - 1; else cb.EndAddress = cb.StartAddress + defaultCodeBlockLength - 1; } foreach (CodeBlock cb in newCodeBlocks) { int autoSequenceIndex = Tools.Instance.findSequence(allBytes, cb.StartAddress, new byte[7] { 0x45, 0x44, 0x43, 0x20, 0x20, 0x41, 0x47 }, new byte[7] { 1, 1, 1, 1, 1, 1, 1 }); int manualSequenceIndex = Tools.Instance.findSequence(allBytes, cb.StartAddress, new byte[7] { 0x45, 0x44, 0x43, 0x20, 0x20, 0x53, 0x47 }, new byte[7] { 1, 1, 1, 1, 1, 1, 1 }); if (autoSequenceIndex < cb.EndAddress && autoSequenceIndex >= cb.StartAddress) cb.BlockGearboxType = GearboxType.Automatic; if (manualSequenceIndex < cb.EndAddress && manualSequenceIndex >= cb.StartAddress) cb.BlockGearboxType = GearboxType.Manual; } if (Tools.Instance.m_currentfilelength >= 0x80000) { Tools.Instance.m_codeBlock5ID = CheckCodeBlock(0x50000, allBytes, newSymbols, newCodeBlocks); //manual specific Tools.Instance.m_codeBlock6ID = CheckCodeBlock(0x60000, allBytes, newSymbols, newCodeBlocks); //automatic specific Tools.Instance.m_codeBlock7ID = CheckCodeBlock(0x70000, allBytes, newSymbols, newCodeBlocks); //quattro specific } }
private void VerifyCodeBlocks(byte[] allBytes, SymbolCollection newSymbols, List<CodeBlock> newCodeBlocks) { //000001=automatic,000002=manual,000003=4wd ???? Tools.Instance.m_codeBlock5ID = 0; Tools.Instance.m_codeBlock6ID = 0; Tools.Instance.m_codeBlock7ID = 0; bool found = true; int offset = 0; int defaultCodeBlockLength = 0x10000; int currentCodeBlockLength = 0; int prevCodeBlockStart = 0; while (found) { //67 FF FF FF FF FF FF 56 34 2E 31 int CodeBlockAddress = Tools.Instance.findSequence(allBytes, offset, new byte[11] { 0x67, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x56, 0x34, 0x2E, 0x31 }, new byte[11] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }); if (CodeBlockAddress > 0) { CodeBlock newcodeblock = new CodeBlock(); newcodeblock.StartAddress = CodeBlockAddress - 1; // conditional? if (prevCodeBlockStart == 0) prevCodeBlockStart = newcodeblock.StartAddress; else if (currentCodeBlockLength == 0) { currentCodeBlockLength = newcodeblock.StartAddress - prevCodeBlockStart; if (currentCodeBlockLength > 0x10000) currentCodeBlockLength = 0x10000; } // find the next occurence of the checksum newCodeBlocks.Add(newcodeblock); offset = CodeBlockAddress + 1; } else found = false; } foreach (CodeBlock cb in newCodeBlocks) { if (currentCodeBlockLength != 0) cb.EndAddress = cb.StartAddress + currentCodeBlockLength - 1; else cb.EndAddress = cb.StartAddress + defaultCodeBlockLength - 1; } foreach (CodeBlock cb in newCodeBlocks) { CheckCodeBlock(cb.StartAddress, allBytes, newSymbols, newCodeBlocks); //manual specific } foreach (CodeBlock cb in newCodeBlocks) { cb.StartAddress -= 0x4000; cb.EndAddress -= 0x4000; //Console.WriteLine("Codeblock ID: " + cb.CodeID.ToString("X4") + " start: " + cb.StartAddress.ToString("X8") + " - " + cb.EndAddress.ToString("X8")); } foreach (CodeBlock cb in newCodeBlocks) { int autoSequenceIndex = Tools.Instance.findSequence(allBytes, cb.StartAddress, new byte[7] { 0x45, 0x44, 0x43, 0x20, 0x20, 0x41, 0x47 }, new byte[7] { 1, 1, 1, 1, 1, 1, 1 }); int manualSequenceIndex = Tools.Instance.findSequence(allBytes, cb.StartAddress, new byte[7] { 0x45, 0x44, 0x43, 0x20, 0x20, 0x53, 0x47 }, new byte[7] { 1, 1, 1, 1, 1, 1, 1 }); if (autoSequenceIndex < cb.EndAddress && autoSequenceIndex >= cb.StartAddress) cb.BlockGearboxType = GearboxType.Automatic; if (manualSequenceIndex < cb.EndAddress && manualSequenceIndex >= cb.StartAddress) cb.BlockGearboxType = GearboxType.Manual; } /*if (Tools.Instance.m_currentfilelength >= 0x80000) { Tools.Instance.m_codeBlock5ID = CheckCodeBlock(0x50000, allBytes, newSymbols, newCodeBlocks); //manual specific Tools.Instance.m_codeBlock6ID = CheckCodeBlock(0x60000, allBytes, newSymbols, newCodeBlocks); //automatic specific Tools.Instance.m_codeBlock7ID = CheckCodeBlock(0x70000, allBytes, newSymbols, newCodeBlocks); //quattro specific }*/ }
private void VerifyCodeBlocks(byte[] allBytes, SymbolCollection newSymbols, List<CodeBlock> newCodeBlocks) { //000001=automatic,000002=manual,000003=4wd ???? Tools.Instance.m_codeBlock5ID = 0; Tools.Instance.m_codeBlock6ID = 0; Tools.Instance.m_codeBlock7ID = 0; bool found = true; int offset = 0; int defaultCodeBlockLength = 0x10000; int currentCodeBlockLength = 0; int prevCodeBlockStart = 0; while (found) { int CodeBlockAddress = Tools.Instance.findSequence(allBytes, offset, new byte[16] { 0x14, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, new byte[16] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }); if (CodeBlockAddress > 0) { CodeBlock newcodeblock = new CodeBlock(); newcodeblock.StartAddress = CodeBlockAddress +128; if (prevCodeBlockStart == 0) prevCodeBlockStart = newcodeblock.StartAddress; else if (currentCodeBlockLength == 0) { currentCodeBlockLength = newcodeblock.StartAddress - prevCodeBlockStart; if (currentCodeBlockLength > 0x10000) currentCodeBlockLength = 0x10000; } // find the next occurence of the checksum newCodeBlocks.Add(newcodeblock); offset = CodeBlockAddress + 128; } else found = false; } foreach (CodeBlock cb in newCodeBlocks) { if (currentCodeBlockLength != 0) cb.EndAddress = cb.StartAddress + currentCodeBlockLength - 1; else cb.EndAddress = cb.StartAddress + defaultCodeBlockLength - 1; } foreach (CodeBlock cb in newCodeBlocks) { CheckCodeBlock(cb.StartAddress, allBytes, newSymbols, newCodeBlocks); } }
private void VerifyCodeBlocks(byte[] allBytes, SymbolCollection newSymbols, List <CodeBlock> newCodeBlocks) { //000001=automatic,000002=manual,000003=4wd ???? Tools.Instance.m_codeBlock5ID = 0; Tools.Instance.m_codeBlock6ID = 0; Tools.Instance.m_codeBlock7ID = 0; bool found = true; int offset = 0; int defaultCodeBlockLength = 0x10000; int currentCodeBlockLength = 0; int prevCodeBlockStart = 0; while (found) { int CodeBlockAddress = Tools.Instance.findSequence(allBytes, offset, new byte[11] { 0xC1, 0x02, 0x00, 0x68, 0x00, 0x25, 0x03, 0x00, 0x00, 0x10, 0x27 }, new byte[11] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }); if (CodeBlockAddress > 0) { CodeBlock newcodeblock = new CodeBlock(); newcodeblock.StartAddress = CodeBlockAddress - 1; if (prevCodeBlockStart == 0) { prevCodeBlockStart = newcodeblock.StartAddress; } else if (currentCodeBlockLength == 0) { currentCodeBlockLength = newcodeblock.StartAddress - prevCodeBlockStart; if (currentCodeBlockLength > 0x10000) { currentCodeBlockLength = 0x10000; } } // find the next occurence of the checksum newCodeBlocks.Add(newcodeblock); offset = CodeBlockAddress + 1; } else { found = false; } } foreach (CodeBlock cb in newCodeBlocks) { if (currentCodeBlockLength != 0) { cb.EndAddress = cb.StartAddress + currentCodeBlockLength - 1; } else { cb.EndAddress = cb.StartAddress + defaultCodeBlockLength - 1; } } foreach (CodeBlock cb in newCodeBlocks) { int autoSequenceIndex = Tools.Instance.findSequence(allBytes, cb.StartAddress, new byte[7] { 0x45, 0x44, 0x43, 0x20, 0x20, 0x41, 0x47 }, new byte[7] { 1, 1, 1, 1, 1, 1, 1 }); int manualSequenceIndex = Tools.Instance.findSequence(allBytes, cb.StartAddress, new byte[7] { 0x45, 0x44, 0x43, 0x20, 0x20, 0x53, 0x47 }, new byte[7] { 1, 1, 1, 1, 1, 1, 1 }); if (autoSequenceIndex < cb.EndAddress && autoSequenceIndex >= cb.StartAddress) { cb.BlockGearboxType = GearboxType.Automatic; } if (manualSequenceIndex < cb.EndAddress && manualSequenceIndex >= cb.StartAddress) { cb.BlockGearboxType = GearboxType.Manual; } } if (Tools.Instance.m_currentfilelength >= 0x80000) { Tools.Instance.m_codeBlock5ID = CheckCodeBlock(0x50000, allBytes, newSymbols, newCodeBlocks); //manual specific Tools.Instance.m_codeBlock6ID = CheckCodeBlock(0x60000, allBytes, newSymbols, newCodeBlocks); //automatic specific Tools.Instance.m_codeBlock7ID = CheckCodeBlock(0x70000, allBytes, newSymbols, newCodeBlocks); //quattro specific } }