67 lines
1.6 KiB
Rust
67 lines
1.6 KiB
Rust
///
|
|
/// Configure udev:
|
|
/// https://github.com/Grix/helios_dac/blob/master/docs/udev_rules_for_linux.md
|
|
///
|
|
mod conf;
|
|
mod point;
|
|
mod draw;
|
|
mod logs;
|
|
mod framerate;
|
|
|
|
use std::sync::atomic::{AtomicBool, Ordering};
|
|
use std::sync::Arc;
|
|
use conf::Conf;
|
|
use point::{Point, Color};
|
|
use log::{info, /* warn, */ error};
|
|
use redis::{Client, Commands, Connection};
|
|
use logs::init_logging;
|
|
|
|
const DEFAULT_CONF_FILE: &str = "settings.toml";
|
|
|
|
pub fn main() {
|
|
match run_all() {
|
|
Ok(()) => {}
|
|
Err(err) => {
|
|
error!("Error: {}", err);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
fn run_all() -> Result<(), Box<dyn std::error::Error>> {
|
|
// Setup handler for interrupt Signals
|
|
let running = Arc::new(AtomicBool::new(true));
|
|
let r = running.clone();
|
|
ctrlc::set_handler(move || {
|
|
r.store(false, Ordering::SeqCst);
|
|
})?;
|
|
|
|
// Setup configuration file and set up logs
|
|
let filename = std::env::args().nth(1).unwrap_or_else(|| { DEFAULT_CONF_FILE.to_string() });
|
|
let config = Conf::new(&filename);
|
|
init_logging(&config);
|
|
let config = config?;
|
|
|
|
let client = Client::open(config.redis_url.clone())?;
|
|
let mut con: Connection = client.get_connection()?;
|
|
|
|
let mut framerate_handler = framerate::Framerate::new( config.framerate )?;
|
|
|
|
info!("*** Starting up ***");
|
|
info!("{:?}", config);
|
|
|
|
// Dispatch based on redis requests
|
|
while running.load(Ordering::SeqCst) {
|
|
let _ = framerate_handler.handle_time();
|
|
let points_list: Vec<Point> = draw::draw()?;
|
|
let v: Vec<(f32, f32, u32)> = points_list.iter().map(|pt| {
|
|
(pt.x, pt.y, u32::from(pt.color))
|
|
}
|
|
).collect();
|
|
// println!("{:?}", v);
|
|
let _ = con.set(format!("/pl/{}/{}", config.client_id, config.laser_id), format!("{:?}", v))?;
|
|
}
|
|
Ok(())
|
|
}
|
|
|