private void OnReadExternalFlashStarted(bool checkIfReadRequired, bool onlyReadRequiredSectors, bool shouldVerifyReadData, byte[] baseImage, MemoryLayout flashLayout, Operation.CompletedOperationDelegate operationCompletedDel) { var readImage = baseImage; if ((readImage == null) || (readImage.Length != flashLayout.Size)) { readImage = new byte[flashLayout.Size]; //fill the memory image with 0xFF because that is what blank data in the flash chip is for (int x = 0; x < readImage.Length; x++) { readImage[x] = 0xFF; } } var sectorImages = MemoryUtils.SplitMemoryImageIntoSectors(readImage, flashLayout); var KWP2000CommViewModel = App.CommInterfaceViewModel as KWP2000Interface_ViewModel; var settings = new ReadExternalFlashOperation.ReadExternalFlashSettings(); settings.CheckIfSectorReadRequired = checkIfReadRequired; settings.OnlyReadNonMatchingSectors = onlyReadRequiredSectors; settings.VerifyReadData = shouldVerifyReadData; settings.SecuritySettings.RequestSeed = KWP2000CommViewModel.SeedRequest; settings.SecuritySettings.SupportSpecialKey = KWP2000CommViewModel.ShouldSupportSpecialKey; settings.SecuritySettings.UseExtendedSeedRequest = KWP2000CommViewModel.ShouldUseExtendedSeedRequest; App.CurrentOperation = new ReadExternalFlashOperation(KWP2000CommViewModel.KWP2000CommInterface, KWP2000CommViewModel.DesiredBaudRates, settings, sectorImages); App.CurrentOperation.CompletedOperationEvent += operationCompletedDel; App.DisplayStatusMessage("Reading ECU flash memory.", StatusMessageType.USER); App.CurrentOperation.Start(); }
private void OnWriteExternalFlashStarted(byte[] flashMemoryImage, MemoryLayout flashMemoryLayout, Operation.CompletedOperationDelegate onOperationComplete, bool diffWrite, bool verify) { var KWP2000CommViewModel = App.CommInterfaceViewModel as KWP2000Interface_ViewModel; var settings = new WriteExternalFlashOperation.WriteExternalFlashSettings(); settings.CheckIfWriteRequired = diffWrite; settings.OnlyWriteNonMatchingSectors = diffWrite; settings.VerifyWrittenData = verify; settings.EraseEntireFlashAtOnce = false; settings.SecuritySettings.RequestSeed = KWP2000CommViewModel.SeedRequest; settings.SecuritySettings.SupportSpecialKey = KWP2000CommViewModel.ShouldSupportSpecialKey; settings.SecuritySettings.UseExtendedSeedRequest = KWP2000CommViewModel.ShouldUseExtendedSeedRequest; var sectorImages = MemoryUtils.SplitMemoryImageIntoSectors(flashMemoryImage, flashMemoryLayout); App.CurrentOperation = new WriteExternalFlashOperation(KWP2000CommViewModel.KWP2000CommInterface, KWP2000CommViewModel.DesiredBaudRates, settings, sectorImages); App.CurrentOperation.CompletedOperationEvent += onOperationComplete; App.OperationInProgress = true; App.PercentOperationComplete = 0.0f; App.DisplayStatusMessage("Writing ECU flash memory.", StatusMessageType.USER); App.CurrentOperation.Start(); }