pub mod sysfs;
pub mod dummy;
#[derive(Debug, Copy, Clone, Eq, PartialEq)]
pub enum GpioValue {
Low,
High,
}
impl From<bool> for GpioValue {
#[inline]
fn from(val: bool) -> GpioValue {
if val {
GpioValue::High
} else {
GpioValue::Low
}
}
}
impl From<u8> for GpioValue {
#[inline]
fn from(val: u8) -> GpioValue {
if val != 0 {
GpioValue::High
} else {
GpioValue::Low
}
}
}
impl From<GpioValue> for bool {
#[inline]
fn from(val: GpioValue) -> bool {
match val {
GpioValue::Low => false,
GpioValue::High => true,
}
}
}
impl From<GpioValue> for u8 {
#[inline]
fn from(val: GpioValue) -> u8 {
match val {
GpioValue::Low => 0,
GpioValue::High => 1,
}
}
}
pub trait GpioOut {
type Error;
#[inline(always)]
fn set_value<T: Into<GpioValue> + Copy>(&mut self, value: T) -> Result<(), Self::Error> {
match value.into() {
GpioValue::High => self.set_high(),
GpioValue::Low => self.set_low(),
}
}
#[inline(always)]
fn set_low(&mut self) -> Result<(), Self::Error>;
#[inline(always)]
fn set_high(&mut self) -> Result<(), Self::Error>;
}
pub trait GpioIn {
type Error;
fn read_value(&mut self) -> Result<GpioValue, Self::Error>;
}