use core::panic::PanicInfo; use core::fmt::Write; use crate::console::Console; use nano5g::lcd::{LCD, Display}; use s5l87xx::Peripherals; #[panic_handler] fn panic(info: &PanicInfo) -> ! { let periphs = unsafe { Peripherals::steal() }; let lcd = LCD::new(periphs.LCD); let mut display = Display::new(lcd); let mut console = Console::<{240/6}, {320/14}>::new(); console.write_str("Panic!\n"); console.blit(&mut display); display.flush(); if let Some(s) = info.payload().downcast_ref::<&str>() { core::fmt::write(&mut console, format_args!( "Payload: {:?}\n", s, )); } else if let Some(a) = info.message() { console.write_str("Message: "); core::fmt::write(&mut console, *a); console.write_str("\n"); } console.blit(&mut display); display.flush(); if let Some(location) = info.location() { core::fmt::write(&mut console, format_args!("In {}:{}\n", location.file(), location.line())); } else { console.write_str("No location information.\n"); } console.blit(&mut display); display.flush(); loop {} }