components/
screen_adapters.rs1use core::mem::MaybeUninit;
12use kernel::component::Component;
13use kernel::hil;
14
15#[macro_export]
16macro_rules! screen_adapter_argb8888_to_mono8bitpage_component_static {
17 ($S:ty, $SCREEN_WIDTH:expr, $SCREEN_HEIGHT:expr, $PIXEL_STRIDE:expr $(,)?) => {{
18 let adapter = kernel::static_buf!(
19 capsules_extra::screen::screen_adapters::ScreenARGB8888ToMono8BitPage<'static, $S>
20 );
21 let frame_buffer =
22 kernel::static_buf!([u8; $SCREEN_WIDTH * $SCREEN_HEIGHT * $PIXEL_STRIDE]);
23
24 (adapter, frame_buffer)
25 };};
26}
27
28pub type ScreenAdapterARGB8888ToMono8BitPageComponentType<S> =
29 capsules_extra::screen::screen_adapters::ScreenARGB8888ToMono8BitPage<'static, S>;
30
31pub struct ScreenAdapterARGB8888ToMono8BitPageComponent<
32 S: hil::screen::Screen<'static> + 'static,
33 const FRAME_BUFFER_LEN: usize,
34> {
35 screen: &'static S,
36}
37
38impl<S: hil::screen::Screen<'static>, const FRAME_BUFFER_LEN: usize>
39 ScreenAdapterARGB8888ToMono8BitPageComponent<S, FRAME_BUFFER_LEN>
40{
41 pub fn new(screen: &'static S) -> Self {
42 Self { screen }
43 }
44}
45
46impl<S: hil::screen::Screen<'static> + 'static, const FRAME_BUFFER_LEN: usize> Component
47 for ScreenAdapterARGB8888ToMono8BitPageComponent<S, FRAME_BUFFER_LEN>
48{
49 type StaticInput = (
50 &'static mut MaybeUninit<
51 capsules_extra::screen::screen_adapters::ScreenARGB8888ToMono8BitPage<'static, S>,
52 >,
53 &'static mut MaybeUninit<[u8; FRAME_BUFFER_LEN]>,
54 );
55 type Output =
56 &'static capsules_extra::screen::screen_adapters::ScreenARGB8888ToMono8BitPage<'static, S>;
57
58 fn finalize(self, static_input: Self::StaticInput) -> Self::Output {
59 let frame_buffer = static_input.1.write([0; FRAME_BUFFER_LEN]);
60 let adapter = static_input.0.write(
61 capsules_extra::screen::screen_adapters::ScreenARGB8888ToMono8BitPage::new(
62 self.screen,
63 frame_buffer,
64 ),
65 );
66
67 kernel::hil::screen::Screen::set_client(self.screen, adapter);
68
69 adapter
70 }
71}