1767 lines
94 KiB
C#
1767 lines
94 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
using System.Diagnostics;
|
|
using System.Runtime.InteropServices;
|
|
|
|
public class Class_DefinitionMaker
|
|
{
|
|
List<string> AllECUS = new List<string>();
|
|
List<string> AllFoundFunctions = new List<string>();
|
|
List<int> AllFoundAddress = new List<int>();
|
|
List<int> AllFoundAddressX = new List<int>();
|
|
List<int> AllFoundAddressY = new List<int>();
|
|
|
|
List<int> EcuIndexInList = new List<int>();
|
|
List<string> AllCompatiblesECUS = new List<string>();
|
|
List<int> AllChecksumsLocations = new List<int>();
|
|
private int ThisIndex = 0;
|
|
public string FirmwareFolder = "";
|
|
|
|
|
|
//############
|
|
List<string> AllFileNames = new List<string>();
|
|
List<byte> AllBootLoaderSumBytes = new List<byte>();
|
|
|
|
GForm_Main GForm_Main_0;
|
|
|
|
public Class_DefinitionMaker(ref GForm_Main GForm_Main_1)
|
|
{
|
|
GForm_Main_0 = GForm_Main_1;
|
|
}
|
|
|
|
//##########################################################################################################################
|
|
//##########################################################################################################################
|
|
//##########################################################################################################################
|
|
//##########################################################################################################################
|
|
//##########################################################################################################################
|
|
|
|
public void CreateDefinitionsFiles()
|
|
{
|
|
AllECUS = new List<string>();
|
|
AllFoundFunctions = new List<string>();
|
|
AllFoundAddress = new List<int>();
|
|
AllFoundAddressX = new List<int>();
|
|
AllFoundAddressY = new List<int>();
|
|
EcuIndexInList = new List<int>();
|
|
AllCompatiblesECUS = new List<string>();
|
|
AllChecksumsLocations = new List<int>();
|
|
ThisIndex = 0;
|
|
|
|
string[] AllFiles = Directory.GetFiles(FirmwareFolder, "*.gz");
|
|
foreach (string ThisFile in AllFiles)
|
|
{
|
|
if (ThisFile.Contains("37805"))
|
|
{
|
|
//########
|
|
Class_RWD.LoadRWD(ThisFile, true, false, false, false);
|
|
if (Class_RWD.firmware_candidates.Count == 0)
|
|
{
|
|
Console.WriteLine(Path.GetFileNameWithoutExtension(ThisFile));
|
|
continue;
|
|
}
|
|
|
|
byte[] AllBytes = Class_RWD.firmware_candidates[0];
|
|
if ((AllBytes.Length - 1) != 0xF7FFF) continue; //################
|
|
|
|
string AllCompECU = "";
|
|
for (int m = 0; m < Class_RWD.SuppportedVersions.Length; m++)
|
|
{
|
|
AllCompECU += Class_RWD.SuppportedVersions[m];
|
|
if (m < Class_RWD.SuppportedVersions.Length - 1) AllCompECU += "|";
|
|
}
|
|
AllCompatiblesECUS.Add(AllCompECU);
|
|
//EcuIndexInList.Add(ThisIndex);
|
|
//########
|
|
//byte[] AllBytes = File.ReadAllBytes(ThisFile);
|
|
|
|
//Create a fake bootloader section
|
|
if ((AllBytes.Length - 1) == 0xF7FFF)
|
|
{
|
|
byte[] BufferBytes = new byte[0x8000 + AllBytes.Length];
|
|
for (int i = 0; i < 0x8000; i++) BufferBytes[i] = 0xff;
|
|
for (int i = 0; i < AllBytes.Length; i++) BufferBytes[0x8000 + i] = AllBytes[i];
|
|
AllBytes = BufferBytes;
|
|
|
|
//Get checksum locations
|
|
if (AllBytes[0x83F8] != 0xff) AllChecksumsLocations.Add(0x83F8);
|
|
else AllChecksumsLocations.Add(0x8400);
|
|
}
|
|
else
|
|
{
|
|
byte[] BufferBytes = new byte[0x10000 + AllBytes.Length];
|
|
for (int i = 0; i < 0x10000; i++) BufferBytes[i] = 0xff;
|
|
for (int i = 0; i < AllBytes.Length; i++) BufferBytes[0x10000 + i] = AllBytes[i];
|
|
AllBytes = BufferBytes;
|
|
|
|
//Get checksum locations
|
|
|
|
//NOT DEFINIED ...
|
|
}
|
|
|
|
bool DoneParameter = false;
|
|
|
|
//#######################################################################################################################
|
|
//#######################################################################################################################
|
|
DoneParameter = false;
|
|
int ThisAddr = CheckForBytesAndGetAddress(AllBytes, StringToByteArray("00 0A 00 0A 00 C8 00"), 16, false);
|
|
if (ThisAddr != -1) AddToList(Path.GetFileNameWithoutExtension(ThisFile), "VTEC Engagement", ThisAddr, -1, -1);
|
|
//#######################################################################################################################
|
|
//#######################################################################################################################
|
|
DoneParameter = false;
|
|
ThisAddr = CheckForBytesAndGetAddress(AllBytes, StringToByteArray("FA 01 2C FF FF 40"), 71, false);
|
|
if (ThisAddr != -1 && !DoneParameter)
|
|
{
|
|
AddToList(Path.GetFileNameWithoutExtension(ThisFile), "Revlimiter", ThisAddr, -1, -1);
|
|
AddToList(Path.GetFileNameWithoutExtension(ThisFile), "--Revlimiter 1", ThisAddr + 8, -1, -1);
|
|
AddToList(Path.GetFileNameWithoutExtension(ThisFile), "--Revlimiter 2", ThisAddr + 16, -1, -1);
|
|
AddToList(Path.GetFileNameWithoutExtension(ThisFile), "--Revlimiter 3", ThisAddr + 24, -1, -1);
|
|
AddToList(Path.GetFileNameWithoutExtension(ThisFile), "--Revlimiter 4", ThisAddr + 32, -1, -1);
|
|
AddToList(Path.GetFileNameWithoutExtension(ThisFile), "--Revlimiter 5", ThisAddr + 36, -1, -1);
|
|
AddToList(Path.GetFileNameWithoutExtension(ThisFile), "--Revlimiter 6", ThisAddr + 52, -1, -1);
|
|
AddToList(Path.GetFileNameWithoutExtension(ThisFile), "--Revlimiter 7", ThisAddr + 60, -1, -1);
|
|
DoneParameter = true;
|
|
}
|
|
if (ThisAddr == -1 && !DoneParameter) ThisAddr = CheckForBytesAndGetAddress(AllBytes, StringToByteArray("FA 01 2C FF FF 3A"), 71, false);
|
|
if (ThisAddr != -1 && !DoneParameter)
|
|
{
|
|
AddToList(Path.GetFileNameWithoutExtension(ThisFile), "Revlimiter", ThisAddr, -1, -1);
|
|
AddToList(Path.GetFileNameWithoutExtension(ThisFile), "--Revlimiter 1", ThisAddr + 8, -1, -1);
|
|
AddToList(Path.GetFileNameWithoutExtension(ThisFile), "--Revlimiter 2", ThisAddr + 16, -1, -1);
|
|
AddToList(Path.GetFileNameWithoutExtension(ThisFile), "--Revlimiter 3", ThisAddr + 24, -1, -1);
|
|
AddToList(Path.GetFileNameWithoutExtension(ThisFile), "--Revlimiter 4", ThisAddr + 32, -1, -1);
|
|
AddToList(Path.GetFileNameWithoutExtension(ThisFile), "--Revlimiter 5", ThisAddr + 36, -1, -1);
|
|
AddToList(Path.GetFileNameWithoutExtension(ThisFile), "--Revlimiter 6", ThisAddr + 52, -1, -1);
|
|
AddToList(Path.GetFileNameWithoutExtension(ThisFile), "--Revlimiter 7", ThisAddr + 60, -1, -1);
|
|
DoneParameter = true;
|
|
}
|
|
if (ThisAddr == -1 && !DoneParameter) ThisAddr = CheckForBytesAndGetAddress(AllBytes, StringToByteArray("00 00 00 00 80 00 80 00 00 00 00 00 00"), 84, false);
|
|
if (ThisAddr != -1 && !DoneParameter)
|
|
{
|
|
AddToList(Path.GetFileNameWithoutExtension(ThisFile), "Revlimiter", ThisAddr, -1, -1);
|
|
AddToList(Path.GetFileNameWithoutExtension(ThisFile), "--Revlimiter 1", ThisAddr + 8, -1, -1);
|
|
AddToList(Path.GetFileNameWithoutExtension(ThisFile), "--Revlimiter 2", ThisAddr + 16, -1, -1);
|
|
AddToList(Path.GetFileNameWithoutExtension(ThisFile), "--Revlimiter 3", ThisAddr + 24, -1, -1);
|
|
AddToList(Path.GetFileNameWithoutExtension(ThisFile), "--Revlimiter 4", ThisAddr + 32, -1, -1);
|
|
AddToList(Path.GetFileNameWithoutExtension(ThisFile), "--Revlimiter 5", ThisAddr + 36, -1, -1);
|
|
AddToList(Path.GetFileNameWithoutExtension(ThisFile), "--Revlimiter 6", ThisAddr + 52, -1, -1);
|
|
AddToList(Path.GetFileNameWithoutExtension(ThisFile), "--Revlimiter 7", ThisAddr + 60, -1, -1);
|
|
DoneParameter = true;
|
|
}
|
|
//#######################################################################################################################
|
|
//#######################################################################################################################
|
|
DoneParameter = false;
|
|
ThisAddr = CheckForBytesAndGetAddress(AllBytes, StringToByteArray("00 32 00 1E 01 2C 00 00 08 66 66 00 00"), -2, false);
|
|
if (ThisAddr != -1 && !DoneParameter)
|
|
{
|
|
AddToList(Path.GetFileNameWithoutExtension(ThisFile), "Speedlimiter", ThisAddr, -1, -1);
|
|
DoneParameter = true;
|
|
}
|
|
if (ThisAddr == -1 && !DoneParameter) ThisAddr = CheckForBytesAndGetAddress(AllBytes, StringToByteArray("00 32 00 1E 02 BC 02 DC 01 2C"), -2, false);
|
|
if (ThisAddr != -1 && !DoneParameter)
|
|
{
|
|
AddToList(Path.GetFileNameWithoutExtension(ThisFile), "Speedlimiter", ThisAddr, -1, -1);
|
|
DoneParameter = true;
|
|
}
|
|
if (ThisAddr == -1 && !DoneParameter) ThisAddr = CheckForBytesAndGetAddress(AllBytes, StringToByteArray("01 90 00 14 01 2C 00 00 08 66 66 00 00"), -2, false);
|
|
if (ThisAddr != -1 && !DoneParameter)
|
|
{
|
|
AddToList(Path.GetFileNameWithoutExtension(ThisFile), "Speedlimiter", ThisAddr, -1, -1);
|
|
DoneParameter = true;
|
|
}
|
|
if (ThisAddr == -1 && !DoneParameter) ThisAddr = CheckForBytesAndGetAddress(AllBytes, StringToByteArray("01 2C 00 00 08 66 66 00 00"), -6, false);
|
|
if (ThisAddr != -1 && !DoneParameter)
|
|
{
|
|
AddToList(Path.GetFileNameWithoutExtension(ThisFile), "Speedlimiter", ThisAddr, -1, -1);
|
|
DoneParameter = true;
|
|
}
|
|
//#######################################################################################################################
|
|
//#######################################################################################################################
|
|
DoneParameter = false;
|
|
ThisAddr = CheckForBytesAndGetAddress(AllBytes, StringToByteArray("0C 80 0F A0 12 C0 19 00"), 8, false);
|
|
if (ThisAddr != -1 && !DoneParameter)
|
|
{
|
|
AddToList(Path.GetFileNameWithoutExtension(ThisFile), "Injector Voltage Compensation", ThisAddr, -1, -1);
|
|
DoneParameter = true;
|
|
}
|
|
if (ThisAddr == -1 && !DoneParameter) ThisAddr = CheckForBytesAndGetAddress(AllBytes, StringToByteArray("FC 18 FF 38 80 00 80 00"), -92, false);
|
|
if (ThisAddr != -1 && !DoneParameter)
|
|
{
|
|
AddToList(Path.GetFileNameWithoutExtension(ThisFile), "Injector Voltage Compensation", ThisAddr, -1, -1);
|
|
DoneParameter = true;
|
|
}
|
|
//#######################################################################################################################
|
|
//#######################################################################################################################
|
|
//MISSING ON SOME ROMS, HAVE TO CHECK FOR OTHERS BYTES ARRAY
|
|
DoneParameter = false;
|
|
ThisAddr = CheckForBytesAndGetAddress(AllBytes, StringToByteArray("00 1E 00 00 00 03 00 05 00"), -8, false);
|
|
if (ThisAddr != -1) AddToList(Path.GetFileNameWithoutExtension(ThisFile), "MAF Load Limit", ThisAddr, -1, -1);
|
|
//#######################################################################################################################
|
|
//#######################################################################################################################
|
|
DoneParameter = false;
|
|
ThisAddr = CheckForBytesAndGetAddress(AllBytes, StringToByteArray("7F FF F0 60 EF 98"), 182, false);
|
|
if (ThisAddr != -1 && !DoneParameter)
|
|
{
|
|
AddToList(Path.GetFileNameWithoutExtension(ThisFile), "Minimum IPW", ThisAddr, -1, -1);
|
|
DoneParameter = true;
|
|
}
|
|
if (ThisAddr == -1 && !DoneParameter) ThisAddr = CheckForBytesAndGetAddress(AllBytes, StringToByteArray("05 66 05 66 02 00 00 00 00 01"), 36, true);
|
|
if (ThisAddr != -1 && !DoneParameter)
|
|
{
|
|
AddToList(Path.GetFileNameWithoutExtension(ThisFile), "Minimum IPW", ThisAddr, -1, -1);
|
|
DoneParameter = true;
|
|
}
|
|
//#######################################################################################################################
|
|
//#######################################################################################################################
|
|
//GET COOLANT TEMP LOCATION
|
|
DoneParameter = false;
|
|
int ThisAddrY = CheckForBytesAndGetAddress(AllBytes, StringToByteArray("01 C2 02 12 02 53 03 20 27 10"), 166, false);
|
|
if (ThisAddrY != -1 && !DoneParameter) DoneParameter = true;
|
|
if (ThisAddrY == -1 && !DoneParameter) ThisAddrY = CheckForBytesAndGetAddress(AllBytes, StringToByteArray("80 00 7F FF 7F FF 7F FF 7F FF"), 286, false);
|
|
if (ThisAddrY != -1 && !DoneParameter) DoneParameter = true;
|
|
if (ThisAddrY == -1 && !DoneParameter) ThisAddrY = CheckForBytesAndGetAddress(AllBytes, StringToByteArray("80 00 FE D4 FF"), 174, false); //MAY CAUSE CERTAIN ISSUE
|
|
if (ThisAddrY != -1 && !DoneParameter) DoneParameter = true;
|
|
//####################################################################
|
|
DoneParameter = false;
|
|
ThisAddr = CheckForBytesAndGetAddress(AllBytes, StringToByteArray("00 00 00 00 00 00 00 01 00 1E"), 16, false);
|
|
if (ThisAddr != -1 && !DoneParameter)
|
|
{
|
|
AddToList(Path.GetFileNameWithoutExtension(ThisFile), "Idle Speed", ThisAddr, -1, ThisAddrY);
|
|
AddToList(Path.GetFileNameWithoutExtension(ThisFile), "Post Start Idle Speed", ThisAddr + 16, -1, ThisAddrY);
|
|
DoneParameter = true;
|
|
}
|
|
if (ThisAddr == -1 && !DoneParameter) ThisAddr = CheckForBytesAndGetAddress(AllBytes, StringToByteArray("C8 01 90 03 20 61 A8 00"), -75, true);
|
|
if (ThisAddr != -1 && !DoneParameter)
|
|
{
|
|
AddToList(Path.GetFileNameWithoutExtension(ThisFile), "Idle Speed", ThisAddr, -1, ThisAddrY);
|
|
AddToList(Path.GetFileNameWithoutExtension(ThisFile), "Post Start Idle Speed", ThisAddr + 16, -1, ThisAddrY);
|
|
DoneParameter = true;
|
|
}
|
|
//#######################################################################################################################
|
|
//#######################################################################################################################
|
|
DoneParameter = false;
|
|
ThisAddr = CheckForBytesAndGetAddress(AllBytes, StringToByteArray("01 90 01 90 01 90 FF 38"), 48, false);
|
|
if (ThisAddr != -1 && !DoneParameter)
|
|
{
|
|
AddToList(Path.GetFileNameWithoutExtension(ThisFile), "WOT Determiniation 1(TPS)", ThisAddr, -1, -1);
|
|
AddToList(Path.GetFileNameWithoutExtension(ThisFile), "WOT Determiniation 2(TPS)", ThisAddr + 24, -1, -1);
|
|
DoneParameter = true;
|
|
}
|
|
//MISSING: WOT Determiniation (MAP)
|
|
//#######################################################################################################################
|
|
//#######################################################################################################################
|
|
|
|
|
|
|
|
ThisIndex++;
|
|
}
|
|
}
|
|
|
|
GenerateDefinitions();
|
|
}
|
|
|
|
private void GenerateDefinitions()
|
|
{
|
|
string BufECUName = "";
|
|
|
|
string AllStringFile = "";
|
|
for (int i = 0; i < AllECUS.Count; i++)
|
|
{
|
|
if (BufECUName != AllECUS[i])
|
|
{
|
|
if (BufECUName != "") CreateFile(AllStringFile, BufECUName);
|
|
BufECUName = AllECUS[i];
|
|
//#############
|
|
List<string> AllEcuList = new List<string>();
|
|
string ThisEcussList = AllCompatiblesECUS[EcuIndexInList[i]];
|
|
if (ThisEcussList.Contains("|"))
|
|
{
|
|
string[] Splitt = ThisEcussList.Split('|');
|
|
for (int i2 = 0; i2 < Splitt.Length; i2++) AllEcuList.Add(Splitt[i2]);
|
|
}
|
|
else
|
|
{
|
|
AllEcuList.Add(ThisEcussList);
|
|
}
|
|
AllStringFile = GenerateNewHeader("", AllEcuList, "0x" + AllChecksumsLocations[EcuIndexInList[i]].ToString("X"));
|
|
//#############
|
|
//AllStringFile = GenerateNewHeader(BufECUName, new List<string>(), "0x8400");
|
|
//Console.WriteLine(AllECUS[i] + " | 0x" + AllFoundAddress[i].ToString("X") + " | " + AllFoundFunctions[i]);
|
|
}
|
|
|
|
string FoundFunc = AllFoundFunctions[i];
|
|
int FoundAddr = AllFoundAddress[i];
|
|
int FoundAddrX = AllFoundAddressX[i];
|
|
int FoundAddrY = AllFoundAddressY[i];
|
|
|
|
if (FoundFunc == "VTEC Engagement")
|
|
{
|
|
AllStringFile = AllStringFile + "ROMLocationTable:0x" + FoundAddr.ToString("X") + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "Name:" + FoundFunc + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "Unit2:RPM" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "TableSize:4x1" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "ValueMin:-10000" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "ValueMax:30000" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "ChangeAmount:10" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "Headers:Enable Low,Disable Low,Enable High,Disable High" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "#############################" + Environment.NewLine;
|
|
}
|
|
|
|
if (FoundFunc == "Revlimiter" || FoundFunc == "--Revlimiter 1" || FoundFunc == "--Revlimiter 2"
|
|
|| FoundFunc == "--Revlimiter 3" || FoundFunc == "--Revlimiter 4" || FoundFunc == "--Revlimiter 5"
|
|
|| FoundFunc == "--Revlimiter 6" || FoundFunc == "--Revlimiter 7")
|
|
{
|
|
AllStringFile = AllStringFile + "ROMLocationTable:0x" + FoundAddr.ToString("X") + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "Name:" + FoundFunc + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "Unit2:RPM" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "TableSize:2x1" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "ValueMax:10000" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "ChangeAmount:50" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "#############################" + Environment.NewLine;
|
|
}
|
|
|
|
if (FoundFunc == "Speedlimiter")
|
|
{
|
|
AllStringFile = AllStringFile + "ROMLocationTable:0x" + FoundAddr.ToString("X") + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "Name:" + FoundFunc + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "Unit2:KPH" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "TableSize:1x1" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "ValueMax:255" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "# MathTable:X/1.609" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "#############################" + Environment.NewLine;
|
|
}
|
|
|
|
if (FoundFunc == "Injector Voltage Compensation")
|
|
{
|
|
AllStringFile = AllStringFile + "ROMLocationTable:0x" + FoundAddr.ToString("X") + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "Name:" + FoundFunc + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "Unit1:Volts" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "Unit2:ms" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "TableSize:5x1" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "MathTable:X*0.002" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "FormatTable:0.00" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "ValueMin:-1000" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "ValueMax:3000" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "Headers:6.00,8.00,12.00,14.00,16.00" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "#############################" + Environment.NewLine;
|
|
}
|
|
|
|
if (FoundFunc == "MAF Load Limit")
|
|
{
|
|
AllStringFile = AllStringFile + "ROMLocationTable:0x" + FoundAddr.ToString("X") + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "Name:" + FoundFunc + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "Unit1:Mg/Stroke" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "TableSize:4x1" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "ValueMin:-1000" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "ValueMax:4000" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "ChangeAmount:50" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "#############################" + Environment.NewLine;
|
|
}
|
|
|
|
if (FoundFunc == "Minimum IPW")
|
|
{
|
|
AllStringFile = AllStringFile + "ROMLocationTable:0x" + FoundAddr.ToString("X") + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "Name:" + FoundFunc + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "Unit1:Min IPW" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "TableSize:1x1" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "ValueMin:-6" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "ValueMax:5" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "ChangeAmount:0.001" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "MathTable:X*0.002" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "FormatTable:0.000" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "#############################" + Environment.NewLine;
|
|
}
|
|
|
|
if (FoundFunc == "Idle Speed" || FoundFunc == "Post Start Idle Speed")
|
|
{
|
|
AllStringFile = AllStringFile + "ROMLocationTable:0x" + FoundAddr.ToString("X") + Environment.NewLine;
|
|
if (FoundAddrY != -1) AllStringFile = AllStringFile + "ROMLocationY:0x" + FoundAddrY.ToString("X") + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "Name:" + FoundFunc + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "Unit1:Coolant Temp" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "Unit2:RPM" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "TableSize:8x1" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "ValueMin:-1000" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "ValueMax:4000" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "ChangeAmount:50" + Environment.NewLine;
|
|
if (FoundAddrY != -1) AllStringFile = AllStringFile + "MathY:X/10" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "#############################" + Environment.NewLine;
|
|
}
|
|
|
|
if (FoundFunc == "WOT Determiniation 1(TPS)" || FoundFunc == "WOT Determiniation 2(TPS)")
|
|
{
|
|
AllStringFile = AllStringFile + "ROMLocationTable:0x" + FoundAddr.ToString("X") + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "Name:" + FoundFunc + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "Unit1:RPM" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "Unit2:TPS(%)" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "TableSize:6x1" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "ValueMin:-50" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "ValueMax:200" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "MathTable:X*0.005" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "FormatTable:0.00" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "ChangeAmount:1" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "Headers:1000,2000,3000,4000,5000,6000" + Environment.NewLine;
|
|
AllStringFile = AllStringFile + "#############################" + Environment.NewLine;
|
|
}
|
|
}
|
|
|
|
CreateFile(AllStringFile, BufECUName);
|
|
}
|
|
|
|
private void CreateFile(string AllString, string ThisFile)
|
|
{
|
|
string DirectoryPath = Application.StartupPath + @"\Definitions\Generated";
|
|
|
|
if (!Directory.Exists(DirectoryPath)) Directory.CreateDirectory(DirectoryPath);
|
|
|
|
File.Create(DirectoryPath + @"\" + ThisFile + ".txt").Dispose();
|
|
File.WriteAllText(DirectoryPath + @"\" + ThisFile + ".txt", AllString);
|
|
|
|
GForm_Main_0.method_1("File saved:" + DirectoryPath + @"\" + ThisFile + ".txt");
|
|
}
|
|
|
|
private string GenerateNewHeader(string ThisEECU, List<string> AllEcuCompatible, string ChecksumLocation)
|
|
{
|
|
string ReturnStr = "";
|
|
ReturnStr = ReturnStr + "#######################################################################" + Environment.NewLine;
|
|
ReturnStr = ReturnStr + "#######################################################################" + Environment.NewLine;
|
|
ReturnStr = ReturnStr + "# THIS FILE AS BEEN GENERATED AUTOMATICLY, ROM LOCATIONS CAN BE WRONG" + Environment.NewLine;
|
|
ReturnStr = ReturnStr + "#######################################################################" + Environment.NewLine;
|
|
ReturnStr = ReturnStr + "#######################################################################" + Environment.NewLine;
|
|
ReturnStr = ReturnStr + "# Supported ECU:" + Environment.NewLine;
|
|
ReturnStr = ReturnStr + "#######################################################################" + Environment.NewLine;
|
|
if (ThisEECU != "") ReturnStr = ReturnStr + ThisEECU + Environment.NewLine;
|
|
if (AllEcuCompatible.Count > 0)
|
|
{
|
|
for (int i = 0; i < AllEcuCompatible.Count; i++) ReturnStr = ReturnStr + AllEcuCompatible[i] + Environment.NewLine;
|
|
}
|
|
//###############################
|
|
if (ChecksumLocation != "")
|
|
{
|
|
ReturnStr = ReturnStr + "#######################################################################" + Environment.NewLine;
|
|
ReturnStr = ReturnStr + "# Checksum Address Location:" + Environment.NewLine;
|
|
ReturnStr = ReturnStr + "#######################################################################" + Environment.NewLine;
|
|
ReturnStr = ReturnStr + "ChecksumAddress:" + ChecksumLocation + Environment.NewLine;
|
|
}
|
|
//###############################
|
|
ReturnStr = ReturnStr + "#######################################################################" + Environment.NewLine;
|
|
ReturnStr = ReturnStr + "#######################################################################" + Environment.NewLine;
|
|
ReturnStr = ReturnStr + "#######################################################################" + Environment.NewLine;
|
|
ReturnStr = ReturnStr + "# ROM Parameters Definitions:" + Environment.NewLine;
|
|
ReturnStr = ReturnStr + "#######################################################################" + Environment.NewLine;
|
|
|
|
return ReturnStr;
|
|
}
|
|
|
|
private void AddToList(string ThisECUName, string ThisFunction, int ThisAddr, int ThisAddrX, int ThisAddrY)
|
|
{
|
|
AllECUS.Add(ThisECUName);
|
|
AllFoundFunctions.Add(ThisFunction);
|
|
AllFoundAddress.Add(ThisAddr);
|
|
AllFoundAddressX.Add(ThisAddrX);
|
|
AllFoundAddressY.Add(ThisAddrY);
|
|
EcuIndexInList.Add(ThisIndex);
|
|
}
|
|
|
|
public byte[] StringToByteArray(string hex)
|
|
{
|
|
hex = hex.Replace(" ", "");
|
|
return Enumerable.Range(0, hex.Length)
|
|
.Where(x => x % 2 == 0)
|
|
.Select(x => Convert.ToByte(hex.Substring(x, 2), 16))
|
|
.ToArray();
|
|
}
|
|
|
|
private int CheckForBytesAndGetAddress(byte[] ThisFileBytes, byte[] CheckThisBytes, int AddressOffset, bool GetLastInstance)
|
|
{
|
|
bool FoundSameBytes = true;
|
|
int LastIndexFound = -1;
|
|
for (int i=0; i < ThisFileBytes.Length; i++)
|
|
{
|
|
FoundSameBytes = true;
|
|
for (int i2 = 0; i2 < CheckThisBytes.Length; i2++)
|
|
{
|
|
try
|
|
{
|
|
if (ThisFileBytes[i + i2] != CheckThisBytes[i2])
|
|
{
|
|
FoundSameBytes = false;
|
|
i2 = CheckThisBytes.Length;
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
//Generally at end of file if causing issue
|
|
i2 = CheckThisBytes.Length;
|
|
}
|
|
}
|
|
|
|
if (FoundSameBytes && !GetLastInstance)
|
|
{
|
|
return i + AddressOffset;
|
|
}
|
|
if (FoundSameBytes && GetLastInstance)
|
|
{
|
|
LastIndexFound = i + AddressOffset;
|
|
}
|
|
}
|
|
|
|
return LastIndexFound;
|
|
}
|
|
|
|
//##########################################################################################################################
|
|
//##########################################################################################################################
|
|
//##########################################################################################################################
|
|
//##########################################################################################################################
|
|
//##########################################################################################################################
|
|
|
|
public void GetFilesDifferenceCount()
|
|
{
|
|
string[] AllFiles = Directory.GetFiles(FirmwareFolder, "*.bin");
|
|
string SavingText = "#######################################################################" + Environment.NewLine;
|
|
SavingText = SavingText + "# SHOWING THE AMOUNT OF BYTES DIFFERENCES BETWEEN 2 ECU FILE" + Environment.NewLine;
|
|
SavingText = SavingText + "# IF THERE WERE MORE THAN 500 DIFFERENCES, THE 2 FILES ARE NOT LISTED" + Environment.NewLine;
|
|
SavingText = SavingText + "#######################################################################" + Environment.NewLine;
|
|
|
|
GForm_Main_0.method_1(SavingText);
|
|
|
|
List<string> AllFileDiffChecked = new List<string>();
|
|
|
|
foreach (string ThisFile in AllFiles)
|
|
{
|
|
byte[] AllBytes = File.ReadAllBytes(ThisFile);
|
|
|
|
foreach (string ThisFile2 in AllFiles)
|
|
{
|
|
if (ThisFile2 != ThisFile)
|
|
{
|
|
bool CheckedThose2Files = false;
|
|
string CheckString = ThisFile2 + "|" + ThisFile;
|
|
for (int i = 0; i < AllFileDiffChecked.Count; i++)
|
|
{
|
|
if (AllFileDiffChecked[i] == CheckString) CheckedThose2Files = true;
|
|
}
|
|
|
|
if (!CheckedThose2Files)
|
|
{
|
|
int ByteDiffCount = 0;
|
|
byte[] AllBytes2 = File.ReadAllBytes(ThisFile2);
|
|
for (int i = 0; i < AllBytes2.Length; i++)
|
|
{
|
|
if (AllBytes2[i] != AllBytes[i]) ByteDiffCount++;
|
|
|
|
if (ByteDiffCount >= 500) i = AllBytes2.Length;
|
|
}
|
|
|
|
if (ByteDiffCount < 500)
|
|
{
|
|
GForm_Main_0.method_1(Path.GetFileNameWithoutExtension(ThisFile) + " && " + Path.GetFileNameWithoutExtension(ThisFile2) + " > " + ByteDiffCount);
|
|
//SavingText = SavingText + Path.GetFileNameWithoutExtension(ThisFile) + " && " + Path.GetFileNameWithoutExtension(ThisFile2) + " > " + ByteDiffCount + Environment.NewLine;
|
|
}
|
|
|
|
AllFileDiffChecked.Add(ThisFile2 + "|" + ThisFile);
|
|
AllFileDiffChecked.Add(ThisFile + "|" + ThisFile2);
|
|
}
|
|
|
|
Application.DoEvents();
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
//string SavingPath = Application.StartupPath + @"\DifferencesCountInECUFiles.txt";
|
|
//File.Create(SavingPath).Dispose();
|
|
//File.WriteAllText(SavingPath, SavingText);
|
|
}
|
|
|
|
//##########################################################################################################################
|
|
//##########################################################################################################################
|
|
//##########################################################################################################################
|
|
//##########################################################################################################################
|
|
//##########################################################################################################################
|
|
|
|
public void CreateExtractedDefinition()
|
|
{
|
|
//string ExtractedDefinitionFile = @"C:\Users\boule\Desktop\Kserie\roms\hondata\37805-RWC-A620_Definition.txt";
|
|
//string SavingPath = Application.StartupPath + @"\37805-RWC-A620_Definition.txt";
|
|
|
|
int DumpsCount = CurrentExtractedDumps - 1;
|
|
if (DumpsCount >= 1)
|
|
{
|
|
for (int k = 0; k < DumpsCount; k++)
|
|
{
|
|
string ExtractedDefinitionFile = ThisEndPath + "ExtractedDefinition" + (k + 1).ToString() + ".txt";
|
|
string SavingPath = ThisEndPath + "GeneratedDefinition" + (k + 1).ToString() + ".txt";
|
|
|
|
if (File.Exists(ExtractedDefinitionFile))
|
|
{
|
|
string[] AllLines = File.ReadAllLines(ExtractedDefinitionFile);
|
|
|
|
List<string> AllParamName = new List<string>();
|
|
List<string> AllParamLocations = new List<string>();
|
|
List<bool> AllParamReadOnly = new List<bool>();
|
|
List<bool> AllParamUntested = new List<bool>();
|
|
|
|
List<string> AllTableName = new List<string>();
|
|
List<string> AllTableLocations = new List<string>();
|
|
List<string> AllTableLocationsX = new List<string>();
|
|
List<string> AllTableLocationsY = new List<string>();
|
|
List<int> AllRowCount = new List<int>();
|
|
List<int> AllColCount = new List<int>();
|
|
List<bool> AllTableReadOnly = new List<bool>();
|
|
List<bool> AllTableUntested = new List<bool>();
|
|
|
|
List<string> AllIndexName = new List<string>();
|
|
List<string> AllIndexShortName = new List<string>();
|
|
List<string> AllIndexLocations = new List<string>();
|
|
|
|
string CurrentParam = "";
|
|
//string ThisECUName = "";
|
|
int ParamCount = 0;
|
|
int TableCount = 0;
|
|
List<string> AllEcuCompatible = new List<string>();
|
|
int NumberOfEcus = 0;
|
|
string ChecksumLocation = "";
|
|
|
|
//#########################################
|
|
if (AllLines[2].Contains("NumBinaries="))
|
|
{
|
|
NumberOfEcus = int.Parse(AllLines[2].Split('=')[1]);
|
|
|
|
for (int i2 = 0; i2 < NumberOfEcus; i2++)
|
|
{
|
|
AllEcuCompatible.Add(AllLines[3 + (i2 * 3) + 1].Split('=')[1]);
|
|
}
|
|
|
|
SavingPath = ThisEndPath + AllEcuCompatible[0] + ".txt";
|
|
}
|
|
|
|
if (AllLines[1].Contains("FileName=") && !AllLines[2].Contains("NumBinaries="))
|
|
{
|
|
string ThisECUName = AllLines[1].Split('=')[1];
|
|
if (ThisECUName.Contains(".")) ThisECUName = ThisECUName.Split('.')[0];
|
|
ThisECUName = "37805-" + ThisECUName.Substring(ThisECUName.Length - 8);
|
|
|
|
SavingPath = ThisEndPath + ThisECUName + ".txt";
|
|
AllEcuCompatible.Add(ThisECUName);
|
|
}
|
|
//#########################################
|
|
|
|
for (int i = 0; i < AllLines.Length; i++)
|
|
{
|
|
try
|
|
{
|
|
//#########################################
|
|
/*ParameterCount=40
|
|
IndexCount=53
|
|
TableCount=49
|
|
ChecksumAddress=0x001FFFFA
|
|
ChecksumAddress=0x00008400
|
|
ChecksumAddress=0x001FFFFA*/
|
|
if (ChecksumLocation == "") if(AllLines[i].Contains("ChecksumAddress=")) ChecksumLocation = AllLines[i].Split('=')[1];
|
|
if (AllLines[i].Contains("ParameterCount=")) ParamCount = int.Parse(AllLines[i].Split('=')[1]);
|
|
if (AllLines[i].Contains("TableCount=") && !AllLines[i].Contains("DevTableCount")) TableCount = int.Parse(AllLines[i].Split('=')[1]);
|
|
|
|
//#########################################
|
|
if (AllLines[i].Contains("[Parameter"))
|
|
{
|
|
if (AllLines[i] != CurrentParam)
|
|
{
|
|
CurrentParam = AllLines[i];
|
|
|
|
bool DoneThisParameter = false;
|
|
try
|
|
{
|
|
string ParamNamee = AllLines[i + 2].Split('=')[1];
|
|
|
|
for (int i2 = 0; i2 < AllParamName.Count; i2++) if (AllParamName[i2] == ParamNamee) DoneThisParameter = true;
|
|
}
|
|
catch
|
|
{
|
|
DoneThisParameter = true;
|
|
}
|
|
|
|
if (!DoneThisParameter)
|
|
{
|
|
//############################
|
|
AllParamName.Add("");
|
|
AllParamLocations.Add("");
|
|
AllParamReadOnly.Add(false);
|
|
AllParamUntested.Add(false);
|
|
//############################
|
|
|
|
try
|
|
{
|
|
AllParamName[AllParamName.Count - 1] = AllLines[i + 2].Split('=')[1];
|
|
AllParamLocations[AllParamLocations.Count - 1] = AllLines[i + 7].Split('=')[1];
|
|
if (AllLines[i + 17].Split('=')[1] == "0") AllParamReadOnly[AllParamReadOnly.Count - 1] = false;
|
|
if (AllLines[i + 17].Split('=')[1] == "1") AllParamReadOnly[AllParamReadOnly.Count - 1] = true;
|
|
if (AllLines[i + 18].Split('=')[1] == "0") AllParamUntested[AllParamUntested.Count - 1] = false;
|
|
if (AllLines[i + 18].Split('=')[1] == "1") AllParamUntested[AllParamUntested.Count - 1] = true;
|
|
|
|
//Check for issues
|
|
bool IssueEncountered = false;
|
|
if (!AllParamLocations[AllParamLocations.Count - 1].Contains("0x")) IssueEncountered = true;
|
|
if (AllParamLocations[AllParamLocations.Count - 1] == "0") IssueEncountered = true;
|
|
if (AllParamName[AllParamName.Count - 1].Contains("0x")) IssueEncountered = true;
|
|
|
|
if (IssueEncountered)
|
|
{
|
|
AllParamName.RemoveAt(AllParamName.Count - 1);
|
|
AllParamLocations.RemoveAt(AllParamLocations.Count - 1);
|
|
AllParamReadOnly.RemoveAt(AllParamReadOnly.Count - 1);
|
|
AllParamUntested.RemoveAt(AllParamUntested.Count - 1);
|
|
}
|
|
else
|
|
{
|
|
GForm_Main_0.method_1("Added parameter: " + AllParamName[AllParamName.Count - 1]);
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
//issue extracing parameters, remove from list to avoid issue creating definition
|
|
AllParamName.RemoveAt(AllParamName.Count - 1);
|
|
AllParamLocations.RemoveAt(AllParamLocations.Count - 1);
|
|
AllParamReadOnly.RemoveAt(AllParamReadOnly.Count - 1);
|
|
AllParamUntested.RemoveAt(AllParamUntested.Count - 1);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
//#########################################
|
|
if (AllLines[i].Contains("[Table"))
|
|
{
|
|
if (AllLines[i] != CurrentParam)
|
|
{
|
|
CurrentParam = AllLines[i];
|
|
|
|
bool DoneThisParameter = false;
|
|
try
|
|
{
|
|
string ParamNamee = AllLines[i + 2].Split('=')[1];
|
|
for (int i2 = 0; i2 < AllTableName.Count; i2++) if (AllTableName[i2] == ParamNamee) DoneThisParameter = true;
|
|
}
|
|
catch
|
|
{
|
|
DoneThisParameter = true;
|
|
}
|
|
|
|
if (!DoneThisParameter)
|
|
{
|
|
//############################
|
|
AllTableName.Add("");
|
|
AllTableLocations.Add("");
|
|
AllColCount.Add(0);
|
|
AllRowCount.Add(0);
|
|
AllTableLocationsX.Add("");
|
|
AllTableLocationsY.Add("");
|
|
AllTableReadOnly.Add(false);
|
|
AllTableUntested.Add(false);
|
|
//############################
|
|
|
|
try
|
|
{
|
|
AllTableName[AllTableName.Count - 1] = AllLines[i + 2].Split('=')[1];
|
|
AllTableLocations[AllTableLocations.Count - 1] = AllLines[i + 5].Split('=')[1];
|
|
AllColCount[AllColCount.Count - 1] = int.Parse(AllLines[i + 10].Split('=')[1]);
|
|
|
|
if (AllLines[i + 18].Split('=')[1] == "1") AllRowCount[AllRowCount.Count - 1] = 1;
|
|
if (AllLines[i + 18].Split('=')[1] == "0") AllRowCount[AllRowCount.Count - 1] = 20; //#####
|
|
|
|
if (AllLines[i + 6].Split('=')[1] != "0x00000") AllTableLocationsX[AllTableLocationsX.Count - 1] = AllLines[i + 6].Split('=')[1];
|
|
if (AllLines[i + 6].Split('=')[1] == "0x00000") AllTableLocationsX[AllTableLocationsX.Count - 1] = "";
|
|
|
|
if (AllLines[i + 7].Split('=')[1] != "0x00000") AllTableLocationsY[AllTableLocationsY.Count - 1] = AllLines[i + 7].Split('=')[1];
|
|
if (AllLines[i + 7].Split('=')[1] == "0x00000") AllTableLocationsY[AllTableLocationsY.Count - 1] = "";
|
|
|
|
if (AllLines[i + 15].Split('=')[1] == "0") AllTableReadOnly[AllTableReadOnly.Count - 1] = false;
|
|
if (AllLines[i + 15].Split('=')[1] == "1") AllTableReadOnly[AllTableReadOnly.Count - 1] = true;
|
|
|
|
if (AllLines[i + 16].Split('=')[1] == "0") AllTableUntested[AllTableUntested.Count - 1] = false;
|
|
if (AllLines[i + 16].Split('=')[1] == "1") AllTableUntested[AllTableUntested.Count - 1] = true;
|
|
|
|
//Check for issues
|
|
bool IssueEncountered = false;
|
|
if (!AllTableLocations[AllTableLocations.Count - 1].Contains("0x")) IssueEncountered = true;
|
|
if (AllTableLocations[AllTableLocations.Count - 1] == "0") IssueEncountered = true;
|
|
if (AllTableName[AllTableName.Count - 1].Contains("0x")) IssueEncountered = true;
|
|
|
|
if (IssueEncountered)
|
|
{
|
|
AllTableName.RemoveAt(AllTableName.Count - 1);
|
|
AllTableLocations.RemoveAt(AllTableLocations.Count - 1);
|
|
AllColCount.RemoveAt(AllColCount.Count - 1);
|
|
AllRowCount.RemoveAt(AllRowCount.Count - 1);
|
|
AllTableLocationsX.RemoveAt(AllTableLocationsX.Count - 1);
|
|
AllTableLocationsY.RemoveAt(AllTableLocationsY.Count - 1);
|
|
AllTableReadOnly.RemoveAt(AllTableReadOnly.Count - 1);
|
|
AllTableUntested.RemoveAt(AllTableUntested.Count - 1);
|
|
}
|
|
else
|
|
{
|
|
GForm_Main_0.method_1("Added table: " + AllTableName[AllTableName.Count - 1]);
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
//issue extracing parameters, remove from list to avoid issue creating definition
|
|
AllTableName.RemoveAt(AllTableName.Count - 1);
|
|
AllTableLocations.RemoveAt(AllTableLocations.Count - 1);
|
|
AllColCount.RemoveAt(AllColCount.Count - 1);
|
|
AllRowCount.RemoveAt(AllRowCount.Count - 1);
|
|
AllTableLocationsX.RemoveAt(AllTableLocationsX.Count - 1);
|
|
AllTableLocationsY.RemoveAt(AllTableLocationsY.Count - 1);
|
|
AllTableReadOnly.RemoveAt(AllTableReadOnly.Count - 1);
|
|
AllTableUntested.RemoveAt(AllTableUntested.Count - 1);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
//########################
|
|
if (AllLines[i].Contains("[Index"))
|
|
{
|
|
//AllIndexName
|
|
//AllIndexLocations
|
|
if (AllLines[i] != CurrentParam)
|
|
{
|
|
CurrentParam = AllLines[i];
|
|
|
|
bool DoneThisParameter = false;
|
|
try
|
|
{
|
|
string ParamNamee = AllLines[i + 2].Split('=')[1];
|
|
for (int i2 = 0; i2 < AllIndexName.Count; i2++) if (AllIndexName[i2] == ParamNamee) DoneThisParameter = true;
|
|
}
|
|
catch
|
|
{
|
|
DoneThisParameter = true;
|
|
}
|
|
|
|
if (!DoneThisParameter)
|
|
{
|
|
AllIndexName.Add("");
|
|
AllIndexShortName.Add("");
|
|
AllIndexLocations.Add("");
|
|
|
|
try
|
|
{
|
|
AllIndexName[AllIndexName.Count - 1] = AllLines[i + 2].Split('=')[1];
|
|
AllIndexShortName[AllIndexShortName.Count - 1] = AllLines[i + 5].Split('=')[1];
|
|
AllIndexLocations[AllIndexLocations.Count - 1] = AllLines[i + 6].Split('=')[1];
|
|
|
|
// XXX index
|
|
AllIndexName[AllIndexName.Count - 1] = AllIndexName[AllIndexName.Count - 1].Replace(" " + AllIndexShortName[AllIndexShortName.Count - 1], "");
|
|
AllIndexName[AllIndexName.Count - 1] = AllIndexName[AllIndexName.Count - 1].Replace(" index", "");
|
|
|
|
//Check for issues
|
|
bool IssueEncountered = false;
|
|
if (!AllIndexLocations[AllIndexLocations.Count - 1].Contains("0x")) IssueEncountered = true;
|
|
if (AllIndexLocations[AllIndexLocations.Count - 1] == "0") IssueEncountered = true;
|
|
if (AllIndexName[AllIndexName.Count - 1].Contains("0x")) IssueEncountered = true;
|
|
|
|
if (IssueEncountered)
|
|
{
|
|
AllIndexName.RemoveAt(AllIndexName.Count - 1);
|
|
AllIndexShortName.RemoveAt(AllIndexShortName.Count - 1);
|
|
AllIndexLocations.RemoveAt(AllIndexLocations.Count - 1);
|
|
}
|
|
else
|
|
{
|
|
GForm_Main_0.method_1("Added index: " + AllIndexName[AllIndexName.Count - 1]);
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
//issue extracing parameters, remove from list to avoid issue creating definition
|
|
AllIndexName.RemoveAt(AllIndexName.Count - 1);
|
|
AllIndexShortName.RemoveAt(AllIndexShortName.Count - 1);
|
|
AllIndexLocations.RemoveAt(AllIndexLocations.Count - 1);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
//########################
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
GForm_Main_0.method_1("PROBLEM OCCURED while Generating Definitions file: " + ex);
|
|
}
|
|
}
|
|
|
|
|
|
//ChecksumAddress = 0x001FFFFA
|
|
//ChecksumAddress = 0x00008400
|
|
//ChecksumAddress = 0x001FFFFA
|
|
if (ChecksumLocation != "")
|
|
{
|
|
ChecksumLocation = ChecksumLocation.Replace("0x00", "0x");
|
|
ChecksumLocation = ChecksumLocation.Replace("0x00", "0x");
|
|
GForm_Main_0.method_1("Checksum address: " + ChecksumLocation);
|
|
}
|
|
|
|
//Check Counts
|
|
GForm_Main_0.method_1("Parameters existing in FPM: " + ParamCount);
|
|
GForm_Main_0.method_1("Parameters extracted: " + AllParamName.Count);
|
|
GForm_Main_0.method_1("Tables existing in FPM: " + TableCount);
|
|
GForm_Main_0.method_1("Tables extracted: " + AllTableName.Count);
|
|
|
|
|
|
//string SavingStr = GenerateNewHeader(ThisECUName);
|
|
string SavingStr = GenerateNewHeader("", AllEcuCompatible, ChecksumLocation);
|
|
for (int i = 0; i < AllParamName.Count; i++)
|
|
{
|
|
SavingStr = SavingStr + "ROMLocationTable:" + AllParamLocations[i] + Environment.NewLine;
|
|
SavingStr = SavingStr + "Name:" + AllParamName[i] + Environment.NewLine;
|
|
SavingStr = SavingStr + "TableSize:1x1" + Environment.NewLine;
|
|
SavingStr = SavingStr + "IsSingleByteTable:true" + Environment.NewLine;
|
|
for (int m = 0; m < AllIndexName.Count; m++)
|
|
{
|
|
if (AllIndexName[m].ToLower() == AllParamName[i].ToLower())
|
|
{
|
|
SavingStr = SavingStr + "ROMLocationY:" + AllIndexLocations[m] + Environment.NewLine;
|
|
SavingStr = SavingStr + "Unit1:" + AllIndexShortName[m] + Environment.NewLine;
|
|
m = AllIndexName.Count;
|
|
}
|
|
}
|
|
SavingStr = SavingStr + "IsNotDefined:true" + Environment.NewLine;
|
|
if (AllParamReadOnly[i]) SavingStr = SavingStr + "IsReadOnly:true" + Environment.NewLine;
|
|
if (AllParamUntested[i]) SavingStr = SavingStr + "IsUntested:true" + Environment.NewLine;
|
|
if (i < AllParamName.Count - 1) SavingStr = SavingStr + "#############################" + Environment.NewLine;
|
|
}
|
|
|
|
SavingStr = SavingStr + "#############################################################" + Environment.NewLine;
|
|
SavingStr = SavingStr + "#############################################################" + Environment.NewLine;
|
|
SavingStr = SavingStr + "#############################################################" + Environment.NewLine;
|
|
|
|
for (int i = 0; i < AllTableName.Count; i++)
|
|
{
|
|
SavingStr = SavingStr + "ROMLocationTable:" + AllTableLocations[i] + Environment.NewLine;
|
|
if (AllTableLocationsX[i] != "") SavingStr = SavingStr + "ROMLocationX:" + AllTableLocationsX[i] + Environment.NewLine;
|
|
if (AllTableLocationsY[i] != "") SavingStr = SavingStr + "ROMLocationY:" + AllTableLocationsY[i] + Environment.NewLine;
|
|
SavingStr = SavingStr + "Name:" + AllTableName[i] + Environment.NewLine;
|
|
SavingStr = SavingStr + "TableSize:" + AllColCount[i] + "x" + AllRowCount[i] + Environment.NewLine;
|
|
SavingStr = SavingStr + "ValueMin:-32768" + Environment.NewLine;
|
|
SavingStr = SavingStr + "ValueMax:32768" + Environment.NewLine;
|
|
//SavingStr = SavingStr + "IsSingleByteTable:true" + Environment.NewLine;
|
|
for (int m = 0; m < AllIndexName.Count; m++)
|
|
{
|
|
if (AllIndexName[m].ToLower() == AllTableName[i].ToLower())
|
|
{
|
|
SavingStr = SavingStr + "ROMLocationY:" + AllIndexLocations[m] + Environment.NewLine;
|
|
SavingStr = SavingStr + "Unit1:" + AllIndexShortName[m] + Environment.NewLine;
|
|
m = AllIndexName.Count;
|
|
}
|
|
}
|
|
SavingStr = SavingStr + "IsNotDefined:true" + Environment.NewLine;
|
|
if (AllTableReadOnly[i]) SavingStr = SavingStr + "IsReadOnly:true" + Environment.NewLine;
|
|
if (AllTableUntested[i]) SavingStr = SavingStr + "IsUntested:true" + Environment.NewLine;
|
|
SavingStr = SavingStr + "#############################" + Environment.NewLine;
|
|
}
|
|
|
|
File.Create(SavingPath).Dispose();
|
|
File.WriteAllText(SavingPath, SavingStr);
|
|
GForm_Main_0.method_1("Generated Definitions file created: " + SavingPath);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// REQUIRED CONSTS
|
|
const int PROCESS_QUERY_INFORMATION = 0x0400;
|
|
const int MEM_COMMIT = 0x00001000;
|
|
//const int PAGE_READWRITE = 0x04;
|
|
const int PROCESS_WM_READ = 0x0010;
|
|
|
|
const int PAGE_EXECUTE = 0x10;
|
|
const int PAGE_EXECUTE_READ = 0x20;
|
|
const int PAGE_EXECUTE_READWRITE = 0x40;
|
|
const int PAGE_EXECUTE_WRITECOPY = 0x80;
|
|
const int PAGE_NOACCESS = 0x01;
|
|
const int PAGE_READONLY = 0x02;
|
|
const int PAGE_READWRITE = 0x04;
|
|
const int PAGE_WRITECOPY = 0x08;
|
|
const int PAGE_GUARD = 0x100;
|
|
const int PAGE_NOCACHE = 0x200;
|
|
const int PAGE_WRITECOMBINE = 0x400;
|
|
|
|
// REQUIRED METHODS
|
|
[DllImport("kernel32.dll")]
|
|
public static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId);
|
|
|
|
[DllImport("kernel32.dll")]
|
|
public static extern bool ReadProcessMemory(int hProcess, uint lpBaseAddress, byte[] lpBuffer, int dwSize, ref int lpNumberOfBytesRead);
|
|
|
|
[DllImport("kernel32.dll")]
|
|
static extern void GetSystemInfo(out SYSTEM_INFO lpSystemInfo);
|
|
|
|
[DllImport("kernel32.dll", SetLastError = true)]
|
|
static extern int VirtualQueryEx(IntPtr hProcess, IntPtr lpAddress, out MEMORY_BASIC_INFORMATION lpBuffer, uint dwLength);
|
|
|
|
public int BlockSizeExtracted = 30000000;
|
|
public Int64 CurrentIndex = 4000000;
|
|
public IntPtr proc_min_address;
|
|
public IntPtr proc_max_address;
|
|
public long proc_min_address_l;
|
|
public long proc_max_address_l;
|
|
public Process process;
|
|
|
|
public bool Done = false;
|
|
public string ThisEndPath = Application.StartupPath + @"\Extracted\";
|
|
public int CurrentExtractedDumps = 1;
|
|
public int ExtractedBlockDone = 1;
|
|
public int ExtractMemorySize = 0;
|
|
|
|
// REQUIRED STRUCTS
|
|
public struct MEMORY_BASIC_INFORMATION
|
|
{
|
|
public int BaseAddress;
|
|
public int AllocationBase;
|
|
public int AllocationProtect;
|
|
public int RegionSize;
|
|
public int State;
|
|
public int Protect;
|
|
public int lType;
|
|
}
|
|
|
|
public struct SYSTEM_INFO
|
|
{
|
|
public ushort processorArchitecture;
|
|
ushort reserved;
|
|
public uint pageSize;
|
|
public IntPtr minimumApplicationAddress;
|
|
public IntPtr maximumApplicationAddress;
|
|
public IntPtr activeProcessorMask;
|
|
public uint numberOfProcessors;
|
|
public uint processorType;
|
|
public uint allocationGranularity;
|
|
public ushort processorLevel;
|
|
public ushort processorRevision;
|
|
}
|
|
|
|
public bool Extract(string ExtractMode)
|
|
{
|
|
try
|
|
{
|
|
SYSTEM_INFO sys_info = new SYSTEM_INFO();
|
|
GetSystemInfo(out sys_info);
|
|
CurrentIndex = 0;
|
|
Done = false;
|
|
ExtractedBlockDone = 1;
|
|
CurrentExtractedDumps = 1;
|
|
|
|
if (!Directory.Exists(ThisEndPath)) Directory.CreateDirectory(ThisEndPath);
|
|
RemovePastDump();
|
|
|
|
long MaxIndex = (CurrentIndex + BlockSizeExtracted);
|
|
|
|
proc_min_address = (IntPtr)CurrentIndex;
|
|
proc_max_address = (IntPtr)MaxIndex;
|
|
proc_min_address_l = (long)proc_min_address;
|
|
proc_max_address_l = (long)proc_max_address;
|
|
|
|
GForm_Main_0.method_1("------------------------------------------");
|
|
GForm_Main_0.method_1("Extracting...");
|
|
|
|
Process[] ProcList = Process.GetProcessesByName("FlashProManager");
|
|
if (ProcList.Length == 0)
|
|
{
|
|
GForm_Main_0.method_1("FlashProManager is not running");
|
|
return false;
|
|
}
|
|
else
|
|
{
|
|
process = Process.GetProcessesByName("FlashProManager")[0];
|
|
GForm_Main_0.method_1("FlashProManager is running...");
|
|
|
|
string ReloadDump = "";
|
|
if (ExtractMode == "Bin")
|
|
{
|
|
//This function will extract datas present in 'system space memory' (kernel/protected area)
|
|
//32Bit applications have 4Gb of memory split into 2sections of 2Gb,
|
|
// ->the first section 0x00000000 to 0x7FFFFFFF are 'user space memory'
|
|
// ->the second section 0x80000000 to 0xFFFFFFFF are 'system space memory'
|
|
ExtractBINFromMemory();
|
|
}
|
|
|
|
if (ExtractMode == "Definition")
|
|
{
|
|
//This function will extract datas present in 'user space memory' (unprotected area)
|
|
//32Bit applications have 4Gb of memory split into 2sections of 2Gb,
|
|
// ->the first section 0x00000000 to 0x7FFFFFFF are 'user space memory'
|
|
// ->the second section 0x80000000 to 0xFFFFFFFF are 'system space memory'
|
|
while (!Done)
|
|
{
|
|
int Percent = (int)(((CurrentIndex) * 100) / (Int64.Parse(sys_info.maximumApplicationAddress.ToString()) - 1));
|
|
GForm_Main_0.method_4(Percent);
|
|
|
|
if ((CurrentIndex + BlockSizeExtracted) > Int64.Parse(sys_info.maximumApplicationAddress.ToString()))
|
|
{
|
|
Done = true;
|
|
}
|
|
else
|
|
{
|
|
MaxIndex = (CurrentIndex + BlockSizeExtracted);
|
|
|
|
proc_min_address = (IntPtr)CurrentIndex;
|
|
proc_max_address = (IntPtr)MaxIndex;
|
|
proc_min_address_l = (long)proc_min_address;
|
|
proc_max_address_l = (long)proc_max_address;
|
|
|
|
ExtractMemoryBlock();
|
|
|
|
ReloadDump = File.ReadAllText(ThisEndPath + "DumpHex" + ExtractedBlockDone);
|
|
if (ReloadDump.Contains("[Definition]"))
|
|
{
|
|
//GForm_Main_0.method_1("Found Definition in DumpHex" + ExtractedBlockDone);
|
|
Console.WriteLine("Found Definition in DumpHex" + ExtractedBlockDone);
|
|
|
|
CurrentExtractedDumps++;
|
|
string DumpedDefinition = ReloadDump.Substring(ReloadDump.IndexOf("[Definition]"));
|
|
DumpedDefinition = DumpedDefinition.Substring(0, DumpedDefinition.LastIndexOf("ConditionalEnableValue=") + 24);
|
|
|
|
DumpedDefinition = DumpedDefinition.Replace("..", "\n");
|
|
|
|
|
|
string SaveDefPath = ThisEndPath + "ExtractedDefinition" + (CurrentExtractedDumps - 1).ToString() + ".txt";
|
|
GForm_Main_0.method_1("Extracted Definitions file created: " + Environment.NewLine + SaveDefPath);
|
|
File.Create(SaveDefPath).Dispose();
|
|
File.WriteAllText(SaveDefPath, DumpedDefinition);
|
|
}
|
|
}
|
|
|
|
CurrentIndex += BlockSizeExtracted;
|
|
ExtractedBlockDone++;
|
|
}
|
|
}
|
|
|
|
RemovePastDump();
|
|
GForm_Main_0.ResetProgressBar();
|
|
|
|
if (CurrentExtractedDumps == 1)
|
|
{
|
|
GForm_Main_0.method_1("No " + ExtractMode + " found loaded in memory" + Environment.NewLine + "Try saving your calibration in FlashProManager with small changes and retry this feature");
|
|
return false;
|
|
}
|
|
else
|
|
{
|
|
GForm_Main_0.method_1((CurrentExtractedDumps - 1) + " " + ExtractMode + " found!");
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
catch (Exception message)
|
|
{
|
|
GForm_Main_0.ResetProgressBar();
|
|
GForm_Main_0.method_1("Cannot extract! Error:" + Environment.NewLine + message);
|
|
return false;
|
|
|
|
}
|
|
}
|
|
|
|
void RemovePastDump()
|
|
{
|
|
string[] FileList = Directory.GetFiles(ThisEndPath, "Dump*");
|
|
if (FileList.Length > 0)
|
|
{
|
|
for (int i = 0; i < FileList.Length; i++)
|
|
{
|
|
File.Delete(FileList[i]);
|
|
}
|
|
}
|
|
}
|
|
|
|
void ExtractBINFromMemory()
|
|
{
|
|
int bytesRead = 0;
|
|
uint ThisLocation = 0xFAFF0000; //0xFCD180BB FD0100C3 FD2A00C3 //C60000
|
|
uint MaxLocation = 0xFE000000;
|
|
uint ExtractingSize = 0xFFFFF;
|
|
//int BINSize = ExtractMemorySize + 1;
|
|
int BINSize = 0x26FFFF + 1;
|
|
IntPtr processHandle = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_WM_READ, false, process.Id);
|
|
byte[] buffer = new byte[ExtractingSize];
|
|
|
|
uint StartAddr = 0;
|
|
uint StartLocation = ThisLocation;
|
|
while (ThisLocation < MaxLocation && StartAddr == 0)
|
|
{
|
|
int Percent = (int)(((ThisLocation - StartLocation) * 100) / ((MaxLocation - StartLocation) - 1));
|
|
GForm_Main_0.method_4(Percent);
|
|
|
|
ReadProcessMemory((int)processHandle, ThisLocation, buffer, buffer.Length, ref bytesRead);
|
|
|
|
//D0 02 40 0B 00 09 AF FE ->works for 1Mb & 2Mb ROM
|
|
//0D 00 40 02 00 80 00 90 ->works for 4Mb ROM
|
|
//20 00 00 03 B4 C0 FF FF ->works for some 1Mb ROM
|
|
//FF FF FF FF FF FF FF XX -> NOT SUGGESTED
|
|
for (int i = 0; i < buffer.Length - 8; i++)
|
|
{
|
|
if (buffer[i] == 0xd0
|
|
&& buffer[i + 1] == 0x02
|
|
&& buffer[i + 2] == 0x40
|
|
&& buffer[i + 3] == 0x0b
|
|
&& buffer[i + 4] == 0x00
|
|
&& buffer[i + 5] == 0x09
|
|
&& buffer[i + 6] == 0xaf
|
|
&& buffer[i + 7] == 0xfe)
|
|
{
|
|
StartAddr = (uint)i - 8;
|
|
i = buffer.Length;
|
|
Console.WriteLine("Bin method#1");
|
|
}
|
|
|
|
if (StartAddr == 0)
|
|
{
|
|
if (buffer[i] == 0x0d
|
|
&& buffer[i + 1] == 0x00
|
|
&& buffer[i + 2] == 0x40
|
|
&& buffer[i + 3] == 0x02
|
|
&& buffer[i + 4] == 0x00
|
|
&& buffer[i + 5] == 0x80
|
|
&& buffer[i + 6] == 0x00
|
|
&& buffer[i + 7] == 0x90)
|
|
{
|
|
StartAddr = (uint)i - 8;
|
|
i = buffer.Length;
|
|
Console.WriteLine("Bin method#2");
|
|
}
|
|
}
|
|
|
|
if (StartAddr == 0)
|
|
{
|
|
if (buffer[i] == 0x20
|
|
&& buffer[i + 1] == 0x00
|
|
&& buffer[i + 2] == 0x00
|
|
&& buffer[i + 3] == 0x03
|
|
&& buffer[i + 4] == 0xb4
|
|
&& buffer[i + 5] == 0xc0
|
|
&& buffer[i + 6] == 0xff
|
|
&& buffer[i + 7] == 0xff)
|
|
{
|
|
StartAddr = (uint)i - 6; //fixed
|
|
i = buffer.Length;
|
|
Console.WriteLine("Bin method#3");
|
|
}
|
|
}
|
|
|
|
/*if (StartAddr == 0)
|
|
{
|
|
if (buffer[i] == 0x20
|
|
&& buffer[i + 1] == 0x00
|
|
&& buffer[i + 2] == 0x00
|
|
&& buffer[i + 3] == 0xd0
|
|
&& buffer[i + 4] == 0x3f
|
|
&& buffer[i + 5] == 0x87
|
|
&& buffer[i + 6] == 0x01
|
|
&& buffer[i + 7] == 0xd0)
|
|
{
|
|
StartAddr = (uint)i - 8;
|
|
i = buffer.Length;
|
|
Console.WriteLine("Bin method#4");
|
|
}
|
|
}*/
|
|
//20 00 00 D0 4F 28 01 D0
|
|
//20 00 00 D0 3F 87 01 D0
|
|
//01 D0 00 00 00 B0 B7 06
|
|
|
|
//NOT SUGGESTED
|
|
/*if (buffer[i] == 0xff
|
|
&& buffer[i + 1] == 0xff
|
|
&& buffer[i + 2] == 0xff
|
|
&& buffer[i + 3] == 0xff
|
|
&& buffer[i + 4] == 0xff
|
|
&& buffer[i + 5] == 0xff
|
|
&& buffer[i + 6] == 0xff
|
|
&& buffer[i + 7] != 0xff)
|
|
{
|
|
StartAddr = (uint)i + 15;
|
|
i = buffer.Length;
|
|
}*/
|
|
}
|
|
|
|
if (StartAddr == 0)
|
|
{
|
|
ThisLocation += ExtractingSize;
|
|
//ThisLocation += 1;
|
|
}
|
|
}
|
|
|
|
GForm_Main_0.ResetProgressBar();
|
|
|
|
if (StartAddr != 0)
|
|
{
|
|
//Console.WriteLine("address: 0x" + (StartAddr + ThisLocation).ToString("X"));
|
|
buffer = new byte[BINSize];
|
|
ReadProcessMemory((int)processHandle, (StartAddr + ThisLocation), buffer, buffer.Length, ref bytesRead);
|
|
|
|
//Remake buffer for appropriate size rom (1mb/2mb/4mb)
|
|
int NameLocation = GForm_Main_0.Editortable_0.ExtractECUNameLocationFromThisFile(buffer);
|
|
int Count0x00 = 0;
|
|
int BinFormatSize = 0x26FFFF + 1;
|
|
|
|
//Console.WriteLine("name location: 0x" + NameLocation.ToString("X"));
|
|
if (NameLocation < 0x1EFFFF)
|
|
{
|
|
for (int i = 0xF7FFF; i < buffer.Length; i++)
|
|
{
|
|
if (buffer[i] == 0x00) Count0x00++;
|
|
if (buffer[i] != 0x00) Count0x00 = 0;
|
|
|
|
if (Count0x00 >= (16 * 150))
|
|
{
|
|
if (i >= 0xF7FFF && i < 0x1EFFFF)
|
|
{
|
|
BinFormatSize = 0xF7FFF + 1;
|
|
//Console.WriteLine("too much 0x00 at: 0x" + i.ToString("X"));
|
|
i = buffer.Length;
|
|
}
|
|
if (i >= 0x1EFFFF && i < 0x26FFFF)
|
|
{
|
|
BinFormatSize = 0x1EFFFF + 1;
|
|
i = buffer.Length;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (BinFormatSize == (0xF7FFF + 1))
|
|
{
|
|
//remake 1mb
|
|
GForm_Main_0.method_1("1Mb .bin format detected");
|
|
byte[] newwbuffer = new byte[0xF7FFF + 1];
|
|
for (int k = 0; k < newwbuffer.Length; k++) newwbuffer[k] = buffer[k];
|
|
buffer = newwbuffer;
|
|
}
|
|
if (BinFormatSize == (0x1EFFFF + 1))
|
|
{
|
|
//remake 2mb
|
|
GForm_Main_0.method_1("2Mb .bin format detected");
|
|
byte[] newwbuffer = new byte[0x1EFFFF + 1];
|
|
for (int k = 0; k < newwbuffer.Length; k++) newwbuffer[k] = buffer[k];
|
|
buffer = newwbuffer;
|
|
}
|
|
if (BinFormatSize == (0x26FFFF + 1))
|
|
{
|
|
GForm_Main_0.method_1("4Mb .bin format detected");
|
|
}
|
|
|
|
string ECUFilename = GForm_Main_0.Editortable_0.ExtractECUNameFromThisFile(buffer);
|
|
if (ECUFilename != "")
|
|
{
|
|
string SavePathh = ThisEndPath + ECUFilename + ".bin";
|
|
File.Create(SavePathh).Dispose();
|
|
File.WriteAllBytes(SavePathh, buffer);
|
|
GForm_Main_0.method_1("Extracted Binary file created: " + Environment.NewLine + SavePathh);
|
|
CurrentExtractedDumps++;
|
|
}
|
|
else
|
|
{
|
|
GForm_Main_0.method_1("Something went wrong while extracting .bin:" + Environment.NewLine + "Could not find 'ECU name' inside the extracted data");
|
|
string SavePathh = ThisEndPath + "DumpHex1";
|
|
File.Create(SavePathh).Dispose();
|
|
File.WriteAllBytes(SavePathh, buffer);
|
|
}
|
|
}
|
|
/*else
|
|
{
|
|
string SavePathh = ThisEndPath + "DumpHex1";
|
|
File.Create(SavePathh).Dispose();
|
|
File.WriteAllBytes(SavePathh, buffer);
|
|
}*/
|
|
}
|
|
|
|
void ExtractMemoryBlock()
|
|
{
|
|
int bytesRead = 0;
|
|
IntPtr processHandle = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_WM_READ, false, process.Id);
|
|
MEMORY_BASIC_INFORMATION mem_basic_info = new MEMORY_BASIC_INFORMATION();
|
|
StreamWriter sw2 = new StreamWriter(ThisEndPath + "DumpHex" + ExtractedBlockDone);
|
|
|
|
while (proc_min_address_l < proc_max_address_l)
|
|
{
|
|
VirtualQueryEx(processHandle, proc_min_address, out mem_basic_info, 28);
|
|
|
|
if ((mem_basic_info.Protect == PAGE_READWRITE && mem_basic_info.State == MEM_COMMIT) || mem_basic_info.Protect == PAGE_WRITECOPY)
|
|
{
|
|
byte[] buffer = new byte[mem_basic_info.RegionSize];
|
|
|
|
ReadProcessMemory((int)processHandle, (uint) mem_basic_info.BaseAddress, buffer, mem_basic_info.RegionSize, ref bytesRead);
|
|
|
|
for (int i = 0; i < mem_basic_info.RegionSize; i++)
|
|
{
|
|
sw2.Write((char)buffer[i]);
|
|
}
|
|
}
|
|
|
|
proc_min_address_l += mem_basic_info.RegionSize;
|
|
proc_min_address = new IntPtr(proc_min_address_l);
|
|
}
|
|
|
|
sw2.Close();
|
|
|
|
byte[] AllBytes = File.ReadAllBytes(ThisEndPath + "DumpHex" + ExtractedBlockDone);
|
|
List<byte> AllBytesList = new List<byte>();
|
|
for (int i = 0; i < AllBytes.Length; i++)
|
|
{
|
|
if (AllBytes[i] >= 0x20 && AllBytes[i] <= 0x7E) AllBytesList.Add(AllBytes[i]);
|
|
if (AllBytes[i] == 0x0D || AllBytes[i] == 0x0A) AllBytesList.Add(AllBytes[i]);
|
|
}
|
|
AllBytes = new byte[AllBytesList.Count];
|
|
for (int i = 0; i < AllBytesList.Count; i++) AllBytes[i] = AllBytesList[i];
|
|
|
|
File.WriteAllBytes(ThisEndPath + "DumpHex" + ExtractedBlockDone, AllBytes);
|
|
|
|
/*if (ExtractMode == "Bin")
|
|
{
|
|
byte[] AllBytesChar = File.ReadAllBytes(ThisEndPath + "DumpHex" + ExtractedBlockDone);
|
|
byte[] AllReturnBytes = new byte[AllBytesChar.Length / 3];
|
|
for (int i = 0; i < AllReturnBytes.Length; i++)
|
|
{
|
|
char char1 = (char) AllBytesChar[(i * 3)];
|
|
char char2 = (char) AllBytesChar[(i * 3) + 1];
|
|
string ByteHex = char1.ToString() + char2.ToString();
|
|
|
|
AllReturnBytes[i] = (byte) int.Parse(ByteHex, System.Globalization.NumberStyles.HexNumber);
|
|
}
|
|
|
|
File.WriteAllBytes(ThisEndPath + "DumpHex" + ExtractedBlockDone, AllReturnBytes);
|
|
}*/
|
|
}
|
|
//##########################################################################################################################
|
|
//##########################################################################################################################
|
|
//##########################################################################################################################
|
|
//##########################################################################################################################
|
|
//##########################################################################################################################
|
|
|
|
public void ExtracHondaAcuraECUCodesList()
|
|
{
|
|
string DoThisPath = Application.StartupPath + @"\HondaAcuraCodesList2.txt";
|
|
string AllRWDPath = @"C:\Program Files (x86)\Honda\J2534 Pass Thru\CalibFiles";
|
|
string[] AllFiles = Directory.GetFiles(AllRWDPath, "*.gz"); //Get all RWD files
|
|
string[] AllLines = File.ReadAllLines(DoThisPath);
|
|
for (int i = 0; i < AllLines.Length; i++)
|
|
{
|
|
if (AllLines[i].Contains("_"))
|
|
{
|
|
if (AllLines[i][0] != '#')
|
|
{
|
|
string[] Splittedcmds = AllLines[i].Split('_');
|
|
for (int i2 = 0; i2 < Splittedcmds.Length; i2++)
|
|
{
|
|
if (Splittedcmds[i2].Contains("37820"))
|
|
{
|
|
string SearchFor = Splittedcmds[i2];
|
|
SearchFor = SearchFor.Replace("37820", "37805");
|
|
SearchFor = SearchFor.Substring(0, SearchFor.Length - 1);
|
|
SearchFor = SearchFor.Replace("XX", "");
|
|
if (SearchFor[SearchFor.Length - 1] == 'X') SearchFor = SearchFor.Substring(0, SearchFor.Length - 1);
|
|
|
|
Console.WriteLine(SearchFor);
|
|
|
|
for (int k = 0; k < AllFiles.Length; k++)
|
|
{
|
|
if (AllFiles[k].Contains(SearchFor))
|
|
{
|
|
Class_RWD.LoadRWD(AllFiles[k], true, false, false, false);
|
|
|
|
string TheseRWDFiles = "";
|
|
for (int m = 0; m < Class_RWD.SuppportedVersions.Length; m++)
|
|
{
|
|
TheseRWDFiles += Class_RWD.SuppportedVersions[m];
|
|
if (m < Class_RWD.SuppportedVersions.Length - 1) TheseRWDFiles += "_";
|
|
}
|
|
|
|
//Remake Current line
|
|
string CurrentLineText = "";
|
|
for (int m = 0; m < Splittedcmds.Length; m++) CurrentLineText += Splittedcmds[m] + "_";
|
|
CurrentLineText += TheseRWDFiles;
|
|
|
|
Console.WriteLine("Remadeline: " + CurrentLineText);
|
|
AllLines[i] = CurrentLineText;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
File.WriteAllLines(DoThisPath, AllLines);
|
|
}
|
|
|
|
//##########################################
|
|
|
|
public void SetHondaAcuraCodesToDefinitionsFiles()
|
|
{
|
|
string DoThisPath = Application.StartupPath + @"\HondaAcuraCodesList.txt";
|
|
string DoThisPath2 = Application.StartupPath + @"\HondaAcuraCodesList2.txt";
|
|
string Folderpath = Application.StartupPath + @"\Definitions\Generated";
|
|
string[] AllDefinitionFiles = Directory.GetFiles(Folderpath, "*.txt", SearchOption.AllDirectories);
|
|
string[] AllLines1 = File.ReadAllLines(DoThisPath);
|
|
string[] AllLines2 = File.ReadAllLines(DoThisPath2);
|
|
List<string> FileToDelete = new List<string>();
|
|
|
|
for (int i = 0; i < AllDefinitionFiles.Length; i++)
|
|
{
|
|
try
|
|
{
|
|
//37805-RWC-A620-M1.rwd.txt
|
|
string EcuNamee = Path.GetFileNameWithoutExtension(AllDefinitionFiles[i]).Substring(0, 13);
|
|
|
|
|
|
Console.WriteLine("Doing: " + EcuNamee);
|
|
|
|
bool FoundParam = false;
|
|
for (int k = 0; k < AllLines1.Length; k++)
|
|
{
|
|
if (AllLines1[k].Contains(EcuNamee))
|
|
{
|
|
Console.WriteLine("Found#1");
|
|
//Honda_Accord_2013_EX, EX-L_2.4L L4 - Gas, 3.5L V6 - Gas
|
|
string ParamLine = AllLines1[k - 1];
|
|
if (ParamLine.Contains(","))
|
|
{
|
|
string[] SplittedP = ParamLine.Split(',');
|
|
string DescText = SplittedP[0];
|
|
DescText += GetProccesorAndSize(AllLines2, EcuNamee);
|
|
string NewFileName = Path.GetDirectoryName(AllDefinitionFiles[i]) + @"\" + Path.GetFileNameWithoutExtension(AllDefinitionFiles[i]).Substring(0, 14) + "_" + DescText + ".txt";
|
|
File.Create(NewFileName).Dispose();
|
|
File.WriteAllBytes(NewFileName, File.ReadAllBytes(AllDefinitionFiles[i]));
|
|
|
|
if (NewFileName != AllDefinitionFiles[i]) FileToDelete.Add(AllDefinitionFiles[i]);
|
|
Console.WriteLine("Created: " + Path.GetFileNameWithoutExtension(NewFileName));
|
|
|
|
//#####################
|
|
string[] AllThisLines = File.ReadAllLines(NewFileName);
|
|
AllThisLines[0] = "# " + ParamLine + " | " + GetOtherDesc(AllLines2, EcuNamee);
|
|
AllThisLines[1] = "#######################################################################";
|
|
File.WriteAllLines(NewFileName, AllThisLines);
|
|
}
|
|
|
|
FoundParam = true;
|
|
k = AllLines1.Length;
|
|
}
|
|
}
|
|
|
|
if (!FoundParam)
|
|
{
|
|
//ECU_Acura_RLX_3.5_16v_310Hp_KEIHIN_37820-R9S-A8X_SH72543_2Mb_37805-R9S-A840_37805-R9S-A830_37805-R9S-A820_37805-R9S-A810_37805-R9S-A590_37805-R9S-A580_37805-R9S-A570_37805-R9S-A560_37805-R9S-A550_37805-R9S-A540_37805-R9S-A530_37805-R9S-A520_37805-R9S-A510
|
|
for (int k = 0; k < AllLines2.Length; k++)
|
|
{
|
|
if (AllLines2[k].Contains(EcuNamee))
|
|
{
|
|
Console.WriteLine("Found#2");
|
|
string ParamLine = AllLines2[k];
|
|
|
|
if (ParamLine.Contains("_"))
|
|
{
|
|
string[] SplittedP = ParamLine.Split('_');
|
|
string DescText = SplittedP[1] + "_" + SplittedP[2] + "_" + SplittedP[3] + "_" + SplittedP[4];
|
|
DescText += GetProccesorAndSize(AllLines2, EcuNamee);
|
|
string NewFileName = Path.GetDirectoryName(AllDefinitionFiles[i]) + @"\" + Path.GetFileNameWithoutExtension(AllDefinitionFiles[i]).Substring(0, 14) + "_" + DescText + ".txt";
|
|
File.Create(NewFileName).Dispose();
|
|
File.WriteAllBytes(NewFileName, File.ReadAllBytes(AllDefinitionFiles[i]));
|
|
|
|
if (NewFileName != AllDefinitionFiles[i]) FileToDelete.Add(AllDefinitionFiles[i]);
|
|
Console.WriteLine("Created: " + Path.GetFileNameWithoutExtension(NewFileName));
|
|
|
|
//#####################
|
|
string[] AllThisLines = File.ReadAllLines(NewFileName);
|
|
AllThisLines[0] = "# " + ParamLine;
|
|
AllThisLines[1] = "#######################################################################";
|
|
File.WriteAllLines(NewFileName, AllThisLines);
|
|
}
|
|
|
|
FoundParam = true;
|
|
k = AllLines2.Length;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch { }
|
|
}
|
|
|
|
for (int i = 0; i < FileToDelete.Count; i++)
|
|
{
|
|
File.Delete(FileToDelete[i]);
|
|
Console.WriteLine("Deleted: " + Path.GetFileNameWithoutExtension(FileToDelete[i]));
|
|
}
|
|
}
|
|
|
|
string GetOtherDesc(string[] AllLines2, string EcuNamee)
|
|
{
|
|
string ReturnText = "";
|
|
for (int k = 0; k < AllLines2.Length; k++)
|
|
{
|
|
if (AllLines2[k].Contains(EcuNamee))
|
|
{
|
|
ReturnText = AllLines2[k];
|
|
|
|
k = AllLines2.Length;
|
|
}
|
|
}
|
|
return ReturnText;
|
|
}
|
|
|
|
string GetProccesorAndSize(string[] AllLines2, string EcuNamee)
|
|
{
|
|
string ReturnText = "";
|
|
for (int k = 0; k < AllLines2.Length; k++)
|
|
{
|
|
if (AllLines2[k].Contains(EcuNamee))
|
|
{
|
|
string ParamLine = AllLines2[k];
|
|
|
|
if (ParamLine.Contains("_"))
|
|
{
|
|
string[] SplittedP = ParamLine.Split('_');
|
|
for (int m = 0; m < SplittedP.Length; m++)
|
|
{
|
|
if (SplittedP[m].Contains("SH72543") || SplittedP[m].Contains("SH7058") || SplittedP[m].Contains("MPC5554") ||
|
|
SplittedP[m].Contains("MPC5566") || SplittedP[m].Contains("SH7055"))
|
|
{
|
|
ReturnText += "_" + SplittedP[m] + "_" + SplittedP[m + 1];
|
|
m = SplittedP.Length;
|
|
}
|
|
}
|
|
}
|
|
|
|
k = AllLines2.Length;
|
|
}
|
|
}
|
|
return ReturnText;
|
|
}
|
|
|
|
//##########################################################################################################################
|
|
//##########################################################################################################################
|
|
//##########################################################################################################################
|
|
//##########################################################################################################################
|
|
//##########################################################################################################################
|
|
|
|
public void ExtractAllBootLoaderSum()
|
|
{
|
|
AllFileNames = new List<string>();
|
|
AllBootLoaderSumBytes = new List<byte>();
|
|
|
|
string[] AllFiles = Directory.GetFiles(FirmwareFolder, "*.gz"); //Get all RWD files
|
|
for (int i = 0; i < GForm_Main_0.Editortable_0.ClassEditor_0.Ecus_Definitions_Compatible.Count; i++) //Check within all ecus that has a definitions file
|
|
{
|
|
string ThisEcu = GForm_Main_0.Editortable_0.ClassEditor_0.Ecus_Definitions_Compatible[i];
|
|
string ThisEcuReducedName2 = "?????";
|
|
if (ThisEcu.Length >= 12) ThisEcuReducedName2 = ThisEcu.Substring(0, 12);
|
|
|
|
//if (ThisEcu != "37805-RWC-A620") continue;
|
|
|
|
bool RWDFileFound = false;
|
|
for (int k = 0; k < AllFiles.Length; k++) //check within all RWD files
|
|
{
|
|
/*bool MatchingInside = false;
|
|
if (AllFiles[k].Contains(ThisEcuReducedName2))
|
|
{
|
|
Class_RWD.LoadRWD(AllFiles[k], false, false, false, false);
|
|
for (int m = 0; m < Class_RWD.SuppportedVersions.Length; m++)
|
|
{
|
|
if (Class_RWD.SuppportedVersions[m] == ThisEcu) MatchingInside = true;
|
|
}
|
|
}*/
|
|
Application.DoEvents();
|
|
|
|
if (AllFiles[k].Contains(ThisEcu))
|
|
//if (AllFiles[k].Contains(ThisEcu) || MatchingInside)
|
|
{
|
|
RWDFileFound = true;
|
|
Console.WriteLine("DOING: " + ThisEcu);
|
|
GForm_Main_0.ClearLogs();
|
|
|
|
//Decrypt firmware file and get needed variable (Decryption byte)
|
|
Class_RWD.LoadRWD(AllFiles[k], true, false, false, true);
|
|
|
|
byte BootSumByte = 0;
|
|
for (int m = 0; m < Class_RWD.SuppportedVersions.Length; m++)
|
|
{
|
|
if (Class_RWD.SuppportedVersions[m] == ThisEcu) //Matching ecu definition and RWD file
|
|
{
|
|
BootSumByte = Class_RWD.BootloaderSum;
|
|
if (BootSumByte == 0) Console.WriteLine("ERROR BOOTSUM FOR: " + ThisEcu);
|
|
|
|
m = Class_RWD.SuppportedVersions.Length;
|
|
//k = AllFiles.Length;
|
|
}
|
|
}
|
|
|
|
if (BootSumByte != 0)
|
|
{
|
|
for (int m = 0; m < Class_RWD.SuppportedVersions.Length; m++)
|
|
{
|
|
AllFileNames.Add(Class_RWD.SuppportedVersions[m]);
|
|
AllBootLoaderSumBytes.Add(BootSumByte);
|
|
}
|
|
}
|
|
|
|
k = AllFiles.Length;
|
|
}
|
|
}
|
|
if (!RWDFileFound) Console.WriteLine("RWD NOT FOUND FOR: " + ThisEcu);
|
|
}
|
|
|
|
string SavingText = "";
|
|
for (int i = 0; i < AllFileNames.Count; i++) SavingText = SavingText + AllFileNames[i] + "|" + AllBootLoaderSumBytes[i] + Environment.NewLine;
|
|
|
|
string SavingPath = Application.StartupPath + @"\BootLoaderSumBytesList2.txt";
|
|
File.Create(SavingPath).Dispose();
|
|
File.WriteAllText(SavingPath, SavingText);
|
|
|
|
GForm_Main_0.method_1("File saved:" + SavingPath);
|
|
}
|
|
|
|
/*public void ExtractAllBootLoaderSum_1Mb()
|
|
{
|
|
AllFileNames = new List<string>();
|
|
AllBootLoaderSumBytes = new List<byte>();
|
|
|
|
string[] AllFiles = Directory.GetFiles(FirmwareFolder, "*.bin");
|
|
foreach (string ThisFile in AllFiles)
|
|
{
|
|
byte[] AllBytes = File.ReadAllBytes(ThisFile);
|
|
byte BootLoaderSumByte = GetBootloaderSum(AllBytes);
|
|
|
|
AllFileNames.Add(Path.GetFileNameWithoutExtension(ThisFile));
|
|
AllBootLoaderSumBytes.Add(BootLoaderSumByte);
|
|
}
|
|
|
|
string SavingText = "";
|
|
for (int i = 0; i < AllFileNames.Count; i++) SavingText = SavingText + AllFileNames[i] + "|" + AllBootLoaderSumBytes[i] + Environment.NewLine;
|
|
|
|
string SavingPath = Application.StartupPath + @"\BootLoaderSumBytesList.txt";
|
|
File.Create(SavingPath).Dispose();
|
|
File.WriteAllText(SavingPath, SavingText);
|
|
|
|
GForm_Main_0.method_1("File saved:" + SavingPath);
|
|
}
|
|
|
|
public byte GetBootloaderSum(byte[] FWFileBytes)
|
|
{
|
|
//###############################
|
|
//Get Checksum (sum)
|
|
byte[] BufferBytes = FWFileBytes;
|
|
byte num = BufferBytes[0x400];
|
|
byte num2 = GetNegativeChecksumFWBin(BufferBytes);
|
|
byte BTSum = num;
|
|
BTSum += num2;
|
|
return BTSum;
|
|
}
|
|
|
|
|
|
public byte GetNegativeChecksumFWBin(byte[] byte_1)
|
|
{
|
|
byte b = 0;
|
|
for (int i = 0; i < byte_1.Length; i++)
|
|
{
|
|
if (i != 0x400) b -= byte_1[i];
|
|
}
|
|
return b;
|
|
}*/
|
|
}
|