Skip to content

Commit 6e9ef67

Browse files
authored
Merge pull request #9 from arduino/add-fqbn
add `fqbn` flag
2 parents 5d5bff1 + 83c35cb commit 6e9ef67

File tree

3 files changed

+30
-6
lines changed

3 files changed

+30
-6
lines changed

cli.go

+7
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ func RunPlugin(plugin Plugin) {
3131
info := plugin.GetPluginInfo()
3232

3333
var portAddress string
34+
var fqbn string
3435

3536
firmwareFlashCmd := &cobra.Command{
3637
Use: "flash",
@@ -42,6 +43,7 @@ func RunPlugin(plugin Plugin) {
4243
fwPath := paths.New(args[0])
4344
err := plugin.UploadFirmware(
4445
portAddress,
46+
fqbn,
4547
fwPath,
4648
&PluginFeedback{stdOut: os.Stdout, stdErr: os.Stderr},
4749
)
@@ -60,6 +62,7 @@ func RunPlugin(plugin Plugin) {
6062
}
6163
version, err := plugin.GetFirmwareVersion(
6264
portAddress,
65+
fqbn,
6366
&PluginFeedback{stdOut: os.Stdout, stdErr: os.Stderr},
6467
)
6568
if err != nil {
@@ -86,6 +89,7 @@ func RunPlugin(plugin Plugin) {
8689
certPath := paths.New(args[0])
8790
err := plugin.UploadCertificate(
8891
portAddress,
92+
fqbn,
8993
certPath,
9094
&PluginFeedback{stdOut: os.Stdout, stdErr: os.Stderr},
9195
)
@@ -118,6 +122,9 @@ func RunPlugin(plugin Plugin) {
118122
cli.AddCommand(certCmd)
119123
cli.AddCommand(versionCmd)
120124
cli.PersistentFlags().StringVarP(&portAddress, "address", "p", "", "Port address")
125+
// The fqbn is an optional flag that can be used by the plugin to do specific operations with a board.
126+
// With this input we can support a family of boards and not only a single one per plugin
127+
cli.PersistentFlags().StringVarP(&fqbn, "fqbn", "b", "", "Fully qualified board name")
121128

122129
if err := cli.Execute(); err != nil {
123130
fatal(err.Error(), 1)

dummy-plugin/main.go

+20-3
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,29 @@ func (d *dummyPlugin) GetPluginInfo() *helper.PluginInfo {
4141
}
4242

4343
// UploadFirmware performs a firmware upload on the board
44-
func (d *dummyPlugin) UploadFirmware(portAddress string, firmwarePath *paths.Path, feedback *helper.PluginFeedback) error {
44+
func (d *dummyPlugin) UploadFirmware(portAddress, fqbn string, firmwarePath *paths.Path, feedback *helper.PluginFeedback) error {
4545
if portAddress == "" {
4646
fmt.Fprintln(feedback.Err(), "Port address not specified")
4747
return fmt.Errorf("invalid port address")
4848
}
4949
fmt.Fprintf(feedback.Out(), "Uploading %s to %s...\n", firmwarePath, portAddress)
50+
if fqbn == "" {
51+
fmt.Fprintln(feedback.Err(), "FQBN not specified")
52+
return fmt.Errorf("invalid fqbn")
53+
}
54+
55+
// Providing the fqbn to the plugin allows us to support a family of boards instead of a single one
56+
switch fqbn {
57+
case "arduino:renesas_uno:unor5":
58+
// Do some board specific operations here
59+
fmt.Fprintf(feedback.Out(), "Uploading firmware for %s \n", fqbn)
60+
case "arduino:renesas_uno:unor4wifi":
61+
// Do some board specific operations here
62+
fmt.Fprintf(feedback.Out(), "Uploading firmware for %s \n", fqbn)
63+
default:
64+
fmt.Fprintf(feedback.Err(), "FQBN %s not supported by the plugin\n", fqbn)
65+
return fmt.Errorf("invalid fqbn")
66+
}
5067

5168
// Fake upload
5269
time.Sleep(5 * time.Second)
@@ -56,7 +73,7 @@ func (d *dummyPlugin) UploadFirmware(portAddress string, firmwarePath *paths.Pat
5673
}
5774

5875
// UploadCertificate performs a certificate upload on the board
59-
func (d *dummyPlugin) UploadCertificate(portAddress string, certificatePath *paths.Path, feedback *helper.PluginFeedback) error {
76+
func (d *dummyPlugin) UploadCertificate(portAddress, fqbn string, certificatePath *paths.Path, feedback *helper.PluginFeedback) error {
6077
if portAddress == "" {
6178
fmt.Fprintln(feedback.Err(), "Port address not specified")
6279
return fmt.Errorf("invalid port address")
@@ -71,7 +88,7 @@ func (d *dummyPlugin) UploadCertificate(portAddress string, certificatePath *pat
7188
}
7289

7390
// GetFirmwareVersion retrieve the firmware version installed on the board
74-
func (d *dummyPlugin) GetFirmwareVersion(portAddress string, feedback *helper.PluginFeedback) (*semver.RelaxedVersion, error) {
91+
func (d *dummyPlugin) GetFirmwareVersion(portAddress, fqbn string, feedback *helper.PluginFeedback) (*semver.RelaxedVersion, error) {
7592
if portAddress == "" {
7693
fmt.Fprintln(feedback.Err(), "Port address not specified")
7794
return nil, fmt.Errorf("invalid port address")

plugin.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,13 @@ type Plugin interface {
3030
GetPluginInfo() *PluginInfo
3131

3232
// UploadFirmware performs a firmware upload on the board
33-
UploadFirmware(portAddress string, firmwarePath *paths.Path, feedback *PluginFeedback) error
33+
UploadFirmware(portAddress, fqbn string, firmwarePath *paths.Path, feedback *PluginFeedback) error
3434

3535
// UploadCertificate performs a certificate upload on the board
36-
UploadCertificate(portAddress string, certificatePath *paths.Path, feedback *PluginFeedback) error
36+
UploadCertificate(portAddress, fqbn string, certificatePath *paths.Path, feedback *PluginFeedback) error
3737

3838
// GetFirmwareVersion retrieve the firmware version installed on the board
39-
GetFirmwareVersion(portAddress string, feedback *PluginFeedback) (*semver.RelaxedVersion, error)
39+
GetFirmwareVersion(portAddress, fqbn string, feedback *PluginFeedback) (*semver.RelaxedVersion, error)
4040
}
4141

4242
// PluginInfo is a set of information describing the plugin

0 commit comments

Comments
 (0)