use nrf51_hal::hi_res_timer::As16BitTimer;
use tiny_led_matrix::{Display, Event as DisplayEvent};
use crate::display::display_port::DisplayPort;
use crate::display::matrix::MicrobitFrame;
use crate::display::timer::MicrobitDisplayTimer;
pub struct MicrobitDisplay<T: As16BitTimer> {
timer: MicrobitDisplayTimer<T>,
port: DisplayPort,
display: Display<MicrobitFrame>,
}
impl<T: As16BitTimer> MicrobitDisplay<T> {
pub fn new(mut port: DisplayPort, timer: T) -> MicrobitDisplay<T> {
let mut timer = MicrobitDisplayTimer::new(timer);
tiny_led_matrix::initialise_control(&mut port);
tiny_led_matrix::initialise_timer(&mut timer);
let display = Display::new();
MicrobitDisplay {timer, port, display}
}
pub fn free(mut self) -> (DisplayPort, T) {
self.port.blank();
(self.port, self.timer.free())
}
pub fn handle_event(&mut self) -> DisplayEvent {
self.display.handle_event(&mut self.timer, &mut self.port)
}
pub fn set_frame(&mut self, frame: &MicrobitFrame) {
self.display.set_frame(frame);
}
}