use embassy_executor::SpawnToken;
use embassy_rp::peripherals::USB;
use embassy_rp::usb::Driver;
use log::LevelFilter;
use crate::builder::usb::Irqs;
pub struct UsbLogBuilder {
pub driver: USB,
pub level: LevelFilter,
}
impl UsbLogBuilder {
#[inline]
pub fn new(level: LevelFilter, usb: USB) -> Self {
Self { level, driver: usb }
}
#[inline]
pub fn new_default(usb: USB) -> Self {
Self::new(LevelFilter::Info, usb)
}
#[inline]
pub fn builder(self) -> SpawnToken<impl Sized> {
logger_task(self)
}
#[inline]
pub fn into_driver(self) -> Driver<'static, USB> {
Driver::new(self.driver, Irqs)
}
}
#[embassy_executor::task]
async fn logger_task(builder: UsbLogBuilder) {
let device = Driver::new(builder.driver, Irqs);
embassy_usb_logger::run!(1024, builder.level, device);
}