@@ -27,7 +27,7 @@ import (
2727 "time"
2828
2929 "github.com/arduino/arduino-cli/commands/monitor"
30- "github.com/arduino/arduino-cli/commands/sketch"
30+ sk "github.com/arduino/arduino-cli/commands/sketch"
3131 "github.com/arduino/arduino-cli/configuration"
3232 "github.com/arduino/arduino-cli/i18n"
3333 "github.com/arduino/arduino-cli/internal/cli/arguments"
@@ -46,14 +46,14 @@ var tr = i18n.Tr
4646// NewCommand created a new `monitor` command
4747func NewCommand () * cobra.Command {
4848 var (
49- raw bool
5049 portArgs arguments.Port
50+ fqbnArg arguments.Fqbn
51+ profileArg arguments.Profile
52+ raw bool
5153 describe bool
5254 configs []string
5355 quiet bool
5456 timestamp bool
55- fqbn arguments.Fqbn
56- sketchPath string
5757 )
5858 monitorCommand := & cobra.Command {
5959 Use : "monitor" ,
@@ -63,47 +63,91 @@ func NewCommand() *cobra.Command {
6363 " " + os .Args [0 ] + " monitor -p /dev/ttyACM0\n " +
6464 " " + os .Args [0 ] + " monitor -p /dev/ttyACM0 --describe" ,
6565 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 )
6775 },
6876 }
6977 portArgs .AddToCommand (monitorCommand )
78+ profileArg .AddToCommand (monitorCommand )
7079 monitorCommand .Flags ().BoolVar (& raw , "raw" , false , tr ("Set terminal in raw mode (unbuffered)." ))
7180 monitorCommand .Flags ().BoolVar (& describe , "describe" , false , tr ("Show all the settings of the communication port." ))
7281 monitorCommand .Flags ().StringSliceVarP (& configs , "config" , "c" , []string {}, tr ("Configure communication port settings. The format is <ID>=<value>[,<ID>=<value>]..." ))
7382 monitorCommand .Flags ().BoolVarP (& quiet , "quiet" , "q" , false , tr ("Run in silent mode, show only monitor input and output." ))
7483 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 )
7785 return monitorCommand
7886}
7987
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+ ) {
8292 logrus .Info ("Executing `arduino-cli monitor`" )
8393
8494 if ! configuration .HasConsole {
8595 quiet = true
8696 }
8797
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 ()})
92107 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 )
94137 }
95- addressDefault = sketch .GetDefaultPort ()
96- protocolDefault = sketch .GetDefaultProtocol ()
138+ } else {
139+ inst = instance .CreateAndInit ()
140+ fqbn = fqbnArg .String ()
97141 }
98- portAddress , portProtocol , err := portArgs .GetPortAddressAndProtocol (instance , addressDefault , protocolDefault )
142+ portAddress , portProtocol , err := portArgs .GetPortAddressAndProtocol (inst , defaultPort , defaultProtocol )
99143 if err != nil {
100144 feedback .FatalError (err , feedback .ErrGeneric )
101145 }
102146
103147 enumerateResp , err := monitor .EnumerateMonitorPortSettings (context .Background (), & rpc.EnumerateMonitorPortSettingsRequest {
104- Instance : instance ,
148+ Instance : inst ,
105149 PortProtocol : portProtocol ,
106- Fqbn : fqbn . String () ,
150+ Fqbn : fqbn ,
107151 })
108152 if err != nil {
109153 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
155199 }
156200 }
157201 portProxy , _ , err := monitor .Monitor (context .Background (), & rpc.MonitorRequest {
158- Instance : instance ,
202+ Instance : inst ,
159203 Port : & rpc.Port {Address : portAddress , Protocol : portProtocol },
160- Fqbn : fqbn . String () ,
204+ Fqbn : fqbn ,
161205 PortConfiguration : configuration ,
162206 })
163207 if err != nil {
0 commit comments