@@ -27,7 +27,7 @@ import (
27
27
"time"
28
28
29
29
"github.com/arduino/arduino-cli/commands/monitor"
30
- "github.com/arduino/arduino-cli/commands/sketch"
30
+ sk "github.com/arduino/arduino-cli/commands/sketch"
31
31
"github.com/arduino/arduino-cli/configuration"
32
32
"github.com/arduino/arduino-cli/i18n"
33
33
"github.com/arduino/arduino-cli/internal/cli/arguments"
@@ -46,14 +46,14 @@ var tr = i18n.Tr
46
46
// NewCommand created a new `monitor` command
47
47
func NewCommand () * cobra.Command {
48
48
var (
49
- raw bool
50
49
portArgs arguments.Port
50
+ fqbnArg arguments.Fqbn
51
+ profileArg arguments.Profile
52
+ raw bool
51
53
describe bool
52
54
configs []string
53
55
quiet bool
54
56
timestamp bool
55
- fqbn arguments.Fqbn
56
- sketchPath string
57
57
)
58
58
monitorCommand := & cobra.Command {
59
59
Use : "monitor" ,
@@ -63,47 +63,91 @@ func NewCommand() *cobra.Command {
63
63
" " + os .Args [0 ] + " monitor -p /dev/ttyACM0\n " +
64
64
" " + os .Args [0 ] + " monitor -p /dev/ttyACM0 --describe" ,
65
65
Run : func (cmd * cobra.Command , args []string ) {
66
- runMonitorCmd (& portArgs , & fqbn , configs , describe , timestamp , quiet , raw , sketchPath )
66
+ sketchPath := ""
67
+ if len (args ) > 0 {
68
+ sketchPath = args [0 ]
69
+ }
70
+ var portProvidedFromFlag bool
71
+ if p := cmd .Flags ().Lookup ("port" ); p != nil && p .Changed {
72
+ portProvidedFromFlag = true
73
+ }
74
+ runMonitorCmd (& portArgs , & fqbnArg , & profileArg , sketchPath , configs , describe , timestamp , quiet , raw , portProvidedFromFlag )
67
75
},
68
76
}
69
77
portArgs .AddToCommand (monitorCommand )
78
+ profileArg .AddToCommand (monitorCommand )
70
79
monitorCommand .Flags ().BoolVar (& raw , "raw" , false , tr ("Set terminal in raw mode (unbuffered)." ))
71
80
monitorCommand .Flags ().BoolVar (& describe , "describe" , false , tr ("Show all the settings of the communication port." ))
72
81
monitorCommand .Flags ().StringSliceVarP (& configs , "config" , "c" , []string {}, tr ("Configure communication port settings. The format is <ID>=<value>[,<ID>=<value>]..." ))
73
82
monitorCommand .Flags ().BoolVarP (& quiet , "quiet" , "q" , false , tr ("Run in silent mode, show only monitor input and output." ))
74
83
monitorCommand .Flags ().BoolVar (& timestamp , "timestamp" , false , tr ("Timestamp each incoming line." ))
75
- monitorCommand .Flags ().StringVarP (& sketchPath , "sketch" , "s" , "" , tr ("Path to the sketch" ))
76
- fqbn .AddToCommand (monitorCommand )
84
+ fqbnArg .AddToCommand (monitorCommand )
77
85
return monitorCommand
78
86
}
79
87
80
- func runMonitorCmd (portArgs * arguments.Port , fqbn * arguments.Fqbn , configs []string , describe , timestamp , quiet , raw bool , sketchPath string ) {
81
- instance := instance .CreateAndInit ()
88
+ func runMonitorCmd (
89
+ portArgs * arguments.Port , fqbnArg * arguments.Fqbn , profileArg * arguments.Profile , sketchPathArg string ,
90
+ configs []string , describe , timestamp , quiet , raw bool , portProvidedFromFlag bool ,
91
+ ) {
82
92
logrus .Info ("Executing `arduino-cli monitor`" )
83
93
84
94
if ! configuration .HasConsole {
85
95
quiet = true
86
96
}
87
97
88
- addressDefault := ""
89
- protocolDefault := ""
90
- if sketchPath != "" {
91
- sketch , err := sketch .LoadSketch (context .Background (), & rpc.LoadSketchRequest {SketchPath : sketchPath })
98
+ var (
99
+ inst * rpc.Instance
100
+ fqbn string
101
+ defaultPort , defaultProtocol string
102
+ )
103
+
104
+ if ! portProvidedFromFlag {
105
+ sketchPath := arguments .InitSketchPath (sketchPathArg )
106
+ sketch , err := sk .LoadSketch (context .Background (), & rpc.LoadSketchRequest {SketchPath : sketchPath .String ()})
92
107
if err != nil {
93
- feedback .FatalError (err , feedback .ErrGeneric )
108
+ feedback .Fatal (
109
+ tr ("Error getting default port from `sketch.yaml`. Check if you're in the correct sketch folder or provide the --port flag: %s" , err ),
110
+ feedback .ErrGeneric ,
111
+ )
112
+ }
113
+ defaultPort = sketch .GetDefaultPort ()
114
+ defaultProtocol = sketch .GetDefaultProtocol ()
115
+
116
+ var profile * rpc.Profile
117
+ if profileArg .Get () == "" {
118
+ inst , profile = instance .CreateAndInitWithProfile (sketch .GetDefaultProfile ().GetName (), sketchPath )
119
+ } else {
120
+ inst , profile = instance .CreateAndInitWithProfile (profileArg .Get (), sketchPath )
121
+ }
122
+
123
+ // Priority on how to retrieve the fqbn
124
+ // 1. from flag
125
+ // 2. from profile
126
+ // 3. from default_fqbn specified in the sketch.yaml
127
+ // 4. try to detect from the port
128
+ switch {
129
+ case fqbnArg .String () != "" :
130
+ fqbn = fqbnArg .String ()
131
+ case profile .GetFqbn () != "" :
132
+ fqbn = profile .GetFqbn ()
133
+ case sketch .GetDefaultFqbn () != "" :
134
+ fqbn = sketch .GetDefaultFqbn ()
135
+ default :
136
+ fqbn , _ = portArgs .DetectFQBN (inst )
94
137
}
95
- addressDefault = sketch .GetDefaultPort ()
96
- protocolDefault = sketch .GetDefaultProtocol ()
138
+ } else {
139
+ inst = instance .CreateAndInit ()
140
+ fqbn = fqbnArg .String ()
97
141
}
98
- portAddress , portProtocol , err := portArgs .GetPortAddressAndProtocol (instance , addressDefault , protocolDefault )
142
+ portAddress , portProtocol , err := portArgs .GetPortAddressAndProtocol (inst , defaultPort , defaultProtocol )
99
143
if err != nil {
100
144
feedback .FatalError (err , feedback .ErrGeneric )
101
145
}
102
146
103
147
enumerateResp , err := monitor .EnumerateMonitorPortSettings (context .Background (), & rpc.EnumerateMonitorPortSettingsRequest {
104
- Instance : instance ,
148
+ Instance : inst ,
105
149
PortProtocol : portProtocol ,
106
- Fqbn : fqbn . String () ,
150
+ Fqbn : fqbn ,
107
151
})
108
152
if err != nil {
109
153
feedback .Fatal (tr ("Error getting port settings details: %s" , err ), feedback .ErrGeneric )
@@ -155,9 +199,9 @@ func runMonitorCmd(portArgs *arguments.Port, fqbn *arguments.Fqbn, configs []str
155
199
}
156
200
}
157
201
portProxy , _ , err := monitor .Monitor (context .Background (), & rpc.MonitorRequest {
158
- Instance : instance ,
202
+ Instance : inst ,
159
203
Port : & rpc.Port {Address : portAddress , Protocol : portProtocol },
160
- Fqbn : fqbn . String () ,
204
+ Fqbn : fqbn ,
161
205
PortConfiguration : configuration ,
162
206
})
163
207
if err != nil {
0 commit comments