Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Dallaway2022-04-21 21:24:30 +0000
committerJohn Dallaway2022-04-22 09:56:43 +0000
commit90627bfa830f27f12646637bb30865d8a9f2ed13 (patch)
treeeb8ab913ea7ce5cb29927ace110aa8dcaab0bc6a
parenta1c02e2cce72f98aa1c73324225fc53563a81856 (diff)
downloadorg.eclipse.cdt-90627bfa830f27f12646637bb30865d8a9f2ed13.tar.gz
org.eclipse.cdt-90627bfa830f27f12646637bb30865d8a9f2ed13.tar.xz
org.eclipse.cdt-90627bfa830f27f12646637bb30865d8a9f2ed13.zip
Bug 535143: Support multiple remote debug protocols
-rw-r--r--jtag/org.eclipse.cdt.debug.gdbjtag.core.tests/META-INF/MANIFEST.MF4
-rw-r--r--jtag/org.eclipse.cdt.debug.gdbjtag.core.tests/pom.xml2
-rw-r--r--jtag/org.eclipse.cdt.debug.gdbjtag.core.tests/src/org/eclipse/cdt/debug/gdbjtag/core/tests/AutomatedSuite.java (renamed from jtag/org.eclipse.cdt.debug.gdbjtag.core.tests/src/org/eclipse/cdt/debug/gdbjtag/core/tests/launch/AutomatedSuite.java)4
-rw-r--r--jtag/org.eclipse.cdt.debug.gdbjtag.core.tests/src/org/eclipse/cdt/debug/gdbjtag/core/tests/SuiteGDBJtag.java (renamed from jtag/org.eclipse.cdt.debug.gdbjtag.core.tests/src/org/eclipse/cdt/debug/gdbjtag/core/tests/launch/SuiteGDBJtag.java)8
-rw-r--r--jtag/org.eclipse.cdt.debug.gdbjtag.core.tests/src/org/eclipse/cdt/debug/gdbjtag/core/tests/jtagdevice/GDBJtagDeviceContributionTest.java41
-rw-r--r--jtag/org.eclipse.cdt.debug.gdbjtag.core/.settings/.api_filters23
-rw-r--r--jtag/org.eclipse.cdt.debug.gdbjtag.core/META-INF/MANIFEST.MF2
-rw-r--r--jtag/org.eclipse.cdt.debug.gdbjtag.core/plugin.xml34
-rw-r--r--jtag/org.eclipse.cdt.debug.gdbjtag.core/schema/JTagDevice.exsd7
-rw-r--r--jtag/org.eclipse.cdt.debug.gdbjtag.core/src/org/eclipse/cdt/debug/gdbjtag/core/GDBJtagDSFFinalLaunchSequence.java7
-rw-r--r--jtag/org.eclipse.cdt.debug.gdbjtag.core/src/org/eclipse/cdt/debug/gdbjtag/core/IGDBJtagConnection.java59
-rw-r--r--jtag/org.eclipse.cdt.debug.gdbjtag.core/src/org/eclipse/cdt/debug/gdbjtag/core/IGDBJtagConstants.java7
-rw-r--r--jtag/org.eclipse.cdt.debug.gdbjtag.core/src/org/eclipse/cdt/debug/gdbjtag/core/jtagdevice/DefaultGDBJtagConnectionImpl.java28
-rw-r--r--jtag/org.eclipse.cdt.debug.gdbjtag.core/src/org/eclipse/cdt/debug/gdbjtag/core/jtagdevice/GDBJtagDeviceContribution.java15
-rw-r--r--jtag/org.eclipse.cdt.debug.gdbjtag.core/src/org/eclipse/cdt/debug/gdbjtag/core/jtagdevice/GDBJtagDeviceContributionFactory.java8
-rw-r--r--jtag/org.eclipse.cdt.debug.gdbjtag.ui/src/org/eclipse/cdt/debug/gdbjtag/ui/GDBJtagDSFDebuggerTab.java139
-rw-r--r--jtag/org.eclipse.cdt.debug.gdbjtag.ui/src/org/eclipse/cdt/debug/gdbjtag/ui/JtagUi.properties7
17 files changed, 284 insertions, 111 deletions
diff --git a/jtag/org.eclipse.cdt.debug.gdbjtag.core.tests/META-INF/MANIFEST.MF b/jtag/org.eclipse.cdt.debug.gdbjtag.core.tests/META-INF/MANIFEST.MF
index a0683bf3605..2573a09165f 100644
--- a/jtag/org.eclipse.cdt.debug.gdbjtag.core.tests/META-INF/MANIFEST.MF
+++ b/jtag/org.eclipse.cdt.debug.gdbjtag.core.tests/META-INF/MANIFEST.MF
@@ -2,14 +2,14 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.cdt.debug.gdbjtag.core.tests;singleton:=true
-Bundle-Version: 1.0.300.qualifier
+Bundle-Version: 1.0.400.qualifier
Bundle-Activator: org.eclipse.cdt.debug.gdbjtag.core.tests.Activator
Require-Bundle: org.eclipse.core.runtime,
org.eclipse.cdt.tests.dsf.gdb;bundle-version="2.3.0",
org.junit,
org.eclipse.cdt.debug.core,
org.eclipse.cdt.dsf.gdb,
- org.eclipse.cdt.debug.gdbjtag.core;bundle-version="9.2.1",
+ org.eclipse.cdt.debug.gdbjtag.core;bundle-version="10.6.0",
org.eclipse.cdt.dsf,
org.eclipse.cdt.launch,
org.eclipse.debug.core
diff --git a/jtag/org.eclipse.cdt.debug.gdbjtag.core.tests/pom.xml b/jtag/org.eclipse.cdt.debug.gdbjtag.core.tests/pom.xml
index f22c49c2011..cb343510332 100644
--- a/jtag/org.eclipse.cdt.debug.gdbjtag.core.tests/pom.xml
+++ b/jtag/org.eclipse.cdt.debug.gdbjtag.core.tests/pom.xml
@@ -21,7 +21,7 @@
<relativePath>../../pom.xml</relativePath>
</parent>
- <version>1.0.300-SNAPSHOT</version>
+ <version>1.0.400-SNAPSHOT</version>
<artifactId>org.eclipse.cdt.debug.gdbjtag.core.tests</artifactId>
<packaging>eclipse-test-plugin</packaging>
diff --git a/jtag/org.eclipse.cdt.debug.gdbjtag.core.tests/src/org/eclipse/cdt/debug/gdbjtag/core/tests/launch/AutomatedSuite.java b/jtag/org.eclipse.cdt.debug.gdbjtag.core.tests/src/org/eclipse/cdt/debug/gdbjtag/core/tests/AutomatedSuite.java
index dadb27e0174..0154a8a2134 100644
--- a/jtag/org.eclipse.cdt.debug.gdbjtag.core.tests/src/org/eclipse/cdt/debug/gdbjtag/core/tests/launch/AutomatedSuite.java
+++ b/jtag/org.eclipse.cdt.debug.gdbjtag.core.tests/src/org/eclipse/cdt/debug/gdbjtag/core/tests/AutomatedSuite.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2012, 2018 Ericsson and others.
+ * Copyright (c) 2012, 2022 Ericsson and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
@@ -12,7 +12,7 @@
* Marc Khouzam (Ericsson) - Base Implementation
* John Dallaway - GDB JTAG Implementation (bug 538282)
*******************************************************************************/
-package org.eclipse.cdt.debug.gdbjtag.core.tests.launch;
+package org.eclipse.cdt.debug.gdbjtag.core.tests;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
diff --git a/jtag/org.eclipse.cdt.debug.gdbjtag.core.tests/src/org/eclipse/cdt/debug/gdbjtag/core/tests/launch/SuiteGDBJtag.java b/jtag/org.eclipse.cdt.debug.gdbjtag.core.tests/src/org/eclipse/cdt/debug/gdbjtag/core/tests/SuiteGDBJtag.java
index e331dd8e3b5..015722804bf 100644
--- a/jtag/org.eclipse.cdt.debug.gdbjtag.core.tests/src/org/eclipse/cdt/debug/gdbjtag/core/tests/launch/SuiteGDBJtag.java
+++ b/jtag/org.eclipse.cdt.debug.gdbjtag.core.tests/src/org/eclipse/cdt/debug/gdbjtag/core/tests/SuiteGDBJtag.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2016, 2018 QNX Software System and others.
+ * Copyright (c) 2016, 2022 QNX Software System and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
@@ -12,8 +12,10 @@
* Elena Laskavaia (QNX Software System) - Base API and implementation
* John Dallaway - GDB JTAG implementation (bug 538282)
*******************************************************************************/
-package org.eclipse.cdt.debug.gdbjtag.core.tests.launch;
+package org.eclipse.cdt.debug.gdbjtag.core.tests;
+import org.eclipse.cdt.debug.gdbjtag.core.tests.jtagdevice.GDBJtagDeviceContributionTest;
+import org.eclipse.cdt.debug.gdbjtag.core.tests.launch.GDBJtagLaunchTest;
import org.eclipse.cdt.tests.dsf.gdb.framework.BaseParametrizedTestCase;
import org.junit.BeforeClass;
import org.junit.runner.RunWith;
@@ -21,7 +23,7 @@ import org.junit.runners.Suite;
@SuppressWarnings("restriction")
@RunWith(Suite.class)
-@Suite.SuiteClasses({ GDBJtagLaunchTest.class })
+@Suite.SuiteClasses({ GDBJtagDeviceContributionTest.class, GDBJtagLaunchTest.class })
public class SuiteGDBJtag {
diff --git a/jtag/org.eclipse.cdt.debug.gdbjtag.core.tests/src/org/eclipse/cdt/debug/gdbjtag/core/tests/jtagdevice/GDBJtagDeviceContributionTest.java b/jtag/org.eclipse.cdt.debug.gdbjtag.core.tests/src/org/eclipse/cdt/debug/gdbjtag/core/tests/jtagdevice/GDBJtagDeviceContributionTest.java
new file mode 100644
index 00000000000..f2718126103
--- /dev/null
+++ b/jtag/org.eclipse.cdt.debug.gdbjtag.core.tests/src/org/eclipse/cdt/debug/gdbjtag/core/tests/jtagdevice/GDBJtagDeviceContributionTest.java
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2022 John Dallaway and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * John Dallaway - Initial implementation (Bug 535143)
+ *******************************************************************************/
+package org.eclipse.cdt.debug.gdbjtag.core.tests.jtagdevice;
+
+import static org.junit.Assert.assertArrayEquals;
+
+import org.eclipse.cdt.debug.gdbjtag.core.IGDBJtagConnection;
+import org.eclipse.cdt.debug.gdbjtag.core.jtagdevice.GDBJtagDeviceContribution;
+import org.eclipse.cdt.debug.gdbjtag.core.jtagdevice.GDBJtagDeviceContributionFactory;
+import org.junit.Test;
+
+import junit.framework.TestCase;
+
+public class GDBJtagDeviceContributionTest extends TestCase {
+
+ private static final String TEST_JTAG_DEVICE_ID = "org.eclipse.cdt.debug.gdbjtag.core.jtagdevice.genericDevice"; //$NON-NLS-1$
+ private static final String EXPECTED_PROTOCOLS = "remote,extended-remote"; //$NON-NLS-1$
+ private static final String EXPECTED_DEFAULT_CONNECTION = "localhost:1234"; //$NON-NLS-1$
+
+ @Test
+ public void testGdbJtagDeviceContribution() {
+ final GDBJtagDeviceContribution contribution = GDBJtagDeviceContributionFactory.getInstance()
+ .findByDeviceId(TEST_JTAG_DEVICE_ID);
+ assertNotNull(contribution);
+ final IGDBJtagConnection device = (IGDBJtagConnection) contribution.getDevice();
+ assertArrayEquals(EXPECTED_PROTOCOLS.split(","), device.getDeviceProtocols());
+ assertEquals(EXPECTED_DEFAULT_CONNECTION, device.getDefaultDeviceConnection());
+ }
+
+}
diff --git a/jtag/org.eclipse.cdt.debug.gdbjtag.core/.settings/.api_filters b/jtag/org.eclipse.cdt.debug.gdbjtag.core/.settings/.api_filters
new file mode 100644
index 00000000000..746fa73a706
--- /dev/null
+++ b/jtag/org.eclipse.cdt.debug.gdbjtag.core/.settings/.api_filters
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<component id="org.eclipse.cdt.debug.gdbjtag.core" version="2">
+ <resource path="src/org/eclipse/cdt/debug/gdbjtag/core/IGDBJtagConnection.java" type="org.eclipse.cdt.debug.gdbjtag.core.IGDBJtagConnection">
+ <filter id="404000815">
+ <message_arguments>
+ <message_argument value="org.eclipse.cdt.debug.gdbjtag.core.IGDBJtagConnection"/>
+ <message_argument value="doTarget(String, String, Collection&lt;String&gt;)"/>
+ </message_arguments>
+ </filter>
+ <filter id="404000815">
+ <message_arguments>
+ <message_argument value="org.eclipse.cdt.debug.gdbjtag.core.IGDBJtagConnection"/>
+ <message_argument value="getDeviceProtocols()"/>
+ </message_arguments>
+ </filter>
+ <filter id="404000815">
+ <message_arguments>
+ <message_argument value="org.eclipse.cdt.debug.gdbjtag.core.IGDBJtagConnection"/>
+ <message_argument value="setDeviceProtocols(String[])"/>
+ </message_arguments>
+ </filter>
+ </resource>
+</component>
diff --git a/jtag/org.eclipse.cdt.debug.gdbjtag.core/META-INF/MANIFEST.MF b/jtag/org.eclipse.cdt.debug.gdbjtag.core/META-INF/MANIFEST.MF
index c6d6e482141..c2ddd0440ad 100644
--- a/jtag/org.eclipse.cdt.debug.gdbjtag.core/META-INF/MANIFEST.MF
+++ b/jtag/org.eclipse.cdt.debug.gdbjtag.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.cdt.debug.gdbjtag.core;singleton:=true
-Bundle-Version: 10.5.300.qualifier
+Bundle-Version: 10.6.0.qualifier
Bundle-Activator: org.eclipse.cdt.debug.gdbjtag.core.Activator
Bundle-Localization: plugin
Require-Bundle: org.eclipse.core.runtime,
diff --git a/jtag/org.eclipse.cdt.debug.gdbjtag.core/plugin.xml b/jtag/org.eclipse.cdt.debug.gdbjtag.core/plugin.xml
index a581dca10ce..4dce8fbb9da 100644
--- a/jtag/org.eclipse.cdt.debug.gdbjtag.core/plugin.xml
+++ b/jtag/org.eclipse.cdt.debug.gdbjtag.core/plugin.xml
@@ -27,63 +27,73 @@
point="org.eclipse.cdt.debug.gdbjtag.core.JTagDevice">
<device
class="org.eclipse.cdt.debug.gdbjtag.core.jtagdevice.GenericDevice"
- default_connection="localhost:10000"
+ default_connection="localhost:1234"
id="org.eclipse.cdt.debug.gdbjtag.core.jtagdevice.genericDevice"
- name="%Generic.name">
+ name="%Generic.name"
+ protocols="remote,extended-remote">
</device>
<device
class="org.eclipse.cdt.debug.gdbjtag.core.jtagdevice.AbatronBDI2000"
default_connection="bdi2000:2001"
id="org.eclipse.cdt.debug.gdbjtag.core.jtagdevice.AbatronBDI2000"
- name="%AbatronBDI2000.name">
+ name="%AbatronBDI2000.name"
+ protocols="remote">
</device>
<device
class="org.eclipse.cdt.debug.gdbjtag.core.jtagdevice.MacraigorUsb2Demon"
default_connection="localhost:8888"
id="org.eclipse.cdt.debug.gdbjtag.core.jtagdevice.MacraigorUsb2Demon"
- name="%MacraigorUsb2Demon.name">
+ name="%MacraigorUsb2Demon.name"
+ protocols="remote">
</device>
<device
class="org.eclipse.cdt.debug.gdbjtag.core.jtagdevice.DefaultGDBJtagConnectionImpl"
- default_connection="/dev/com1"
+ default_connection="COM1"
id="org.eclipse.cdt.debug.gdbjtag.core.jtagdevice.GenericSerial"
- name="%GenericSerial.name">
+ name="%GenericSerial.name"
+ protocols="remote,extended-remote">
</device>
<device
class="org.eclipse.cdt.debug.gdbjtag.core.jtagdevice.OpenOCDPipe"
default_connection="| openocd --pipe"
id="org.eclipse.cdt.debug.gdbjtag.core.jtagdevice.OpenOCD"
- name="%OpenOCDPipe.name">
+ name="%OpenOCDPipe.name"
+ protocols="remote">
</device>
<device
class="org.eclipse.cdt.debug.gdbjtag.core.jtagdevice.OpenOCDSocket"
default_connection="localhost:3333"
id="org.eclipse.cdt.debug.gdbjtag.core.jtagdevice.OpenOCDSocket"
- name="%OpenOCDSocket.name">
+ name="%OpenOCDSocket.name"
+ protocols="remote">
</device>
<device
class="org.eclipse.cdt.debug.gdbjtag.core.jtagdevice.PEMicro"
default_connection="localhost:7224"
id="org.eclipse.cdt.debug.gdbjtag.core.jtagdevice.PEMicro"
- name="%PEMicro.name">
+ name="%PEMicro.name"
+ protocols="remote">
</device>
<device
class="org.eclipse.cdt.debug.gdbjtag.core.jtagdevice.PyOCD"
default_connection="localhost:3333"
id="org.eclipse.cdt.debug.gdbjtag.core.jtagdevice.PyOCD"
- name="%PyOCD.name">
+ name="%PyOCD.name"
+ protocols="remote">
</device>
<device
class="org.eclipse.cdt.debug.gdbjtag.core.jtagdevice.SeggerJLink"
default_connection="localhost:2331"
id="org.eclipse.cdt.debug.gdbjtag.core.jtagdevice.SeggerJLink"
- name="%SeggerJLink.name">
+ name="%SeggerJLink.name"
+ protocols="remote">
</device>
<device
class="org.eclipse.cdt.debug.gdbjtag.core.jtagdevice.STLink"
default_connection="localhost:61234"
id="org.eclipse.cdt.debug.gdbjtag.core.jtagdevice.STLink"
- name="%STLink.name">
+ name="%STLink.name"
+ protocols="remote">
</device>
</extension>
</plugin>
diff --git a/jtag/org.eclipse.cdt.debug.gdbjtag.core/schema/JTagDevice.exsd b/jtag/org.eclipse.cdt.debug.gdbjtag.core/schema/JTagDevice.exsd
index de56b802698..5f3972450d5 100644
--- a/jtag/org.eclipse.cdt.debug.gdbjtag.core/schema/JTagDevice.exsd
+++ b/jtag/org.eclipse.cdt.debug.gdbjtag.core/schema/JTagDevice.exsd
@@ -80,6 +80,13 @@
</documentation>
</annotation>
</attribute>
+ <attribute name="protocols" type="string">
+ <annotation>
+ <documentation>
+ The comma-separated set of GDB target types (protocols) supported by the JTAG device. If omitted, the &quot;remote&quot; protocol is assumed.
+ </documentation>
+ </annotation>
+ </attribute>
</complexType>
</element>
diff --git a/jtag/org.eclipse.cdt.debug.gdbjtag.core/src/org/eclipse/cdt/debug/gdbjtag/core/GDBJtagDSFFinalLaunchSequence.java b/jtag/org.eclipse.cdt.debug.gdbjtag.core/src/org/eclipse/cdt/debug/gdbjtag/core/GDBJtagDSFFinalLaunchSequence.java
index 28961ed5eb7..39a697b3b1c 100644
--- a/jtag/org.eclipse.cdt.debug.gdbjtag.core/src/org/eclipse/cdt/debug/gdbjtag/core/GDBJtagDSFFinalLaunchSequence.java
+++ b/jtag/org.eclipse.cdt.debug.gdbjtag.core/src/org/eclipse/cdt/debug/gdbjtag/core/GDBJtagDSFFinalLaunchSequence.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2007, 2021 QNX Software Systems and others.
+ * Copyright (c) 2007, 2022 QNX Software Systems and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
@@ -26,6 +26,7 @@
* John Dallaway - Eliminate deprecated API (Bug 566462)
* John Dallaway - Set executable file (Bug 457697)
* John Dallaway - Initialize memory data before connecting to target (Bug 575934)
+ * John Dallaway - Support multiple remote debug protocols (Bug 535143)
*******************************************************************************/
package org.eclipse.cdt.debug.gdbjtag.core;
@@ -421,8 +422,10 @@ public class GDBJtagDSFFinalLaunchSequence extends FinalLaunchSequence {
connection = String.format("%s:%d", ipAddress, portNumber); //$NON-NLS-1$
}
}
+ String protocol = CDebugUtils.getAttribute(getAttributes(), IGDBJtagConstants.ATTR_PROTOCOL,
+ IGDBJtagConstants.DEFAULT_PROTOCOL);
IGDBJtagConnection device = (IGDBJtagConnection) fGdbJtagDevice;
- device.doRemote(connection, commands);
+ device.doTarget(protocol, connection, commands);
queueCommands(commands, rm);
} else {
rm.done();
diff --git a/jtag/org.eclipse.cdt.debug.gdbjtag.core/src/org/eclipse/cdt/debug/gdbjtag/core/IGDBJtagConnection.java b/jtag/org.eclipse.cdt.debug.gdbjtag.core/src/org/eclipse/cdt/debug/gdbjtag/core/IGDBJtagConnection.java
index 7f3a3c3f2d2..b60aa687e9a 100644
--- a/jtag/org.eclipse.cdt.debug.gdbjtag.core/src/org/eclipse/cdt/debug/gdbjtag/core/IGDBJtagConnection.java
+++ b/jtag/org.eclipse.cdt.debug.gdbjtag.core/src/org/eclipse/cdt/debug/gdbjtag/core/IGDBJtagConnection.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2008-2010 QNX Software Systems and others.
+ * Copyright (c) 2008, 2022 QNX Software Systems and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
@@ -14,6 +14,7 @@
* Sage Electronic Engineering, LLC - bug 305943
* - API generalization to become transport-independent (e.g. to
* allow connections via serial ports and pipes).
+ * John Dallaway - Support multiple remote debug protocols - bug 535143
*******************************************************************************/
package org.eclipse.cdt.debug.gdbjtag.core;
@@ -22,30 +23,76 @@ import java.util.Collection;
/**
* Provides device specific debug commands for different hardware
- * JTAG devices. See <code>DefaultGDBJtagDeviceImpl</code> for
- * the default implementations.
+ * JTAG devices. See <code>DefaultGDBJtagConnectionImpl</code> for
+ * the default implementation.
* @since 7.0
*/
public interface IGDBJtagConnection {
/**
+ * Used during instantiation to set the supported protocol strings from XML
+ * @param protocols
+ * the array of supported protocols (default protocol first)
+ * @since 10.6
+ */
+ default void setDeviceProtocols(String[] protocols) {
+ // not implemented
+ }
+
+ /**
* Used during instantiation to set the device default connection string from XML
- * @param connection A device specific default connection string that GDB understands
+ * @param connection
+ * the GDB string describing the default connection to the target
*/
public void setDefaultDeviceConnection(String connection);
/**
* Commands to connect to remote JTAG device
- * @param connection defines the gdb string required to establish a connection to the target
- * @param commands gdb commands to execute on the remote device (usually the target probe)
+ * @param connection
+ * the GDB string describing the connection to the target
+ * @param commands
+ * implementation should populate the collection with the gdb
+ * commands that will connect to the JTAG device using the remote
+ * protocol, or leave the collection as-is if that operation is
+ * either unsupported or not applicable
+ * @deprecated call or override {@link #doTarget(String, String, Collection)} instead
*/
+ @Deprecated(since = "10.6")
public void doRemote(String connection, Collection<String> commands);
/**
+ * Supported protocols used by GDB to connect to a device
+ * @return the array of supported protocols (default protocol first)
+ * @since 10.6
+ */
+ default String[] getDeviceProtocols() {
+ return new String[] { "remote" }; //$NON-NLS-1$
+ }
+
+ /**
* Host specific default device name used by GDB to connect to a device
* @return identifier for the remote device. It is up to GDB to figure out how to interpret
* the connection string (e.g /dev/COM1, 127.0.0.1:8888, etc.)
*/
public String getDefaultDeviceConnection();
+ /**
+ * Commands to connect to remote JTAG device
+ * @param protocol
+ * the GDB string describing the communication protocol between host and target
+ * @param connection
+ * the GDB string required to establish a connection to the target
+ * @param commands
+ * implementation should populate the collection with the gdb
+ * commands that will connect to the JTAG device, or leave
+ * the collection as-is if that operation is either unsupported
+ * or not applicable
+ * @since 10.6
+ */
+ default void doTarget(String protocol, String connection, Collection<String> commands) {
+ if ("remote".equals(protocol)) { //$NON-NLS-1$
+ doRemote(connection, commands);
+ } // else protocol not supported
+ }
+
}
diff --git a/jtag/org.eclipse.cdt.debug.gdbjtag.core/src/org/eclipse/cdt/debug/gdbjtag/core/IGDBJtagConstants.java b/jtag/org.eclipse.cdt.debug.gdbjtag.core/src/org/eclipse/cdt/debug/gdbjtag/core/IGDBJtagConstants.java
index f3805fdabeb..9c602419205 100644
--- a/jtag/org.eclipse.cdt.debug.gdbjtag.core/src/org/eclipse/cdt/debug/gdbjtag/core/IGDBJtagConstants.java
+++ b/jtag/org.eclipse.cdt.debug.gdbjtag.core/src/org/eclipse/cdt/debug/gdbjtag/core/IGDBJtagConstants.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2007 - 2020 QNX Software Systems and others.
+ * Copyright (c) 2007, 2022 QNX Software Systems and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
@@ -15,6 +15,7 @@
* Torbjörn Svensson (STMicroelectronics) - Bug 535024
* John Dallaway - Sort JTAG device list, bug 560186
* John Dallaway - Eliminate deprecated API, bug 566462
+ * John Dallaway - Support multiple remote debug protocols, bug 535143
*******************************************************************************/
package org.eclipse.cdt.debug.gdbjtag.core;
@@ -52,6 +53,8 @@ public interface IGDBJtagConstants {
public static final String ATTR_STOP_AT = Activator.PLUGIN_ID + ".stopAt"; //$NON-NLS-1$
public static final String ATTR_SET_RESUME = Activator.PLUGIN_ID + ".setResume"; //$NON-NLS-1$
public static final String ATTR_RUN_COMMANDS = Activator.PLUGIN_ID + ".runCommands"; //$NON-NLS-1$
+ /** @since 10.6 */
+ public static final String ATTR_PROTOCOL = Activator.PLUGIN_ID + ".protocol"; //$NON-NLS-1$
/** @since 7.0 */
public static final String ATTR_CONNECTION = Activator.PLUGIN_ID + ".connection"; //$NON-NLS-1$
/** @since 7.0 */
@@ -73,6 +76,8 @@ public interface IGDBJtagConstants {
public static final boolean DEFAULT_SET_RESUME = false;
public static final boolean DEFAULT_USE_DEFAULT_RUN = true;
+ /** @since 10.6 */
+ public static final String DEFAULT_PROTOCOL = "remote"; //$NON-NLS-1$
/** @since 7.0 */
public static final String DEFAULT_CONNECTION = "unspecified-ip-address:unspecified-port-number"; //$NON-NLS-1$
/** @since 7.0 */
diff --git a/jtag/org.eclipse.cdt.debug.gdbjtag.core/src/org/eclipse/cdt/debug/gdbjtag/core/jtagdevice/DefaultGDBJtagConnectionImpl.java b/jtag/org.eclipse.cdt.debug.gdbjtag.core/src/org/eclipse/cdt/debug/gdbjtag/core/jtagdevice/DefaultGDBJtagConnectionImpl.java
index 23bd38b57e6..3fb438cdddd 100644
--- a/jtag/org.eclipse.cdt.debug.gdbjtag.core/src/org/eclipse/cdt/debug/gdbjtag/core/jtagdevice/DefaultGDBJtagConnectionImpl.java
+++ b/jtag/org.eclipse.cdt.debug.gdbjtag.core/src/org/eclipse/cdt/debug/gdbjtag/core/jtagdevice/DefaultGDBJtagConnectionImpl.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2010, 2020 Sage Electronic Engineering and others.
+ * Copyright (c) 2010, 2022 Sage Electronic Engineering and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
@@ -13,6 +13,7 @@
* - API generalization to become transport-independent (e.g. to
* allow connections via serial ports and pipes).
* John Dallaway - Eliminate deprecated API - bug 566462
+ * John Dallaway - Support multiple remote debug protocols - bug 535143
*******************************************************************************/
package org.eclipse.cdt.debug.gdbjtag.core.jtagdevice;
@@ -26,14 +27,24 @@ import org.eclipse.cdt.debug.gdbjtag.core.IGDBJtagConnection;
*/
public class DefaultGDBJtagConnectionImpl extends DefaultGDBJtagDeviceImpl implements IGDBJtagConnection {
+ private static final String PROTOCOL_REMOTE = "remote"; //$NON-NLS-1$
+
+ private String[] protocols = new String[0];
protected String connection = null;
@Override
+ public final void setDeviceProtocols(String[] protocols) {
+ this.protocols = protocols;
+ }
+
+ @Override
public final void setDefaultDeviceConnection(String connection) {
this.connection = connection;
}
+ /** @deprecated call or override {@link #doTarget(String, String, Collection)} instead */
@Override
+ @Deprecated(since = "10.6")
public void doRemote(String connection, Collection<String> commands) {
String cmd = ""; //$NON-NLS-1$
if (connection != null) {
@@ -48,6 +59,21 @@ public class DefaultGDBJtagConnectionImpl extends DefaultGDBJtagDeviceImpl imple
}
@Override
+ public void doTarget(String protocol, String connection, Collection<String> commands) {
+ if (PROTOCOL_REMOTE.equals(protocol)) {
+ doRemote(connection, commands); // use legacy method which may have been overridden
+ } else if ((connection != null) && (protocol != null)) {
+ String cmd = String.format("-target-select %s %s", protocol, connection); //$NON-NLS-1$
+ addCmd(commands, cmd);
+ }
+ }
+
+ @Override
+ public String[] getDeviceProtocols() {
+ return protocols;
+ }
+
+ @Override
public String getDefaultDeviceConnection() {
return connection;
}
diff --git a/jtag/org.eclipse.cdt.debug.gdbjtag.core/src/org/eclipse/cdt/debug/gdbjtag/core/jtagdevice/GDBJtagDeviceContribution.java b/jtag/org.eclipse.cdt.debug.gdbjtag.core/src/org/eclipse/cdt/debug/gdbjtag/core/jtagdevice/GDBJtagDeviceContribution.java
index ab90d4d4b08..803118657e4 100644
--- a/jtag/org.eclipse.cdt.debug.gdbjtag.core/src/org/eclipse/cdt/debug/gdbjtag/core/jtagdevice/GDBJtagDeviceContribution.java
+++ b/jtag/org.eclipse.cdt.debug.gdbjtag.core/src/org/eclipse/cdt/debug/gdbjtag/core/jtagdevice/GDBJtagDeviceContribution.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2008 - 2020 QNX Software Systems and others.
+ * Copyright (c) 2008, 2022 QNX Software Systems and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
@@ -15,6 +15,7 @@
* - API generalization to become transport-independent (allow
* connections via serial ports and pipes).
* John Dallaway - Eliminate deprecated API - bug 566462
+ * John Dallaway - Support multiple remote debug protocols - bug 535143
*******************************************************************************/
package org.eclipse.cdt.debug.gdbjtag.core.jtagdevice;
@@ -33,6 +34,7 @@ public class GDBJtagDeviceContribution {
private IGDBJtagDevice device;
private String deviceClassBundleName;
private String deviceDefaultConnection;
+ private String[] deviceProtocols;
/**
* @return the deviceId
@@ -98,6 +100,7 @@ public class GDBJtagDeviceContribution {
try {
o = Platform.getBundle(deviceClassBundleName).loadClass(deviceClassName).getConstructor().newInstance();
if (o instanceof IGDBJtagConnection) {
+ ((IGDBJtagConnection) o).setDeviceProtocols(deviceProtocols);
((IGDBJtagConnection) o).setDefaultDeviceConnection(deviceDefaultConnection);
}
device = (IGDBJtagDevice) o;
@@ -110,4 +113,14 @@ public class GDBJtagDeviceContribution {
}
+ /** @since 10.6 */
+ public void setDeviceProtocols(String[] protocols) {
+ deviceProtocols = protocols;
+ }
+
+ /** @since 10.6 */
+ public String[] getDeviceProtocols() {
+ return deviceProtocols;
+ }
+
}
diff --git a/jtag/org.eclipse.cdt.debug.gdbjtag.core/src/org/eclipse/cdt/debug/gdbjtag/core/jtagdevice/GDBJtagDeviceContributionFactory.java b/jtag/org.eclipse.cdt.debug.gdbjtag.core/src/org/eclipse/cdt/debug/gdbjtag/core/jtagdevice/GDBJtagDeviceContributionFactory.java
index 921dff40634..7159693f298 100644
--- a/jtag/org.eclipse.cdt.debug.gdbjtag.core/src/org/eclipse/cdt/debug/gdbjtag/core/jtagdevice/GDBJtagDeviceContributionFactory.java
+++ b/jtag/org.eclipse.cdt.debug.gdbjtag.core/src/org/eclipse/cdt/debug/gdbjtag/core/jtagdevice/GDBJtagDeviceContributionFactory.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2008, 2018 QNX Software Systems and others.
+ * Copyright (c) 2008, 2022 QNX Software Systems and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
@@ -15,10 +15,12 @@
* - API generalization to become transport-independent (allow
* connections via serial ports and pipes).
* Torbjörn Svensson (STMicroelectronics) - Bug 535024
+ * John Dallaway - Support multiple remote debug protocols - bug 535143
*******************************************************************************/
package org.eclipse.cdt.debug.gdbjtag.core.jtagdevice;
import java.util.ArrayList;
+import java.util.Arrays;
import org.eclipse.cdt.debug.gdbjtag.core.Activator;
import org.eclipse.cdt.debug.gdbjtag.core.IGDBJtagConstants;
@@ -60,11 +62,15 @@ public class GDBJtagDeviceContributionFactory {
String className = getRequired(configurationElement, "class"); //$NON-NLS-1$
String connection = getOptional(configurationElement, "default_connection", //$NON-NLS-1$
IGDBJtagConstants.DEFAULT_CONNECTION);
+ String[] protocols = getOptional(configurationElement, "protocols", //$NON-NLS-1$
+ IGDBJtagConstants.DEFAULT_PROTOCOL).split(","); //$NON-NLS-1$
GDBJtagDeviceContribution adapter = new GDBJtagDeviceContribution();
adapter.setDeviceId(id);
adapter.setDeviceName(name);
adapter.setDeviceClassName(className);
adapter.setDeviceDefaultConnection(connection);
+ adapter.setDeviceProtocols(
+ Arrays.stream(protocols).map(String::trim).filter(s -> !s.isEmpty()).toArray(String[]::new));
adapter.setDeviceClassBundleName(configurationElement.getContributor().getName());
addContribution(adapter);
}
diff --git a/jtag/org.eclipse.cdt.debug.gdbjtag.ui/src/org/eclipse/cdt/debug/gdbjtag/ui/GDBJtagDSFDebuggerTab.java b/jtag/org.eclipse.cdt.debug.gdbjtag.ui/src/org/eclipse/cdt/debug/gdbjtag/ui/GDBJtagDSFDebuggerTab.java
index 8619797f4d9..8c62e9fe7eb 100644
--- a/jtag/org.eclipse.cdt.debug.gdbjtag.ui/src/org/eclipse/cdt/debug/gdbjtag/ui/GDBJtagDSFDebuggerTab.java
+++ b/jtag/org.eclipse.cdt.debug.gdbjtag.ui/src/org/eclipse/cdt/debug/gdbjtag/ui/GDBJtagDSFDebuggerTab.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2007, 2021 QNX Software Systems and others.
+ * Copyright (c) 2007, 2022 QNX Software Systems and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
@@ -23,6 +23,7 @@
* John Dallaway - Sort JTAG device list, bug 560186
* John Dallaway - Eliminate deprecated API, bug 566462
* John Dallaway - Eliminate pixel-level sizing, bug 567662
+ * John Dallaway - Support multiple remote debug protocols, bug 535143
*******************************************************************************/
package org.eclipse.cdt.debug.gdbjtag.ui;
@@ -50,10 +51,11 @@ import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.debug.ui.AbstractLaunchConfigurationTab;
import org.eclipse.debug.ui.StringVariableSelectionDialog;
-import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.PixelConverter;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.ComboViewer;
+import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.StackLayout;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
@@ -82,10 +84,11 @@ public class GDBJtagDSFDebuggerTab extends AbstractLaunchConfigurationTab {
private Text gdbCommand;
private Button useRemote;
+ private Label jtagDeviceLabel;
private Combo jtagDevice;
- private Composite remoteConnectionParameters;
- private StackLayout remoteConnectParmsLayout;
- private Composite remoteConnectionBox;
+ private Label protocolLabel;
+ private ComboViewer protocol;
+ private Label connectionLabel;
private Text connection;
private String savedJtagDevice;
protected Button fUpdateThreadlistOnSuspend;
@@ -205,15 +208,13 @@ public class GDBJtagDSFDebuggerTab extends AbstractLaunchConfigurationTab {
private void createRemoteControl(Composite parent) {
Group group = new Group(parent, SWT.NONE);
- GridLayout layout = new GridLayout(2, false);
+ GridLayout layout = new GridLayout();
group.setLayout(layout);
- GridData gd = new GridData(GridData.FILL_HORIZONTAL);
- gd.horizontalSpan = 2;
- group.setLayoutData(gd);
+ group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
group.setText(Messages.getString("GDBJtagDebuggerTab.remoteGroup_Text")); //$NON-NLS-1$
useRemote = new Button(group, SWT.CHECK);
- useRemote.setLayoutData(GridDataFactory.swtDefaults().span(2, 1).create());
+ useRemote.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
useRemote.setText(Messages.getString("GDBJtagDebuggerTab.useRemote_Text")); //$NON-NLS-1$
useRemote.addSelectionListener(new SelectionAdapter() {
@Override
@@ -223,7 +224,16 @@ public class GDBJtagDSFDebuggerTab extends AbstractLaunchConfigurationTab {
}
});
- remoteTimeoutEnabled = new Button(group, SWT.CHECK);
+ Composite comp = new Composite(group, SWT.NONE);
+ layout = new GridLayout();
+ layout.numColumns = 2;
+ layout.marginHeight = 0;
+ layout.marginLeft = new PixelConverter(group).convertHorizontalDLUsToPixels(8);
+ layout.marginRight = 0;
+ comp.setLayout(layout);
+ comp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ remoteTimeoutEnabled = new Button(comp, SWT.CHECK);
remoteTimeoutEnabled.setText(Messages.getString("GDBJtagDebuggerTab.remoteTimeout")); //$NON-NLS-1$
remoteTimeoutEnabled.setToolTipText(Messages.getString("GDBJtagDebuggerTab.remoteTimeoutTooltip")); //$NON-NLS-1$
remoteTimeoutEnabled.addSelectionListener(new SelectionAdapter() {
@@ -233,22 +243,15 @@ public class GDBJtagDSFDebuggerTab extends AbstractLaunchConfigurationTab {
updateLaunchConfigurationDialog();
}
});
- remoteTimeoutValue = new Text(group, SWT.BORDER);
- gd = new GridData();
- gd.widthHint = new PixelConverter(remoteTimeoutValue).convertWidthInCharsToPixels(10);
- remoteTimeoutValue.setLayoutData(gd);
+ remoteTimeoutValue = new Text(comp, SWT.BORDER);
+ remoteTimeoutValue.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
remoteTimeoutValue.setToolTipText(Messages.getString("GDBJtagDebuggerTab.remoteTimeoutTooltip")); //$NON-NLS-1$
- Composite comp = new Composite(group, SWT.NONE);
- layout = new GridLayout();
- layout.numColumns = 2;
- comp.setLayout(layout);
- comp.setLayoutData(GridDataFactory.swtDefaults().span(2, 1).grab(true, false).create());
-
- Label label = new Label(comp, SWT.NONE);
- label.setText(Messages.getString("GDBJtagDebuggerTab.jtagDeviceLabel")); //$NON-NLS-1$
+ jtagDeviceLabel = new Label(comp, SWT.NONE);
+ jtagDeviceLabel.setText(Messages.getString("GDBJtagDebuggerTab.jtagDeviceLabel")); //$NON-NLS-1$
jtagDevice = new Combo(comp, SWT.READ_ONLY | SWT.DROP_DOWN);
+ jtagDevice.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
GDBJtagDeviceContribution[] availableDevices = GDBJtagDeviceContributionFactory.getInstance()
.getGDBJtagDeviceContribution();
@@ -263,58 +266,50 @@ public class GDBJtagDSFDebuggerTab extends AbstractLaunchConfigurationTab {
}
});
- remoteConnectionParameters = new Composite(group, SWT.NO_TRIM | SWT.NO_FOCUS);
- remoteConnectParmsLayout = new StackLayout();
- remoteConnectionParameters.setLayout(remoteConnectParmsLayout);
- remoteConnectionParameters.setLayoutData(GridDataFactory.fillDefaults().span(2, 1).create());
+ protocolLabel = new Label(comp, SWT.NONE);
+ protocolLabel.setText(Messages.getString("GDBJtagDebuggerTab.protocolLabel")); //$NON-NLS-1$
+ protocol = new ComboViewer(comp, SWT.READ_ONLY | SWT.DROP_DOWN);
+ protocol.setContentProvider(new ArrayContentProvider());
+ protocol.getCombo().setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
- //
- // Create entry fields for other types of connections
- //
-
- {
- remoteConnectionBox = new Composite(remoteConnectionParameters, SWT.NO_TRIM | SWT.NO_FOCUS);
- layout = new GridLayout();
- layout.numColumns = 2;
- remoteConnectionBox.setLayout(layout);
- remoteConnectionBox.setBackground(remoteConnectionParameters.getParent().getBackground());
-
- label = new Label(remoteConnectionBox, SWT.NONE);
- label.setText(Messages.getString("GDBJtagDebuggerTab.connectionLabel")); //$NON-NLS-1$
- connection = new Text(remoteConnectionBox, SWT.BORDER);
- gd = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL);
- connection.setLayoutData(gd);
- }
+ connectionLabel = new Label(comp, SWT.NONE);
+ connectionLabel.setText(Messages.getString("GDBJtagDebuggerTab.connectionLabel")); //$NON-NLS-1$
+ connection = new Text(comp, SWT.BORDER);
+ connection.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
//
// Add watchers for user data entry
//
- connection.addModifyListener(new ModifyListener() {
- @Override
- public void modifyText(ModifyEvent e) {
- scheduleUpdateJob(); // provides much better performance for Text listeners
- }
- });
+ protocol.getCombo().addListener(SWT.Selection, e -> scheduleUpdateJob());
+ connection.addListener(SWT.Modify, e -> scheduleUpdateJob());
}
/**
* @param text
*/
protected void updateDeviceIpPort(String selectedDeviceName) {
- if (selectedDeviceName.equals(savedJtagDevice)) {
- return;
+ if (!selectedDeviceName.equals(savedJtagDevice)) {
+ resetTargetParameters(selectedDeviceName);
}
+ }
+
+ private void resetTargetParameters(String deviceName) {
GDBJtagDeviceContribution[] availableDevices = GDBJtagDeviceContributionFactory.getInstance()
.getGDBJtagDeviceContribution();
IGDBJtagDevice selectedDevice = null;
for (int i = 0; i < availableDevices.length; i++) {
String name = availableDevices[i].getDeviceName();
- if (name.equals(selectedDeviceName)) {
+ if (name.equals(deviceName)) {
selectedDevice = availableDevices[i].getDevice();
if (selectedDevice != null) {
if (selectedDevice instanceof IGDBJtagConnection) {
IGDBJtagConnection connectionDevice = (IGDBJtagConnection) selectedDevice;
connection.setText(connectionDevice.getDefaultDeviceConnection());
+ String[] protocols = connectionDevice.getDeviceProtocols();
+ protocol.setInput(protocols);
+ if (0 != protocols.length) {
+ protocol.setSelection(new StructuredSelection(protocols[0]));
+ }
}
useRemoteChanged();
updateLaunchConfigurationDialog();
@@ -331,24 +326,13 @@ public class GDBJtagDSFDebuggerTab extends AbstractLaunchConfigurationTab {
private void useRemoteChanged() {
boolean enabled = useRemote.getSelection();
remoteTimeoutEnabled.setEnabled(enabled);
- remoteTimeoutValue.setEnabled(remoteTimeoutEnabled.getSelection());
+ remoteTimeoutValue.setEnabled(enabled && remoteTimeoutEnabled.getSelection());
+ jtagDeviceLabel.setEnabled(enabled);
jtagDevice.setEnabled(enabled);
+ protocolLabel.setEnabled(enabled);
+ protocol.getCombo().setEnabled(enabled);
+ connectionLabel.setEnabled(enabled);
connection.setEnabled(enabled);
- GDBJtagDeviceContribution selectedDeviceEntry = GDBJtagDeviceContributionFactory.getInstance()
- .findByDeviceName(jtagDevice.getText());
- if ((selectedDeviceEntry == null) || (selectedDeviceEntry.getDevice() == null)) {
- remoteConnectParmsLayout.topControl = null;
- remoteConnectionParameters.layout();
- } else {
- IGDBJtagDevice device = selectedDeviceEntry.getDevice();
- if (device instanceof IGDBJtagConnection) {
- remoteConnectParmsLayout.topControl = remoteConnectionBox;
- remoteConnectionBox.getParent().layout();
- } else {
- remoteConnectParmsLayout.topControl = null;
- remoteConnectionParameters.layout();
- }
- }
}
/**
@@ -434,28 +418,31 @@ public class GDBJtagDSFDebuggerTab extends AbstractLaunchConfigurationTab {
String storedAddress = ""; //$NON-NLS-1$
int storedPort = -1;
String storedConnection = null;
+ String storedProtocol = null;
for (int i = 0; i < jtagDevice.getItemCount(); i++) {
if (jtagDevice.getItem(i).equals(savedJtagDevice)) {
storedAddress = configuration.getAttribute(IGDBJtagConstants.ATTR_IP_ADDRESS, ""); //$NON-NLS-1$
storedPort = configuration.getAttribute(IGDBJtagConstants.ATTR_PORT_NUMBER, -1);
storedConnection = configuration.getAttribute(IGDBJtagConstants.ATTR_CONNECTION, (String) null);
+ storedProtocol = configuration.getAttribute(IGDBJtagConstants.ATTR_PROTOCOL, (String) null);
jtagDevice.select(i);
+ resetTargetParameters(savedJtagDevice);
break;
}
}
-
- String connectionText = IGDBJtagConstants.DEFAULT_CONNECTION;
+ if (null != storedProtocol) {
+ protocol.setSelection(new StructuredSelection(storedProtocol));
+ }
if (null != storedConnection) { // if a connection URI
try {
- connectionText = new URI(storedConnection).getSchemeSpecificPart();
+ connection.setText(new URI(storedConnection).getSchemeSpecificPart());
} catch (URISyntaxException e) {
Activator.log(e);
}
} else if (storedPort != -1) { // if a legacy address:port
- connectionText = String.format("%s:%d", storedAddress, storedPort); //$NON-NLS-1$
+ connection.setText(String.format("%s:%d", storedAddress, storedPort)); //$NON-NLS-1$
}
- connection.setText(connectionText);
}
boolean updateThreadsOnSuspend = configuration.getAttribute(
IGDBLaunchConfigurationConstants.ATTR_DEBUGGER_UPDATE_THREADLIST_ON_SUSPEND,
@@ -505,10 +492,12 @@ public class GDBJtagDSFDebuggerTab extends AbstractLaunchConfigurationTab {
if (device instanceof IGDBJtagConnection) {
String conn = connection.getText().trim();
URI uri = new URI("gdb", conn, ""); //$NON-NLS-1$ //$NON-NLS-2$
+ configuration.setAttribute(IGDBJtagConstants.ATTR_PROTOCOL, protocol.getCombo().getText());
configuration.setAttribute(IGDBJtagConstants.ATTR_CONNECTION, uri.toString());
configuration.removeAttribute(IGDBJtagConstants.ATTR_IP_ADDRESS);
configuration.removeAttribute(IGDBJtagConstants.ATTR_PORT_NUMBER);
} else {
+ configuration.removeAttribute(IGDBJtagConstants.ATTR_PROTOCOL);
configuration.removeAttribute(IGDBJtagConstants.ATTR_CONNECTION);
}
} catch (URISyntaxException e) {
diff --git a/jtag/org.eclipse.cdt.debug.gdbjtag.ui/src/org/eclipse/cdt/debug/gdbjtag/ui/JtagUi.properties b/jtag/org.eclipse.cdt.debug.gdbjtag.ui/src/org/eclipse/cdt/debug/gdbjtag/ui/JtagUi.properties
index 320a02cf8be..d0c96d7cb0a 100644
--- a/jtag/org.eclipse.cdt.debug.gdbjtag.ui/src/org/eclipse/cdt/debug/gdbjtag/ui/JtagUi.properties
+++ b/jtag/org.eclipse.cdt.debug.gdbjtag.ui/src/org/eclipse/cdt/debug/gdbjtag/ui/JtagUi.properties
@@ -65,11 +65,12 @@ GDBJtagDebuggerTab.miProtocolLabel=Protocol Version:
GDBJtagDebuggerTab.verboseModeLabel=Verbose console mode
GDBJtagDebuggerTab.remoteGroup_Text=Remote Target
GDBJtagDebuggerTab.useRemote_Text=Use remote target
-GDBJtagDebuggerTab.jtagDeviceLabel=JTAG Device:
+GDBJtagDebuggerTab.jtagDeviceLabel=Debug server:
GDBJtagDebuggerTab.ipAddressLabel=Host name or IP address:
GDBJtagDebuggerTab.portNumberLabel=Port number:
-GDBJtagDebuggerTab.connectionLabel=GDB Connection String:
+GDBJtagDebuggerTab.protocolLabel=Protocol:
+GDBJtagDebuggerTab.connectionLabel=Connection:
GDBJtagDebuggerTab.update_thread_list_on_suspend=Force thread list update on suspend
-GDBJtagDebuggerTab.remoteTimeout=Remote timeout (seconds):
+GDBJtagDebuggerTab.remoteTimeout=Timeout (seconds):
GDBJtagDebuggerTab.remoteTimeoutTooltip=Timeout for the remote target to respond. If unchecked, uses GDB default value. See GDB's help for "set remotetimeout num".
GDBJtagDebuggerTab.tabName=Debugger

Back to the top