Skip to content

Allow port, protocol and port settings to be specified in profiles. #2717

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 8 commits into from
Oct 7, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
fix: Moved port-from-profile logic in args.Port.GetPort(...)
This allows to implement the selection logic on more commands.
  • Loading branch information
cmaglie committed Oct 4, 2024
commit 776736a60aa0e8d999f60ae163565d6764704874
8 changes: 1 addition & 7 deletions internal/cli/arguments/fqbn.go
Original file line number Diff line number Diff line change
Expand Up @@ -87,13 +87,7 @@ func CalculateFQBNAndPort(ctx context.Context, portArgs *Port, fqbnArg *Fqbn, in
return fqbn, port
}

if profile.GetPort() != "" {
defaultAddress = profile.GetPort()
}
if profile.GetProtocol() != "" {
defaultProtocol = profile.GetProtocol()
}
port, err := portArgs.GetPort(ctx, instance, srv, defaultAddress, defaultProtocol)
port, err := portArgs.GetPort(ctx, instance, srv, defaultAddress, defaultProtocol, profile)
if err != nil {
feedback.Fatal(i18n.Tr("Error getting port metadata: %v", err), feedback.ErrGeneric)
}
Expand Down
12 changes: 9 additions & 3 deletions internal/cli/arguments/port.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,12 +57,12 @@ func (p *Port) AddToCommand(cmd *cobra.Command, srv rpc.ArduinoCoreServiceServer
// This method allows will bypass the discoveries if:
// - a nil instance is passed: in this case the plain port and protocol arguments are returned (even if empty)
// - a protocol is specified: in this case the discoveries are not needed to autodetect the protocol.
func (p *Port) GetPortAddressAndProtocol(ctx context.Context, instance *rpc.Instance, srv rpc.ArduinoCoreServiceServer, defaultAddress, defaultProtocol string) (string, string, error) {
func (p *Port) GetPortAddressAndProtocol(ctx context.Context, instance *rpc.Instance, srv rpc.ArduinoCoreServiceServer, defaultAddress, defaultProtocol string, profile *rpc.SketchProfile) (string, string, error) {
if p.protocol != "" || instance == nil {
return p.address, p.protocol, nil
}

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

// GetPort returns the Port obtained by parsing command line arguments.
// The extra metadata for the ports is obtained using the pluggable discoveries.
func (p *Port) GetPort(ctx context.Context, instance *rpc.Instance, srv rpc.ArduinoCoreServiceServer, defaultAddress, defaultProtocol string) (*rpc.Port, error) {
func (p *Port) GetPort(ctx context.Context, instance *rpc.Instance, srv rpc.ArduinoCoreServiceServer, defaultAddress, defaultProtocol string, profile *rpc.SketchProfile) (*rpc.Port, error) {
if profile.GetPort() != "" {
defaultAddress = profile.GetPort()
}
if profile.GetProtocol() != "" {
defaultProtocol = profile.GetProtocol()
}
address := p.address
protocol := p.protocol
if address == "" && (defaultAddress != "" || defaultProtocol != "") {
Expand Down
2 changes: 1 addition & 1 deletion internal/cli/board/attach.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ func initAttachCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command {
func runAttachCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer, path string, port *arguments.Port, fqbn string, programmer *arguments.Programmer) {
sketchPath := arguments.InitSketchPath(path)

portAddress, portProtocol, _ := port.GetPortAddressAndProtocol(ctx, nil, srv, "", "")
portAddress, portProtocol, _ := port.GetPortAddressAndProtocol(ctx, nil, srv, "", "", nil)
newDefaults, err := srv.SetSketchDefaults(ctx, &rpc.SetSketchDefaultsRequest{
SketchPath: sketchPath.String(),
DefaultFqbn: fqbn,
Expand Down
2 changes: 1 addition & 1 deletion internal/cli/burnbootloader/burnbootloader.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ func runBootloaderCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer)
logrus.Info("Executing `arduino-cli burn-bootloader`")

// We don't need a Sketch to upload a board's bootloader
discoveryPort, err := port.GetPort(ctx, instance, srv, "", "")
discoveryPort, err := port.GetPort(ctx, instance, srv, "", "", nil)
if err != nil {
feedback.Fatal(i18n.Tr("Error during Upload: %v", err), feedback.ErrGeneric)
}
Expand Down
2 changes: 1 addition & 1 deletion internal/cli/debug/debug_check.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ func runDebugCheckCommand(ctx context.Context, srv rpc.ArduinoCoreServiceServer,
instance := instance.CreateAndInit(ctx, srv)
logrus.Info("Executing `arduino-cli debug`")

port, err := portArgs.GetPort(ctx, instance, srv, "", "")
port, err := portArgs.GetPort(ctx, instance, srv, "", "", nil)
if err != nil {
feedback.FatalError(err, feedback.ErrBadArgument)
}
Expand Down
2 changes: 1 addition & 1 deletion internal/cli/monitor/monitor.go
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ func runMonitorCmd(
if sketch != nil {
defaultPort, defaultProtocol = sketch.GetDefaultPort(), sketch.GetDefaultProtocol()
}
portAddress, portProtocol, err := portArgs.GetPortAddressAndProtocol(ctx, inst, srv, defaultPort, defaultProtocol)
portAddress, portProtocol, err := portArgs.GetPortAddressAndProtocol(ctx, inst, srv, defaultPort, defaultProtocol, profile)
if err != nil {
feedback.FatalError(err, feedback.ErrGeneric)
}
Expand Down
112 changes: 112 additions & 0 deletions internal/integrationtest/monitor/monitor_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,8 @@ yun.serial.disableDTR=true
sketchWithPort := getSketchPath("SketchWithDefaultPort")
sketchWithFQBN := getSketchPath("SketchWithDefaultFQBN")
sketchWithPortAndFQBN := getSketchPath("SketchWithDefaultPortAndFQBN")
sketchWithPortAndConfig := getSketchPath("SketchWithDefaultPortAndConfig")
sketchWithPortAndConfigAndProfile := getSketchPath("SketchWithDefaultPortAndConfigAndProfile")

t.Run("NoFlags", func(t *testing.T) {
t.Run("NoDefaultPortNoDefaultFQBN", func(t *testing.T) {
Expand Down Expand Up @@ -161,6 +163,30 @@ yun.serial.disableDTR=true
require.Error(t, err)
require.Contains(t, string(stderr), "not an FQBN: broken_fqbn")
})

t.Run("WithDefaultPortAndConfig", func(t *testing.T) {
stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "--raw", sketchWithPortAndConfig)
require.NoError(t, err)
require.Contains(t, string(stdout), "Opened port: /dev/ttyDEF")
require.Contains(t, string(stdout), "Configuration rts = on")
require.Contains(t, string(stdout), "Configuration dtr = on")
require.Contains(t, string(stdout), "Configuration baudrate = 57600")
require.Contains(t, string(stdout), "Configuration bits = 9")
require.Contains(t, string(stdout), "Configuration parity = none")
require.Contains(t, string(stdout), "Configuration stop_bits = 1")
})

t.Run("WithDefaultPortAndConfigAndProfile", func(t *testing.T) {
stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "--raw", sketchWithPortAndConfigAndProfile)
require.NoError(t, err)
require.Contains(t, string(stdout), "Opened port: /dev/ttyDEF")
require.Contains(t, string(stdout), "Configuration rts = on")
require.Contains(t, string(stdout), "Configuration dtr = on")
require.Contains(t, string(stdout), "Configuration baudrate = 57600")
require.Contains(t, string(stdout), "Configuration bits = 9")
require.Contains(t, string(stdout), "Configuration parity = none")
require.Contains(t, string(stdout), "Configuration stop_bits = 1")
})
})

t.Run("WithPortFlag", func(t *testing.T) {
Expand Down Expand Up @@ -202,6 +228,30 @@ yun.serial.disableDTR=true
require.Error(t, err)
require.Contains(t, string(stderr), "not an FQBN: broken_fqbn")
})

t.Run("WithDefaultPortAndConfig", func(t *testing.T) {
stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARGS", "--raw", sketchWithPortAndConfig)
require.NoError(t, err)
require.Contains(t, string(stdout), "Opened port: /dev/ttyARGS")
require.Contains(t, string(stdout), "Configuration rts = on")
require.Contains(t, string(stdout), "Configuration dtr = on")
require.Contains(t, string(stdout), "Configuration baudrate = 57600")
require.Contains(t, string(stdout), "Configuration bits = 9")
require.Contains(t, string(stdout), "Configuration parity = none")
require.Contains(t, string(stdout), "Configuration stop_bits = 1")
})

t.Run("WithDefaultPortAndConfigAndProfile", func(t *testing.T) {
stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARGS", "--raw", sketchWithPortAndConfigAndProfile)
require.NoError(t, err)
require.Contains(t, string(stdout), "Opened port: /dev/ttyARGS")
require.Contains(t, string(stdout), "Configuration rts = on")
require.Contains(t, string(stdout), "Configuration dtr = on")
require.Contains(t, string(stdout), "Configuration baudrate = 57600")
require.Contains(t, string(stdout), "Configuration bits = 9")
require.Contains(t, string(stdout), "Configuration parity = none")
require.Contains(t, string(stdout), "Configuration stop_bits = 1")
})
})

t.Run("WithFQBNFlag", func(t *testing.T) {
Expand Down Expand Up @@ -240,6 +290,30 @@ yun.serial.disableDTR=true
require.Contains(t, string(stdout), "Configuration rts = off")
require.Contains(t, string(stdout), "Configuration dtr = on")
})

t.Run("WithDefaultPortAndConfig", func(t *testing.T) {
stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-b", "arduino:avr:uno", "--raw", "--profile", "profile1", sketchWithPortAndConfig)
require.NoError(t, err)
require.Contains(t, string(stdout), "Opened port: /dev/ttyDEF")
require.Contains(t, string(stdout), "Configuration rts = off")
require.Contains(t, string(stdout), "Configuration dtr = on")
require.Contains(t, string(stdout), "Configuration baudrate = 57600")
require.Contains(t, string(stdout), "Configuration bits = 9")
require.Contains(t, string(stdout), "Configuration parity = none")
require.Contains(t, string(stdout), "Configuration stop_bits = 1")
})

t.Run("WithDefaultPortAndConfigAndProfile", func(t *testing.T) {
stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-b", "arduino:avr:uno", "--raw", "--profile", "profile1", sketchWithPortAndConfigAndProfile)
require.NoError(t, err)
require.Contains(t, string(stdout), "Opened port: /dev/ttyDEF")
require.Contains(t, string(stdout), "Configuration rts = off")
require.Contains(t, string(stdout), "Configuration dtr = on")
require.Contains(t, string(stdout), "Configuration baudrate = 57600")
require.Contains(t, string(stdout), "Configuration bits = 9")
require.Contains(t, string(stdout), "Configuration parity = none")
require.Contains(t, string(stdout), "Configuration stop_bits = 1")
})
})

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

t.Run("WithDefaultPortAndConfig", func(t *testing.T) {
stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARGS", "-b", "arduino:avr:uno", "--raw", sketchWithPortAndConfig)
require.NoError(t, err)
require.Contains(t, string(stdout), "Opened port: /dev/ttyARGS")
require.Contains(t, string(stdout), "Configuration rts = off")
require.Contains(t, string(stdout), "Configuration dtr = on")
require.Contains(t, string(stdout), "Configuration baudrate = 57600")
require.Contains(t, string(stdout), "Configuration bits = 9")
require.Contains(t, string(stdout), "Configuration parity = none")
require.Contains(t, string(stdout), "Configuration stop_bits = 1")
})

t.Run("WithDefaultPortAndConfigAndProfile", func(t *testing.T) {
stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARGS", "-b", "arduino:avr:uno", "--raw", sketchWithPortAndConfigAndProfile)
require.NoError(t, err)
require.Contains(t, string(stdout), "Opened port: /dev/ttyARGS")
require.Contains(t, string(stdout), "Configuration rts = off")
require.Contains(t, string(stdout), "Configuration dtr = on")
require.Contains(t, string(stdout), "Configuration baudrate = 57600")
require.Contains(t, string(stdout), "Configuration bits = 9")
require.Contains(t, string(stdout), "Configuration parity = none")
require.Contains(t, string(stdout), "Configuration stop_bits = 1")
})

t.Run("IgnoreProfile", func(t *testing.T) {
stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-p", "/dev/ttyARGS", "-b", "arduino:avr:uno", "--raw", "--profile", "profile1", sketchWithPortAndFQBN)
require.NoError(t, err)
Expand All @@ -283,4 +381,18 @@ yun.serial.disableDTR=true
require.Contains(t, string(stdout), "Configuration dtr = on")
})
})

t.Run("WithProfileFlags", func(t *testing.T) {
t.Run("NoOtherArgs", func(t *testing.T) {
stdout, _, err := cli.RunWithCustomInput(quitMonitor(), "monitor", "-m", "uno", "--raw", sketchWithPortAndConfigAndProfile)
require.NoError(t, err)
require.Contains(t, string(stdout), "Opened port: /dev/ttyPROF")
require.Contains(t, string(stdout), "Configuration rts = on") // This is taken from profile-installed AVR core (not patched by this test)
require.Contains(t, string(stdout), "Configuration dtr = on")
require.Contains(t, string(stdout), "Configuration baudrate = 19200")
require.Contains(t, string(stdout), "Configuration bits = 8")
require.Contains(t, string(stdout), "Configuration parity = none")
require.Contains(t, string(stdout), "Configuration stop_bits = 1")
})
})
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@

void setup() {}
void loop() {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
default_port: /dev/ttyDEF
default_port_config:
baudrate: 57600
bits: 9
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@

void setup() {}
void loop() {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
profiles:
uno:
fqbn: arduino:avr:uno
platforms:
- platform: arduino:avr (1.8.6)
port: /dev/ttyPROF
port_config:
baudrate: 19200

default_port: /dev/ttyDEF
default_port_config:
baudrate: 57600
bits: 9
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy