Configure EPD (e-ink) Support with Flush Callbacks
mainWhen using EPD (e-ink) drivers like weact-studio-epd, epd-waveshare, or lilygo-epd47, the drivers typically maintain their own internal buffers. To avoid the memory overhead of the Mousefood framebuffer, you should disable default features and use the flush_callback in EmbeddedBackendConfig. This allows you to pass the Mousefood buffer directly to the driver's update method.
To minimize memory usage, use: mousefood = { version = "*", default-features = false, features = ["<driver-feature>"] }.
// Example pattern for Waveshare EPD
use mousefood::prelude::*;
use epd_waveshare::{epd2in9_v2::*, prelude::*};
fn main() -> Result<(), Box<dyn std::error::Error>> {
// ... driver initialization ...
let mut epd = Epd2in9::new(&mut spi_device, busy, dc, rst, &mut delay, None)?;
let mut display = Display2in9::default();
let config = EmbeddedBackendConfig {
flush_callback: Box::new(move |d| {
epd.update_and_display_frame(&mut spi_device, d.buffer(), &mut delay)
.expect("epd update failed");
}),
..Default::default()
};
let backend = EmbeddedBackend::new(&mut display, config);
let _terminal = Terminal::new(backend)?;
Ok(())
}