Skip to content

Commit 776736a

Browse files
committed
fix: Moved port-from-profile logic in args.Port.GetPort(...)
This allows to implement the selection logic on more commands.
1 parent 0271d36 commit 776736a

File tree

11 files changed

+149
-14
lines changed

11 files changed

+149
-14
lines changed

internal/cli/arguments/fqbn.go

+1-7
Original file line numberDiff line numberDiff line change
@@ -87,13 +87,7 @@ func CalculateFQBNAndPort(ctx context.Context, portArgs *Port, fqbnArg *Fqbn, in
8787
return fqbn, port
8888
}
8989

90-
if profile.GetPort() != "" {
91-
defaultAddress = profile.GetPort()
92-
}
93-
if profile.GetProtocol() != "" {
94-
defaultProtocol = profile.GetProtocol()
95-
}
96-
port, err := portArgs.GetPort(ctx, instance, srv, defaultAddress, defaultProtocol)
90+
port, err := portArgs.GetPort(ctx, instance, srv, defaultAddress, defaultProtocol, profile)
9791
if err != nil {
9892
feedback.Fatal(i18n.Tr("Error getting port metadata: %v", err), feedback.ErrGeneric)
9993
}

internal/cli/arguments/port.go

+9-3
Original file line numberDiff line numberDiff line change
@@ -57,12 +57,12 @@ func (p *Port) AddToCommand(cmd *cobra.Command, srv rpc.ArduinoCoreServiceServer
5757
// This method allows will bypass the discoveries if:
5858
// - a nil instance is passed: in this case the plain port and protocol arguments are returned (even if empty)
5959
// - a protocol is specified: in this case the discoveries are not needed to autodetect the protocol.
60-
func (p *Port) GetPortAddressAndProtocol(ctx context.Context, instance *rpc.Instance, srv rpc.ArduinoCoreServiceServer, defaultAddress, defaultProtocol string) (string, string, error) {
60+
func (p *Port) GetPortAddressAndProtocol(ctx context.Context, instance *rpc.Instance, srv rpc.ArduinoCoreServiceServer, defaultAddress, defaultProtocol string, profile *rpc.SketchProfile) (string, string, error) {
6161
if p.protocol != "" || instance == nil {
6262
return p.address, p.protocol, nil
6363
}
6464

65-
port, err := p.GetPort(ctx, instance, srv, defaultAddress, defaultProtocol)
65+
port, err := p.GetPort(ctx, instance, srv, defaultAddress, defaultProtocol, profile)
6666
if err != nil {
6767
return "", "", err
6868
}
@@ -71,7 +71,13 @@ func (p *Port) GetPortAddressAndProtocol(ctx context.Context, instance *rpc.Inst
7171

7272
// GetPort returns the Port obtained by parsing command line arguments.
7373
// The extra metadata for the ports is obtained using the pluggable discoveries.
74-
func (p *Port) GetPort(ctx context.Context, instance *rpc.Instance, srv rpc.ArduinoCoreServiceServer, defaultAddress, defaultProtocol string) (*rpc.Port, error) {
74+
func (p *Port) GetPort(ctx context.Context, instance *rpc.Instance, srv rpc.ArduinoCoreServiceServer, defaultAddress, defaultProtocol string, profile *rpc.SketchProfile) (*rpc.Port, error) {
75+
if profile.GetPort() != "" {
76+
defaultAddress = profile.GetPort()
77+
}
78+
if profile.GetProtocol() != "" {
79+
defaultProtocol = profile.GetProtocol()
80+
}
7581
address := p.address
7682
protocol := p.protocol
7783
if address == "" && (defaultAddress != "" || defaultProtocol != "") {

internal/cli/board/attach.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ func initAttachCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command {
5959
func runAttachCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, path string, port *arguments.Port, fqbn string, programmer *arguments.Programmer) {
6060
sketchPath := arguments.InitSketchPath(path)
6161

62-
portAddress, portProtocol, _ := port.GetPortAddressAndProtocol(ctx, nil, srv, "", "")
62+
portAddress, portProtocol, _ := port.GetPortAddressAndProtocol(ctx, nil, srv, "", "", nil)
6363
newDefaults, err := srv.SetSketchDefaults(ctx, &rpc.SetSketchDefaultsRequest{
6464
SketchPath: sketchPath.String(),
6565
DefaultFqbn: fqbn,

internal/cli/burnbootloader/burnbootloader.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ func runBootloaderCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer)
7373
logrus.Info("Executing `arduino-cli burn-bootloader`")
7474

7575
// We don't need a Sketch to upload a board's bootloader
76-
discoveryPort, err := port.GetPort(ctx, instance, srv, "", "")
76+
discoveryPort, err := port.GetPort(ctx, instance, srv, "", "", nil)
7777
if err != nil {
7878
feedback.Fatal(i18n.Tr("Error during Upload: %v", err), feedback.ErrGeneric)
7979
}

internal/cli/debug/debug_check.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ func runDebugCheckCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer,
6060
instance := instance.CreateAndInit(ctx, srv)
6161
logrus.Info("Executing `arduino-cli debug`")
6262

63-
port, err := portArgs.GetPort(ctx, instance, srv, "", "")
63+
port, err := portArgs.GetPort(ctx, instance, srv, "", "", nil)
6464
if err != nil {
6565
feedback.FatalError(err, feedback.ErrBadArgument)
6666
}

internal/cli/monitor/monitor.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ func runMonitorCmd(
142142
if sketch != nil {
143143
defaultPort, defaultProtocol = sketch.GetDefaultPort(), sketch.GetDefaultProtocol()
144144
}
145-
portAddress, portProtocol, err := portArgs.GetPortAddressAndProtocol(ctx, inst, srv, defaultPort, defaultProtocol)
145+
portAddress, portProtocol, err := portArgs.GetPortAddressAndProtocol(ctx, inst, srv, defaultPort, defaultProtocol, profile)
146146
if err != nil {
147147
feedback.FatalError(err, feedback.ErrGeneric)
148148
}

internal/integrationtest/monitor/monitor_test.go

+112
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,8 @@ yun.serial.disableDTR=true
125125
sketchWithPort := getSketchPath("SketchWithDefaultPort")
126126
sketchWithFQBN := getSketchPath("SketchWithDefaultFQBN")
127127
sketchWithPortAndFQBN := getSketchPath("SketchWithDefaultPortAndFQBN")
128+
sketchWithPortAndConfig := getSketchPath("SketchWithDefaultPortAndConfig")
129+
sketchWithPortAndConfigAndProfile := getSketchPath("SketchWithDefaultPortAndConfigAndProfile")
128130

129131
t.Run("NoFlags", func(t *testing.T) {
130132
t.Run("NoDefaultPortNoDefaultFQBN", func(t *testing.T) {
@@ -161,6 +163,30 @@ yun.serial.disableDTR=true
161163
require.Error(t, err)
162164
require.Contains(t, string(stderr), "not an FQBN: broken_fqbn")
163165
})
166+
167+
t.Run("WithDefaultPortAndConfig", func(t *testing.T) {
168+
stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "--raw", sketchWithPortAndConfig)
169+
require.NoError(t, err)
170+
require.Contains(t, string(stdout), "Opened port: /dev/ttyDEF")
171+
require.Contains(t, string(stdout), "Configuration rts = on")
172+
require.Contains(t, string(stdout), "Configuration dtr = on")
173+
require.Contains(t, string(stdout), "Configuration baudrate = 57600")
174+
require.Contains(t, string(stdout), "Configuration bits = 9")
175+
require.Contains(t, string(stdout), "Configuration parity = none")
176+
require.Contains(t, string(stdout), "Configuration stop_bits = 1")
177+
})
178+
179+
t.Run("WithDefaultPortAndConfigAndProfile", func(t *testing.T) {
180+
stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "--raw", sketchWithPortAndConfigAndProfile)
181+
require.NoError(t, err)
182+
require.Contains(t, string(stdout), "Opened port: /dev/ttyDEF")
183+
require.Contains(t, string(stdout), "Configuration rts = on")
184+
require.Contains(t, string(stdout), "Configuration dtr = on")
185+
require.Contains(t, string(stdout), "Configuration baudrate = 57600")
186+
require.Contains(t, string(stdout), "Configuration bits = 9")
187+
require.Contains(t, string(stdout), "Configuration parity = none")
188+
require.Contains(t, string(stdout), "Configuration stop_bits = 1")
189+
})
164190
})
165191

166192
t.Run("WithPortFlag", func(t *testing.T) {
@@ -202,6 +228,30 @@ yun.serial.disableDTR=true
202228
require.Error(t, err)
203229
require.Contains(t, string(stderr), "not an FQBN: broken_fqbn")
204230
})
231+
232+
t.Run("WithDefaultPortAndConfig", func(t *testing.T) {
233+
stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARGS", "--raw", sketchWithPortAndConfig)
234+
require.NoError(t, err)
235+
require.Contains(t, string(stdout), "Opened port: /dev/ttyARGS")
236+
require.Contains(t, string(stdout), "Configuration rts = on")
237+
require.Contains(t, string(stdout), "Configuration dtr = on")
238+
require.Contains(t, string(stdout), "Configuration baudrate = 57600")
239+
require.Contains(t, string(stdout), "Configuration bits = 9")
240+
require.Contains(t, string(stdout), "Configuration parity = none")
241+
require.Contains(t, string(stdout), "Configuration stop_bits = 1")
242+
})
243+
244+
t.Run("WithDefaultPortAndConfigAndProfile", func(t *testing.T) {
245+
stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARGS", "--raw", sketchWithPortAndConfigAndProfile)
246+
require.NoError(t, err)
247+
require.Contains(t, string(stdout), "Opened port: /dev/ttyARGS")
248+
require.Contains(t, string(stdout), "Configuration rts = on")
249+
require.Contains(t, string(stdout), "Configuration dtr = on")
250+
require.Contains(t, string(stdout), "Configuration baudrate = 57600")
251+
require.Contains(t, string(stdout), "Configuration bits = 9")
252+
require.Contains(t, string(stdout), "Configuration parity = none")
253+
require.Contains(t, string(stdout), "Configuration stop_bits = 1")
254+
})
205255
})
206256

207257
t.Run("WithFQBNFlag", func(t *testing.T) {
@@ -240,6 +290,30 @@ yun.serial.disableDTR=true
240290
require.Contains(t, string(stdout), "Configuration rts = off")
241291
require.Contains(t, string(stdout), "Configuration dtr = on")
242292
})
293+
294+
t.Run("WithDefaultPortAndConfig", func(t *testing.T) {
295+
stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-b", "arduino:avr:uno", "--raw", "--profile", "profile1", sketchWithPortAndConfig)
296+
require.NoError(t, err)
297+
require.Contains(t, string(stdout), "Opened port: /dev/ttyDEF")
298+
require.Contains(t, string(stdout), "Configuration rts = off")
299+
require.Contains(t, string(stdout), "Configuration dtr = on")
300+
require.Contains(t, string(stdout), "Configuration baudrate = 57600")
301+
require.Contains(t, string(stdout), "Configuration bits = 9")
302+
require.Contains(t, string(stdout), "Configuration parity = none")
303+
require.Contains(t, string(stdout), "Configuration stop_bits = 1")
304+
})
305+
306+
t.Run("WithDefaultPortAndConfigAndProfile", func(t *testing.T) {
307+
stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-b", "arduino:avr:uno", "--raw", "--profile", "profile1", sketchWithPortAndConfigAndProfile)
308+
require.NoError(t, err)
309+
require.Contains(t, string(stdout), "Opened port: /dev/ttyDEF")
310+
require.Contains(t, string(stdout), "Configuration rts = off")
311+
require.Contains(t, string(stdout), "Configuration dtr = on")
312+
require.Contains(t, string(stdout), "Configuration baudrate = 57600")
313+
require.Contains(t, string(stdout), "Configuration bits = 9")
314+
require.Contains(t, string(stdout), "Configuration parity = none")
315+
require.Contains(t, string(stdout), "Configuration stop_bits = 1")
316+
})
243317
})
244318

245319
t.Run("WithPortAndFQBNFlags", func(t *testing.T) {
@@ -275,6 +349,30 @@ yun.serial.disableDTR=true
275349
require.Contains(t, string(stdout), "Configuration dtr = on")
276350
})
277351

352+
t.Run("WithDefaultPortAndConfig", func(t *testing.T) {
353+
stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARGS", "-b", "arduino:avr:uno", "--raw", sketchWithPortAndConfig)
354+
require.NoError(t, err)
355+
require.Contains(t, string(stdout), "Opened port: /dev/ttyARGS")
356+
require.Contains(t, string(stdout), "Configuration rts = off")
357+
require.Contains(t, string(stdout), "Configuration dtr = on")
358+
require.Contains(t, string(stdout), "Configuration baudrate = 57600")
359+
require.Contains(t, string(stdout), "Configuration bits = 9")
360+
require.Contains(t, string(stdout), "Configuration parity = none")
361+
require.Contains(t, string(stdout), "Configuration stop_bits = 1")
362+
})
363+
364+
t.Run("WithDefaultPortAndConfigAndProfile", func(t *testing.T) {
365+
stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARGS", "-b", "arduino:avr:uno", "--raw", sketchWithPortAndConfigAndProfile)
366+
require.NoError(t, err)
367+
require.Contains(t, string(stdout), "Opened port: /dev/ttyARGS")
368+
require.Contains(t, string(stdout), "Configuration rts = off")
369+
require.Contains(t, string(stdout), "Configuration dtr = on")
370+
require.Contains(t, string(stdout), "Configuration baudrate = 57600")
371+
require.Contains(t, string(stdout), "Configuration bits = 9")
372+
require.Contains(t, string(stdout), "Configuration parity = none")
373+
require.Contains(t, string(stdout), "Configuration stop_bits = 1")
374+
})
375+
278376
t.Run("IgnoreProfile", func(t *testing.T) {
279377
stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARGS", "-b", "arduino:avr:uno", "--raw", "--profile", "profile1", sketchWithPortAndFQBN)
280378
require.NoError(t, err)
@@ -283,4 +381,18 @@ yun.serial.disableDTR=true
283381
require.Contains(t, string(stdout), "Configuration dtr = on")
284382
})
285383
})
384+
385+
t.Run("WithProfileFlags", func(t *testing.T) {
386+
t.Run("NoOtherArgs", func(t *testing.T) {
387+
stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-m", "uno", "--raw", sketchWithPortAndConfigAndProfile)
388+
require.NoError(t, err)
389+
require.Contains(t, string(stdout), "Opened port: /dev/ttyPROF")
390+
require.Contains(t, string(stdout), "Configuration rts = on") // This is taken from profile-installed AVR core (not patched by this test)
391+
require.Contains(t, string(stdout), "Configuration dtr = on")
392+
require.Contains(t, string(stdout), "Configuration baudrate = 19200")
393+
require.Contains(t, string(stdout), "Configuration bits = 8")
394+
require.Contains(t, string(stdout), "Configuration parity = none")
395+
require.Contains(t, string(stdout), "Configuration stop_bits = 1")
396+
})
397+
})
286398
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
2+
void setup() {}
3+
void loop() {}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
default_port: /dev/ttyDEF
2+
default_port_config:
3+
baudrate: 57600
4+
bits: 9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
2+
void setup() {}
3+
void loop() {}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
profiles:
2+
uno:
3+
fqbn: arduino:avr:uno
4+
platforms:
5+
- platform: arduino:avr (1.8.6)
6+
port: /dev/ttyPROF
7+
port_config:
8+
baudrate: 19200
9+
10+
default_port: /dev/ttyDEF
11+
default_port_config:
12+
baudrate: 57600
13+
bits: 9

0 commit comments

Comments
 (0)