Skip to main content

bacnet_client/client/
device_mgmt.rs

1use super::*;
2
3impl<T: TransportPort + 'static> BACnetClient<T> {
4    /// Send DeviceCommunicationControl to a remote device.
5    pub async fn device_communication_control(
6        &self,
7        destination_mac: &[u8],
8        enable_disable: bacnet_types::enums::EnableDisable,
9        time_duration: Option<u16>,
10        password: Option<String>,
11    ) -> Result<(), Error> {
12        use bacnet_services::device_mgmt::DeviceCommunicationControlRequest;
13
14        let request = DeviceCommunicationControlRequest {
15            time_duration,
16            enable_disable,
17            password,
18        };
19        let mut buf = BytesMut::new();
20        request.encode(&mut buf)?;
21
22        let _ = self
23            .confirmed_request(
24                destination_mac,
25                ConfirmedServiceChoice::DEVICE_COMMUNICATION_CONTROL,
26                &buf,
27            )
28            .await?;
29
30        Ok(())
31    }
32
33    /// Send ReinitializeDevice to a remote device.
34    pub async fn reinitialize_device(
35        &self,
36        destination_mac: &[u8],
37        reinitialized_state: bacnet_types::enums::ReinitializedState,
38        password: Option<String>,
39    ) -> Result<(), Error> {
40        use bacnet_services::device_mgmt::ReinitializeDeviceRequest;
41
42        let request = ReinitializeDeviceRequest {
43            reinitialized_state,
44            password,
45        };
46        let mut buf = BytesMut::new();
47        request.encode(&mut buf)?;
48
49        let _ = self
50            .confirmed_request(
51                destination_mac,
52                ConfirmedServiceChoice::REINITIALIZE_DEVICE,
53                &buf,
54            )
55            .await?;
56
57        Ok(())
58    }
59    /// Send a TimeSynchronization request (unconfirmed, no response expected).
60    pub async fn time_synchronization(
61        &self,
62        destination_mac: &[u8],
63        date: bacnet_types::primitives::Date,
64        time: bacnet_types::primitives::Time,
65    ) -> Result<(), Error> {
66        use bacnet_services::device_mgmt::TimeSynchronizationRequest;
67
68        let request = TimeSynchronizationRequest { date, time };
69        let mut buf = BytesMut::new();
70        request.encode(&mut buf);
71
72        self.unconfirmed_request(
73            destination_mac,
74            UnconfirmedServiceChoice::TIME_SYNCHRONIZATION,
75            &buf,
76        )
77        .await
78    }
79
80    /// Send a UTCTimeSynchronization request (unconfirmed, no response expected).
81    pub async fn utc_time_synchronization(
82        &self,
83        destination_mac: &[u8],
84        date: bacnet_types::primitives::Date,
85        time: bacnet_types::primitives::Time,
86    ) -> Result<(), Error> {
87        use bacnet_services::device_mgmt::TimeSynchronizationRequest;
88
89        let request = TimeSynchronizationRequest { date, time };
90        let mut buf = BytesMut::new();
91        request.encode(&mut buf);
92
93        self.unconfirmed_request(
94            destination_mac,
95            UnconfirmedServiceChoice::UTC_TIME_SYNCHRONIZATION,
96            &buf,
97        )
98        .await
99    }
100}