Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 43 additions & 0 deletions examples/callbacks.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
use std::time::Duration;

use ads::{
index,
notif::{Attributes, TransmissionMode},
AmsAddr, AmsNetId, Client, Source, Timeouts,
};
use crossbeam_channel::unbounded;
use zerocopy::{TryFromBytes, LE, U32};

const AMS_ADDR: AmsAddr = AmsAddr::new(AmsNetId([5, 62, 215, 36, 1, 1]), 851);
const NOTIF_ATTR: Attributes = Attributes::new(
4,
TransmissionMode::ServerOnChange,
Duration::from_secs(1),
Duration::from_secs(1),
);

fn main() {
let client = Client::new(("127.0.0.1", ads::PORT), Timeouts::none(), Source::Request).unwrap();

let dev = client.device(AMS_ADDR);
let (tx, rx) = unbounded();
let cb_handle = dev
.add_callback(index::PLC_RW_M, 0, &NOTIF_ATTR, move |sample| {
tx.send(sample.data.to_vec()).unwrap();
})
.unwrap();

dev.write_value(index::PLC_RW_M, 0, &42).unwrap();
dev.remove_callback(cb_handle).unwrap();

let samples = rx
.into_iter()
.map(|d| U32::<LE>::try_read_from_bytes(&d[..]).unwrap().get())
.collect::<Vec<_>>();

assert!(matches!(&samples[..], [_, 42]));

loop {
std::thread::sleep(std::time::Duration::from_secs(1));
}
}
45 changes: 18 additions & 27 deletions examples/notify.rs
Original file line number Diff line number Diff line change
@@ -1,45 +1,36 @@
use std::time::Duration;

use ads::notif::{Attributes, TransmissionMode};
use ads::{Client, Source, Timeouts};
use ads::{AmsAddr, AmsNetId, Client, Source, Timeouts};

const AMS_ADDR: AmsAddr = AmsAddr::new(AmsNetId([5, 62, 215, 36, 1, 1]), 851);
const NOTIF_ATTR: Attributes = Attributes::new(
4,
TransmissionMode::ServerOnChange,
Duration::from_secs(1),
Duration::from_secs(1),
);

fn main() {
let client = Client::new(("127.0.0.1", ads::PORT), Timeouts::none(), Source::Request).unwrap();
let recv_notify = client.get_notification_channel();

std::thread::spawn(move || {
for msg in recv_notify.iter() {
for sample in msg.samples() {
println!("notify: {sample:?}");
}
}
});
let dev = client.device(ads::AmsAddr::new([5, 62, 215, 36, 1, 1].into(), 851));
let h1 = dev
.add_notification(
0x4020,
4,
&Attributes::new(
4,
TransmissionMode::ServerCycle,
Duration::from_secs(1),
Duration::from_secs(1),
),
)
.unwrap();
let dev2 = client.device(ads::AmsAddr::new([5, 62, 215, 36, 1, 1].into(), 852));
let h2 = dev2
.add_notification(
0x4020,
0,
&Attributes::new(
4,
TransmissionMode::ServerOnChange,
Duration::from_secs(1),
Duration::from_secs(1),
),
)
.unwrap();

let dev = client.device(AMS_ADDR);
let h1 = dev.add_notification(0x4020, 4, &NOTIF_ATTR).unwrap();

let dev2 = client.device(AmsAddr::new([5, 62, 215, 36, 1, 1].into(), 852));
let h2 = dev2.add_notification(0x4020, 0, &NOTIF_ATTR).unwrap();

println!("{h1} {h2}");

loop {
std::thread::sleep(std::time::Duration::from_secs(1));
}
Expand Down
Loading