lvgl 0.6.2

LVGL bindings for Rust. A powerful and easy-to-use embedded GUI with many widgets, advanced visual effects (opacity, antialiasing, animations) and low memory requirements (16K RAM, 64K Flash).
Documentation
#[macro_export]
macro_rules! lv_drv_disp_fbdev {
    ($draw_buffer:ident, $hor_res:ident, $ver_res:ident) => {
        unsafe {
            lvgl_sys::fbdev_init();
            $crate::Display::register_raw(
                $draw_buffer,
                $hor_res,
                $ver_res,
                Some(lvgl_sys::fbdev_flush),
                None,
                None,
                None,
                None,
                None,
                None,
                None,
                None,
                Some(lvgl_sys::fbdev_exit),
            )
        }
    };
}

#[macro_export]
macro_rules! lv_drv_disp_drm {
    ($draw_buffer:ident, $hor_res:ident, $ver_res:ident) => {
        unsafe {
            lvgl_sys::drm_init();
            $crate::Display::register_raw(
                $draw_buffer,
                $hor_res,
                $ver_res,
                Some(lvgl_sys::drm_flush),
                None,
                None,
                None,
                None,
                Some(lvgl_sys::drm_wait_vsync),
                None,
                None,
                None,
                Some(lvgl_sys::drm_exit),
            )
        }
    };
}

#[macro_export]
macro_rules! lv_drv_disp_gtk {
    ($draw_buffer:ident, $hor_res:ident, $ver_res:ident) => {
        unsafe {
            lvgl_sys::gtkdrv_init();
            $crate::Display::register_raw(
                $draw_buffer,
                $hor_res,
                $ver_res,
                Some(lvgl_sys::gtkdrv_flush_cb),
                None,
                None,
                None,
                None,
                None,
                None,
                None,
                None,
                None,
            )
        }
    };
}

#[macro_export]
macro_rules! lv_drv_disp_sdl {
    ($draw_buffer:ident, $hor_res:ident, $ver_res:ident) => {
        unsafe {
            lvgl_sys::sdl_init();
            $crate::Display::register_raw(
                $draw_buffer,
                $hor_res,
                $ver_res,
                Some(lvgl_sys::sdl_display_flush),
                None,
                None,
                None,
                None,
                None,
                None,
                None,
                None,
                None,
            )
        }
    };
}

#[macro_export]
macro_rules! lv_drv_disp_gc9a01 {
    ($draw_buffer:ident, $hor_res:ident, $ver_res:ident) => {
        unsafe {
            match lvgl_sys::GC9A01_init() {
                0 => (),
                c = panic!("GC9A01_init() returned error code {c}")
            };
            $crate::Display::register_raw(
                $draw_buffer,
                $hor_res,
                $ver_res,
                Some(lvgl_sys::GC9A01_flush),
                None,
                None,
                None,
                None,
                None,
                None,
                None,
                None,
                None,
            )
        }
    }
}

#[macro_export]
macro_rules! lv_drv_disp_ili9341 {
    ($draw_buffer:ident, $hor_res:ident, $ver_res:ident) => {
        unsafe {
            lvgl_sys::ili9341_init();
            $crate::Display::register_raw(
                $draw_buffer,
                $hor_res,
                $ver_res,
                Some(lvgl_sys::ili9341_flush),
                None,
                None,
                None,
                None,
                None,
                None,
                None,
                None,
                None,
            )
        }
    };
}

#[macro_export]
macro_rules! lv_drv_disp_r61581 {
    ($draw_buffer:ident, $hor_res:ident, $ver_res:ident) => {
        unsafe {
            lvgl_sys::r61581_init();
            $crate::Display::register_raw(
                $draw_buffer,
                $hor_res,
                $ver_res,
                Some(lvgl_sys::r61581_flush),
                None,
                None,
                None,
                None,
                None,
                None,
                None,
                None,
                None,
            )
        }
    };
}

#[macro_export]
macro_rules! lv_drv_disp_sharp_mip {
    ($draw_buffer:ident, $hor_res:ident, $ver_res:ident) => {
        unsafe {
            lvgl_sys::sharp_mip_init();
            $crate::Display::register_raw(
                $draw_buffer,
                $hor_res,
                $ver_res,
                Some(lvgl_sys::sharp_mip_flush),
                Some(lvgl_sys::sharp_mip_rounder),
                Some(lvgl_sys::sharp_mip_set_px),
                None,
                None,
                None,
                None,
                None,
                None,
                None,
            )
        }
    };
}

#[macro_export]
macro_rules! lv_drv_disp_ssd1963 {
    ($draw_buffer:ident, $hor_res:ident, $ver_res:ident) => {
        unsafe {
            lvgl_sys::ssd1963_init();
            $crate::Display::register_raw(
                $draw_buffer,
                $hor_res,
                $ver_res,
                Some(lvgl_sys::ssd1963_flush),
                None,
                None,
                None,
                None,
                None,
                None,
                None,
                None,
                None,
            )
        }
    };
}

#[macro_export]
macro_rules! lv_drv_disp_st7565 {
    ($draw_buffer:ident, $hor_res:ident, $ver_res:ident) => {
        unsafe {
            lvgl_sys::st7565_init();
            $crate::Display::register_raw(
                $draw_buffer,
                $hor_res,
                $ver_res,
                Some(lvgl_sys::st7565_flush),
                None,
                None,
                None,
                None,
                None,
                None,
                None,
                None,
                None,
            )
        }
    };
}

#[macro_export]
macro_rules! lv_drv_disp_uc1610 {
    ($draw_buffer:ident, $hor_res:ident, $ver_res:ident) => {
        unsafe {
            lvgl_sys::uc1610_init();
            $crate::Display::register_raw(
                $draw_buffer,
                $hor_res,
                $ver_res,
                Some(lvgl_sys::uc1610_flush_cb),
                Some(lvgl_sys::uc1610_rounder_cb),
                Some(lvgl_sys::uc1610_set_px_cb),
                None,
                None,
                None,
                None,
                None,
                None,
                None,
            )
        }
    };
}

#[cfg(test)]
mod tests {
    use crate::tests;
    use crate::DrawBuffer;

    #[test]
    fn gtk_test() {
        const HOR_RES: u32 = 240;
        const VER_RES: u32 = 240;
        tests::initialize_test();
        let buffer = DrawBuffer::<{ (HOR_RES * VER_RES) as usize }>::default();
        let _disp = lv_drv_disp_sdl!(buffer, HOR_RES, VER_RES).unwrap();
    }
}