mod filters;
mod frontend;
pub use filters::Filter;
use filters::Filters;
use crate::{BUFFER, Poller};
#[cfg(feature = "lpuart")]
use imxrt_hal::{dma::channel::Channel, lpuart::Lpuart};
pub struct LoggingConfig {
pub max_level: ::log::LevelFilter,
pub filters: &'static [Filter],
}
impl LoggingConfig {
pub const fn new() -> Self {
LoggingConfig {
max_level: ::log::STATIC_MAX_LEVEL,
filters: &[],
}
}
}
impl Default for LoggingConfig {
fn default() -> LoggingConfig {
Self::new()
}
}
#[cfg(feature = "usbd")]
pub fn usbd_with_config<const N: u8>(
peripherals: imxrt_usbd::Instances<N>,
interrupts: super::Interrupts,
frontend_config: &LoggingConfig,
backend_config: &crate::UsbdConfig,
) -> Result<Poller, crate::AlreadySetError<imxrt_usbd::Instances<N>>> {
let (producer, consumer) = match BUFFER.try_split() {
Ok((prod, cons)) => (prod, cons),
Err(_) => return Err(crate::AlreadySetError::new(peripherals)),
};
critical_section::with(|_| {
if frontend::init(producer, frontend_config).is_err() {
return Err(crate::AlreadySetError::new(peripherals));
}
let backend = crate::usbd::init(peripherals, interrupts, consumer, backend_config);
Ok(Poller::new(backend))
})
}
#[cfg(feature = "usbd")]
pub fn usbd<const N: u8>(
peripherals: imxrt_usbd::Instances<N>,
interrupts: super::Interrupts,
) -> Result<Poller, crate::AlreadySetError<imxrt_usbd::Instances<N>>> {
usbd_with_config(
peripherals,
interrupts,
&LoggingConfig::default(),
&crate::UsbdConfigBuilder::new().build(),
)
}
#[cfg(feature = "lpuart")]
pub fn lpuart_with_config(
lpuart: Lpuart,
dma_channel: Channel,
interrupts: crate::Interrupts,
frontend_config: &LoggingConfig,
) -> Result<Poller, crate::AlreadySetError<(Lpuart, Channel)>> {
let (producer, consumer) = match BUFFER.try_split() {
Ok((prod, cons)) => (prod, cons),
Err(_) => return Err(crate::AlreadySetError::new((lpuart, dma_channel))),
};
critical_section::with(|_| {
if frontend::init(producer, frontend_config).is_err() {
return Err(crate::AlreadySetError::new((lpuart, dma_channel)));
}
let backend = crate::lpuart::init(lpuart, dma_channel, consumer, interrupts);
Ok(Poller::new(backend))
})
}
#[cfg(feature = "lpuart")]
pub fn lpuart(
lpuart: Lpuart,
dma_channel: Channel,
interrupts: crate::Interrupts,
) -> Result<Poller, crate::AlreadySetError<(Lpuart, Channel)>> {
lpuart_with_config(lpuart, dma_channel, interrupts, &LoggingConfig::default())
}