blob: b0c6c961e4aca75ec8e71607fe049892fc7c0dfd [file] [log] [blame]
// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
use anyhow::Result;
use structopt::clap::arg_enum;
use thiserror::Error;
#[derive(Debug, Error)]
pub enum GpioError {
#[error("Invalid GPIO pin name {0}")]
InvalidPinName(String),
#[error("Invalid GPIO pin number {0}")]
InvalidPinNumber(u8),
#[error("Invalid GPIO pin direction: {0}")]
InvalidPinDirection(u8),
}
arg_enum! {
/// Direction for I/O pins.
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum PinDirection {
Input,
Output,
}
}
/// A trait which represents a single GPIO pin.
pub trait GpioPin {
/// Reads the value of the the GPIO pin.
fn read(&self) -> Result<bool>;
/// Sets the value of the GPIO pin to `value`.
fn write(&self, value: bool) -> Result<()>;
/// Sets the `direction` of the GPIO pin as input or output.
fn set_direction(&self, direction: PinDirection) -> Result<()>;
}