use wasm_embedded_spec::{Error, gpio::Gpio, api::types};
use embedded_hal::digital::{PinState};
use super::{Engine, Context};
impl <E: Engine> wasm_embedded_spec::api::gpio::Gpio for Context<E> {
fn init(&mut self, port: i32, pin: i32, mode: types::Mode) -> Result<i32, Error> {
log::debug!("GPIO init port: {} pin: {} mode: {:?}", port, pin, mode);
Gpio::init(&mut self.engine, port, pin, mode == types::Mode::Output)
}
fn deinit(&mut self, dev: i32) -> Result<(), Error> {
log::debug!("GPIO deinit handle: {}", dev);
Gpio::deinit(&mut self.engine, dev)
}
fn set(&mut self, dev: i32, value: types::Value) -> Result<(), Error> {
log::debug!("GPIO write handle: {} val: {:?}", dev, value);
let state = match value {
types::Value::High => PinState::High,
types::Value::Low => PinState::Low,
};
Gpio::set(&mut self.engine, dev, state)
}
fn get(&mut self, dev: i32) -> Result<types::Value, Error> {
log::debug!("GPIO read handle: {}", dev);
let r = Gpio::get(&mut self.engine, dev)?;
match r {
PinState::High => Ok(types::Value::High),
PinState::Low => Ok(types::Value::Low),
}
}
}