wishbone-tool 0.7.1

A library and command line program to control a Wishbone bus of an embedded device
Documentation
use crate::config::ConfigError;
use crate::config::ConfigError::SpiParseError;
use crate::config::parse_u32;

#[derive(Clone)]
pub struct SpiPins {
    #[allow(dead_code)]
    mosi: u8,
    #[allow(dead_code)]
    miso: Option<u8>,
    #[allow(dead_code)]
    clk: u8,
    #[allow(dead_code)]
    cs: Option<u8>,
}

impl SpiPins {
    pub fn from_string(spec: &str) -> Result<Self, ConfigError> {
        let chars: Vec<&str> = spec.split(',').collect();

        let (mosi, miso, clk, cs) = match chars.len() {
            2 => {
                (
                    parse_u32(chars[0])? as u8,
                    None,
                    parse_u32(chars[1])? as u8,
                    None,
                )
            }
            3 => {
                (
                    parse_u32(chars[0])? as u8,
                    None,
                    parse_u32(chars[1])? as u8,
                    Some(parse_u32(chars[2])? as u8),
                )
            },
            4 => {
                (
                    parse_u32(chars[0])? as u8,
                    Some(parse_u32(chars[1])? as u8),
                    parse_u32(chars[2])? as u8,
                    Some(parse_u32(chars[3])? as u8),
                )
            }
            _ => return Err(SpiParseError(format!("{} is not a valid pin spec -- must be MOSI,MISO,CLK,CS (e.g. \"2,3,4,18\")", spec)))
        };

        Ok(SpiPins { mosi, miso, clk, cs})
    }
}

#[cfg(all(target_os = "linux", any(target_arch = "arm", target_arch = "aarch64")))]
pub mod raspberry_spi;
#[cfg(all(target_os = "linux", any(target_arch = "arm", target_arch = "aarch64")))]
pub use raspberry_spi::SpiBridge;

#[cfg(not(all(target_os = "linux", any(target_arch = "arm", target_arch = "aarch64"))))]
pub mod dummy_spi;
#[cfg(not(all(target_os = "linux", any(target_arch = "arm", target_arch = "aarch64"))))]
pub use dummy_spi::SpiBridge;