Files
RedBear-OS/local/patches/base/P4-fbcond-scrollback.patch
T
vasilito 010d96a4b4 feat: P3 fbcond scrollback + thermal daemon (17 patches total)
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.
2026-05-03 15:39:59 +01:00

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
+ }
}