-
Notifications
You must be signed in to change notification settings - Fork 133
IEP-1000 Board doesn't match the target after cancel in debug/jtag tab #799
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 5 commits
2b3d916
6fe9d7a
b0fe98b
f707e5d
f516316
c06d09a
3ea3b41
9bc6b8b
fb6f882
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,102 @@ | ||
| /******************************************************************************* | ||
| * Copyright 2023 Espressif Systems (Shanghai) PTE LTD. All rights reserved. | ||
| * Use is subject to license terms. | ||
| *******************************************************************************/ | ||
| package com.espressif.idf.debug.gdbjtag.openocd; | ||
|
|
||
| import java.io.File; | ||
| import java.io.InputStream; | ||
| import java.net.URL; | ||
| import java.util.jar.JarEntry; | ||
| import java.util.jar.JarFile; | ||
|
|
||
| import org.eclipse.core.resources.IFile; | ||
| import org.eclipse.core.resources.IFolder; | ||
| import org.eclipse.core.resources.IProject; | ||
| import org.eclipse.core.runtime.CoreException; | ||
| import org.eclipse.core.runtime.FileLocator; | ||
| import org.eclipse.core.runtime.NullProgressMonitor; | ||
| import org.eclipse.core.runtime.Platform; | ||
| import org.eclipse.core.variables.IDynamicVariable; | ||
| import org.eclipse.core.variables.IDynamicVariableResolver; | ||
| import org.eclipse.embedcdt.core.EclipseUtils; | ||
| import org.eclipse.launchbar.core.ILaunchBarManager; | ||
|
|
||
| import com.espressif.idf.core.IDFConstants; | ||
| import com.espressif.idf.core.build.IDFLaunchConstants; | ||
| import com.espressif.idf.core.logging.Logger; | ||
| import com.espressif.idf.core.util.StringUtil; | ||
| import com.espressif.idf.debug.gdbjtag.openocd.ui.TabSvdTarget; | ||
|
|
||
| /** | ||
| * A resolver class for the esp_svd_path dynamic variable. Resolves SVD path by looking for appropriate files inside the | ||
| * plugin resources | ||
| * | ||
| * @author Denys Almazov <[email protected]> | ||
| */ | ||
| public class SvdPathResolver implements IDynamicVariableResolver | ||
| { | ||
|
|
||
| private static final ILaunchBarManager LAUNCH_BAR_MANAGER = Activator.getService(ILaunchBarManager.class); | ||
|
|
||
sigmaaa marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| public String resolveValue(IDynamicVariable variable, String argument) throws CoreException | ||
|
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. mostly code from the updateSvd method |
||
| { | ||
| String selectedTarget = StringUtil.EMPTY; | ||
| String selectedTargetPath = StringUtil.EMPTY; | ||
| try | ||
| { | ||
| selectedTarget = LAUNCH_BAR_MANAGER.getActiveLaunchTarget().getAttribute(IDFLaunchConstants.ATTR_IDF_TARGET, | ||
| StringUtil.EMPTY); | ||
| if (StringUtil.isEmpty(selectedTarget)) | ||
| return StringUtil.EMPTY; | ||
| selectedTargetPath = resolveSvdPath(selectedTarget); | ||
| } | ||
| catch (Exception e) | ||
| { | ||
| Logger.log(e); | ||
| } | ||
| return selectedTargetPath; | ||
| } | ||
sigmaaa marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
|
||
| private String resolveSvdPath(String target) throws Exception | ||
| { | ||
| URL svdUrl = Platform.getBundle(Activator.PLUGIN_ID).getResource("svd/".concat(target.concat(".svd"))); //$NON-NLS-1$ //$NON-NLS-2$ | ||
| String jarPath = new File(TabSvdTarget.class.getProtectionDomain().getCodeSource().getLocation().toURI()) | ||
| .getPath(); | ||
| String selectedTargetPath; | ||
| if (!jarPath.contains(".jar")) //$NON-NLS-1$ | ||
| selectedTargetPath = new File(FileLocator.resolve(svdUrl).toURI()).getPath(); | ||
| else | ||
| selectedTargetPath = resolveSvdPathFromJar(svdUrl, jarPath); | ||
| return selectedTargetPath; | ||
| } | ||
sigmaaa marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
|
||
| private String resolveSvdPathFromJar(URL svdUrl, String jarPath) throws Exception | ||
| { | ||
| IProject project = EclipseUtils | ||
| .getProjectByLaunchConfiguration(LAUNCH_BAR_MANAGER.getActiveLaunchConfiguration()); | ||
| IFolder svdFolder = project.getFolder(IDFConstants.BUILD_FOLDER).getFolder("svd"); //$NON-NLS-1$ | ||
| if (!svdFolder.exists()) | ||
| { | ||
| svdFolder.create(true, true, new NullProgressMonitor()); | ||
| } | ||
| IFile svdFile = project.getFolder(IDFConstants.BUILD_FOLDER).getFile(svdUrl.getPath()); | ||
| if (!svdFile.exists()) | ||
| { | ||
| try (JarFile jarFile = new JarFile(jarPath)) | ||
| { | ||
| JarEntry file = (JarEntry) jarFile.getEntry(svdUrl.getFile().substring(1)); | ||
| if (file != null) | ||
| { | ||
| InputStream inputStream = jarFile.getInputStream(file); | ||
| svdFile.create(inputStream, true, new NullProgressMonitor()); | ||
| inputStream.close(); | ||
| } | ||
| } | ||
| } | ||
| project.refreshLocal(IProject.DEPTH_INFINITE, new NullProgressMonitor()); | ||
| return svdFile.getRawLocation().toOSString(); | ||
sigmaaa marked this conversation as resolved.
Show resolved
Hide resolved
sigmaaa marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| } | ||
|
|
||
|
|
||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -85,6 +85,7 @@ | |
| import com.espressif.idf.debug.gdbjtag.openocd.ui.properties.ProjectMcuPage; | ||
| import com.espressif.idf.launch.serial.SerialFlashLaunchTargetProvider; | ||
| import com.espressif.idf.launch.serial.ui.internal.NewSerialFlashTargetWizard; | ||
| import com.espressif.idf.ui.LaunchBarListener; | ||
|
|
||
| /** | ||
| * @since 7.0 | ||
|
|
@@ -168,12 +169,14 @@ public Image getImage() | |
| @Override | ||
| public void createControl(Composite parent) | ||
| { | ||
|
|
||
| if (Activator.getInstance().isDebugging()) | ||
| { | ||
| System.out.println("openocd.TabDebugger.createControl() "); | ||
| } | ||
|
|
||
| LaunchBarListener.setIgnoreJtagTargetChange(true); | ||
| parent.addDisposeListener(e -> LaunchBarListener.setIgnoreJtagTargetChange(false)); | ||
|
|
||
| if (!(parent instanceof ScrolledComposite)) | ||
| { | ||
| ScrolledComposite sc = new ScrolledComposite(parent, SWT.V_SCROLL | SWT.H_SCROLL); | ||
|
|
@@ -458,18 +461,6 @@ public void widgetSelected(SelectionEvent e) | |
| String selectedItem = fTarget.getText(); | ||
| if (!selectedItem.contentEquals(updatedSelectedTarget)) | ||
| { | ||
| try | ||
| { | ||
| ILaunchConfigurationWorkingCopy wc = launchBarManager.getActiveLaunchConfiguration() | ||
| .getWorkingCopy(); | ||
| wc.setAttribute(IDFLaunchConstants.TARGET_FOR_JTAG, selectedItem); | ||
| TabSvdTarget.updateSvd(selectedItem, wc); | ||
| wc.doSave(); | ||
| } | ||
| catch (CoreException e1) | ||
| { | ||
| Logger.log(e1); | ||
| } | ||
| updateLaunchBar(selectedItem); | ||
| } | ||
| fGdbClientExecutable.setText(IDFUtil.getXtensaToolchainExecutablePathByTarget(selectedItem)); | ||
|
Comment on lines
506
to
511
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The new hunk has removed some code related to updating the launch configuration when the selected item is not equal to the updated selected target. Ensure that this removal doesn't affect the functionality of the application. |
||
|
|
@@ -1513,19 +1504,9 @@ public void performApply(ILaunchConfigurationWorkingCopy configuration) | |
| // JTAG options | ||
| if (fFlashVoltage != null && fTarget != null && fTargetName != null) | ||
| { | ||
| try | ||
| { | ||
| ILaunchConfigurationWorkingCopy wc = configuration.getWorkingCopy(); | ||
| wc.setAttribute(IDFLaunchConstants.JTAG_FLASH_VOLTAGE, fFlashVoltage.getText()); | ||
| wc.setAttribute(IDFLaunchConstants.TARGET_FOR_JTAG, fTarget.getText()); | ||
| wc.setAttribute(IDFLaunchConstants.JTAG_BOARD, fTargetName.getText()); | ||
| wc.doSave(); | ||
| } | ||
| catch (CoreException e) | ||
| { | ||
| Logger.log(e); | ||
| } | ||
|
|
||
| configuration.setAttribute(IDFLaunchConstants.JTAG_FLASH_VOLTAGE, fFlashVoltage.getText()); | ||
| configuration.setAttribute(IDFLaunchConstants.TARGET_FOR_JTAG, fTarget.getText()); | ||
| configuration.setAttribute(IDFLaunchConstants.JTAG_BOARD, fTargetName.getText()); | ||
| } | ||
|
|
||
| // Force thread update | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -705,14 +705,6 @@ public void widgetSelected(SelectionEvent e) { | |
| } | ||
|
|
||
| if (!selectedItem.contentEquals(updatedSelectedTarget) && isFlashOverJtag) { | ||
| try { | ||
| ILaunchConfigurationWorkingCopy wc = launchBarManager.getActiveLaunchConfiguration() | ||
| .getWorkingCopy(); | ||
| wc.setAttribute(IDFLaunchConstants.TARGET_FOR_JTAG, selectedItem); | ||
| wc.doSave(); | ||
| } catch (CoreException e2) { | ||
| Logger.log(e2); | ||
| } | ||
| updateLaunchBar(selectedItem); | ||
| } | ||
| boardConfigsMap = parser.getBoardsConfigs(selectedItem); | ||
|
Comment on lines
712
to
717
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The code for updating the launch configuration with the selected target has been removed from the if block. Instead, the |
||
|
|
||
Uh oh!
There was an error while loading. Please reload this page.