core_events/
core_events.rs1use opendaq::{Channel, CoreEventArgs, Instance};
9
10fn main() -> opendaq::Result<()> {
11 let instance = Instance::new()?;
12 instance.add_device("daqref://device0")?;
13
14 let channel = instance
15 .find_component("Dev/RefDev0/IO/AI/RefCh0")?
16 .expect("reference channel not found")
17 .cast::<Channel>()?;
18
19 let core_event = instance
20 .context()?
21 .expect("context")
22 .on_core_event()?
23 .expect("core event");
24
25 let handler = core_event.subscribe(|_sender, args| {
29 let Some(args) = args else { return };
30 let Ok(event) = args.cast::<CoreEventArgs>() else {
31 return;
32 };
33 let name = event.event_name().unwrap_or_default();
34 let parameters = event.parameters().unwrap_or_default();
35 let changed = parameters
36 .get("Name")
37 .map(ToString::to_string)
38 .unwrap_or_default();
39 println!(" {name}: {changed}");
40 })?;
41
42 println!("subscribed:");
44 channel.set_property_value("Frequency", 25.0)?;
45 channel.set_property_value("Amplitude", 7.5)?;
46
47 core_event.unsubscribe(&handler)?;
49 println!("unsubscribed (no lines expected below):");
50 channel.set_property_value("Frequency", 50.0)?;
51
52 Ok(())
53}