extend basic impl
This commit is contained in:
parent
9e2d300347
commit
63152739c4
0
satrs-core/src/device.rs
Normal file
0
satrs-core/src/device.rs
Normal file
@ -1,7 +1,12 @@
|
|||||||
|
#[cfg(feature = "serde")]
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
/// Generic trait for a device capable of switching itself on or off.
|
||||||
pub trait PowerSwitch {
|
pub trait PowerSwitch {
|
||||||
fn switch_on(&mut self);
|
type Error;
|
||||||
fn switch_off(&mut self);
|
|
||||||
|
fn switch_on(&mut self) -> Result<(), Self::Error>;
|
||||||
|
fn switch_off(&mut self) -> Result<(), Self::Error>;
|
||||||
|
|
||||||
fn is_switch_on(&self) -> bool {
|
fn is_switch_on(&self) -> bool {
|
||||||
self.switch_state() == SwitchState::On
|
self.switch_state() == SwitchState::On
|
||||||
@ -10,19 +15,41 @@ pub trait PowerSwitch {
|
|||||||
fn switch_state(&self) -> SwitchState;
|
fn switch_state(&self) -> SwitchState;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Eq, PartialEq, Copy, Clone)]
|
||||||
|
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||||
pub enum SwitchState {
|
pub enum SwitchState {
|
||||||
Off = 0,
|
Off = 0,
|
||||||
On = 1,
|
On = 1,
|
||||||
Unknown = 2
|
Unknown = 2,
|
||||||
|
Faulty = 3
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub type SwitchId = u16;
|
||||||
|
|
||||||
|
/// Generic trait for a device capable of turning on and off switches.
|
||||||
pub trait PowerSwitcher {
|
pub trait PowerSwitcher {
|
||||||
fn send_switch_on_cmd(&mut self, switch_nr: u16);
|
type Error;
|
||||||
fn send_switch_off_cmd(&mut self, switch_nr: u16);
|
|
||||||
|
|
||||||
fn get_switch_state(&mut self, switch_nr: u16) -> SwitchState;
|
fn send_switch_on_cmd(&mut self, switch_id: SwitchId) -> Result<(), Self::Error>;
|
||||||
|
fn send_switch_off_cmd(&mut self, switch_id: SwitchId) -> Result<(), Self::Error>;
|
||||||
|
|
||||||
fn get_is_switch_on(&mut self) -> bool {
|
fn switch_on<T: PowerSwitch>(&mut self, switch: &mut T) -> Result<(), <T as PowerSwitch>::Error> {
|
||||||
self.get_switch_state() == SwitchState::On
|
switch.switch_on()
|
||||||
}
|
}
|
||||||
|
fn switch_off<T: PowerSwitch>(&mut self, switch: &mut T) -> Result<(), <T as PowerSwitch>::Error> {
|
||||||
|
switch.switch_off()
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Retrieve the switch state
|
||||||
|
fn get_switch_state(&mut self, switch_id: SwitchId) -> SwitchState;
|
||||||
|
|
||||||
|
fn get_is_switch_on(&mut self, switch_id: SwitchId) -> bool {
|
||||||
|
self.get_switch_state(switch_id) == SwitchState::On
|
||||||
|
}
|
||||||
|
|
||||||
|
/// The maximum delay it will take to change a switch.
|
||||||
|
///
|
||||||
|
/// This may take into account the time to send a command, wait for it to be executed, and
|
||||||
|
/// see the switch changed.
|
||||||
|
fn switch_delay_ms(&self) -> u32;
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user