2020-03-31 10:37:40 +00:00
|
|
|
use core::fmt;
|
|
|
|
|
use core::slice;
|
|
|
|
|
use xous;
|
|
|
|
|
|
|
|
|
|
pub struct LogString<'a> {
|
|
|
|
|
s: &'a str,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
impl<'a> LogString<'a> {
|
2020-04-01 02:28:36 +00:00
|
|
|
pub fn from_message(message: &xous::MemoryMessage) -> LogString<'a> {
|
2020-03-31 10:37:40 +00:00
|
|
|
println!(
|
|
|
|
|
"Message address is at {:08x}",
|
2020-04-01 02:28:36 +00:00
|
|
|
message.buf.addr.get()
|
2020-03-31 10:37:40 +00:00
|
|
|
);
|
|
|
|
|
LogString {
|
|
|
|
|
s: unsafe {
|
|
|
|
|
core::str::from_utf8(slice::from_raw_parts(
|
2020-04-01 02:28:36 +00:00
|
|
|
message.buf.addr.get() as *mut u8,
|
2020-03-31 10:37:40 +00:00
|
|
|
message.valid.expect("no buffer length present").get(),
|
|
|
|
|
))
|
|
|
|
|
.expect("message didn't have valid utf8")
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
impl<'a> fmt::Display for LogString<'a> {
|
|
|
|
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
|
|
|
|
write!(f, "{}", self.s)
|
|
|
|
|
}
|
|
|
|
|
}
|