use core::convert::Infallible;
use embedded_hal::digital::OutputPin;
use lcd_async::{
Builder, Display, InitError, NoResetPin,
interface::Interface,
models::ILI9342CRgb565,
options::{ColorInversion, ColorOrder},
};
pub use super::{SCREEN_H, SCREEN_W};
pub type Ili9342c<DI, RST = NoResetPin> = Display<DI, ILI9342CRgb565, RST>;
fn builder<DI: Interface>(di: DI) -> Builder<DI, ILI9342CRgb565, NoResetPin> {
Builder::new(ILI9342CRgb565, di)
.invert_colors(ColorInversion::Inverted)
.color_order(ColorOrder::Bgr)
.display_size(SCREEN_W, SCREEN_H)
}
pub async fn init_ili9342c<DI: Interface>(
di: DI,
) -> Result<Ili9342c<DI>, InitError<DI::Error, Infallible>> {
let mut delay = embassy_time::Delay;
builder(di).init(&mut delay).await
}
pub async fn init_ili9342c_with_reset<DI: Interface, RST: OutputPin>(
di: DI,
rst: RST,
) -> Result<Ili9342c<DI, RST>, InitError<DI::Error, RST::Error>> {
let mut delay = embassy_time::Delay;
builder(di).reset_pin(rst).init(&mut delay).await
}