1use super::*;
2
3impl<T: TransportPort + 'static> BACnetClient<T> {
4 pub async fn get_event_information(
6 &self,
7 destination_mac: &[u8],
8 last_received_object_identifier: Option<bacnet_types::primitives::ObjectIdentifier>,
9 ) -> Result<Bytes, Error> {
10 use bacnet_services::alarm_event::GetEventInformationRequest;
11
12 let request = GetEventInformationRequest {
13 last_received_object_identifier,
14 };
15 let mut buf = BytesMut::new();
16 request.encode(&mut buf);
17
18 self.confirmed_request(
19 destination_mac,
20 ConfirmedServiceChoice::GET_EVENT_INFORMATION,
21 &buf,
22 )
23 .await
24 }
25
26 pub async fn acknowledge_alarm(
28 &self,
29 destination_mac: &[u8],
30 acknowledging_process_identifier: u32,
31 event_object_identifier: bacnet_types::primitives::ObjectIdentifier,
32 event_state_acknowledged: u32,
33 acknowledgment_source: &str,
34 ) -> Result<(), Error> {
35 use bacnet_services::alarm_event::AcknowledgeAlarmRequest;
36
37 let request = AcknowledgeAlarmRequest {
38 acknowledging_process_identifier,
39 event_object_identifier,
40 event_state_acknowledged,
41 timestamp: bacnet_types::primitives::BACnetTimeStamp::SequenceNumber(0),
42 acknowledgment_source: acknowledgment_source.to_string(),
43 time_of_acknowledgment: bacnet_types::primitives::BACnetTimeStamp::SequenceNumber(0),
44 };
45 let mut buf = BytesMut::new();
46 request.encode(&mut buf)?;
47
48 let _ = self
49 .confirmed_request(
50 destination_mac,
51 ConfirmedServiceChoice::ACKNOWLEDGE_ALARM,
52 &buf,
53 )
54 .await?;
55
56 Ok(())
57 }
58
59 pub async fn read_range(
61 &self,
62 destination_mac: &[u8],
63 object_identifier: bacnet_types::primitives::ObjectIdentifier,
64 property_identifier: bacnet_types::enums::PropertyIdentifier,
65 property_array_index: Option<u32>,
66 range: Option<bacnet_services::read_range::RangeSpec>,
67 ) -> Result<bacnet_services::read_range::ReadRangeAck, Error> {
68 use bacnet_services::read_range::{ReadRangeAck, ReadRangeRequest};
69
70 let request = ReadRangeRequest {
71 object_identifier,
72 property_identifier,
73 property_array_index,
74 range,
75 };
76 let mut buf = BytesMut::new();
77 request.encode(&mut buf);
78
79 let response_data = self
80 .confirmed_request(destination_mac, ConfirmedServiceChoice::READ_RANGE, &buf)
81 .await?;
82
83 ReadRangeAck::decode(&response_data)
84 }
85
86 pub async fn atomic_read_file(
88 &self,
89 destination_mac: &[u8],
90 file_identifier: bacnet_types::primitives::ObjectIdentifier,
91 access: bacnet_services::file::FileAccessMethod,
92 ) -> Result<Bytes, Error> {
93 use bacnet_services::file::AtomicReadFileRequest;
94
95 let request = AtomicReadFileRequest {
96 file_identifier,
97 access,
98 };
99 let mut buf = BytesMut::new();
100 request.encode(&mut buf);
101
102 self.confirmed_request(
103 destination_mac,
104 ConfirmedServiceChoice::ATOMIC_READ_FILE,
105 &buf,
106 )
107 .await
108 }
109
110 pub async fn atomic_write_file(
112 &self,
113 destination_mac: &[u8],
114 file_identifier: bacnet_types::primitives::ObjectIdentifier,
115 access: bacnet_services::file::FileWriteAccessMethod,
116 ) -> Result<Bytes, Error> {
117 use bacnet_services::file::AtomicWriteFileRequest;
118
119 let request = AtomicWriteFileRequest {
120 file_identifier,
121 access,
122 };
123 let mut buf = BytesMut::new();
124 request.encode(&mut buf);
125
126 self.confirmed_request(
127 destination_mac,
128 ConfirmedServiceChoice::ATOMIC_WRITE_FILE,
129 &buf,
130 )
131 .await
132 }
133
134 pub async fn add_list_element(
136 &self,
137 destination_mac: &[u8],
138 object_identifier: bacnet_types::primitives::ObjectIdentifier,
139 property_identifier: bacnet_types::enums::PropertyIdentifier,
140 property_array_index: Option<u32>,
141 list_of_elements: Vec<u8>,
142 ) -> Result<(), Error> {
143 use bacnet_services::list_manipulation::ListElementRequest;
144
145 let request = ListElementRequest {
146 object_identifier,
147 property_identifier,
148 property_array_index,
149 list_of_elements,
150 };
151 let mut buf = BytesMut::new();
152 request.encode(&mut buf);
153
154 let _ = self
155 .confirmed_request(
156 destination_mac,
157 ConfirmedServiceChoice::ADD_LIST_ELEMENT,
158 &buf,
159 )
160 .await?;
161
162 Ok(())
163 }
164
165 pub async fn remove_list_element(
167 &self,
168 destination_mac: &[u8],
169 object_identifier: bacnet_types::primitives::ObjectIdentifier,
170 property_identifier: bacnet_types::enums::PropertyIdentifier,
171 property_array_index: Option<u32>,
172 list_of_elements: Vec<u8>,
173 ) -> Result<(), Error> {
174 use bacnet_services::list_manipulation::ListElementRequest;
175
176 let request = ListElementRequest {
177 object_identifier,
178 property_identifier,
179 property_array_index,
180 list_of_elements,
181 };
182 let mut buf = BytesMut::new();
183 request.encode(&mut buf);
184
185 let _ = self
186 .confirmed_request(
187 destination_mac,
188 ConfirmedServiceChoice::REMOVE_LIST_ELEMENT,
189 &buf,
190 )
191 .await?;
192
193 Ok(())
194 }
195}