@@ -31,6 +31,12 @@ pub struct BootloaderConfig {
3131 /// Configuration for changing the level of the filter of the messages that are shown in the
3232 /// screen when booting. The default is 'Trace'.
3333 pub log_level : LevelFilter ,
34+
35+ /// Configuration for enable or disable the framebuffer logger.
36+ pub frame_buffer_logger_status : LoggerStatus ,
37+
38+ /// Configuration for enable or disable the serial being logger.
39+ pub serial_logger_status : LoggerStatus ,
3440}
3541
3642impl BootloaderConfig {
@@ -39,7 +45,7 @@ impl BootloaderConfig {
3945 0x3D ,
4046 ] ;
4147 #[ doc( hidden) ]
42- pub const SERIALIZED_LEN : usize = 116 ;
48+ pub const SERIALIZED_LEN : usize = 118 ;
4349
4450 /// Creates a new default configuration with the following values:
4551 ///
@@ -53,6 +59,8 @@ impl BootloaderConfig {
5359 mappings : Mappings :: new_default ( ) ,
5460 frame_buffer : FrameBuffer :: new_default ( ) ,
5561 log_level : LevelFilter :: Trace ,
62+ frame_buffer_logger_status : LoggerStatus :: Enable ,
63+ serial_logger_status : LoggerStatus :: Enable ,
5664 }
5765 }
5866
@@ -67,6 +75,8 @@ impl BootloaderConfig {
6775 kernel_stack_size,
6876 frame_buffer,
6977 log_level,
78+ frame_buffer_logger_status,
79+ serial_logger_status,
7080 } = self ;
7181 let ApiVersion {
7282 version_major,
@@ -147,7 +157,15 @@ impl BootloaderConfig {
147157 } ,
148158 ) ;
149159
150- concat_115_1 ( buf, ( * log_level as u8 ) . to_le_bytes ( ) )
160+ let log_level = concat_115_1 ( buf, ( * log_level as u8 ) . to_le_bytes ( ) ) ;
161+
162+ let frame_buffer_logger_status =
163+ concat_116_1 ( log_level, ( * frame_buffer_logger_status as u8 ) . to_le_bytes ( ) ) ;
164+
165+ concat_117_1 (
166+ frame_buffer_logger_status,
167+ ( * serial_logger_status as u8 ) . to_le_bytes ( ) ,
168+ )
151169 }
152170
153171 /// Tries to deserialize a config byte array that was created using [`Self::serialize`].
@@ -267,6 +285,21 @@ impl BootloaderConfig {
267285 Option :: None => return Err ( "log_level invalid" ) ,
268286 } ;
269287
288+ let ( & frame_buffer_logger_status, s) = split_array_ref ( s) ;
289+ let frame_buffer_logger_status =
290+ LoggerStatus :: from_u8 ( u8:: from_le_bytes ( frame_buffer_logger_status) ) ;
291+ let frame_buffer_logger_status = match frame_buffer_logger_status {
292+ Option :: Some ( status) => status,
293+ Option :: None => return Err ( "frame_buffer_logger_status invalid" ) ,
294+ } ;
295+
296+ let ( & serial_logger_status, s) = split_array_ref ( s) ;
297+ let serial_logger_status = LoggerStatus :: from_u8 ( u8:: from_le_bytes ( serial_logger_status) ) ;
298+ let serial_logger_status = match serial_logger_status {
299+ Option :: Some ( status) => status,
300+ Option :: None => return Err ( "serial_logger_status invalid" ) ,
301+ } ;
302+
270303 if !s. is_empty ( ) {
271304 return Err ( "unexpected rest" ) ;
272305 }
@@ -277,6 +310,8 @@ impl BootloaderConfig {
277310 mappings,
278311 frame_buffer,
279312 log_level,
313+ frame_buffer_logger_status,
314+ serial_logger_status,
280315 } )
281316 }
282317
@@ -288,6 +323,8 @@ impl BootloaderConfig {
288323 kernel_stack_size : rand:: random ( ) ,
289324 frame_buffer : FrameBuffer :: random ( ) ,
290325 log_level : LevelFilter :: Trace ,
326+ frame_buffer_logger_status : LoggerStatus :: Enable ,
327+ serial_logger_status : LoggerStatus :: Enable ,
291328 }
292329 }
293330}
@@ -587,6 +624,27 @@ impl LevelFilter {
587624 }
588625}
589626
627+ /// An enum for enabling or disabling the different methods for logging.
628+ #[ repr( u8 ) ]
629+ #[ derive( Debug , Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ]
630+ pub enum LoggerStatus {
631+ /// This method of logging is disabled
632+ Disable ,
633+ /// This method of logging is enabled
634+ Enable ,
635+ }
636+
637+ impl LoggerStatus {
638+ /// Converts an u8 into a Option<LoggerStatus>
639+ pub fn from_u8 ( value : u8 ) -> Option < LoggerStatus > {
640+ match value {
641+ 0 => Some ( Self :: Disable ) ,
642+ 1 => Some ( Self :: Enable ) ,
643+ _ => None ,
644+ }
645+ }
646+ }
647+
590648/// Taken from https://github.com/rust-lang/rust/blob/e100ec5bc7cd768ec17d75448b29c9ab4a39272b/library/core/src/slice/mod.rs#L1673-L1677
591649///
592650/// TODO replace with `split_array` feature in stdlib as soon as it's stabilized,
0 commit comments