Skip to content

Commit a4594a8

Browse files
committed
Add property conversion for platform not supporting pluggable discovery
1 parent 967b15a commit a4594a8

File tree

2 files changed

+78
-6
lines changed

2 files changed

+78
-6
lines changed

arduino/cores/packagemanager/loader.go

+25-6
Original file line numberDiff line numberDiff line change
@@ -341,6 +341,9 @@ func (pm *PackageManager) loadPlatformRelease(platform *cores.PlatformRelease, p
341341
// Create programmers properties
342342
if programmersProperties, err := properties.SafeLoad(programmersTxtPath.String()); err == nil {
343343
for programmerID, programmerProperties := range programmersProperties.FirstLevelOf() {
344+
if !platform.PluggableDiscoveryAware {
345+
convertUploadToolsToPluggableDiscovery(programmersProperties)
346+
}
344347
platform.Programmers[programmerID] = pm.loadProgrammer(programmerProperties)
345348
platform.Programmers[programmerID].PlatformRelease = platform
346349
}
@@ -391,12 +394,6 @@ func (pm *PackageManager) loadBoards(platform *cores.PlatformRelease) error {
391394
// set all other boards properties
392395
delete(propertiesByBoard, "menu")
393396

394-
if !platform.PluggableDiscoveryAware {
395-
for _, boardProperties := range propertiesByBoard {
396-
convertVidPidIdentificationPropertiesToPluggableDiscovery(boardProperties)
397-
}
398-
}
399-
400397
skippedBoards := []string{}
401398
for boardID, boardProperties := range propertiesByBoard {
402399
var board *cores.Board
@@ -415,6 +412,12 @@ func (pm *PackageManager) loadBoards(platform *cores.PlatformRelease) error {
415412
goto next_board
416413
}
417414
}
415+
416+
if !platform.PluggableDiscoveryAware {
417+
convertVidPidIdentificationPropertiesToPluggableDiscovery(boardProperties)
418+
convertUploadToolsToPluggableDiscovery(boardProperties)
419+
}
420+
418421
// The board's ID must be available in a board's properties since it can
419422
// be used in all configuration files for several reasons, like setting compilation
420423
// flags depending on the board id.
@@ -471,6 +474,22 @@ func convertVidPidIdentificationPropertiesToPluggableDiscovery(boardProperties *
471474
}
472475
}
473476

477+
func convertUploadToolsToPluggableDiscovery(props *properties.Map) {
478+
actions := []string{"upload", "bootloader", "program"}
479+
for _, action := range actions {
480+
if !props.ContainsKey(fmt.Sprintf("%s.tool.default", action)) {
481+
tool, found := props.GetOk(fmt.Sprintf("%s.tool", action))
482+
if !found {
483+
// Just skip it, ideally this must never happen but if a platform
484+
// doesn't define an expected upload.tool, bootloader.tool or program.tool
485+
// there will be other issues further down the road after this conversion
486+
continue
487+
}
488+
props.Set(fmt.Sprintf("%s.tool.default", action), tool)
489+
}
490+
}
491+
}
492+
474493
func (pm *PackageManager) loadToolsFromPackage(targetPackage *cores.Package, toolsPath *paths.Path) []*status.Status {
475494
pm.Log.Infof("Loading tools from dir: %s", toolsPath)
476495

arduino/cores/packagemanager/loader_test.go

+53
Original file line numberDiff line numberDiff line change
@@ -193,3 +193,56 @@ func TestLoadDiscoveries(t *testing.T) {
193193
require.Contains(t, discoveries, "arduino:serial-discovery")
194194
require.Contains(t, discoveries, "teensy")
195195
}
196+
197+
func TestConvertUploadToolsToPluggableDiscovery(t *testing.T) {
198+
props, err := properties.LoadFromBytes([]byte(`
199+
upload.tool=avrdude
200+
upload.protocol=arduino
201+
upload.maximum_size=32256
202+
upload.maximum_data_size=2048
203+
upload.speed=115200
204+
bootloader.tool=avrdude
205+
bootloader.low_fuses=0xFF
206+
bootloader.high_fuses=0xDE
207+
bootloader.extended_fuses=0xFD
208+
bootloader.unlock_bits=0x3F
209+
bootloader.lock_bits=0x0F
210+
bootloader.file=optiboot/optiboot_atmega328.hex
211+
name=AVR ISP
212+
communication=serial
213+
protocol=stk500v1
214+
program.protocol=stk500v1
215+
program.tool=avrdude
216+
program.extra_params=-P{serial.port}
217+
`))
218+
require.NoError(t, err)
219+
220+
convertUploadToolsToPluggableDiscovery(props)
221+
222+
expectedProps, err := properties.LoadFromBytes([]byte(`
223+
upload.tool=avrdude
224+
upload.tool.default=avrdude
225+
upload.protocol=arduino
226+
upload.maximum_size=32256
227+
upload.maximum_data_size=2048
228+
upload.speed=115200
229+
bootloader.tool=avrdude
230+
bootloader.tool.default=avrdude
231+
bootloader.low_fuses=0xFF
232+
bootloader.high_fuses=0xDE
233+
bootloader.extended_fuses=0xFD
234+
bootloader.unlock_bits=0x3F
235+
bootloader.lock_bits=0x0F
236+
bootloader.file=optiboot/optiboot_atmega328.hex
237+
name=AVR ISP
238+
communication=serial
239+
protocol=stk500v1
240+
program.protocol=stk500v1
241+
program.tool=avrdude
242+
program.tool.default=avrdude
243+
program.extra_params=-P{serial.port}
244+
`))
245+
require.NoError(t, err)
246+
247+
require.Equal(t, expectedProps.AsMap(), props.AsMap())
248+
}

0 commit comments

Comments
 (0)