tinkerforge_async/bindings/
temperature_ir_bricklet.rs1#[allow(unused_imports)]
15use crate::{
16 base58::Uid, byte_converter::*, device::*, error::TinkerforgeError, ip_connection::async_io::AsyncIpConnection,
17 low_level_traits::LowLevelRead,
18};
19#[allow(unused_imports)]
20use futures_core::Stream;
21#[allow(unused_imports)]
22use tokio_stream::StreamExt;
23pub enum TemperatureIrBrickletFunction {
24 GetAmbientTemperature,
25 GetObjectTemperature,
26 SetEmissivity,
27 GetEmissivity,
28 SetAmbientTemperatureCallbackPeriod,
29 GetAmbientTemperatureCallbackPeriod,
30 SetObjectTemperatureCallbackPeriod,
31 GetObjectTemperatureCallbackPeriod,
32 SetAmbientTemperatureCallbackThreshold,
33 GetAmbientTemperatureCallbackThreshold,
34 SetObjectTemperatureCallbackThreshold,
35 GetObjectTemperatureCallbackThreshold,
36 SetDebouncePeriod,
37 GetDebouncePeriod,
38 GetIdentity,
39 CallbackAmbientTemperature,
40 CallbackObjectTemperature,
41 CallbackAmbientTemperatureReached,
42 CallbackObjectTemperatureReached,
43}
44impl From<TemperatureIrBrickletFunction> for u8 {
45 fn from(fun: TemperatureIrBrickletFunction) -> Self {
46 match fun {
47 TemperatureIrBrickletFunction::GetAmbientTemperature => 1,
48 TemperatureIrBrickletFunction::GetObjectTemperature => 2,
49 TemperatureIrBrickletFunction::SetEmissivity => 3,
50 TemperatureIrBrickletFunction::GetEmissivity => 4,
51 TemperatureIrBrickletFunction::SetAmbientTemperatureCallbackPeriod => 5,
52 TemperatureIrBrickletFunction::GetAmbientTemperatureCallbackPeriod => 6,
53 TemperatureIrBrickletFunction::SetObjectTemperatureCallbackPeriod => 7,
54 TemperatureIrBrickletFunction::GetObjectTemperatureCallbackPeriod => 8,
55 TemperatureIrBrickletFunction::SetAmbientTemperatureCallbackThreshold => 9,
56 TemperatureIrBrickletFunction::GetAmbientTemperatureCallbackThreshold => 10,
57 TemperatureIrBrickletFunction::SetObjectTemperatureCallbackThreshold => 11,
58 TemperatureIrBrickletFunction::GetObjectTemperatureCallbackThreshold => 12,
59 TemperatureIrBrickletFunction::SetDebouncePeriod => 13,
60 TemperatureIrBrickletFunction::GetDebouncePeriod => 14,
61 TemperatureIrBrickletFunction::GetIdentity => 255,
62 TemperatureIrBrickletFunction::CallbackAmbientTemperature => 15,
63 TemperatureIrBrickletFunction::CallbackObjectTemperature => 16,
64 TemperatureIrBrickletFunction::CallbackAmbientTemperatureReached => 17,
65 TemperatureIrBrickletFunction::CallbackObjectTemperatureReached => 18,
66 }
67 }
68}
69pub const TEMPERATURE_IR_BRICKLET_THRESHOLD_OPTION_OFF: char = 'x';
70pub const TEMPERATURE_IR_BRICKLET_THRESHOLD_OPTION_OUTSIDE: char = 'o';
71pub const TEMPERATURE_IR_BRICKLET_THRESHOLD_OPTION_INSIDE: char = 'i';
72pub const TEMPERATURE_IR_BRICKLET_THRESHOLD_OPTION_SMALLER: char = '<';
73pub const TEMPERATURE_IR_BRICKLET_THRESHOLD_OPTION_GREATER: char = '>';
74
75#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
76pub struct AmbientTemperatureCallbackThreshold {
77 pub option: char,
78 pub min: i16,
79 pub max: i16,
80}
81impl FromByteSlice for AmbientTemperatureCallbackThreshold {
82 fn bytes_expected() -> usize {
83 5
84 }
85 fn from_le_byte_slice(bytes: &[u8]) -> AmbientTemperatureCallbackThreshold {
86 AmbientTemperatureCallbackThreshold {
87 option: <char>::from_le_byte_slice(&bytes[0..1]),
88 min: <i16>::from_le_byte_slice(&bytes[1..3]),
89 max: <i16>::from_le_byte_slice(&bytes[3..5]),
90 }
91 }
92}
93
94#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
95pub struct ObjectTemperatureCallbackThreshold {
96 pub option: char,
97 pub min: i16,
98 pub max: i16,
99}
100impl FromByteSlice for ObjectTemperatureCallbackThreshold {
101 fn bytes_expected() -> usize {
102 5
103 }
104 fn from_le_byte_slice(bytes: &[u8]) -> ObjectTemperatureCallbackThreshold {
105 ObjectTemperatureCallbackThreshold {
106 option: <char>::from_le_byte_slice(&bytes[0..1]),
107 min: <i16>::from_le_byte_slice(&bytes[1..3]),
108 max: <i16>::from_le_byte_slice(&bytes[3..5]),
109 }
110 }
111}
112
113#[derive(Clone, Debug, Default, PartialEq, Eq, Hash)]
114pub struct Identity {
115 pub uid: String,
116 pub connected_uid: String,
117 pub position: char,
118 pub hardware_version: [u8; 3],
119 pub firmware_version: [u8; 3],
120 pub device_identifier: u16,
121}
122impl FromByteSlice for Identity {
123 fn bytes_expected() -> usize {
124 25
125 }
126 fn from_le_byte_slice(bytes: &[u8]) -> Identity {
127 Identity {
128 uid: <String>::from_le_byte_slice(&bytes[0..8]),
129 connected_uid: <String>::from_le_byte_slice(&bytes[8..16]),
130 position: <char>::from_le_byte_slice(&bytes[16..17]),
131 hardware_version: <[u8; 3]>::from_le_byte_slice(&bytes[17..20]),
132 firmware_version: <[u8; 3]>::from_le_byte_slice(&bytes[20..23]),
133 device_identifier: <u16>::from_le_byte_slice(&bytes[23..25]),
134 }
135 }
136}
137
138#[derive(Clone)]
140pub struct TemperatureIrBricklet {
141 device: Device,
142}
143impl TemperatureIrBricklet {
144 pub const DEVICE_IDENTIFIER: u16 = 217;
145 pub const DEVICE_DISPLAY_NAME: &'static str = "Temperature IR Bricklet";
146 pub fn new(uid: Uid, connection: AsyncIpConnection) -> TemperatureIrBricklet {
148 let mut result = TemperatureIrBricklet { device: Device::new([2, 0, 10], uid, connection, Self::DEVICE_DISPLAY_NAME) };
149 result.device.response_expected[u8::from(TemperatureIrBrickletFunction::GetAmbientTemperature) as usize] =
150 ResponseExpectedFlag::AlwaysTrue;
151 result.device.response_expected[u8::from(TemperatureIrBrickletFunction::GetObjectTemperature) as usize] =
152 ResponseExpectedFlag::AlwaysTrue;
153 result.device.response_expected[u8::from(TemperatureIrBrickletFunction::SetEmissivity) as usize] = ResponseExpectedFlag::False;
154 result.device.response_expected[u8::from(TemperatureIrBrickletFunction::GetEmissivity) as usize] = ResponseExpectedFlag::AlwaysTrue;
155 result.device.response_expected[u8::from(TemperatureIrBrickletFunction::SetAmbientTemperatureCallbackPeriod) as usize] =
156 ResponseExpectedFlag::True;
157 result.device.response_expected[u8::from(TemperatureIrBrickletFunction::GetAmbientTemperatureCallbackPeriod) as usize] =
158 ResponseExpectedFlag::AlwaysTrue;
159 result.device.response_expected[u8::from(TemperatureIrBrickletFunction::SetObjectTemperatureCallbackPeriod) as usize] =
160 ResponseExpectedFlag::True;
161 result.device.response_expected[u8::from(TemperatureIrBrickletFunction::GetObjectTemperatureCallbackPeriod) as usize] =
162 ResponseExpectedFlag::AlwaysTrue;
163 result.device.response_expected[u8::from(TemperatureIrBrickletFunction::SetAmbientTemperatureCallbackThreshold) as usize] =
164 ResponseExpectedFlag::True;
165 result.device.response_expected[u8::from(TemperatureIrBrickletFunction::GetAmbientTemperatureCallbackThreshold) as usize] =
166 ResponseExpectedFlag::AlwaysTrue;
167 result.device.response_expected[u8::from(TemperatureIrBrickletFunction::SetObjectTemperatureCallbackThreshold) as usize] =
168 ResponseExpectedFlag::True;
169 result.device.response_expected[u8::from(TemperatureIrBrickletFunction::GetObjectTemperatureCallbackThreshold) as usize] =
170 ResponseExpectedFlag::AlwaysTrue;
171 result.device.response_expected[u8::from(TemperatureIrBrickletFunction::SetDebouncePeriod) as usize] = ResponseExpectedFlag::True;
172 result.device.response_expected[u8::from(TemperatureIrBrickletFunction::GetDebouncePeriod) as usize] =
173 ResponseExpectedFlag::AlwaysTrue;
174 result.device.response_expected[u8::from(TemperatureIrBrickletFunction::GetIdentity) as usize] = ResponseExpectedFlag::AlwaysTrue;
175 result
176 }
177
178 pub fn get_response_expected(&mut self, fun: TemperatureIrBrickletFunction) -> Result<bool, GetResponseExpectedError> {
193 self.device.get_response_expected(u8::from(fun))
194 }
195
196 pub fn set_response_expected(
205 &mut self,
206 fun: TemperatureIrBrickletFunction,
207 response_expected: bool,
208 ) -> Result<(), SetResponseExpectedError> {
209 self.device.set_response_expected(u8::from(fun), response_expected)
210 }
211
212 pub fn set_response_expected_all(&mut self, response_expected: bool) {
214 self.device.set_response_expected_all(response_expected)
215 }
216
217 pub fn get_api_version(&self) -> [u8; 3] {
220 self.device.api_version
221 }
222
223 pub async fn get_ambient_temperature_callback_receiver(&mut self) -> impl Stream<Item = i16> {
233 self.device
234 .get_callback_receiver(u8::from(TemperatureIrBrickletFunction::CallbackAmbientTemperature))
235 .await
236 .map(|p| i16::from_le_byte_slice(p.body()))
237 }
238
239 pub async fn get_object_temperature_callback_receiver(&mut self) -> impl Stream<Item = i16> {
246 self.device
247 .get_callback_receiver(u8::from(TemperatureIrBrickletFunction::CallbackObjectTemperature))
248 .await
249 .map(|p| i16::from_le_byte_slice(p.body()))
250 }
251
252 pub async fn get_ambient_temperature_reached_callback_receiver(&mut self) -> impl Stream<Item = i16> {
259 self.device
260 .get_callback_receiver(u8::from(TemperatureIrBrickletFunction::CallbackAmbientTemperatureReached))
261 .await
262 .map(|p| i16::from_le_byte_slice(p.body()))
263 }
264
265 pub async fn get_object_temperature_reached_callback_receiver(&mut self) -> impl Stream<Item = i16> {
272 self.device
273 .get_callback_receiver(u8::from(TemperatureIrBrickletFunction::CallbackObjectTemperatureReached))
274 .await
275 .map(|p| i16::from_le_byte_slice(p.body()))
276 }
277
278 pub async fn get_ambient_temperature(&mut self) -> Result<i16, TinkerforgeError> {
284 let payload = [0; 0];
285
286 #[allow(unused_variables)]
287 let result = self.device.get(u8::from(TemperatureIrBrickletFunction::GetAmbientTemperature), &payload).await?;
288 Ok(i16::from_le_byte_slice(result.body()))
289 }
290
291 pub async fn get_object_temperature(&mut self) -> Result<i16, TinkerforgeError> {
302 let payload = [0; 0];
303
304 #[allow(unused_variables)]
305 let result = self.device.get(u8::from(TemperatureIrBrickletFunction::GetObjectTemperature), &payload).await?;
306 Ok(i16::from_le_byte_slice(result.body()))
307 }
308
309 pub async fn set_emissivity(&mut self, emissivity: u16) -> Result<(), TinkerforgeError> {
327 let mut payload = [0; 2];
328 emissivity.write_to_slice(&mut payload[0..2]);
329
330 #[allow(unused_variables)]
331 let result = self.device.set(u8::from(TemperatureIrBrickletFunction::SetEmissivity), &payload).await?;
332 Ok(())
333 }
334
335 pub async fn get_emissivity(&mut self) -> Result<u16, TinkerforgeError> {
337 let payload = [0; 0];
338
339 #[allow(unused_variables)]
340 let result = self.device.get(u8::from(TemperatureIrBrickletFunction::GetEmissivity), &payload).await?;
341 Ok(u16::from_le_byte_slice(result.body()))
342 }
343
344 pub async fn set_ambient_temperature_callback_period(&mut self, period: u32) -> Result<(), TinkerforgeError> {
350 let mut payload = [0; 4];
351 period.write_to_slice(&mut payload[0..4]);
352
353 #[allow(unused_variables)]
354 let result = self.device.set(u8::from(TemperatureIrBrickletFunction::SetAmbientTemperatureCallbackPeriod), &payload).await?;
355 Ok(())
356 }
357
358 pub async fn get_ambient_temperature_callback_period(&mut self) -> Result<u32, TinkerforgeError> {
360 let payload = [0; 0];
361
362 #[allow(unused_variables)]
363 let result = self.device.get(u8::from(TemperatureIrBrickletFunction::GetAmbientTemperatureCallbackPeriod), &payload).await?;
364 Ok(u32::from_le_byte_slice(result.body()))
365 }
366
367 pub async fn set_object_temperature_callback_period(&mut self, period: u32) -> Result<(), TinkerforgeError> {
373 let mut payload = [0; 4];
374 period.write_to_slice(&mut payload[0..4]);
375
376 #[allow(unused_variables)]
377 let result = self.device.set(u8::from(TemperatureIrBrickletFunction::SetObjectTemperatureCallbackPeriod), &payload).await?;
378 Ok(())
379 }
380
381 pub async fn get_object_temperature_callback_period(&mut self) -> Result<u32, TinkerforgeError> {
383 let payload = [0; 0];
384
385 #[allow(unused_variables)]
386 let result = self.device.get(u8::from(TemperatureIrBrickletFunction::GetObjectTemperatureCallbackPeriod), &payload).await?;
387 Ok(u32::from_le_byte_slice(result.body()))
388 }
389
390 pub async fn set_ambient_temperature_callback_threshold(&mut self, option: char, min: i16, max: i16) -> Result<(), TinkerforgeError> {
409 let mut payload = [0; 5];
410 option.write_to_slice(&mut payload[0..1]);
411 min.write_to_slice(&mut payload[1..3]);
412 max.write_to_slice(&mut payload[3..5]);
413
414 #[allow(unused_variables)]
415 let result = self.device.set(u8::from(TemperatureIrBrickletFunction::SetAmbientTemperatureCallbackThreshold), &payload).await?;
416 Ok(())
417 }
418
419 pub async fn get_ambient_temperature_callback_threshold(&mut self) -> Result<AmbientTemperatureCallbackThreshold, TinkerforgeError> {
428 let payload = [0; 0];
429
430 #[allow(unused_variables)]
431 let result = self.device.get(u8::from(TemperatureIrBrickletFunction::GetAmbientTemperatureCallbackThreshold), &payload).await?;
432 Ok(AmbientTemperatureCallbackThreshold::from_le_byte_slice(result.body()))
433 }
434
435 pub async fn set_object_temperature_callback_threshold(&mut self, option: char, min: i16, max: i16) -> Result<(), TinkerforgeError> {
454 let mut payload = [0; 5];
455 option.write_to_slice(&mut payload[0..1]);
456 min.write_to_slice(&mut payload[1..3]);
457 max.write_to_slice(&mut payload[3..5]);
458
459 #[allow(unused_variables)]
460 let result = self.device.set(u8::from(TemperatureIrBrickletFunction::SetObjectTemperatureCallbackThreshold), &payload).await?;
461 Ok(())
462 }
463
464 pub async fn get_object_temperature_callback_threshold(&mut self) -> Result<ObjectTemperatureCallbackThreshold, TinkerforgeError> {
473 let payload = [0; 0];
474
475 #[allow(unused_variables)]
476 let result = self.device.get(u8::from(TemperatureIrBrickletFunction::GetObjectTemperatureCallbackThreshold), &payload).await?;
477 Ok(ObjectTemperatureCallbackThreshold::from_le_byte_slice(result.body()))
478 }
479
480 pub async fn set_debounce_period(&mut self, debounce: u32) -> Result<(), TinkerforgeError> {
492 let mut payload = [0; 4];
493 debounce.write_to_slice(&mut payload[0..4]);
494
495 #[allow(unused_variables)]
496 let result = self.device.set(u8::from(TemperatureIrBrickletFunction::SetDebouncePeriod), &payload).await?;
497 Ok(())
498 }
499
500 pub async fn get_debounce_period(&mut self) -> Result<u32, TinkerforgeError> {
502 let payload = [0; 0];
503
504 #[allow(unused_variables)]
505 let result = self.device.get(u8::from(TemperatureIrBrickletFunction::GetDebouncePeriod), &payload).await?;
506 Ok(u32::from_le_byte_slice(result.body()))
507 }
508
509 pub async fn get_identity(&mut self) -> Result<Identity, TinkerforgeError> {
520 let payload = [0; 0];
521
522 #[allow(unused_variables)]
523 let result = self.device.get(u8::from(TemperatureIrBrickletFunction::GetIdentity), &payload).await?;
524 Ok(Identity::from_le_byte_slice(result.body()))
525 }
526}