forked from koniifer/ableos
48 lines
1.4 KiB
Rust
48 lines
1.4 KiB
Rust
|
pub struct Serialout;
|
||
|
use core::fmt::{Arguments, Error};
|
||
|
impl Serialout {
|
||
|
pub fn write_fmt(&mut self, arg: Arguments<'_>) /*-> Result<(), Error> */
|
||
|
{
|
||
|
let _ = core::fmt::Write::write_fmt(self, arg);
|
||
|
// Ok(())
|
||
|
}
|
||
|
}
|
||
|
impl core::fmt::Write for Serialout {
|
||
|
#[cfg(target_arch = "aarch64")]
|
||
|
fn write_str(&mut self, s: &str) -> Result<(), Error> {
|
||
|
// Don't actually print anything yet lmao
|
||
|
Ok(())
|
||
|
}
|
||
|
#[cfg(target_arch = "x86_64")]
|
||
|
fn write_str(&mut self, s: &str) -> Result<(), Error> {
|
||
|
crate::arch::drivers::serial::_print(format_args!("{}", s));
|
||
|
|
||
|
Ok(())
|
||
|
}
|
||
|
#[cfg(target_arch = "riscv64")]
|
||
|
fn write_str(&mut self, s: &str) -> Result<(), Error> {
|
||
|
write!(crate::arch::drivers::uart::Uart::new(0x1000_0000), "{}", s)
|
||
|
}
|
||
|
fn write_char(&mut self, c: char) -> core::fmt::Result {
|
||
|
self.write_str(c.encode_utf8(&mut [0; 4]))
|
||
|
}
|
||
|
fn write_fmt(mut self: &mut Self, args: Arguments<'_>) -> core::fmt::Result {
|
||
|
core::fmt::write(&mut self, args)
|
||
|
}
|
||
|
}
|
||
|
#[macro_export]
|
||
|
macro_rules! serial_print {
|
||
|
() => {
|
||
|
::core::write!($crate::serial_print::Serialout, "")
|
||
|
};
|
||
|
($($tt:tt)*) => {
|
||
|
::core::write!($crate::serial_print::Serialout, $($tt)*)
|
||
|
};
|
||
|
}
|
||
|
#[macro_export]
|
||
|
macro_rules! serial_println {
|
||
|
($($tt:tt)*) => {
|
||
|
::core::writeln!($crate::serial_print::Serialout, $($tt)*)
|
||
|
};
|
||
|
}
|