mod interface;
pub struct Uart0 {
initialized: bool,
}
impl Uart0 {
pub const fn new() -> Self {
Uart0 { initialized: false }
}
pub fn initialize(&mut self, clock_rate: u32, baud_rate: u32) -> Result<(), &'static str> {
interface::init(clock_rate, baud_rate).map(|_| {
self.initialized = true;
})
}
pub fn write_data(&self, data: &[u8]) {
if self.initialized {
for byte in data {
interface::write_byte(*byte);
}
}
}
pub fn read_data(&self) -> Option<u8> {
if self.initialized {
interface::read_byte()
} else {
None
}
}
}
impl Drop for Uart0 {
fn drop(&mut self) {
interface::release();
}
}
impl core::fmt::Write for Uart0 {
fn write_str(&mut self, s: &str) -> core::fmt::Result {
self.write_data(s.as_bytes());
Ok(())
}
}