Skip to content

Commit 2021bd1

Browse files
asensio-projectphil-opp
authored andcommitted
Apply suggestions
1 parent 2bcaa82 commit 2021bd1

File tree

2 files changed

+36
-24
lines changed

2 files changed

+36
-24
lines changed

api/src/config.rs

+6-2
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,14 @@ pub struct BootloaderConfig {
3232
/// screen when booting. The default is 'Trace'.
3333
pub log_level: LevelFilter,
3434

35-
/// Configuration for enable or disable the framebuffer logger.
35+
/// Wheter the bootloader should print log messages to the framebuffer when booting.
36+
///
37+
/// Enabled by default.
3638
pub frame_buffer_logger_status: LoggerStatus,
3739

38-
/// Configuration for enable or disable the serial being logger.
40+
/// Wheter the bootloader should print log messages to the serial port when booting.
41+
///
42+
/// Enabled by default.
3943
pub serial_logger_status: LoggerStatus,
4044
}
4145

common/src/logger.rs

+30-22
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,11 @@ use spinning_top::Spinlock;
77
/// The global logger instance used for the `log` crate.
88
pub static LOGGER: OnceCell<LockedLogger> = OnceCell::uninit();
99

10-
/// A [`FrameBufferWriter`] instance protected by a spinlock.
11-
pub struct LockedLogger(
12-
Spinlock<FrameBufferWriter>,
13-
Spinlock<SerialPort>,
14-
LoggerStatus,
15-
LoggerStatus,
16-
);
10+
/// A logger instance protected by a spinlock.
11+
pub struct LockedLogger {
12+
framebuffer: Option<Spinlock<FrameBufferWriter>>,
13+
serial: Option<Spinlock<SerialPort>>,
14+
}
1715

1816
impl LockedLogger {
1917
/// Create a new instance that logs to the given framebuffer.
@@ -23,23 +21,33 @@ impl LockedLogger {
2321
frame_buffer_logger_status: LoggerStatus,
2422
serial_logger_status: LoggerStatus,
2523
) -> Self {
26-
LockedLogger(
27-
Spinlock::new(FrameBufferWriter::new(framebuffer, info)),
28-
Spinlock::new(SerialPort::new()),
29-
frame_buffer_logger_status,
30-
serial_logger_status,
31-
)
24+
let framebuffer = match frame_buffer_logger_status {
25+
LoggerStatus::Enable => Some(Spinlock::new(FrameBufferWriter::new(framebuffer, info))),
26+
LoggerStatus::Disable => None,
27+
};
28+
29+
let serial = match serial_logger_status {
30+
LoggerStatus::Enable => Some(Spinlock::new(SerialPort::new())),
31+
LoggerStatus::Disable => None,
32+
};
33+
34+
LockedLogger {
35+
framebuffer,
36+
serial,
37+
}
3238
}
3339

3440
/// Force-unlocks the logger to prevent a deadlock.
3541
///
3642
/// ## Safety
3743
/// This method is not memory safe and should be only used when absolutely necessary.
3844
pub unsafe fn force_unlock(&self) {
39-
unsafe {
40-
self.0.force_unlock();
41-
self.1.force_unlock();
42-
};
45+
if let Some(framebuffer) = &self.framebuffer {
46+
unsafe { framebuffer.force_unlock() };
47+
}
48+
if let Some(serial) = &self.serial {
49+
unsafe { serial.force_unlock() };
50+
}
4351
}
4452
}
4553

@@ -49,12 +57,12 @@ impl log::Log for LockedLogger {
4957
}
5058

5159
fn log(&self, record: &log::Record) {
52-
if self.2 == LoggerStatus::Enable {
53-
let mut logger = self.0.lock();
54-
writeln!(logger, "{:5}: {}", record.level(), record.args()).unwrap();
60+
if let Some(framebuffer) = &self.framebuffer {
61+
let mut framebuffer = framebuffer.lock();
62+
writeln!(framebuffer, "{:5}: {}", record.level(), record.args()).unwrap();
5563
}
56-
if self.3 == LoggerStatus::Enable {
57-
let mut serial = self.1.lock();
64+
if let Some(serial) = &self.serial {
65+
let mut serial = serial.lock();
5866
writeln!(serial, "{:5}: {}", record.level(), record.args()).unwrap();
5967
}
6068
}

0 commit comments

Comments
 (0)