use super::ptr::Ptr;
use crate::models::Model;
use core::marker::PhantomData;
pub trait MemoryRegion: core::marker::Sized + core::fmt::Debug + core::marker::Copy {
type Model: Model;
const BASE_ADDR: u32;
const LENGTH: u32;
const DEBUG_NAME: &'static str;
#[inline]
fn ptr(raw: u32) -> Ptr<Self> {
Ptr {
addr: Self::BASE_ADDR + (raw % Self::LENGTH),
_region: PhantomData,
}
}
#[inline]
fn contains_addr(raw: u32) -> bool {
raw >= Self::BASE_ADDR && raw < (Self::BASE_ADDR + Self::LENGTH)
}
}
pub trait MainMem: MemoryRegion + HostAccessible {}
pub trait FontMem: MemoryRegion + HostAccessible {}
pub trait DisplayListMem: MemoryRegion + HostAccessible {}
pub trait RegisterMem: MemoryRegion + HostAccessible {}
pub trait CommandMem: MemoryRegion + HostAccessible {}
pub trait CommandErrMem: MemoryRegion + HostAccessible {
type RawMessage: crate::commands::coprocessor::FaultMessageRaw;
}
pub trait ExtFlashMem: MemoryRegion {}
pub trait HostAccessible: MemoryRegion {}