private void OBDresponsehandler(string[] serialdata) { string str; byte[] numArray; byte[] numArray1; int num = 2048; int num1 = 0; bool flag = false; bool flag1 = false; bool flag2 = false; bool flag3 = false; MainWindow._serialPort.DataReceived -= new SerialDataReceivedEventHandler(this.SerialPortHasData); if (this.searchforframe == "ID_AVT" && serialdata != null && OBD.GetAVTID(serialdata, out str, out flag1)) { this.WriteSerialData(OBD.AVTVPW(), true); this.consolemessage(str); if (!flag1) { this.searchforframe = "1X_OK"; } } if (this.searchforframe == "1X_OK" && serialdata != null && OBD.FindAVT1X(serialdata, out str)) { this.consolemessage(str); this.searchforframe = "ECHO"; } if (this.searchforframe == "SECURITY_SEED") { if (OBD.GetSecurityFrameCase15(serialdata, out numArray, out str, out flag2)) { this.consolemessage(str); if (flag2) { this.searchforframe = "MODE34_OK"; } else if (!flag2 && numArray != null) { this.WriteSerialData(numArray, false); this.searchforframe = "SECURITY_OK"; } else if (!flag2 && numArray == null) { this.searchforframe = "ECHO"; } } if (OBD.CheckForError(serialdata, out str, out flag3)) { this.consolemessage(str); if (flag3) { MessageBox.Show("PCM internal hardware failure detected, reflash not possible", "Error", MessageBoxButton.OK, MessageBoxImage.Hand); this.searchforframe = "ECHO"; } else { this.searchforframe = "MODE34_OK"; } } if (serialdata == null) { this.WriteSerialData(OBD.RequestSecuritySeed(), false); } this.rxserialbuffer = null; } if (this.searchforframe == "SECURITY_OK" && serialdata != null && OBD.GetSecurityResponse(serialdata, out flag, out str)) { this.consolemessage(str); if (!flag) { this.rxserialbuffer = null; this.searchforframe = "ECHO"; } else { numArray1 = this.readflashkernal(); if (numArray1 == null) { this.searchforframe = "ECHO"; } else { this.WriteSerialData(OBD.GetMode3436Frame(numArray1, "34"), false); this.searchforframe = "MODE34_OK"; } } } if (this.searchforframe == "MODE34_OK" && serialdata != null) { if (OBD.GetMode3436Response(serialdata, out numArray, out str)) { this.consolemessage(str); if (numArray == null) { this.searchforframe = "ECHO"; } else { this.WriteSerialData(numArray, false); this.searchforframe = "4X_OK"; } this.rxserialbuffer = null; } if (OBD.CheckForError(serialdata, out str, out flag3)) { this.consolemessage(str); if (flag3) { this.searchforframe = "ECHO"; } else { numArray1 = this.readflashkernal(); this.WriteSerialData(OBD.GetMode3436Frame(numArray1, "34"), false); } this.rxserialbuffer = null; } } if (this.searchforframe == "4X_OK" && serialdata != null && OBD.GetModeA0Response(serialdata, out numArray, out str)) { this.WriteSerialData(numArray, false); this.WriteSerialData(OBD.AVTHighSpeed(), true); Thread.Sleep(100); numArray1 = this.readflashkernal(); this.WriteSerialData(OBD.GetMode3436Frame(numArray1, "36"), false); this.WriteSerialData(OBD.AVTFilter(), true); Thread.Sleep(150); this.rxserialbuffer = null; this.searchforframe = "CALL_PCM"; } if (this.searchforframe == "CALL_PCM") { if (!OBD.CallPCM(serialdata, out numArray, out str)) { this.WriteSerialData(numArray, false); } else { this.breakresponse.Stop(); this.UserProgStart.IsEnabled = false; this.Disconnect.IsEnabled = true; this.consolemessage(str); this.searchforframe = "PCM_READY"; this.WriteSerialData(OBD.LockFlash(), false); this.rxserialbuffer = null; } } if (this.searchforframe == "DOWNLOAD") { num = 2048; if (OBD.ModeE1UpdateBIN(serialdata, this.DLBin, out this.DLBin, out flag)) { this.breakresponse.Stop(); if (this.DLBin != null) { this.FlashProgressBar.Value = (double)((int)this.DLBin.Length); if ((int)this.DLBin.Length >= MainWindow.flashend) { this.consolemessage("BIN download complete"); this.saveflashbin(); this.resetdownload(); this.searchforframe = "CALL_PCM"; } } } num = (!flag ? 128 : 2048); numArray = OBD.RequestModeE1Data(this.DLBin, num, MainWindow.flashend); this.WriteSerialData(numArray, false); this.rxserialbuffer = null; } if (this.searchforframe == "FLASH_UPLOAD" && serialdata != null) { if (OBD.CheckForFlashError(serialdata, out str)) { this.consolemessage(str); MessageBox.Show("Flash program failed", "Flash Error", MessageBoxButton.OK, MessageBoxImage.Hand); this.searchforframe = "CALL_PCM"; } if (OBD.ModeE2UploadBIN(serialdata, this.ULBin, out numArray, out num1)) { this.breakresponse.Stop(); if (numArray != null && num1 != -1) { this.FlashProgressBar.Value = (double)num1; this.WriteSerialData(numArray, false); } } if (OBD.CheckForFlashComplete(serialdata, out str)) { this.WriteSerialData(OBD.LockFlash(), false); this.consolemessage(str); this.resetupload(); this.searchforframe = "CALL_PCM"; } this.rxserialbuffer = null; } if (this.searchforframe == "FLASH_ERASE") { this.breakresponse.Stop(); this.WriteSerialData(OBD.UnlockFlash(), false); Thread.Sleep(1500); bool?isChecked = this.FlashOS.IsChecked; if ((!isChecked.GetValueOrDefault() ? true : !isChecked.HasValue)) { this.FlashProgressBar.Minimum = (double)MainWindow.calstart; this.FlashProgressBar.Maximum = (double)MainWindow.calend; this.WriteSerialData(OBD.FlashEraseCal(), false); } else { this.FlashProgressBar.Minimum = (double)MainWindow.calend; this.FlashProgressBar.Maximum = (double)((int)this.ULBin.Length); this.WriteSerialData(OBD.FlashEraseOS(), false); } this.searchforframe = "FLASH_UPLOAD"; this.rxserialbuffer = null; } if (this.searchforframe == "VERIFY_EXIT" && serialdata != null) { if (OBD.CheckForError(serialdata, out str, out flag3)) { if (flag3) { MessageBox.Show("FATAL ERROR - PCM BOOT or RAM fault", "Error", MessageBoxButton.OK, MessageBoxImage.Hand); } else { MessageBox.Show("Reflash failed, enter Flash Mode and repeat flash cycle", "Error", MessageBoxButton.OK, MessageBoxImage.Hand); } this.consolemessage(str); this.rxserialbuffer = null; this.searchforframe = "ECHO"; } else if (!OBD.CheckAVTExit(serialdata)) { this.consolemessage("PCM reset..."); this.searchforframe = "ECHO"; } if (OBD.CheckAVTExit(serialdata)) { this.rxserialbuffer = null; } this.UserProgStart.IsEnabled = true; } if (this.searchforframe != "ECHO") { this.autorespond.Start(); } MainWindow._serialPort.DataReceived += new SerialDataReceivedEventHandler(this.SerialPortHasData); }