signal/
signal.rs

1use std::time::{Duration, SystemTime, UNIX_EPOCH};
2
3use libmapper_rs::{constants::{mpr_dir, mpr_prop}, device::Device, object::MapperObject};
4
5fn main() {
6    let dev = Device::create("rustmapper");
7    loop {
8        dev.poll_and_block(Duration::from_millis(10));
9        if dev.is_ready() {
10            break;
11        }
12    }
13
14    println!("Device became ready!");
15    let mut sig = dev.create_signal::<f64>("test_sin", mpr_dir::MPR_DIR_OUT);
16    sig.set_property(mpr_prop::MPR_PROP_MIN, -1.0);
17    sig.set_property(mpr_prop::MPR_PROP_MAX, 1.0);
18    
19    let debug_sig = dev.create_signal::<f64>("debug_msg", mpr_dir::MPR_DIR_IN);
20
21    assert!(debug_sig.get_property::<f64>(mpr_prop::MPR_PROP_MIN).is_err());
22    loop {
23        dev.poll_and_block(Duration::from_millis(100));
24        let time = ((SystemTime::now()
25            .duration_since(UNIX_EPOCH)
26            .unwrap()
27            .as_millis() as u64) as f64
28            / 1000f64)
29            .sin();
30        sig.set_value_single(&time).unwrap();
31        if debug_sig.get_status().was_set_remote() {
32            println!(
33                "Received debug message: {:?}",
34                debug_sig.get_value_single::<f64>().unwrap()
35            );
36        }
37    }
38}