Skip to content

Commit

Permalink
pyocd: TabDebugger target type improvements.
Browse files Browse the repository at this point in the history
- Show default target type used by probe/board.
- Include family names and short target type in formatted target types.
- Wide target type combo box.
- Better tool tips.

Signed-off-by: Chris Reed <flit@me.com>
  • Loading branch information
flit committed Jan 5, 2021
1 parent 3316f27 commit 73c6932
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,7 @@ public class TabDebugger extends AbstractLaunchConfigurationTab {

private Button fGdbServerOverrideTarget;
private Combo fGdbServerTargetName;
private Label fGdbServerDefaultTargetName;

private Combo fGdbServerBusSpeed;

Expand Down Expand Up @@ -165,6 +166,7 @@ public class TabDebugger extends AbstractLaunchConfigurationTab {
private String fPyocdPathForOutstandingTargetsLoad;
private RequestMonitor fOutstandingProbesLoadMonitor;
private RequestMonitor fOutstandingTargetsLoadMonitor;
private boolean fNeedsDefaultTargetNameRefresh = false;

/**
* Where widgets in a row are rendered in columns, the amount of padding (in
Expand Down Expand Up @@ -451,6 +453,18 @@ private void createGdbServerGroup(Composite parent) {
fGdbServerRefreshProbes.setText(Messages.getString("DebuggerTab.gdbServerRefreshProbes_Label"));
}
}

{
Label label = new Label(comp, SWT.NONE);
label.setText(Messages.getString("DebuggerTab.gdbServerDefaultTargetType_Label"));

fGdbServerDefaultTargetName = new Label(comp, SWT.NONE);
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = ((GridLayout) comp.getLayout()).numColumns - 1;
fGdbServerDefaultTargetName.setLayoutData(gd);
fGdbServerDefaultTargetName.setToolTipText(
Messages.getString("DebuggerTab.gdbServerDefaultTargetType_ToolTipText"));
}

{
fGdbServerOverrideTarget = new Button(comp, SWT.CHECK);
Expand All @@ -461,10 +475,11 @@ private void createGdbServerGroup(Composite parent) {
fGdbServerOverrideTarget.setLayoutData(gd);

fGdbServerTargetName = new Combo(comp, SWT.DROP_DOWN);
gd = new GridData();
gd.widthHint = 360;
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = ((GridLayout) comp.getLayout()).numColumns - 1;
fGdbServerTargetName.setLayoutData(gd);
fGdbServerTargetName.setToolTipText(
Messages.getString("DebuggerTab.gdbServerTargetName_ToolTipText"));
}

{
Expand Down Expand Up @@ -1082,6 +1097,19 @@ private int indexForProbeId(String probeId) {
return -1;
}

private void updateDefaultTargetName(int index) {
String targetName = fProbes.get(index).fTargetName;
// Note that fTargetsByName may be null or empty if targets have not been read from pyocd yet.
if (fTargetsByName != null) {
Target target = fTargetsByName.get(targetName);
if (target != null) {
fGdbServerDefaultTargetName.setText(getFormattedTargetName(target));
return;
}
}
fNeedsDefaultTargetNameRefresh = true;
}

private void probeWasSelected(int index) {
if (fProbeIdListHasUnavailableItem) {
if (index == 0) {
Expand All @@ -1094,6 +1122,7 @@ private void probeWasSelected(int index) {
}
PyOCD.Probe selectedProbe = fProbes.get(index);
fSelectedProbeId = selectedProbe.fUniqueId;
updateDefaultTargetName(index);
}

private void selectActiveProbe() {
Expand All @@ -1105,12 +1134,32 @@ private void selectActiveProbe() {
}

fGdbServerProbeId.select(index);

updateDefaultTargetName(index);
} else {
assert(fProbeIdListHasUnavailableItem);
fGdbServerProbeId.select(0);
}
}

private String getFormattedTargetName(PyOCD.Target target) {
StringBuilder builder = new StringBuilder(target.fVendor);

for (String family : target.fFamilies) {
builder.append(" > ");
builder.append(family);
}

builder.append(" > ");
builder.append(target.fPartNumber);

builder.append(" (");
builder.append(target.fName);
builder.append(")");

return builder.toString();
}

private void selectActiveTarget() {
if (fConfiguration != null) {
try {
Expand All @@ -1119,7 +1168,7 @@ private void selectActiveTarget() {
DefaultPreferences.GDB_SERVER_TARGET_NAME_DEFAULT);
Target target = fTargetsByName.get(configTargetName);
if (target != null) {
fGdbServerTargetName.setText(target.fPartNumber);
fGdbServerTargetName.setText(getFormattedTargetName(target));
}
else {
// Support arbitrary target names entered by the user.
Expand Down Expand Up @@ -1385,8 +1434,9 @@ protected void handleCompleted() {
Collections.sort(targets, PyOCD.Target.PART_NUMBER_COMPARATOR);

for (PyOCD.Target target : targets) {
itemList.add(String.format("%s", target.getFullPartName()));
fTargetsByPartNumber.put(target.fPartNumber, target);
String formattedPartNumber = getFormattedTargetName(target);
itemList.add(formattedPartNumber);
fTargetsByPartNumber.put(formattedPartNumber, target);
fTargetsByName.put(target.fName, target);
}
}
Expand All @@ -1409,6 +1459,9 @@ public IStatus runInUIThread(IProgressMonitor monitor) {
selectActiveTarget();

scheduleUpdateJob();
if (fNeedsDefaultTargetNameRefresh) {
selectActiveProbe();
}

updatePyocdLoadingMessage();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,10 +91,24 @@ DebuggerTab.gdbServerBusSpeedUnits_Label=Hz

DebuggerTab.gdbServerOverrideTarget_Label=Override target:
DebuggerTab.gdbServerOverrideTarget_ToolTipText=\
Select a target device type from the menu to override the \
target. This is required when using standalone debug probes \
or on-board probes types such as J-Link that do not indicate \
the connected target type.
When enabled, the target device type is set to the item selected \
with the combo box. If not enabled, the default target type \
shown above is used. Setting the target type is required when using \
standalone debug probes or on-board probes types such as J-Link \
that do not report the connected target type.

DebuggerTab.gdbServerTargetName_ToolTipText=\
Select a device part number from the pull-down menu to manually specify the \
target type. A custom value may also be entered in the field; this must \
be the short target type name like those shown in parentheses in \
the pull-down menu. Setting the target type is required when using \
standalone debug probes or on-board probes types such as J-Link \
that do not report the connected target type.

DebuggerTab.gdbServerDefaultTargetType_Label=Default target:
DebuggerTab.gdbServerDefaultTargetType_ToolTipText=\
This is the target that will be used if the "Override target" \
setting is not enabled.

DebuggerTab.gdbServerConnectMode_Label=Connect mode:
DebuggerTab.gdbServerConnectMode_ToolTipText=\
Expand Down

0 comments on commit 73c6932

Please sign in to comment.