Skip to content

Commit 6a224c4

Browse files
committed
Refactored upload procedure to correctly handle bootloader.tool property
1 parent 3dcf2ac commit 6a224c4

File tree

1 file changed

+48
-47
lines changed

1 file changed

+48
-47
lines changed

commands/upload/upload.go

Lines changed: 48 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -117,23 +117,8 @@ func runProgramAction(pm *packagemanager.PackageManager,
117117
WithField("buildPlatform", buildPlatform).
118118
Tracef("Upload data")
119119

120-
// Load upload tool definitions
121-
var uploadToolName string
122-
var uploadToolPlatform *cores.PlatformRelease
120+
// Extract programmer properties (when specified)
123121
var programmer *cores.Programmer
124-
125-
if burnBootloader {
126-
uploadToolName = boardProperties.Get("bootloader.tool")
127-
uploadToolPlatform = boardPlatform
128-
if uploadToolName == "" {
129-
return fmt.Errorf("cannot get programmer tool: undefined 'bootloader.tool' in boards.txt")
130-
}
131-
logrus.
132-
WithField("uploadToolName", uploadToolName).
133-
WithField("uploadToolPlatform", uploadToolPlatform).
134-
Trace("Upload tool from 'bootloader.tool' property")
135-
}
136-
137122
if programmerID != "" {
138123
programmer = boardPlatform.Programmers[programmerID]
139124
if programmer == nil {
@@ -143,36 +128,54 @@ func runProgramAction(pm *packagemanager.PackageManager,
143128
if programmer == nil {
144129
return fmt.Errorf("programmer '%s' not available", programmerID)
145130
}
146-
uploadToolName = programmer.Properties.Get("program.tool")
147-
uploadToolPlatform = programmer.PlatformRelease
148-
if uploadToolName == "" {
149-
return fmt.Errorf("cannot get programmer tool: undefined 'program.tool' property")
131+
}
132+
133+
// Determine upload tool
134+
var uploadToolID string
135+
{
136+
toolProperty := "upload.tool"
137+
if burnBootloader {
138+
toolProperty = "bootloader.tool"
139+
} else if programmer != nil {
140+
toolProperty = "program.tool"
141+
}
142+
143+
// create a temporary configuration only for the selection of upload tool
144+
props := properties.NewMap()
145+
props.Merge(boardPlatform.Properties)
146+
props.Merge(boardPlatform.RuntimeProperties())
147+
props.Merge(boardProperties)
148+
if programmer != nil {
149+
props.Merge(programmer.Properties)
150+
}
151+
if t, ok := props.GetOk(toolProperty); ok {
152+
uploadToolID = t
153+
} else {
154+
return fmt.Errorf("cannot get programmer tool: undefined '%s' property", toolProperty)
150155
}
151-
logrus.
152-
WithField("uploadToolName", uploadToolName).
153-
WithField("uploadToolPlatform", uploadToolPlatform).
154-
Trace("Upload tool from --programmer parameter")
156+
}
157+
158+
var uploadToolPlatform *cores.PlatformRelease
159+
if programmer != nil {
160+
uploadToolPlatform = programmer.PlatformRelease
155161
} else {
156-
uploadToolName = boardProperties.Get("upload.tool")
157162
uploadToolPlatform = boardPlatform
158-
if uploadToolName == "" {
159-
return fmt.Errorf("cannot get upload tool: undefined 'upload.tool' property")
160-
}
161-
if split := strings.Split(uploadToolName, ":"); len(split) > 2 {
162-
return fmt.Errorf("invalid 'upload.tool' property: %s", uploadToolName)
163-
} else if len(split) == 2 {
164-
uploadToolName = split[1]
165-
uploadToolPlatform = pm.GetInstalledPlatformRelease(
166-
pm.FindPlatform(&packagemanager.PlatformReference{
167-
Package: split[0],
168-
PlatformArchitecture: boardPlatform.Platform.Architecture,
169-
}),
170-
)
171-
}
172-
logrus.
173-
WithField("uploadToolName", uploadToolName).
174-
WithField("uploadToolPlatform", uploadToolPlatform).
175-
Trace("Upload tool")
163+
}
164+
logrus.
165+
WithField("uploadToolID", uploadToolID).
166+
WithField("uploadToolPlatform", uploadToolPlatform).
167+
Trace("Upload tool")
168+
169+
if split := strings.Split(uploadToolID, ":"); len(split) > 2 {
170+
return fmt.Errorf("invalid 'upload.tool' property: %s", uploadToolID)
171+
} else if len(split) == 2 {
172+
uploadToolID = split[1]
173+
uploadToolPlatform = pm.GetInstalledPlatformRelease(
174+
pm.FindPlatform(&packagemanager.PlatformReference{
175+
Package: split[0],
176+
PlatformArchitecture: boardPlatform.Platform.Architecture,
177+
}),
178+
)
176179
}
177180

178181
// Build configuration for upload
@@ -183,9 +186,7 @@ func runProgramAction(pm *packagemanager.PackageManager,
183186
uploadProperties.Merge(boardPlatform.Properties)
184187
uploadProperties.Merge(boardPlatform.RuntimeProperties())
185188
uploadProperties.Merge(boardProperties)
186-
187-
uploadToolProperties := uploadProperties.SubTree("tools." + uploadToolName)
188-
uploadProperties.Merge(uploadToolProperties)
189+
uploadProperties.Merge(uploadProperties.SubTree("tools." + uploadToolID))
189190
if programmer != nil {
190191
uploadProperties.Merge(programmer.Properties)
191192
}
@@ -311,7 +312,7 @@ func runProgramAction(pm *packagemanager.PackageManager,
311312
}
312313
}
313314

314-
// Build recipe for upload
315+
// Run recipes for upload
315316
if burnBootloader {
316317
if err := runTool("erase.pattern", uploadProperties, outStream, errStream, verbose); err != nil {
317318
return fmt.Errorf("chip erase error: %s", err)

0 commit comments

Comments
 (0)