Skip to main content

bacnet_client/client/
cov.rs

1use super::*;
2
3impl<T: TransportPort + 'static> BACnetClient<T> {
4    pub async fn subscribe_cov(
5        &self,
6        destination_mac: &[u8],
7        subscriber_process_identifier: u32,
8        monitored_object_identifier: bacnet_types::primitives::ObjectIdentifier,
9        confirmed: bool,
10        lifetime: Option<u32>,
11    ) -> Result<(), Error> {
12        use bacnet_services::cov::SubscribeCOVRequest;
13
14        let request = SubscribeCOVRequest {
15            subscriber_process_identifier,
16            monitored_object_identifier,
17            issue_confirmed_notifications: Some(confirmed),
18            lifetime,
19        };
20        let mut buf = BytesMut::new();
21        request.encode(&mut buf);
22
23        let _ = self
24            .confirmed_request(destination_mac, ConfirmedServiceChoice::SUBSCRIBE_COV, &buf)
25            .await?;
26
27        Ok(())
28    }
29
30    /// Cancel a COV subscription on a remote device.
31    pub async fn unsubscribe_cov(
32        &self,
33        destination_mac: &[u8],
34        subscriber_process_identifier: u32,
35        monitored_object_identifier: bacnet_types::primitives::ObjectIdentifier,
36    ) -> Result<(), Error> {
37        use bacnet_services::cov::SubscribeCOVRequest;
38
39        let request = SubscribeCOVRequest {
40            subscriber_process_identifier,
41            monitored_object_identifier,
42            issue_confirmed_notifications: None,
43            lifetime: None,
44        };
45        let mut buf = BytesMut::new();
46        request.encode(&mut buf);
47
48        let _ = self
49            .confirmed_request(destination_mac, ConfirmedServiceChoice::SUBSCRIBE_COV, &buf)
50            .await?;
51
52        Ok(())
53    }
54
55    /// Delete an object on a remote device.
56    /// Get a receiver for incoming COV notifications. Each call returns a new
57    /// independent receiver.
58    pub fn cov_notifications(&self) -> broadcast::Receiver<COVNotificationRequest> {
59        self.cov_tx.subscribe()
60    }
61}