@@ -27,14 +27,15 @@ 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"
34
34
"github.com/arduino/arduino-cli/internal/cli/feedback"
35
35
"github.com/arduino/arduino-cli/internal/cli/instance"
36
36
rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1"
37
37
"github.com/arduino/arduino-cli/table"
38
+ "github.com/arduino/go-paths-helper"
38
39
"github.com/fatih/color"
39
40
"github.com/sirupsen/logrus"
40
41
"github.com/spf13/cobra"
@@ -46,14 +47,14 @@ var tr = i18n.Tr
46
47
// NewCommand created a new `monitor` command
47
48
func NewCommand () * cobra.Command {
48
49
var (
49
- raw bool
50
50
portArgs arguments.Port
51
+ fqbnArg arguments.Fqbn
52
+ profileArg arguments.Profile
53
+ raw bool
51
54
describe bool
52
55
configs []string
53
56
quiet bool
54
57
timestamp bool
55
- fqbn arguments.Fqbn
56
- sketchPath string
57
58
)
58
59
monitorCommand := & cobra.Command {
59
60
Use : "monitor" ,
@@ -63,47 +64,76 @@ func NewCommand() *cobra.Command {
63
64
" " + os .Args [0 ] + " monitor -p /dev/ttyACM0\n " +
64
65
" " + os .Args [0 ] + " monitor -p /dev/ttyACM0 --describe" ,
65
66
Run : func (cmd * cobra.Command , args []string ) {
66
- runMonitorCmd (& portArgs , & fqbn , configs , describe , timestamp , quiet , raw , sketchPath )
67
+ sketchPath := ""
68
+ if len (args ) > 0 {
69
+ sketchPath = args [0 ]
70
+ }
71
+ var portProvidedFromFlag bool
72
+ if p := cmd .Flags ().Lookup ("port" ); p != nil && p .Changed {
73
+ portProvidedFromFlag = true
74
+ }
75
+ runMonitorCmd (& portArgs , & fqbnArg , & profileArg , sketchPath , configs , describe , timestamp , quiet , raw , portProvidedFromFlag )
67
76
},
68
77
}
69
78
portArgs .AddToCommand (monitorCommand )
79
+ profileArg .AddToCommand (monitorCommand )
70
80
monitorCommand .Flags ().BoolVar (& raw , "raw" , false , tr ("Set terminal in raw mode (unbuffered)." ))
71
81
monitorCommand .Flags ().BoolVar (& describe , "describe" , false , tr ("Show all the settings of the communication port." ))
72
82
monitorCommand .Flags ().StringSliceVarP (& configs , "config" , "c" , []string {}, tr ("Configure communication port settings. The format is <ID>=<value>[,<ID>=<value>]..." ))
73
83
monitorCommand .Flags ().BoolVarP (& quiet , "quiet" , "q" , false , tr ("Run in silent mode, show only monitor input and output." ))
74
84
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 )
85
+ fqbnArg .AddToCommand (monitorCommand )
77
86
return monitorCommand
78
87
}
79
88
80
- func runMonitorCmd (portArgs * arguments.Port , fqbn * arguments.Fqbn , configs []string , describe , timestamp , quiet , raw bool , sketchPath string ) {
81
- instance := instance .CreateAndInit ()
89
+ func runMonitorCmd (
90
+ portArgs * arguments.Port , fqbnArg * arguments.Fqbn , profileArg * arguments.Profile , sketchPathArg string ,
91
+ configs []string , describe , timestamp , quiet , raw bool , portProvidedFromFlag bool ,
92
+ ) {
82
93
logrus .Info ("Executing `arduino-cli monitor`" )
83
94
84
95
if ! configuration .HasConsole {
85
96
quiet = true
86
97
}
87
98
88
- addressDefault := ""
89
- protocolDefault := ""
90
- if sketchPath != "" {
91
- sketch , err := sketch .LoadSketch (context .Background (), & rpc.LoadSketchRequest {SketchPath : sketchPath })
99
+ var (
100
+ inst * rpc.Instance
101
+ sketchPath * paths.Path
102
+ defaultFQBN , defaultPort , defaultProtocol string
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
+ )
94
112
}
95
- addressDefault = sketch .GetDefaultPort ()
96
- protocolDefault = sketch .GetDefaultProtocol ()
97
- }
98
- portAddress , portProtocol , err := portArgs .GetPortAddressAndProtocol (instance , addressDefault , protocolDefault )
99
- if err != nil {
100
- feedback .FatalError (err , feedback .ErrGeneric )
113
+
114
+ var profile * rpc.Profile
115
+ if profileArg .Get () == "" {
116
+ inst , profile = instance .CreateAndInitWithProfile (sketch .GetDefaultProfile ().GetName (), sketchPath )
117
+ } else {
118
+ inst , profile = instance .CreateAndInitWithProfile (profileArg .Get (), sketchPath )
119
+ }
120
+ if fqbnArg .String () == "" {
121
+ fqbnArg .Set (profile .GetFqbn ())
122
+ }
123
+
124
+ defaultFQBN = sketch .GetDefaultFqbn ()
125
+ defaultPort = sketch .GetDefaultPort ()
126
+ defaultProtocol = sketch .GetDefaultProtocol ()
127
+ } else {
128
+ inst = instance .CreateAndInit ()
101
129
}
130
+ fqbn , port := arguments .CalculateFQBNAndPort (portArgs , fqbnArg , inst , defaultFQBN , defaultPort , defaultProtocol )
131
+ portAddress , portProtocol := port .GetAddress (), port .GetProtocol ()
102
132
103
133
enumerateResp , err := monitor .EnumerateMonitorPortSettings (context .Background (), & rpc.EnumerateMonitorPortSettingsRequest {
104
- Instance : instance ,
134
+ Instance : inst ,
105
135
PortProtocol : portProtocol ,
106
- Fqbn : fqbn . String () ,
136
+ Fqbn : fqbn ,
107
137
})
108
138
if err != nil {
109
139
feedback .Fatal (tr ("Error getting port settings details: %s" , err ), feedback .ErrGeneric )
@@ -155,9 +185,9 @@ func runMonitorCmd(portArgs *arguments.Port, fqbn *arguments.Fqbn, configs []str
155
185
}
156
186
}
157
187
portProxy , _ , err := monitor .Monitor (context .Background (), & rpc.MonitorRequest {
158
- Instance : instance ,
188
+ Instance : inst ,
159
189
Port : & rpc.Port {Address : portAddress , Protocol : portProtocol },
160
- Fqbn : fqbn . String () ,
190
+ Fqbn : fqbn ,
161
191
PortConfiguration : configuration ,
162
192
})
163
193
if err != nil {
0 commit comments