Skip to content

Commit 6861a01

Browse files
cmaglied-a-v
authored andcommitted
Add --quiet and --config flags (arduino#1497)
* Added silent mode for monitor * Added --config flag to monitor command * fix i18n * Applied review suggestions * rename --silent to --quiet * removed useless 'settings' variable * translation string for "Monitor port settings" in CLI mode
1 parent 7998652 commit 6861a01

File tree

3 files changed

+113
-19
lines changed

3 files changed

+113
-19
lines changed

Diff for: cli/monitor/monitor.go

+78-4
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package monitor
1818
import (
1919
"context"
2020
"errors"
21+
"fmt"
2122
"io"
2223
"os"
2324
"sort"
@@ -28,6 +29,7 @@ import (
2829
"github.com/arduino/arduino-cli/cli/feedback"
2930
"github.com/arduino/arduino-cli/cli/instance"
3031
"github.com/arduino/arduino-cli/commands/monitor"
32+
"github.com/arduino/arduino-cli/configuration"
3133
"github.com/arduino/arduino-cli/i18n"
3234
rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1"
3335
"github.com/arduino/arduino-cli/table"
@@ -39,6 +41,8 @@ var tr = i18n.Tr
3941

4042
var portArgs arguments.Port
4143
var describe bool
44+
var configs []string
45+
var quiet bool
4246

4347
// NewCommand created a new `monitor` command
4448
func NewCommand() *cobra.Command {
@@ -53,13 +57,19 @@ func NewCommand() *cobra.Command {
5357
}
5458
portArgs.AddToCommand(cmd)
5559
cmd.Flags().BoolVar(&describe, "describe", false, tr("Show all the settings of the communication port."))
60+
cmd.Flags().StringSliceVarP(&configs, "config", "c", []string{}, tr("Configuration of the port."))
61+
cmd.Flags().BoolVarP(&quiet, "quiet", "q", false, tr("Run in silent mode, show only monitor input and output."))
5662
cmd.MarkFlagRequired("port")
5763
return cmd
5864
}
5965

6066
func runMonitorCmd(cmd *cobra.Command, args []string) {
6167
instance := instance.CreateAndInit()
6268

69+
if !configuration.HasConsole {
70+
quiet = true
71+
}
72+
6373
port, err := portArgs.GetPort(instance, nil)
6474
if err != nil {
6575
feedback.Error(err)
@@ -87,10 +97,63 @@ func runMonitorCmd(cmd *cobra.Command, args []string) {
8797
}
8898
defer tty.Close()
8999

100+
configuration := &rpc.MonitorPortConfiguration{}
101+
if len(configs) > 0 {
102+
resp, err := monitor.EnumerateMonitorPortSettings(context.Background(), &rpc.EnumerateMonitorPortSettingsRequest{
103+
Instance: instance,
104+
Port: port.ToRPC(),
105+
Fqbn: "",
106+
})
107+
if err != nil {
108+
feedback.Error(err)
109+
os.Exit(errorcodes.ErrGeneric)
110+
}
111+
for _, config := range configs {
112+
split := strings.SplitN(config, "=", 2)
113+
k := ""
114+
v := config
115+
if len(split) == 2 {
116+
k = split[0]
117+
v = split[1]
118+
}
119+
120+
var setting *rpc.MonitorPortSettingDescriptor
121+
for _, s := range resp.GetSettings() {
122+
if k == "" {
123+
if contains(s.EnumValues, v) {
124+
setting = s
125+
break
126+
}
127+
} else {
128+
if strings.EqualFold(s.SettingId, k) {
129+
if !contains(s.EnumValues, v) {
130+
feedback.Error(tr("invalid port configuration value for %s: %s", k, v))
131+
os.Exit(errorcodes.ErrBadArgument)
132+
}
133+
setting = s
134+
break
135+
}
136+
}
137+
}
138+
if setting == nil {
139+
feedback.Error(tr("invalid port configuration: %s", config))
140+
os.Exit(errorcodes.ErrBadArgument)
141+
}
142+
configuration.Settings = append(configuration.Settings, &rpc.MonitorPortSetting{
143+
SettingId: setting.SettingId,
144+
Value: v,
145+
})
146+
if !quiet {
147+
feedback.Print(tr("Monitor port settings:"))
148+
feedback.Print(fmt.Sprintf("%s=%s", setting.SettingId, v))
149+
}
150+
}
151+
}
90152
portProxy, _, err := monitor.Monitor(context.Background(), &rpc.MonitorRequest{
91-
Instance: instance,
92-
Port: port.ToRPC(),
93-
Fqbn: "",
153+
Instance: instance,
154+
Port: port.ToRPC(),
155+
Fqbn: "",
156+
PortConfiguration: configuration,
94157
})
95158
if err != nil {
96159
feedback.Error(err)
@@ -114,7 +177,9 @@ func runMonitorCmd(cmd *cobra.Command, args []string) {
114177
cancel()
115178
}()
116179

117-
feedback.Print(tr("Connected to %s! Press CTRL-C to exit.", port.String()))
180+
if !quiet {
181+
feedback.Print(tr("Connected to %s! Press CTRL-C to exit.", port.String()))
182+
}
118183

119184
// Wait for port closed
120185
<-ctx.Done()
@@ -141,3 +206,12 @@ func (r *detailsResult) String() string {
141206
}
142207
return t.Render()
143208
}
209+
210+
func contains(s []string, searchterm string) bool {
211+
for _, item := range s {
212+
if strings.EqualFold(item, searchterm) {
213+
return true
214+
}
215+
}
216+
return false
217+
}

Diff for: i18n/data/en.po

+31-11
Original file line numberDiff line numberDiff line change
@@ -407,6 +407,10 @@ msgstr "Config file already exists, use --overwrite to discard the existing one.
407407
msgid "Config file written to: %s"
408408
msgstr "Config file written to: %s"
409409

410+
#: cli/monitor/monitor.go:60
411+
msgid "Configuration of the port."
412+
msgstr "Configuration of the port."
413+
410414
#: cli/debug/debug.go:153
411415
msgid "Configuration options for %s"
412416
msgstr "Configuration options for %s"
@@ -423,7 +427,7 @@ msgstr "Configuring platform."
423427
msgid "Connected"
424428
msgstr "Connected"
425429

426-
#: cli/monitor/monitor.go:117
430+
#: cli/monitor/monitor.go:181
427431
msgid "Connected to %s! Press CTRL-C to exit."
428432
msgstr "Connected to %s! Press CTRL-C to exit."
429433

@@ -500,7 +504,7 @@ msgstr "Debugging not supported for board %s"
500504
msgid "Debugging supported:"
501505
msgstr "Debugging supported:"
502506

503-
#: cli/monitor/monitor.go:134
507+
#: cli/monitor/monitor.go:199
504508
msgid "Default"
505509
msgstr "Default"
506510

@@ -786,7 +790,7 @@ msgstr "Error getting information for library %s"
786790
msgid "Error getting libraries info: %v"
787791
msgstr "Error getting libraries info: %v"
788792

789-
#: cli/monitor/monitor.go:76
793+
#: cli/monitor/monitor.go:86
790794
msgid "Error getting port settings details: %s"
791795
msgstr "Error getting port settings details: %s"
792796

@@ -1134,7 +1138,7 @@ msgstr "Global variables use {0} bytes of dynamic memory."
11341138

11351139
#: cli/core/list.go:84
11361140
#: cli/core/search.go:114
1137-
#: cli/monitor/monitor.go:134
1141+
#: cli/monitor/monitor.go:199
11381142
#: cli/outdated/outdated.go:62
11391143
msgid "ID"
11401144
msgstr "ID"
@@ -1471,6 +1475,10 @@ msgstr "Missing sketch path"
14711475
msgid "Monitor '%s' not found"
14721476
msgstr "Monitor '%s' not found"
14731477

1478+
#: cli/monitor/monitor.go:147
1479+
msgid "Monitor port settings:"
1480+
msgstr "Monitor port settings:"
1481+
14741482
#: legacy/builder/print_used_and_not_used_libraries.go:50
14751483
msgid "Multiple libraries were found for \"{0}\""
14761484
msgstr "Multiple libraries were found for \"{0}\""
@@ -1572,8 +1580,8 @@ msgstr "OS:"
15721580
msgid "Official Arduino board:"
15731581
msgstr "Official Arduino board:"
15741582

1575-
#: cli/monitor/monitor.go:47
1576-
#: cli/monitor/monitor.go:48
1583+
#: cli/monitor/monitor.go:51
1584+
#: cli/monitor/monitor.go:52
15771585
msgid "Open a communication port with a board."
15781586
msgstr "Open a communication port with a board."
15791587

@@ -1723,8 +1731,8 @@ msgstr "Platform size (bytes):"
17231731
msgid "Port"
17241732
msgstr "Port"
17251733

1726-
#: cli/monitor/monitor.go:105
1727-
#: cli/monitor/monitor.go:112
1734+
#: cli/monitor/monitor.go:168
1735+
#: cli/monitor/monitor.go:175
17281736
msgid "Port closed:"
17291737
msgstr "Port closed:"
17301738

@@ -1807,6 +1815,10 @@ msgstr "Required tool:"
18071815
msgid "Run as a daemon on port: %s"
18081816
msgstr "Run as a daemon on port: %s"
18091817

1818+
#: cli/monitor/monitor.go:61
1819+
msgid "Run in silent mode, show only monitor input and output."
1820+
msgstr "Run in silent mode, show only monitor input and output."
1821+
18101822
#: cli/daemon/daemon.go:51
18111823
msgid "Running as a daemon the initialization of cores and libraries is done only once."
18121824
msgstr "Running as a daemon the initialization of cores and libraries is done only once."
@@ -1861,7 +1873,7 @@ msgstr "Sets a setting value."
18611873
msgid "Sets where to save the configuration file."
18621874
msgstr "Sets where to save the configuration file."
18631875

1864-
#: cli/monitor/monitor.go:134
1876+
#: cli/monitor/monitor.go:199
18651877
msgid "Setting"
18661878
msgstr "Setting"
18671879

@@ -1878,7 +1890,7 @@ msgstr "Show all available core versions."
18781890
msgid "Show all build properties used instead of compiling."
18791891
msgstr "Show all build properties used instead of compiling."
18801892

1881-
#: cli/monitor/monitor.go:55
1893+
#: cli/monitor/monitor.go:59
18821894
msgid "Show all the settings of the communication port."
18831895
msgstr "Show all the settings of the communication port."
18841896

@@ -2336,7 +2348,7 @@ msgstr "VERSION"
23362348
msgid "VERSION_NUMBER"
23372349
msgstr "VERSION_NUMBER"
23382350

2339-
#: cli/monitor/monitor.go:134
2351+
#: cli/monitor/monitor.go:199
23402352
msgid "Values"
23412353
msgstr "Values"
23422354

@@ -2843,6 +2855,14 @@ msgstr "invalid platform archive size: %s"
28432855
msgid "invalid pluggable monitor reference: %s"
28442856
msgstr "invalid pluggable monitor reference: %s"
28452857

2858+
#: cli/monitor/monitor.go:130
2859+
msgid "invalid port configuration value for %s: %s"
2860+
msgstr "invalid port configuration value for %s: %s"
2861+
2862+
#: cli/monitor/monitor.go:139
2863+
msgid "invalid port configuration: %s"
2864+
msgstr "invalid port configuration: %s"
2865+
28462866
#: commands/upload/upload.go:483
28472867
msgid "invalid recipe '%[1]s': %[2]s"
28482868
msgstr "invalid recipe '%[1]s': %[2]s"

Diff for: i18n/rice-box.go

+4-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)