use jetgpio_sys::{gpioInitialise, gpioTerminate};
use thiserror::Error;
pub mod pins;
pub mod valid_pins;
#[derive(Debug)]
pub struct Gpio;
pub type Result<T> = std::result::Result<T, Error>;
#[derive(Debug, Error)]
pub enum Error {
#[error("Error Code from JETGPIO: {0}")]
JetGpioSysError(i32),
}
pub fn jetgpio_code_to_result(code: i32) -> Result<()> {
if code < 0 {
Err(Error::JetGpioSysError(code))
} else {
Ok(())
}
}
impl Gpio {
pub fn new() -> Result<Self> {
let res = unsafe { gpioInitialise() };
jetgpio_code_to_result(res)?;
Ok(Self)
}
}
impl Drop for Gpio {
fn drop(&mut self) {
unsafe { gpioTerminate() }
}
}