use crate::hardware::mcp23017::Mcp23017; use crate::hardware::mct8316a::Mct8316a; use anyhow::Result; use embedded_hal::pwm::SetDutyCycle; use log::trace; use std::fmt::Debug; pub trait Hardware { type Mcp23017<'a>: Mcp23017 + Send + Debug where Self: 'a; type Pwm: SetDutyCycle + Sync; fn new_mcp23017_a(&self) -> Result>; fn new_mcp23017_b(&self) -> Result>; fn new_pwm0(&self) -> Result; fn new_mct8316a(&self) -> Result; fn get_battery_voltage(&self) -> Result; } #[cfg(feature = "raspi")] mod raspi; #[cfg(feature = "raspi")] pub fn initialize() -> Result { trace!("initialize()"); raspi::RaspiHardware::new() } #[cfg(not(feature = "raspi"))] #[allow(unreachable_code)] pub fn initialize() -> Result { trace!("initialize()"); sim::SimHardware::new() } pub mod error; pub mod channelization; pub mod mcp23017; #[cfg(feature = "raspi")] mod mcp3208; pub mod mct8316a; pub mod pin; mod sim;