use esp_hal::peripherals::{GPIO21, GPIO44, RMT};
use esp_hal::rmt::{ConfigError, Rmt};
use esp_hal::time::Rate;
use crate::ir::IrTx;
use crate::led::{RMT_MHZ, RgbLed};
pub const CLOCK: Rate = Rate::from_mhz(RMT_MHZ);
#[allow(missing_docs)]
pub struct RmtResources<'d> {
pub rmt: RMT<'d>,
pub rgb_led: GPIO21<'d>,
pub ir_tx: GPIO44<'d>,
}
reborrow_group!(RmtResources {
rmt,
rgb_led,
ir_tx
});
impl<'d> RmtResources<'d> {
pub fn init(&mut self) -> Result<(RgbLed<'_>, IrTx<'_>), ConfigError> {
let rmt = Rmt::new(self.rmt.reborrow(), CLOCK)?.into_async();
let led = RgbLed::new(rmt.channel0, self.rgb_led.reborrow())?;
let ir = IrTx::new(rmt.channel1, self.ir_tx.reborrow())?;
Ok((led, ir))
}
}