use super::*;
pub struct Pl011EmergencyTx {
pub(super) base: Reg,
}
impl Pl011EmergencyTx {
fn registers(&self) -> &Pl011Registers {
unsafe { &*self.base.0.as_ptr() }
}
fn mask_interrupts(&self) {
self.registers().uartimsc.set(0);
let _masked = self.registers().uartimsc.get();
}
}
impl UartEmergencyTx for Pl011EmergencyTx {
unsafe fn mask_interrupts_unlocked(&self) {
self.mask_interrupts();
}
unsafe fn try_write_unlocked(&self, bytes: &[u8]) -> usize {
let mut written = 0;
for &byte in bytes.iter().take(EMERGENCY_TX_BUDGET) {
if self.registers().uartfr.is_set(UARTFR::TXFF) {
break;
}
self.registers().uartdr.set(byte as u32);
written += 1;
}
written
}
}