mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-22 14:12:10 +02:00
Fix Arduino to managed the target in the delegate.
This commit is contained in:
parent
109655d384
commit
a2babed084
2 changed files with 39 additions and 14 deletions
|
@ -20,6 +20,7 @@ import org.eclipse.cdt.arduino.core.ArduinoProjectGenerator;
|
||||||
import org.eclipse.cdt.arduino.core.IArduinoRemoteConnection;
|
import org.eclipse.cdt.arduino.core.IArduinoRemoteConnection;
|
||||||
import org.eclipse.cdt.arduino.core.internal.Activator;
|
import org.eclipse.cdt.arduino.core.internal.Activator;
|
||||||
import org.eclipse.cdt.arduino.core.internal.Messages;
|
import org.eclipse.cdt.arduino.core.internal.Messages;
|
||||||
|
import org.eclipse.cdt.arduino.core.internal.remote.ArduinoRemoteConnection;
|
||||||
import org.eclipse.cdt.core.CCorePlugin;
|
import org.eclipse.cdt.core.CCorePlugin;
|
||||||
import org.eclipse.cdt.core.envvar.IEnvironmentVariable;
|
import org.eclipse.cdt.core.envvar.IEnvironmentVariable;
|
||||||
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
|
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
|
||||||
|
@ -39,16 +40,26 @@ import org.eclipse.debug.core.DebugPlugin;
|
||||||
import org.eclipse.debug.core.ILaunch;
|
import org.eclipse.debug.core.ILaunch;
|
||||||
import org.eclipse.debug.core.ILaunchConfiguration;
|
import org.eclipse.debug.core.ILaunchConfiguration;
|
||||||
import org.eclipse.debug.core.model.LaunchConfigurationDelegate;
|
import org.eclipse.debug.core.model.LaunchConfigurationDelegate;
|
||||||
import org.eclipse.launchbar.core.PerTargetLaunchConfigProvider;
|
|
||||||
import org.eclipse.remote.core.IRemoteConnection;
|
import org.eclipse.remote.core.IRemoteConnection;
|
||||||
|
import org.eclipse.remote.core.IRemoteConnectionType;
|
||||||
|
import org.eclipse.remote.core.IRemoteServicesManager;
|
||||||
|
|
||||||
public class ArduinoLaunchConfigurationDelegate extends LaunchConfigurationDelegate {
|
public class ArduinoLaunchConfigurationDelegate extends LaunchConfigurationDelegate {
|
||||||
|
|
||||||
public static final String TYPE_ID = "org.eclipse.cdt.arduino.core.launchConfigurationType"; //$NON-NLS-1$
|
public static final String TYPE_ID = "org.eclipse.cdt.arduino.core.launchConfigurationType"; //$NON-NLS-1$
|
||||||
|
public static final String CONNECTION_NAME = Activator.getId() + ".connectionName"; //$NON-NLS-1$
|
||||||
|
|
||||||
|
private static IRemoteConnection getTarget(ILaunchConfiguration configuration) throws CoreException {
|
||||||
|
IRemoteServicesManager remoteManager = Activator.getService(IRemoteServicesManager.class);
|
||||||
|
IRemoteConnectionType connectionType = remoteManager.getConnectionType(ArduinoRemoteConnection.TYPE_ID);
|
||||||
|
String connectionName = configuration.getAttribute(CONNECTION_NAME, ""); //$NON-NLS-1$
|
||||||
|
return connectionType.getConnection(connectionName);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean buildForLaunch(ILaunchConfiguration configuration, String mode, IProgressMonitor monitor) throws CoreException {
|
public boolean buildForLaunch(ILaunchConfiguration configuration, String mode, IProgressMonitor monitor)
|
||||||
IRemoteConnection target = PerTargetLaunchConfigProvider.getTarget(configuration);
|
throws CoreException {
|
||||||
|
IRemoteConnection target = getTarget(configuration);
|
||||||
|
|
||||||
// 1. make sure proper build config is set active
|
// 1. make sure proper build config is set active
|
||||||
IProject project = configuration.getMappedResources()[0].getProject();
|
IProject project = configuration.getMappedResources()[0].getProject();
|
||||||
|
@ -77,14 +88,16 @@ public class ArduinoLaunchConfigurationDelegate extends LaunchConfigurationDeleg
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void launch(final ILaunchConfiguration configuration, String mode, final ILaunch launch, IProgressMonitor monitor) throws CoreException {
|
public void launch(final ILaunchConfiguration configuration, String mode, final ILaunch launch,
|
||||||
|
IProgressMonitor monitor) throws CoreException {
|
||||||
new Job(Messages.ArduinoLaunchConfigurationDelegate_0) {
|
new Job(Messages.ArduinoLaunchConfigurationDelegate_0) {
|
||||||
protected IStatus run(IProgressMonitor monitor) {
|
protected IStatus run(IProgressMonitor monitor) {
|
||||||
try {
|
try {
|
||||||
ArduinoLaunchConsoleService consoleService = getConsoleService();
|
ArduinoLaunchConsoleService consoleService = getConsoleService();
|
||||||
IRemoteConnection target = PerTargetLaunchConfigProvider.getTarget(configuration);
|
IRemoteConnection target = getTarget(configuration);
|
||||||
if (target == null) {
|
if (target == null) {
|
||||||
return new Status(IStatus.ERROR, Activator.getId(), Messages.ArduinoLaunchConfigurationDelegate_2);
|
return new Status(IStatus.ERROR, Activator.getId(),
|
||||||
|
Messages.ArduinoLaunchConfigurationDelegate_2);
|
||||||
}
|
}
|
||||||
|
|
||||||
// The project
|
// The project
|
||||||
|
@ -93,7 +106,8 @@ public class ArduinoLaunchConfigurationDelegate extends LaunchConfigurationDeleg
|
||||||
// The build environment
|
// The build environment
|
||||||
ICProjectDescription projDesc = CCorePlugin.getDefault().getProjectDescription(project);
|
ICProjectDescription projDesc = CCorePlugin.getDefault().getProjectDescription(project);
|
||||||
ICConfigurationDescription configDesc = getBuildConfiguration(projDesc, target);
|
ICConfigurationDescription configDesc = getBuildConfiguration(projDesc, target);
|
||||||
IEnvironmentVariable[] envVars = CCorePlugin.getDefault().getBuildEnvironmentManager().getVariables(configDesc, true);
|
IEnvironmentVariable[] envVars = CCorePlugin.getDefault().getBuildEnvironmentManager()
|
||||||
|
.getVariables(configDesc, true);
|
||||||
List<String> envVarList = new ArrayList<String>(envVars.length + 1);
|
List<String> envVarList = new ArrayList<String>(envVars.length + 1);
|
||||||
for (IEnvironmentVariable var : envVars) {
|
for (IEnvironmentVariable var : envVars) {
|
||||||
envVarList.add(var.getName() + '=' + var.getValue());
|
envVarList.add(var.getName() + '=' + var.getValue());
|
||||||
|
@ -110,7 +124,8 @@ public class ArduinoLaunchConfigurationDelegate extends LaunchConfigurationDeleg
|
||||||
IConfiguration buildConfig = ManagedBuildManager.getConfigurationForDescription(configDesc);
|
IConfiguration buildConfig = ManagedBuildManager.getConfigurationForDescription(configDesc);
|
||||||
String command = buildConfig.getBuilder().getCommand();
|
String command = buildConfig.getBuilder().getCommand();
|
||||||
|
|
||||||
// If opened, temporarily close the connection so we can use it to download the firmware.
|
// If opened, temporarily close the connection so we can use
|
||||||
|
// it to download the firmware.
|
||||||
boolean wasOpened = target.isOpen();
|
boolean wasOpened = target.isOpen();
|
||||||
if (wasOpened) {
|
if (wasOpened) {
|
||||||
arduinoRemote.pause();
|
arduinoRemote.pause();
|
||||||
|
@ -148,12 +163,14 @@ public class ArduinoLaunchConfigurationDelegate extends LaunchConfigurationDeleg
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the build configuration for the active target and the launch configuration.
|
* Returns the build configuration for the active target and the launch
|
||||||
|
* configuration.
|
||||||
*
|
*
|
||||||
* @param launchConfig
|
* @param launchConfig
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
private ICConfigurationDescription getBuildConfiguration(ICProjectDescription projDesc, IRemoteConnection target) throws CoreException {
|
private ICConfigurationDescription getBuildConfiguration(ICProjectDescription projDesc, IRemoteConnection target)
|
||||||
|
throws CoreException {
|
||||||
String boardId;
|
String boardId;
|
||||||
if (target != null) {
|
if (target != null) {
|
||||||
IArduinoRemoteConnection arduinoRemote = target.getService(IArduinoRemoteConnection.class);
|
IArduinoRemoteConnection arduinoRemote = target.getService(IArduinoRemoteConnection.class);
|
||||||
|
|
|
@ -16,6 +16,7 @@ import org.eclipse.core.resources.IProject;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.debug.core.DebugPlugin;
|
import org.eclipse.debug.core.DebugPlugin;
|
||||||
import org.eclipse.debug.core.ILaunchConfigurationType;
|
import org.eclipse.debug.core.ILaunchConfigurationType;
|
||||||
|
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
|
||||||
import org.eclipse.launchbar.core.ILaunchDescriptor;
|
import org.eclipse.launchbar.core.ILaunchDescriptor;
|
||||||
import org.eclipse.launchbar.core.ProjectPerTargetLaunchConfigProvider;
|
import org.eclipse.launchbar.core.ProjectPerTargetLaunchConfigProvider;
|
||||||
import org.eclipse.remote.core.IRemoteConnection;
|
import org.eclipse.remote.core.IRemoteConnection;
|
||||||
|
@ -25,8 +26,8 @@ public class ArduinoLaunchConfigurationProvider extends ProjectPerTargetLaunchCo
|
||||||
@Override
|
@Override
|
||||||
public ILaunchConfigurationType getLaunchConfigurationType(ILaunchDescriptor descriptor, IRemoteConnection target)
|
public ILaunchConfigurationType getLaunchConfigurationType(ILaunchDescriptor descriptor, IRemoteConnection target)
|
||||||
throws CoreException {
|
throws CoreException {
|
||||||
return DebugPlugin.getDefault().getLaunchManager().getLaunchConfigurationType(
|
return DebugPlugin.getDefault().getLaunchManager()
|
||||||
ArduinoLaunchConfigurationDelegate.TYPE_ID);
|
.getLaunchConfigurationType(ArduinoLaunchConfigurationDelegate.TYPE_ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -44,4 +45,11 @@ public class ArduinoLaunchConfigurationProvider extends ProjectPerTargetLaunchCo
|
||||||
return ArduinoProjectNature.hasNature(project);
|
return ArduinoProjectNature.hasNature(project);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void populateLaunchConfiguration(ILaunchDescriptor descriptor, IRemoteConnection target,
|
||||||
|
ILaunchConfigurationWorkingCopy workingCopy) throws CoreException {
|
||||||
|
super.populateLaunchConfiguration(descriptor, target, workingCopy);
|
||||||
|
workingCopy.setAttribute(ArduinoLaunchConfigurationDelegate.CONNECTION_NAME, target.getName());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue