@@ -20,15 +20,18 @@ use crossterm::{
2020 terminal:: { disable_raw_mode, enable_raw_mode} ,
2121} ;
2222use external_processors:: ExternalProcessors ;
23- use log:: { debug, error} ;
23+ use log:: { debug, error, warn } ;
2424use miette:: { IntoDiagnostic , Result } ;
2525#[ cfg( feature = "serialport" ) ]
2626use serialport:: SerialPort ;
2727use strum:: { Display , EnumIter , EnumString , VariantNames } ;
2828
2929use crate :: {
3030 cli:: {
31- monitor:: parser:: { InputParser , ResolvingPrinter } ,
31+ monitor:: {
32+ parser:: { InputParser , ResolvingPrinter } ,
33+ symbols:: Symbols ,
34+ } ,
3235 MonitorConfigArgs ,
3336 } ,
3437 connection:: { reset:: reset_after_flash, Port } ,
@@ -102,7 +105,10 @@ pub fn monitor(
102105 let stdout = stdout ( ) ;
103106 let mut stdout = ResolvingPrinter :: new ( elf, stdout. lock ( ) ) ;
104107
105- let mut parser: Box < dyn InputParser > = match monitor_args. log_format {
108+ let mut parser: Box < dyn InputParser > = match monitor_args
109+ . log_format
110+ . unwrap_or_else ( || deduce_log_format ( elf) )
111+ {
106112 LogFormat :: Defmt => Box :: new ( parser:: esp_defmt:: EspDefmt :: new ( elf) ?) ,
107113 LogFormat :: Serial => Box :: new ( parser:: serial:: Serial ) ,
108114 } ;
@@ -151,6 +157,34 @@ pub fn monitor(
151157 Ok ( ( ) )
152158}
153159
160+ fn deduce_log_format ( elf : Option < & [ u8 ] > ) -> LogFormat {
161+ let Some ( elf) = elf else {
162+ return LogFormat :: Serial ;
163+ } ;
164+
165+ let Ok ( symbols) = Symbols :: try_from ( elf) else {
166+ return LogFormat :: Serial ;
167+ } ;
168+
169+ let Some ( format_symbol) =
170+ symbols. get_symbol_data ( Some ( ".espressif.metadata" ) , b"espflash.LOG_FORMAT" )
171+ else {
172+ return LogFormat :: Serial ;
173+ } ;
174+
175+ match format_symbol {
176+ b"defmt-espflash" => LogFormat :: Defmt ,
177+ b"serial" => LogFormat :: Serial ,
178+ other => {
179+ warn ! (
180+ "Unknown log format symbol: {}. Defaulting to serial." ,
181+ String :: from_utf8_lossy( other) ,
182+ ) ;
183+ LogFormat :: Serial
184+ }
185+ }
186+ }
187+
154188// Converts key events from crossterm into appropriate character/escape
155189// sequences which are then sent over the serial connection.
156190//
0 commit comments