@@ -31,6 +31,12 @@ pub struct BootloaderConfig {
31
31
/// Configuration for changing the level of the filter of the messages that are shown in the
32
32
/// screen when booting. The default is 'Trace'.
33
33
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 ,
34
40
}
35
41
36
42
impl BootloaderConfig {
@@ -39,7 +45,7 @@ impl BootloaderConfig {
39
45
0x3D ,
40
46
] ;
41
47
#[ doc( hidden) ]
42
- pub const SERIALIZED_LEN : usize = 116 ;
48
+ pub const SERIALIZED_LEN : usize = 118 ;
43
49
44
50
/// Creates a new default configuration with the following values:
45
51
///
@@ -53,6 +59,8 @@ impl BootloaderConfig {
53
59
mappings : Mappings :: new_default ( ) ,
54
60
frame_buffer : FrameBuffer :: new_default ( ) ,
55
61
log_level : LevelFilter :: Trace ,
62
+ frame_buffer_logger_status : LoggerStatus :: Enable ,
63
+ serial_logger_status : LoggerStatus :: Enable ,
56
64
}
57
65
}
58
66
@@ -67,6 +75,8 @@ impl BootloaderConfig {
67
75
kernel_stack_size,
68
76
frame_buffer,
69
77
log_level,
78
+ frame_buffer_logger_status,
79
+ serial_logger_status,
70
80
} = self ;
71
81
let ApiVersion {
72
82
version_major,
@@ -147,7 +157,15 @@ impl BootloaderConfig {
147
157
} ,
148
158
) ;
149
159
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
+ )
151
169
}
152
170
153
171
/// Tries to deserialize a config byte array that was created using [`Self::serialize`].
@@ -267,6 +285,21 @@ impl BootloaderConfig {
267
285
Option :: None => return Err ( "log_level invalid" ) ,
268
286
} ;
269
287
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
+
270
303
if !s. is_empty ( ) {
271
304
return Err ( "unexpected rest" ) ;
272
305
}
@@ -277,6 +310,8 @@ impl BootloaderConfig {
277
310
mappings,
278
311
frame_buffer,
279
312
log_level,
313
+ frame_buffer_logger_status,
314
+ serial_logger_status,
280
315
} )
281
316
}
282
317
@@ -288,6 +323,8 @@ impl BootloaderConfig {
288
323
kernel_stack_size : rand:: random ( ) ,
289
324
frame_buffer : FrameBuffer :: random ( ) ,
290
325
log_level : LevelFilter :: Trace ,
326
+ frame_buffer_logger_status : LoggerStatus :: Enable ,
327
+ serial_logger_status : LoggerStatus :: Enable ,
291
328
}
292
329
}
293
330
}
@@ -587,6 +624,27 @@ impl LevelFilter {
587
624
}
588
625
}
589
626
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
+
590
648
/// Taken from https://github.com/rust-lang/rust/blob/e100ec5bc7cd768ec17d75448b29c9ab4a39272b/library/core/src/slice/mod.rs#L1673-L1677
591
649
///
592
650
/// TODO replace with `split_array` feature in stdlib as soon as it's stabilized,
0 commit comments