Skip to content

Commit e1e49a9

Browse files
committed
Use ResolveFQBN in 'board attach' command
1 parent 6ddfca6 commit e1e49a9

File tree

1 file changed

+27
-34
lines changed

1 file changed

+27
-34
lines changed

commands/board/attach.go

Lines changed: 27 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ import (
3333
"fmt"
3434
"net/url"
3535
"os"
36-
"regexp"
3736
"time"
3837

3938
discovery "github.com/arduino/board-discovery"
@@ -47,10 +46,6 @@ import (
4746
"github.com/spf13/cobra"
4847
)
4948

50-
var validSerialBoardURIRegexp = regexp.MustCompile("(serial|tty)://.+")
51-
var validNetworkBoardURIRegexp = regexp.MustCompile("(http(s)?|(tc|ud)p)://[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}:[0-9]{1,5}")
52-
var validFQBN = regexp.MustCompile(".+:.+:.+")
53-
5449
func initAttachCommand() *cobra.Command {
5550
attachCommand := &cobra.Command{
5651
Use: "attach <port>|<FQBN> [sketchPath]",
@@ -82,7 +77,8 @@ func runAttachCommand(cmd *cobra.Command, args []string) {
8277
os.Exit(commands.ErrGeneric)
8378
}
8479

85-
if !validFQBN.MatchString(boardURI) && boardURI[:6] != "serial" {
80+
fqbn, err := cores.ParseFQBN(boardURI)
81+
if err != nil && boardURI[:6] != "serial" {
8682
boardURI = "serial://" + boardURI
8783
}
8884

@@ -92,30 +88,31 @@ func runAttachCommand(cmd *cobra.Command, args []string) {
9288
os.Exit(commands.ErrCoreConfig)
9389
}
9490

95-
deviceURI, err := url.Parse(boardURI)
96-
if err != nil {
97-
formatter.PrintError(err, "The provided Device URL is not in a valid format.")
98-
os.Exit(commands.ErrBadCall)
99-
}
100-
101-
var findBoardFunc func(*packagemanager.PackageManager, *discovery.Monitor, *url.URL) *cores.Board
102-
var Type string
103-
104-
fqbn := ""
105-
if validFQBN.MatchString(boardURI) {
106-
fqbn = boardURI
107-
} else if validSerialBoardURIRegexp.MatchString(boardURI) {
108-
findBoardFunc = findSerialConnectedBoard
109-
Type = "serial"
110-
} else if validNetworkBoardURIRegexp.MatchString(boardURI) {
111-
findBoardFunc = findNetworkConnectedBoard
112-
Type = "network"
91+
if fqbn != nil {
92+
sketch.Metadata.CPU = sketches.MetadataCPU{
93+
Fqbn: fqbn.String(),
94+
}
11395
} else {
114-
formatter.PrintErrorMessage("Invalid device port type provided. Accepted types are: serial://, tty://, http://, https://, tcp://, udp://.")
115-
os.Exit(commands.ErrBadCall)
116-
}
96+
deviceURI, err := url.Parse(boardURI)
97+
if err != nil {
98+
formatter.PrintError(err, "The provided Device URL is not in a valid format.")
99+
os.Exit(commands.ErrBadCall)
100+
}
101+
102+
var findBoardFunc func(*packagemanager.PackageManager, *discovery.Monitor, *url.URL) *cores.Board
103+
var Type string
104+
switch deviceURI.Scheme {
105+
case "serial", "tty":
106+
findBoardFunc = findSerialConnectedBoard
107+
Type = "serial"
108+
case "http", "https", "tcp", "udp":
109+
findBoardFunc = findNetworkConnectedBoard
110+
Type = "network"
111+
default:
112+
formatter.PrintErrorMessage("Invalid device port type provided. Accepted types are: serial://, tty://, http://, https://, tcp://, udp://.")
113+
os.Exit(commands.ErrBadCall)
114+
}
117115

118-
if fqbn == "" {
119116
duration, err := time.ParseDuration(attachFlags.searchTimeout)
120117
if err != nil {
121118
logrus.WithError(err).Warnf("Invalid interval `%s` provided, using default (5s).", attachFlags.searchTimeout)
@@ -139,17 +136,13 @@ func runAttachCommand(cmd *cobra.Command, args []string) {
139136
Name: board.Name(),
140137
Type: Type,
141138
}
142-
fqbn = board.FQBN()
143-
} else {
144-
sketch.Metadata.CPU = sketches.MetadataCPU{
145-
Fqbn: fqbn,
146-
}
147139
}
140+
148141
err = sketch.ExportMetadata()
149142
if err != nil {
150143
formatter.PrintError(err, "Cannot export sketch metadata.")
151144
}
152-
formatter.PrintResult("Selected fqbn: " + fqbn)
145+
formatter.PrintResult("Selected fqbn: " + sketch.Metadata.CPU.Fqbn)
153146
}
154147

155148
// FIXME: Those should probably go in a "BoardManager" pkg or something

0 commit comments

Comments
 (0)