010d96a4b4
P3-3: fbcond scrollback — 1000-line ring buffer captures text output, exposed via read_scrollback() P3-5: thermal daemon — reads ACPI thermal zone temperature, logs warnings >70C, errors >85C, polling every 5 seconds P3-4/P3-6: ACPI S3 sleep + battery stubs created. acpi-s3-sleep.patch needs post-hardening context fix. Battery reading requires AML interpreter enhancement. 17/17 patches apply. base + base-initfs build.
57 lines
1.5 KiB
Diff
57 lines
1.5 KiB
Diff
diff --git a/drivers/graphics/fbcond/src/text.rs b/drivers/graphics/fbcond/src/text.rs
|
|
index 8a24bbeb..8c85bf77 100644
|
|
--- a/drivers/graphics/fbcond/src/text.rs
|
|
+++ b/drivers/graphics/fbcond/src/text.rs
|
|
@@ -5,11 +5,15 @@ use syscall::error::*;
|
|
|
|
use crate::display::Display;
|
|
|
|
+const SCROLLBACK_LINES: usize = 1000;
|
|
+
|
|
pub struct TextScreen {
|
|
pub display: Display,
|
|
inner: console_draw::TextScreen,
|
|
ctrl: bool,
|
|
input: VecDeque<u8>,
|
|
+ scrollback: VecDeque<Vec<u8>>,
|
|
+ scroll_pos: usize,
|
|
}
|
|
|
|
impl TextScreen {
|
|
@@ -19,6 +23,8 @@ impl TextScreen {
|
|
inner: console_draw::TextScreen::new(),
|
|
ctrl: false,
|
|
input: VecDeque::new(),
|
|
+ scrollback: VecDeque::with_capacity(SCROLLBACK_LINES),
|
|
+ scroll_pos: 0,
|
|
}
|
|
}
|
|
|
|
@@ -126,9 +132,26 @@ impl TextScreen {
|
|
|
|
let damage = self.inner.write(map, buf, &mut self.input);
|
|
|
|
+ for line in buf.split(|&b| b == b'\n') {
|
|
+ let mut v = line.to_vec();
|
|
+ v.push(b'\n');
|
|
+ self.scrollback.push_back(v);
|
|
+ }
|
|
+ while self.scrollback.len() > SCROLLBACK_LINES {
|
|
+ self.scrollback.pop_front();
|
|
+ }
|
|
+
|
|
self.display.sync_rect(damage);
|
|
}
|
|
|
|
Ok(buf.len())
|
|
}
|
|
+
|
|
+ pub fn read_scrollback(&self) -> Vec<u8> {
|
|
+ let mut result = Vec::new();
|
|
+ for line in &self.scrollback {
|
|
+ result.extend_from_slice(line);
|
|
+ }
|
|
+ result
|
|
+ }
|
|
}
|