extern crate chrono;
extern crate sensd;
extern crate serde;
use sensd::action::IOCommand;
use sensd::io::{IOKind, IdType, RawValue, Input, Device};
use sensd::storage::{Group, Persistent};
use std::ops::{DerefMut, Neg};
const FREQUENCY: std::time::Duration = std::time::Duration::from_secs(1);
const OUTPUT_ID: IdType = 0;
fn init(name: &str) -> Group {
let group = Group::new(name.clone());
println!("Initialized poll group: \"{}\"", name);
group
}
fn setup_devices(poller: &mut Group) {
poller.push_input(
Input::new(
"Mock Output",
OUTPUT_ID,
IOKind::Light,
).set_command(
IOCommand::Output(|val| Ok(println!("\n{}\n", val)))
)
);
}
fn main() {
let mut poller = init("main");
setup_devices(&mut poller);
let wrapped_device = poller
.outputs
.get(&OUTPUT_ID)
.expect("Unknown error when retrieving device")
.clone();
println!("█▓▒░ Beginning loop ░▒▓█\n");
let mut value = RawValue::Binary(false);
loop {
{
let mut binding = wrapped_device.try_lock().unwrap();
binding.deref_mut()
.write(value)
.expect("Error while calling `::write()` on output device");
}
poller.save().expect("Error while saving");
value = value.neg();
std::thread::sleep(FREQUENCY);
}
}