From 671cd50033ac099fcfc5fca08c08845bfe6bac9a Mon Sep 17 00:00:00 2001 From: GampyG28 Date: Sun, 23 Apr 2023 03:34:32 -0400 Subject: [PATCH] Add Loader functionality to CKernelWriter. --- Apps/PcmHammer/MainForm.cs | 7 ++++--- Apps/PcmLibrary/CKernelWriter.cs | 33 +++++++++++++++++++++++++++++++- 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/Apps/PcmHammer/MainForm.cs b/Apps/PcmHammer/MainForm.cs index 5076ed0f..2de58094 100644 --- a/Apps/PcmHammer/MainForm.cs +++ b/Apps/PcmHammer/MainForm.cs @@ -1496,10 +1496,11 @@ private async void write_BackgroundThread(WriteType writeType, string path = nul } } - if (pcmInfo.HardwareType == PcmType.P04) + if (writeType != WriteType.Compare && pcmInfo.HardwareType == PcmType.P04 && pcmInfo.HardwareType == PcmType.E54) { - this.AddUserMessage("P04 Write is not supported by PCMHammer, aborted"); - MessageBox.Show("P04 Write is not supported by PCMHammer"); + string msg = $"PCMHammer currently does not support writing to the {pcmInfo.HardwareType.ToString()}"; + this.AddUserMessage(msg); + MessageBox.Show(msg); return; } diff --git a/Apps/PcmLibrary/CKernelWriter.cs b/Apps/PcmLibrary/CKernelWriter.cs index 610e67f4..396ebfb9 100644 --- a/Apps/PcmLibrary/CKernelWriter.cs +++ b/Apps/PcmLibrary/CKernelWriter.cs @@ -76,7 +76,38 @@ public async Task Write( this.logger.AddUserMessage("4X communications disabled by configuration."); } - Response response = await this.vehicle.LoadKernelFromFile(this.pcmInfo.KernelFileName); + await this.vehicle.SendToolPresentNotification(); + + Response response; + + // Execute kernel loader, if required + if (this.pcmInfo.LoaderRequired) + { + response = await vehicle.LoadKernelFromFile(this.pcmInfo.LoaderFileName); + if (response.Status != ResponseStatus.Success) + { + logger.AddUserMessage("Failed to load loader from file."); + return false; + } + + if (cancellationToken.IsCancellationRequested) + { + return false; + } + + await this.vehicle.SendToolPresentNotification(); + + if (!await this.vehicle.PCMExecute(this.pcmInfo, response.Value, cancellationToken)) + { + logger.AddUserMessage("Failed to upload loader to PCM"); + + return false; + } + + logger.AddUserMessage("Loader uploaded to PCM succesfully."); + } + + response = await this.vehicle.LoadKernelFromFile(this.pcmInfo.KernelFileName); if (response.Status != ResponseStatus.Success) { logger.AddUserMessage("Failed to load kernel from file.");