forked from arduino/arduino-cli
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Added external programmer support (arduino#720)
* Added scaffolding for external programmer support * Added programmers extraction in arduino/cores module * Implemented programmers list command * Print upload command line in verbose mode * Added programmer option to compile command * External programmer implementation * Factored function runTool in upload This will turn out useful for burn-bootloader that requires to run two actions in a row ("erase" and "bootloader"). * Implemented burn-bootloader * Increased tracing log * Test fix * Added BurnBootloder action * Make the upload port parameter mandatory only when really needed * Fixed nil pointer exception when burning-bootloader * Added sanity check on upload parameters
- Loading branch information
Showing
20 changed files
with
1,198 additions
and
268 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
// This file is part of arduino-cli. | ||
// | ||
// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) | ||
// | ||
// This software is released under the GNU General Public License version 3, | ||
// which covers the main part of arduino-cli. | ||
// The terms of this license can be found at: | ||
// https://www.gnu.org/licenses/gpl-3.0.en.html | ||
// | ||
// You can be released from the requirements of the above licenses by purchasing | ||
// a commercial license. Buying such a license is mandatory if you want to | ||
// modify or otherwise use the software for commercial activities involving the | ||
// Arduino software without disclosing the source code of your own applications. | ||
// To purchase a commercial license, send an email to [email protected]. | ||
|
||
package cores | ||
|
||
import "github.com/arduino/go-properties-orderedmap" | ||
|
||
// Programmer represents an external programmer | ||
type Programmer struct { | ||
Name string | ||
Properties *properties.Map | ||
PlatformRelease *PlatformRelease | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,129 @@ | ||
// This file is part of arduino-cli. | ||
// | ||
// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) | ||
// | ||
// This software is released under the GNU General Public License version 3, | ||
// which covers the main part of arduino-cli. | ||
// The terms of this license can be found at: | ||
// https://www.gnu.org/licenses/gpl-3.0.en.html | ||
// | ||
// You can be released from the requirements of the above licenses by purchasing | ||
// a commercial license. Buying such a license is mandatory if you want to | ||
// modify or otherwise use the software for commercial activities involving the | ||
// Arduino software without disclosing the source code of your own applications. | ||
// To purchase a commercial license, send an email to [email protected]. | ||
|
||
package burnbootloader | ||
|
||
import ( | ||
"context" | ||
"os" | ||
|
||
"github.com/arduino/arduino-cli/cli/errorcodes" | ||
"github.com/arduino/arduino-cli/cli/feedback" | ||
"github.com/arduino/arduino-cli/cli/instance" | ||
"github.com/arduino/arduino-cli/commands/upload" | ||
rpc "github.com/arduino/arduino-cli/rpc/commands" | ||
"github.com/arduino/arduino-cli/table" | ||
"github.com/arduino/go-paths-helper" | ||
"github.com/sirupsen/logrus" | ||
"github.com/spf13/cobra" | ||
) | ||
|
||
var ( | ||
fqbn string | ||
port string | ||
verbose bool | ||
verify bool | ||
importDir string | ||
programmer string | ||
burnBootloader bool | ||
) | ||
|
||
// NewCommand created a new `burn-bootloader` command | ||
func NewCommand() *cobra.Command { | ||
burnBootloaderCommand := &cobra.Command{ | ||
Use: "burn-bootloader", | ||
Short: "Upload the bootloader.", | ||
Long: "Upload the bootloader on the board using an external programmer.", | ||
Example: " " + os.Args[0] + " burn-bootloader -b arduino:avr:uno -P atmel-ice", | ||
Args: cobra.MaximumNArgs(1), | ||
Run: run, | ||
} | ||
|
||
burnBootloaderCommand.Flags().StringVarP(&fqbn, "fqbn", "b", "", "Fully Qualified Board Name, e.g.: arduino:avr:uno") | ||
burnBootloaderCommand.Flags().StringVarP(&port, "port", "p", "", "Upload port, e.g.: COM10 or /dev/ttyACM0") | ||
burnBootloaderCommand.Flags().BoolVarP(&verify, "verify", "t", false, "Verify uploaded binary after the upload.") | ||
burnBootloaderCommand.Flags().BoolVarP(&verbose, "verbose", "v", false, "Turns on verbose mode.") | ||
burnBootloaderCommand.Flags().StringVarP(&programmer, "programmer", "P", "", "Use the specified programmer to upload or 'list' to list supported programmers.") | ||
|
||
return burnBootloaderCommand | ||
} | ||
|
||
func run(command *cobra.Command, args []string) { | ||
instance, err := instance.CreateInstance() | ||
if err != nil { | ||
feedback.Errorf("Error during Upload: %v", err) | ||
os.Exit(errorcodes.ErrGeneric) | ||
} | ||
|
||
if programmer == "list" { | ||
resp, err := upload.ListProgrammersAvailableForUpload(context.Background(), &rpc.ListProgrammersAvailableForUploadReq{ | ||
Instance: instance, | ||
Fqbn: fqbn, | ||
}) | ||
if err != nil { | ||
feedback.Errorf("Error listing programmers: %v", err) | ||
os.Exit(errorcodes.ErrGeneric) | ||
} | ||
feedback.PrintResult(&programmersList{ | ||
Programmers: resp.GetProgrammers(), | ||
}) | ||
os.Exit(0) | ||
} | ||
|
||
if _, err := upload.BurnBootloader(context.Background(), &rpc.BurnBootloaderReq{ | ||
Instance: instance, | ||
Fqbn: fqbn, | ||
Port: port, | ||
Verbose: verbose, | ||
Verify: verify, | ||
Programmer: programmer, | ||
}, os.Stdout, os.Stderr); err != nil { | ||
feedback.Errorf("Error during Upload: %v", err) | ||
os.Exit(errorcodes.ErrGeneric) | ||
} | ||
os.Exit(0) | ||
} | ||
|
||
// initSketchPath returns the current working directory | ||
func initSketchPath(sketchPath *paths.Path) *paths.Path { | ||
if sketchPath != nil { | ||
return sketchPath | ||
} | ||
|
||
wd, err := paths.Getwd() | ||
if err != nil { | ||
feedback.Errorf("Couldn't get current working directory: %v", err) | ||
os.Exit(errorcodes.ErrGeneric) | ||
} | ||
logrus.Infof("Reading sketch from dir: %s", wd) | ||
return wd | ||
} | ||
|
||
type programmersList struct { | ||
Programmers []*rpc.Programmer | ||
} | ||
|
||
func (p *programmersList) Data() interface{} { | ||
return p.Programmers | ||
} | ||
|
||
func (p *programmersList) String() string { | ||
t := table.New() | ||
t.SetHeader("ID", "Programmer Name", "Platform") | ||
for _, prog := range p.Programmers { | ||
t.AddRow(prog.GetId(), prog.GetName(), prog.GetPlatform()) | ||
} | ||
return t.Render() | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.