tinkerforge_async/bindings/
analog_in_v2_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 AnalogInV2BrickletFunction {
24 GetVoltage,
25 GetAnalogValue,
26 SetVoltageCallbackPeriod,
27 GetVoltageCallbackPeriod,
28 SetAnalogValueCallbackPeriod,
29 GetAnalogValueCallbackPeriod,
30 SetVoltageCallbackThreshold,
31 GetVoltageCallbackThreshold,
32 SetAnalogValueCallbackThreshold,
33 GetAnalogValueCallbackThreshold,
34 SetDebouncePeriod,
35 GetDebouncePeriod,
36 SetMovingAverage,
37 GetMovingAverage,
38 GetIdentity,
39 CallbackVoltage,
40 CallbackAnalogValue,
41 CallbackVoltageReached,
42 CallbackAnalogValueReached,
43}
44impl From<AnalogInV2BrickletFunction> for u8 {
45 fn from(fun: AnalogInV2BrickletFunction) -> Self {
46 match fun {
47 AnalogInV2BrickletFunction::GetVoltage => 1,
48 AnalogInV2BrickletFunction::GetAnalogValue => 2,
49 AnalogInV2BrickletFunction::SetVoltageCallbackPeriod => 3,
50 AnalogInV2BrickletFunction::GetVoltageCallbackPeriod => 4,
51 AnalogInV2BrickletFunction::SetAnalogValueCallbackPeriod => 5,
52 AnalogInV2BrickletFunction::GetAnalogValueCallbackPeriod => 6,
53 AnalogInV2BrickletFunction::SetVoltageCallbackThreshold => 7,
54 AnalogInV2BrickletFunction::GetVoltageCallbackThreshold => 8,
55 AnalogInV2BrickletFunction::SetAnalogValueCallbackThreshold => 9,
56 AnalogInV2BrickletFunction::GetAnalogValueCallbackThreshold => 10,
57 AnalogInV2BrickletFunction::SetDebouncePeriod => 11,
58 AnalogInV2BrickletFunction::GetDebouncePeriod => 12,
59 AnalogInV2BrickletFunction::SetMovingAverage => 13,
60 AnalogInV2BrickletFunction::GetMovingAverage => 14,
61 AnalogInV2BrickletFunction::GetIdentity => 255,
62 AnalogInV2BrickletFunction::CallbackVoltage => 15,
63 AnalogInV2BrickletFunction::CallbackAnalogValue => 16,
64 AnalogInV2BrickletFunction::CallbackVoltageReached => 17,
65 AnalogInV2BrickletFunction::CallbackAnalogValueReached => 18,
66 }
67 }
68}
69pub const ANALOG_IN_V2_BRICKLET_THRESHOLD_OPTION_OFF: char = 'x';
70pub const ANALOG_IN_V2_BRICKLET_THRESHOLD_OPTION_OUTSIDE: char = 'o';
71pub const ANALOG_IN_V2_BRICKLET_THRESHOLD_OPTION_INSIDE: char = 'i';
72pub const ANALOG_IN_V2_BRICKLET_THRESHOLD_OPTION_SMALLER: char = '<';
73pub const ANALOG_IN_V2_BRICKLET_THRESHOLD_OPTION_GREATER: char = '>';
74
75#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
76pub struct VoltageCallbackThreshold {
77 pub option: char,
78 pub min: u16,
79 pub max: u16,
80}
81impl FromByteSlice for VoltageCallbackThreshold {
82 fn bytes_expected() -> usize {
83 5
84 }
85 fn from_le_byte_slice(bytes: &[u8]) -> VoltageCallbackThreshold {
86 VoltageCallbackThreshold {
87 option: <char>::from_le_byte_slice(&bytes[0..1]),
88 min: <u16>::from_le_byte_slice(&bytes[1..3]),
89 max: <u16>::from_le_byte_slice(&bytes[3..5]),
90 }
91 }
92}
93
94#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
95pub struct AnalogValueCallbackThreshold {
96 pub option: char,
97 pub min: u16,
98 pub max: u16,
99}
100impl FromByteSlice for AnalogValueCallbackThreshold {
101 fn bytes_expected() -> usize {
102 5
103 }
104 fn from_le_byte_slice(bytes: &[u8]) -> AnalogValueCallbackThreshold {
105 AnalogValueCallbackThreshold {
106 option: <char>::from_le_byte_slice(&bytes[0..1]),
107 min: <u16>::from_le_byte_slice(&bytes[1..3]),
108 max: <u16>::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 AnalogInV2Bricklet {
141 device: Device,
142}
143impl AnalogInV2Bricklet {
144 pub const DEVICE_IDENTIFIER: u16 = 251;
145 pub const DEVICE_DISPLAY_NAME: &'static str = "Analog In Bricklet 2.0";
146 pub fn new(uid: Uid, connection: AsyncIpConnection) -> AnalogInV2Bricklet {
148 let mut result = AnalogInV2Bricklet { device: Device::new([2, 0, 10], uid, connection, Self::DEVICE_DISPLAY_NAME) };
149 result.device.response_expected[u8::from(AnalogInV2BrickletFunction::GetVoltage) as usize] = ResponseExpectedFlag::AlwaysTrue;
150 result.device.response_expected[u8::from(AnalogInV2BrickletFunction::GetAnalogValue) as usize] = ResponseExpectedFlag::AlwaysTrue;
151 result.device.response_expected[u8::from(AnalogInV2BrickletFunction::SetVoltageCallbackPeriod) as usize] =
152 ResponseExpectedFlag::True;
153 result.device.response_expected[u8::from(AnalogInV2BrickletFunction::GetVoltageCallbackPeriod) as usize] =
154 ResponseExpectedFlag::AlwaysTrue;
155 result.device.response_expected[u8::from(AnalogInV2BrickletFunction::SetAnalogValueCallbackPeriod) as usize] =
156 ResponseExpectedFlag::True;
157 result.device.response_expected[u8::from(AnalogInV2BrickletFunction::GetAnalogValueCallbackPeriod) as usize] =
158 ResponseExpectedFlag::AlwaysTrue;
159 result.device.response_expected[u8::from(AnalogInV2BrickletFunction::SetVoltageCallbackThreshold) as usize] =
160 ResponseExpectedFlag::True;
161 result.device.response_expected[u8::from(AnalogInV2BrickletFunction::GetVoltageCallbackThreshold) as usize] =
162 ResponseExpectedFlag::AlwaysTrue;
163 result.device.response_expected[u8::from(AnalogInV2BrickletFunction::SetAnalogValueCallbackThreshold) as usize] =
164 ResponseExpectedFlag::True;
165 result.device.response_expected[u8::from(AnalogInV2BrickletFunction::GetAnalogValueCallbackThreshold) as usize] =
166 ResponseExpectedFlag::AlwaysTrue;
167 result.device.response_expected[u8::from(AnalogInV2BrickletFunction::SetDebouncePeriod) as usize] = ResponseExpectedFlag::True;
168 result.device.response_expected[u8::from(AnalogInV2BrickletFunction::GetDebouncePeriod) as usize] =
169 ResponseExpectedFlag::AlwaysTrue;
170 result.device.response_expected[u8::from(AnalogInV2BrickletFunction::SetMovingAverage) as usize] = ResponseExpectedFlag::False;
171 result.device.response_expected[u8::from(AnalogInV2BrickletFunction::GetMovingAverage) as usize] = ResponseExpectedFlag::AlwaysTrue;
172 result.device.response_expected[u8::from(AnalogInV2BrickletFunction::GetIdentity) as usize] = ResponseExpectedFlag::AlwaysTrue;
173 result
174 }
175
176 pub fn get_response_expected(&mut self, fun: AnalogInV2BrickletFunction) -> Result<bool, GetResponseExpectedError> {
191 self.device.get_response_expected(u8::from(fun))
192 }
193
194 pub fn set_response_expected(
203 &mut self,
204 fun: AnalogInV2BrickletFunction,
205 response_expected: bool,
206 ) -> Result<(), SetResponseExpectedError> {
207 self.device.set_response_expected(u8::from(fun), response_expected)
208 }
209
210 pub fn set_response_expected_all(&mut self, response_expected: bool) {
212 self.device.set_response_expected_all(response_expected)
213 }
214
215 pub fn get_api_version(&self) -> [u8; 3] {
218 self.device.api_version
219 }
220
221 pub async fn get_voltage_callback_receiver(&mut self) -> impl Stream<Item = u16> {
231 self.device
232 .get_callback_receiver(u8::from(AnalogInV2BrickletFunction::CallbackVoltage))
233 .await
234 .map(|p| u16::from_le_byte_slice(p.body()))
235 }
236
237 pub async fn get_analog_value_callback_receiver(&mut self) -> impl Stream<Item = u16> {
244 self.device
245 .get_callback_receiver(u8::from(AnalogInV2BrickletFunction::CallbackAnalogValue))
246 .await
247 .map(|p| u16::from_le_byte_slice(p.body()))
248 }
249
250 pub async fn get_voltage_reached_callback_receiver(&mut self) -> impl Stream<Item = u16> {
257 self.device
258 .get_callback_receiver(u8::from(AnalogInV2BrickletFunction::CallbackVoltageReached))
259 .await
260 .map(|p| u16::from_le_byte_slice(p.body()))
261 }
262
263 pub async fn get_analog_value_reached_callback_receiver(&mut self) -> impl Stream<Item = u16> {
270 self.device
271 .get_callback_receiver(u8::from(AnalogInV2BrickletFunction::CallbackAnalogValueReached))
272 .await
273 .map(|p| u16::from_le_byte_slice(p.body()))
274 }
275
276 pub async fn get_voltage(&mut self) -> Result<u16, TinkerforgeError> {
282 let payload = [0; 0];
283
284 #[allow(unused_variables)]
285 let result = self.device.get(u8::from(AnalogInV2BrickletFunction::GetVoltage), &payload).await?;
286 Ok(u16::from_le_byte_slice(result.body()))
287 }
288
289 pub async fn get_analog_value(&mut self) -> Result<u16, TinkerforgeError> {
295 let payload = [0; 0];
296
297 #[allow(unused_variables)]
298 let result = self.device.get(u8::from(AnalogInV2BrickletFunction::GetAnalogValue), &payload).await?;
299 Ok(u16::from_le_byte_slice(result.body()))
300 }
301
302 pub async fn set_voltage_callback_period(&mut self, period: u32) -> Result<(), TinkerforgeError> {
308 let mut payload = [0; 4];
309 period.write_to_slice(&mut payload[0..4]);
310
311 #[allow(unused_variables)]
312 let result = self.device.set(u8::from(AnalogInV2BrickletFunction::SetVoltageCallbackPeriod), &payload).await?;
313 Ok(())
314 }
315
316 pub async fn get_voltage_callback_period(&mut self) -> Result<u32, TinkerforgeError> {
318 let payload = [0; 0];
319
320 #[allow(unused_variables)]
321 let result = self.device.get(u8::from(AnalogInV2BrickletFunction::GetVoltageCallbackPeriod), &payload).await?;
322 Ok(u32::from_le_byte_slice(result.body()))
323 }
324
325 pub async fn set_analog_value_callback_period(&mut self, period: u32) -> Result<(), TinkerforgeError> {
331 let mut payload = [0; 4];
332 period.write_to_slice(&mut payload[0..4]);
333
334 #[allow(unused_variables)]
335 let result = self.device.set(u8::from(AnalogInV2BrickletFunction::SetAnalogValueCallbackPeriod), &payload).await?;
336 Ok(())
337 }
338
339 pub async fn get_analog_value_callback_period(&mut self) -> Result<u32, TinkerforgeError> {
341 let payload = [0; 0];
342
343 #[allow(unused_variables)]
344 let result = self.device.get(u8::from(AnalogInV2BrickletFunction::GetAnalogValueCallbackPeriod), &payload).await?;
345 Ok(u32::from_le_byte_slice(result.body()))
346 }
347
348 pub async fn set_voltage_callback_threshold(&mut self, option: char, min: u16, max: u16) -> Result<(), TinkerforgeError> {
367 let mut payload = [0; 5];
368 option.write_to_slice(&mut payload[0..1]);
369 min.write_to_slice(&mut payload[1..3]);
370 max.write_to_slice(&mut payload[3..5]);
371
372 #[allow(unused_variables)]
373 let result = self.device.set(u8::from(AnalogInV2BrickletFunction::SetVoltageCallbackThreshold), &payload).await?;
374 Ok(())
375 }
376
377 pub async fn get_voltage_callback_threshold(&mut self) -> Result<VoltageCallbackThreshold, TinkerforgeError> {
386 let payload = [0; 0];
387
388 #[allow(unused_variables)]
389 let result = self.device.get(u8::from(AnalogInV2BrickletFunction::GetVoltageCallbackThreshold), &payload).await?;
390 Ok(VoltageCallbackThreshold::from_le_byte_slice(result.body()))
391 }
392
393 pub async fn set_analog_value_callback_threshold(&mut self, option: char, min: u16, max: u16) -> Result<(), TinkerforgeError> {
412 let mut payload = [0; 5];
413 option.write_to_slice(&mut payload[0..1]);
414 min.write_to_slice(&mut payload[1..3]);
415 max.write_to_slice(&mut payload[3..5]);
416
417 #[allow(unused_variables)]
418 let result = self.device.set(u8::from(AnalogInV2BrickletFunction::SetAnalogValueCallbackThreshold), &payload).await?;
419 Ok(())
420 }
421
422 pub async fn get_analog_value_callback_threshold(&mut self) -> Result<AnalogValueCallbackThreshold, TinkerforgeError> {
431 let payload = [0; 0];
432
433 #[allow(unused_variables)]
434 let result = self.device.get(u8::from(AnalogInV2BrickletFunction::GetAnalogValueCallbackThreshold), &payload).await?;
435 Ok(AnalogValueCallbackThreshold::from_le_byte_slice(result.body()))
436 }
437
438 pub async fn set_debounce_period(&mut self, debounce: u32) -> Result<(), TinkerforgeError> {
450 let mut payload = [0; 4];
451 debounce.write_to_slice(&mut payload[0..4]);
452
453 #[allow(unused_variables)]
454 let result = self.device.set(u8::from(AnalogInV2BrickletFunction::SetDebouncePeriod), &payload).await?;
455 Ok(())
456 }
457
458 pub async fn get_debounce_period(&mut self) -> Result<u32, TinkerforgeError> {
460 let payload = [0; 0];
461
462 #[allow(unused_variables)]
463 let result = self.device.get(u8::from(AnalogInV2BrickletFunction::GetDebouncePeriod), &payload).await?;
464 Ok(u32::from_le_byte_slice(result.body()))
465 }
466
467 pub async fn set_moving_average(&mut self, average: u8) -> Result<(), TinkerforgeError> {
473 let mut payload = [0; 1];
474 average.write_to_slice(&mut payload[0..1]);
475
476 #[allow(unused_variables)]
477 let result = self.device.set(u8::from(AnalogInV2BrickletFunction::SetMovingAverage), &payload).await?;
478 Ok(())
479 }
480
481 pub async fn get_moving_average(&mut self) -> Result<u8, TinkerforgeError> {
483 let payload = [0; 0];
484
485 #[allow(unused_variables)]
486 let result = self.device.get(u8::from(AnalogInV2BrickletFunction::GetMovingAverage), &payload).await?;
487 Ok(u8::from_le_byte_slice(result.body()))
488 }
489
490 pub async fn get_identity(&mut self) -> Result<Identity, TinkerforgeError> {
501 let payload = [0; 0];
502
503 #[allow(unused_variables)]
504 let result = self.device.get(u8::from(AnalogInV2BrickletFunction::GetIdentity), &payload).await?;
505 Ok(Identity::from_le_byte_slice(result.body()))
506 }
507}