use core::convert::Infallible;
use display_types::cea861::hdmi_forum::HdmiForumFrl;
use hdmi_hal::phy::{EqParams, HdmiPhy, LtpPattern};
#[derive(Debug)]
#[non_exhaustive]
pub enum PhyCall {
SetFrlRate(HdmiForumFrl),
SendLtp(LtpPattern),
AdjustEqualization(EqParams),
SetScrambling(bool),
}
pub struct StubPhy<F> {
on_call: F,
}
impl<F: FnMut(PhyCall)> StubPhy<F> {
pub fn new(on_call: F) -> Self {
Self { on_call }
}
}
impl<F: FnMut(PhyCall)> HdmiPhy for StubPhy<F> {
type Error = Infallible;
fn set_frl_rate(&mut self, rate: HdmiForumFrl) -> Result<(), Infallible> {
(self.on_call)(PhyCall::SetFrlRate(rate));
Ok(())
}
fn send_ltp(&mut self, pattern: LtpPattern) -> Result<(), Infallible> {
(self.on_call)(PhyCall::SendLtp(pattern));
Ok(())
}
fn adjust_equalization(&mut self, params: EqParams) -> Result<(), Infallible> {
(self.on_call)(PhyCall::AdjustEqualization(params));
Ok(())
}
fn set_scrambling(&mut self, enabled: bool) -> Result<(), Infallible> {
(self.on_call)(PhyCall::SetScrambling(enabled));
Ok(())
}
}
#[cfg(test)]
#[path = "phy_tests.rs"]
mod tests;