Move relay drivers from common to controller
This commit is contained in:
parent
e9b09cd709
commit
228b366320
8 changed files with 1 additions and 160 deletions
BIN
Cargo.lock
generated
BIN
Cargo.lock
generated
Binary file not shown.
|
@ -26,7 +26,3 @@ libsqlite3-sys = { version = "*", features = ["bundled"] }
|
||||||
uuid = { version = "1.8", features = ["v4"] }
|
uuid = { version = "1.8", features = ["v4"] }
|
||||||
futures = "0.3"
|
futures = "0.3"
|
||||||
libc = "0.2"
|
libc = "0.2"
|
||||||
|
|
||||||
rppal = "0.17"
|
|
||||||
rppal-pfd = "0.0.5"
|
|
||||||
rppal-mcp23s17 = "0.0.3"
|
|
||||||
|
|
|
@ -1,35 +0,0 @@
|
||||||
use rppal::gpio::{Gpio, OutputPin};
|
|
||||||
|
|
||||||
use crate::drivers::RelayDriver;
|
|
||||||
use crate::errors::EmgauwaError;
|
|
||||||
|
|
||||||
pub struct GpioDriver {
|
|
||||||
pub gpio: OutputPin,
|
|
||||||
pub inverted: bool,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl GpioDriver {
|
|
||||||
pub fn new(pin: u8, inverted: bool) -> Result<Self, EmgauwaError> {
|
|
||||||
let gpio = Gpio::new()?.get(pin)?.into_output();
|
|
||||||
Ok(Self { gpio, inverted })
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl RelayDriver for GpioDriver {
|
|
||||||
fn set(&mut self, value: bool) -> Result<(), EmgauwaError> {
|
|
||||||
if self.get_high(value) {
|
|
||||||
self.gpio.set_high();
|
|
||||||
} else {
|
|
||||||
self.gpio.set_low();
|
|
||||||
}
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
fn get_pin(&self) -> u8 {
|
|
||||||
self.gpio.pin()
|
|
||||||
}
|
|
||||||
|
|
||||||
fn get_inverted(&self) -> bool {
|
|
||||||
self.inverted
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,19 +0,0 @@
|
||||||
mod gpio;
|
|
||||||
mod null;
|
|
||||||
mod piface;
|
|
||||||
|
|
||||||
pub use gpio::GpioDriver;
|
|
||||||
pub use null::NullDriver;
|
|
||||||
pub use piface::PiFaceDriver;
|
|
||||||
|
|
||||||
use crate::errors::EmgauwaError;
|
|
||||||
|
|
||||||
pub trait RelayDriver {
|
|
||||||
fn get_high(&self, value: bool) -> bool {
|
|
||||||
value ^ self.get_inverted()
|
|
||||||
}
|
|
||||||
|
|
||||||
fn set(&mut self, value: bool) -> Result<(), EmgauwaError>;
|
|
||||||
fn get_pin(&self) -> u8;
|
|
||||||
fn get_inverted(&self) -> bool;
|
|
||||||
}
|
|
|
@ -1,26 +0,0 @@
|
||||||
use crate::drivers::RelayDriver;
|
|
||||||
use crate::errors::EmgauwaError;
|
|
||||||
|
|
||||||
pub struct NullDriver {
|
|
||||||
pub pin: u8,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl NullDriver {
|
|
||||||
pub fn new(pin: u8) -> Self {
|
|
||||||
Self { pin }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl RelayDriver for NullDriver {
|
|
||||||
fn set(&mut self, _value: bool) -> Result<(), EmgauwaError> {
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
fn get_pin(&self) -> u8 {
|
|
||||||
self.pin
|
|
||||||
}
|
|
||||||
|
|
||||||
fn get_inverted(&self) -> bool {
|
|
||||||
false
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,52 +0,0 @@
|
||||||
use rppal_pfd::{
|
|
||||||
ChipSelect, HardwareAddress, OutputPin, PiFaceDigital, PiFaceDigitalError, SpiBus, SpiMode,
|
|
||||||
};
|
|
||||||
|
|
||||||
use crate::drivers::RelayDriver;
|
|
||||||
use crate::errors::EmgauwaError;
|
|
||||||
|
|
||||||
pub struct PiFaceDriver {
|
|
||||||
pub pfd_pin: OutputPin,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl PiFaceDriver {
|
|
||||||
pub fn new(pin: u8, pfd: &Option<PiFaceDigital>) -> Result<Self, EmgauwaError> {
|
|
||||||
let pfd = pfd.as_ref().ok_or(EmgauwaError::Hardware(String::from(
|
|
||||||
"PiFaceDigital not initialized",
|
|
||||||
)))?;
|
|
||||||
let pfd_pin = pfd.get_output_pin(pin)?;
|
|
||||||
Ok(Self { pfd_pin })
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn init_piface() -> Result<PiFaceDigital, EmgauwaError> {
|
|
||||||
let mut pfd = PiFaceDigital::new(
|
|
||||||
HardwareAddress::new(0)?,
|
|
||||||
SpiBus::Spi0,
|
|
||||||
ChipSelect::Cs0,
|
|
||||||
100_000,
|
|
||||||
SpiMode::Mode0,
|
|
||||||
)?;
|
|
||||||
pfd.init()?;
|
|
||||||
|
|
||||||
Ok(pfd)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl RelayDriver for PiFaceDriver {
|
|
||||||
fn set(&mut self, value: bool) -> Result<(), EmgauwaError> {
|
|
||||||
if self.get_high(value) {
|
|
||||||
self.pfd_pin.set_high().map_err(PiFaceDigitalError::from)?;
|
|
||||||
} else {
|
|
||||||
self.pfd_pin.set_low().map_err(PiFaceDigitalError::from)?;
|
|
||||||
}
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
fn get_pin(&self) -> u8 {
|
|
||||||
self.pfd_pin.get_pin_number()
|
|
||||||
}
|
|
||||||
|
|
||||||
fn get_inverted(&self) -> bool {
|
|
||||||
false
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -6,9 +6,6 @@ use actix::MailboxError;
|
||||||
use actix_web::http::StatusCode;
|
use actix_web::http::StatusCode;
|
||||||
use actix_web::HttpResponse;
|
use actix_web::HttpResponse;
|
||||||
use config::ConfigError;
|
use config::ConfigError;
|
||||||
use rppal::gpio;
|
|
||||||
use rppal_mcp23s17::Mcp23s17Error;
|
|
||||||
use rppal_pfd::PiFaceDigitalError;
|
|
||||||
use serde::ser::SerializeStruct;
|
use serde::ser::SerializeStruct;
|
||||||
use serde::{Serialize, Serializer};
|
use serde::{Serialize, Serializer};
|
||||||
|
|
||||||
|
@ -99,25 +96,6 @@ impl From<ConfigError> for EmgauwaError {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<gpio::Error> for EmgauwaError {
|
|
||||||
fn from(value: gpio::Error) -> Self {
|
|
||||||
Self::Hardware(value.to_string())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<PiFaceDigitalError> for EmgauwaError {
|
|
||||||
fn from(value: PiFaceDigitalError) -> Self {
|
|
||||||
match value {
|
|
||||||
PiFaceDigitalError::Mcp23s17Error { source } => match source {
|
|
||||||
Mcp23s17Error::SpiError { source } => Self::Hardware(source.to_string()),
|
|
||||||
_ => Self::Hardware(source.to_string()),
|
|
||||||
},
|
|
||||||
PiFaceDigitalError::GpioError { source } => Self::Hardware(source.to_string()),
|
|
||||||
_ => Self::Hardware(value.to_string()),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<&EmgauwaError> for HttpResponse {
|
impl From<&EmgauwaError> for HttpResponse {
|
||||||
fn from(err: &EmgauwaError) -> Self {
|
fn from(err: &EmgauwaError) -> Self {
|
||||||
HttpResponse::build(err.get_code()).json(err)
|
HttpResponse::build(err.get_code()).json(err)
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
pub mod constants;
|
pub mod constants;
|
||||||
pub mod db;
|
pub mod db;
|
||||||
pub mod drivers;
|
|
||||||
pub mod errors;
|
pub mod errors;
|
||||||
pub mod models;
|
pub mod models;
|
||||||
pub mod settings;
|
pub mod settings;
|
||||||
|
|
Loading…
Reference in a new issue