use crate::error::{Error, Result};
use crate::infrastructure::programmer::traits::Programmer;
use log::debug;
pub struct SpidevProgrammer {
#[allow(dead_code)]
device_path: String,
#[allow(dead_code)]
cs_gpio_pin: Option<u32>, current_speed: u32,
}
impl SpidevProgrammer {
pub fn new(device_path: String, _cs_pin: Option<u32>) -> Result<Self> {
debug!("Initializing spidev programmer: {}", device_path);
Err(Error::NotSupported(
"spidev support is under development. Coming in v0.6.1!".to_string(),
))
}
pub fn new_raspberry_pi_default() -> Result<Self> {
Self::new("/dev/spidev0.0".to_string(), None)
}
}
impl Programmer for SpidevProgrammer {
fn name(&self) -> &str {
"Linux spidev Programmer"
}
fn spi_transfer(&mut self, _tx: &[u8], _rx: &mut [u8]) -> Result<()> {
Err(Error::NotSupported(
"spidev SPI not yet implemented".to_string(),
))
}
fn set_cs(&mut self, _active: bool) -> Result<()> {
Ok(()) }
fn set_speed(&mut self, speed: u8) -> Result<()> {
let speed_hz = match speed {
0 => 100_000, 1 => 500_000, 2 => 1_000_000, 3 => 2_000_000, 4 => 5_000_000, 5 => 10_000_000, 6 => 20_000_000, 7 => 50_000_000, _ => 10_000_000,
};
self.current_speed = speed_hz;
debug!("spidev: Set speed to {} Hz", speed_hz);
Ok(())
}
}