```rust trait Display { fn write_cmd(cmd: &[u8]); fn write_data(data: &[u8]); } trait DisplayRead: Display { fn read(cmd: &[u8], data: &mut [u8]); } struct SpiDeviceDisplay{ device: impl SpiDevice, dc: impl OutputPin, } impl Display for SpiDeviceDisplay {..} struct ExclusiveDisplay { bus: impl SpiBus, cs: impl OutputPin, dc: impl OutputPin, } impl Display for ExclusiveDisplay {..} impl DisplayRead for ExclusiveDisplay {..} struct RefCellDisplay { bus: &RefCell, cs: impl OutputPin, dc: impl OutputPin, } impl Display for RefCellDisplay {..} impl DisplayRead for RefCellDisplay {..} struct CriticalSectionDisplay { bus: &critical_section::Mutex>, cs: impl OutputPin, dc: impl OutputPin, } impl Display for CriticalSectionDisplay {..} impl DisplayRead for CriticalSectionDisplay {..} struct MutexDisplay { bus: &std::sync::Mutex, cs: impl OutputPin, dc: impl OutputPin, } impl Display for MutexDisplay {..} impl DisplayRead for MutexDisplay {..}