Skip to main content

DmaFrameBuffer

Struct DmaFrameBuffer 

Source
pub struct DmaFrameBuffer<const NROWS: usize, const COLS: usize, const PLANES: usize> { /* private fields */ }
Expand description

Row-major BCM framebuffer for row-by-row Binary Code Modulation.

See the module-level documentation for layout details and DMA descriptor patterns.

§Type Parameters

  • NROWS: number of multiplexed row pairs (panel height / 2)
  • COLS: number of columns (panel width)
  • PLANES: number of bit-planes (typically 8 for full 8-bit colour)

Implementations§

Source§

impl<const NROWS: usize, const COLS: usize, const PLANES: usize> DmaFrameBuffer<NROWS, COLS, PLANES>

Source

pub const fn new() -> Self

Creates a new framebuffer, pre-formatted and ready for use.

§Panics

Panics if NROWS is not within 1..=32 (5-bit row address) or PLANES is not within 1..=8 (8-bit color depth). With the esp32-ordering feature, also panics if COLS is not even (the ESP32’s byte-order swap requires an even column count). In const contexts (e.g. static framebuffers) this is a compile-time error.

§Memory placement (⚠️ large buffer)

This framebuffer is a large inline array (roughly PLANES × NROWS × (COLS + gap) × 2 bytes). A 64×64 panel at PLANES = 8 is tens of kilobytes, which will overflow a task stack if bound to a local let. The framebuffer is mutable, so give it a 'static home that hands out &'static mut (e.g. static_cell::StaticCell) — never static mut. See the crate-level Memory placement section for a worked example.

Source

pub const fn bcm_chunk_count() -> usize

👎Deprecated since 0.11.0:

use BCM_SEQUENCE instead

Number of bit-planes.

Source

pub const fn bcm_chunk_bytes() -> usize

👎Deprecated since 0.11.0:

use BCM_SEQUENCE instead

Byte size of one plane’s pixel row.

Source

pub const fn bcm_row_count() -> usize

Number of multiplexed scan rows.

Source

pub const fn bcm_row_bytes() -> usize

Byte size of the per-row overhead (inter-row gap + optional tail).

Source

pub const fn format(&mut self)

Formats the framebuffer with row addresses and control bits.

Plane 0 (LSB, 1 rep) uses prev_addr so the brief display of stale data from the previous row has minimal visual weight. Planes 1+ use the current row address. Blanking is applied only around the plane0→plane1 address change (plus plane 0’s trail blank when PLANES == 1); see the module-level documentation for the exact distribution.

Source

pub fn erase(&mut self)

Erase pixel colours while preserving row control data.

Source

pub fn set_pixel(&mut self, p: Point, color: Color)

Set a pixel in the framebuffer.

Source

pub fn pixel_row_ptr_len( &self, row_idx: usize, plane_idx: usize, ) -> (*const u8, usize)

Returns a pointer and byte length for a plane’s pixel row.

§Panics

Panics if row_idx >= NROWS or plane_idx >= PLANES.

Source

pub fn gap_ptr_len(&self, row_idx: usize) -> (*const u8, usize)

Returns a pointer and byte length for a row’s inter-row blanking gap.

The gap is streamed as the tail of plane 0’s segment (LSB) and holds the previous row address with OE blank, deferring the address change until after the gap. Returns length 0 when no inter-row-blank-* feature is enabled.

§Panics

Panics if row_idx >= NROWS.

Source

pub fn trailer_ptr_len(&self, row_idx: usize) -> (*const u8, usize)

Returns a pointer and byte length for a row’s end-of-row trailer (the optional padding and tail-closes-latch word).

Returns length 0 when the tail-closes-latch feature is disabled.

§Panics

Panics if row_idx >= NROWS.

Trait Implementations§

Source§

impl<const NROWS: usize, const COLS: usize, const PLANES: usize> Clone for DmaFrameBuffer<NROWS, COLS, PLANES>

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<const NROWS: usize, const COLS: usize, const PLANES: usize> Copy for DmaFrameBuffer<NROWS, COLS, PLANES>

Source§

impl<const NROWS: usize, const COLS: usize, const PLANES: usize> Debug for DmaFrameBuffer<NROWS, COLS, PLANES>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<const NROWS: usize, const COLS: usize, const PLANES: usize> Default for DmaFrameBuffer<NROWS, COLS, PLANES>

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<const NROWS: usize, const COLS: usize, const PLANES: usize> DrawTarget for DmaFrameBuffer<NROWS, COLS, PLANES>

Source§

type Color = Rgb888

The pixel color type the targetted display supports.
Source§

type Error = !

Error type to return when a drawing operation fails. Read more
Source§

fn draw_iter<I>(&mut self, pixels: I) -> Result<(), Self::Error>
where I: IntoIterator<Item = Pixel<Self::Color>>,

Draw individual pixels to the display without a defined order. Read more
Source§

fn fill_contiguous<I>( &mut self, area: &Rectangle, colors: I, ) -> Result<(), Self::Error>
where I: IntoIterator<Item = Self::Color>,

Fill a given area with an iterator providing a contiguous stream of pixel colors. Read more
Source§

fn fill_solid( &mut self, area: &Rectangle, color: Self::Color, ) -> Result<(), Self::Error>

Fill a given area with a solid color. Read more
Source§

fn clear(&mut self, color: Self::Color) -> Result<(), Self::Error>

Fill the entire display with a solid color. Read more
Source§

impl<const NROWS: usize, const COLS: usize, const PLANES: usize> FrameBuffer for DmaFrameBuffer<NROWS, COLS, PLANES>

Source§

const BCM_SEQUENCE: [BcmLenReps; 10]

Static (len, reps) of the segments in one sequence, in scan order. Read more
Source§

const BCM_SEQUENCE_LEN: usize = PLANES

Number of BCM segments in one sequence, i.e. the number of meaningful entries in BCM_SEQUENCE.
Source§

const BCM_SEQUENCE_COUNT: usize = NROWS

Number of times the sequence repeats in one complete panel refresh: NROWS for row-major framebuffers (one sequence per row), 1 for frame-major and threshold framebuffers (the sequence covers the whole frame).
Source§

const BCM_SEGMENTS_PER_GROUP: usize = PLANES

Number of consecutive segments that a driver may chain into a single DMA transfer. Must divide BCM_SEQUENCE_LEN: groups never straddle a sequence boundary. Read more
Source§

type Word = u16

The DMA word type used by this framebuffer (u8 for latched, u16 for direct-drive). Driver implementations can use this to enforce that pin configurations match the framebuffer at compile time.
Source§

fn bcm_segment_ptr(&self, index: usize) -> *const u8

Returns the byte pointer for the index-th BCM segment. Read more
Source§

const BCM_SEGMENT_COUNT: usize = _

Total number of BCM segments streamed for one complete panel refresh (all rows, all planes). Read more
Source§

fn bcm_segment_count(&self) -> usize

Total number of BCM segments streamed for one complete panel refresh. Read more
Source§

fn bcm_segment(&self, index: usize) -> BcmSegment

Returns the index-th BCM segment. Read more
Source§

fn bcm_segments_per_group(&self) -> usize

Number of consecutive segments that form one transfer group. Read more
Source§

impl<const NROWS: usize, const COLS: usize, const PLANES: usize> FrameBufferOperations for DmaFrameBuffer<NROWS, COLS, PLANES>

Source§

fn erase(&mut self)

Erase pixel colors while preserving control bits. This is much faster than format() and is the typical way to clear the display.
Source§

fn set_pixel(&mut self, p: Point, color: Color)

Set a pixel in the framebuffer.
Source§

impl<const NROWS: usize, const COLS: usize, const PLANES: usize> MutableFrameBuffer for DmaFrameBuffer<NROWS, COLS, PLANES>

Source§

impl<const NROWS: usize, const COLS: usize, const PLANES: usize> OriginDimensions for DmaFrameBuffer<NROWS, COLS, PLANES>

Source§

fn size(&self) -> Size

Returns the size of the bounding box.

Auto Trait Implementations§

§

impl<const NROWS: usize, const COLS: usize, const PLANES: usize> Freeze for DmaFrameBuffer<NROWS, COLS, PLANES>
where [RowData<COLS, PLANES>; NROWS]: Freeze,

§

impl<const NROWS: usize, const COLS: usize, const PLANES: usize> RefUnwindSafe for DmaFrameBuffer<NROWS, COLS, PLANES>
where [RowData<COLS, PLANES>; NROWS]: RefUnwindSafe,

§

impl<const NROWS: usize, const COLS: usize, const PLANES: usize> Send for DmaFrameBuffer<NROWS, COLS, PLANES>
where [RowData<COLS, PLANES>; NROWS]: Send,

§

impl<const NROWS: usize, const COLS: usize, const PLANES: usize> Sync for DmaFrameBuffer<NROWS, COLS, PLANES>
where [RowData<COLS, PLANES>; NROWS]: Sync,

§

impl<const NROWS: usize, const COLS: usize, const PLANES: usize> Unpin for DmaFrameBuffer<NROWS, COLS, PLANES>
where [RowData<COLS, PLANES>; NROWS]: Unpin,

§

impl<const NROWS: usize, const COLS: usize, const PLANES: usize> UnsafeUnpin for DmaFrameBuffer<NROWS, COLS, PLANES>
where [RowData<COLS, PLANES>; NROWS]: UnsafeUnpin,

§

impl<const NROWS: usize, const COLS: usize, const PLANES: usize> UnwindSafe for DmaFrameBuffer<NROWS, COLS, PLANES>
where [RowData<COLS, PLANES>; NROWS]: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Az for T

Source§

fn az<Dst>(self) -> Dst
where T: Cast<Dst>,

Casts the value.
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<Src, Dst> CastFrom<Src> for Dst
where Src: Cast<Dst>,

Source§

fn cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> CheckedAs for T

Source§

fn checked_as<Dst>(self) -> Option<Dst>
where T: CheckedCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> CheckedCastFrom<Src> for Dst
where Src: CheckedCast<Dst>,

Source§

fn checked_cast_from(src: Src) -> Option<Dst>

Casts the value.
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> Dimensions for T

Source§

fn bounding_box(&self) -> Rectangle

Returns the bounding box.
Source§

impl<T> DrawTargetExt for T
where T: DrawTarget,

Source§

fn translated(&mut self, offset: Point) -> Translated<'_, T>

Creates a translated draw target based on this draw target. Read more
Source§

fn cropped(&mut self, area: &Rectangle) -> Cropped<'_, T>

Creates a cropped draw target based on this draw target. Read more
Source§

fn clipped(&mut self, area: &Rectangle) -> Clipped<'_, T>

Creates a clipped draw target based on this draw target. Read more
Source§

fn color_converted<C>(&mut self) -> ColorConverted<'_, T, C>
where C: PixelColor + Into<<T as DrawTarget>::Color>,

Creates a color conversion draw target. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> OverflowingAs for T

Source§

fn overflowing_as<Dst>(self) -> (Dst, bool)
where T: OverflowingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> OverflowingCastFrom<Src> for Dst
where Src: OverflowingCast<Dst>,

Source§

fn overflowing_cast_from(src: Src) -> (Dst, bool)

Casts the value.
Source§

impl<T> SaturatingAs for T

Source§

fn saturating_as<Dst>(self) -> Dst
where T: SaturatingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> SaturatingCastFrom<Src> for Dst
where Src: SaturatingCast<Dst>,

Source§

fn saturating_cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> UnwrappedAs for T

Source§

fn unwrapped_as<Dst>(self) -> Dst
where T: UnwrappedCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> UnwrappedCastFrom<Src> for Dst
where Src: UnwrappedCast<Dst>,

Source§

fn unwrapped_cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> WrappingAs for T

Source§

fn wrapping_as<Dst>(self) -> Dst
where T: WrappingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> WrappingCastFrom<Src> for Dst
where Src: WrappingCast<Dst>,

Source§

fn wrapping_cast_from(src: Src) -> Dst

Casts the value.