tinkerforge_async/bindings/
analog_out_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 AnalogOutV2BrickletFunction {
24 SetOutputVoltage,
25 GetOutputVoltage,
26 GetInputVoltage,
27 GetIdentity,
28}
29impl From<AnalogOutV2BrickletFunction> for u8 {
30 fn from(fun: AnalogOutV2BrickletFunction) -> Self {
31 match fun {
32 AnalogOutV2BrickletFunction::SetOutputVoltage => 1,
33 AnalogOutV2BrickletFunction::GetOutputVoltage => 2,
34 AnalogOutV2BrickletFunction::GetInputVoltage => 3,
35 AnalogOutV2BrickletFunction::GetIdentity => 255,
36 }
37 }
38}
39
40#[derive(Clone, Debug, Default, PartialEq, Eq, Hash)]
41pub struct Identity {
42 pub uid: String,
43 pub connected_uid: String,
44 pub position: char,
45 pub hardware_version: [u8; 3],
46 pub firmware_version: [u8; 3],
47 pub device_identifier: u16,
48}
49impl FromByteSlice for Identity {
50 fn bytes_expected() -> usize {
51 25
52 }
53 fn from_le_byte_slice(bytes: &[u8]) -> Identity {
54 Identity {
55 uid: <String>::from_le_byte_slice(&bytes[0..8]),
56 connected_uid: <String>::from_le_byte_slice(&bytes[8..16]),
57 position: <char>::from_le_byte_slice(&bytes[16..17]),
58 hardware_version: <[u8; 3]>::from_le_byte_slice(&bytes[17..20]),
59 firmware_version: <[u8; 3]>::from_le_byte_slice(&bytes[20..23]),
60 device_identifier: <u16>::from_le_byte_slice(&bytes[23..25]),
61 }
62 }
63}
64
65#[derive(Clone)]
67pub struct AnalogOutV2Bricklet {
68 device: Device,
69}
70impl AnalogOutV2Bricklet {
71 pub const DEVICE_IDENTIFIER: u16 = 256;
72 pub const DEVICE_DISPLAY_NAME: &'static str = "Analog Out Bricklet 2.0";
73 pub fn new(uid: Uid, connection: AsyncIpConnection) -> AnalogOutV2Bricklet {
75 let mut result = AnalogOutV2Bricklet { device: Device::new([2, 0, 10], uid, connection, Self::DEVICE_DISPLAY_NAME) };
76 result.device.response_expected[u8::from(AnalogOutV2BrickletFunction::SetOutputVoltage) as usize] = ResponseExpectedFlag::False;
77 result.device.response_expected[u8::from(AnalogOutV2BrickletFunction::GetOutputVoltage) as usize] =
78 ResponseExpectedFlag::AlwaysTrue;
79 result.device.response_expected[u8::from(AnalogOutV2BrickletFunction::GetInputVoltage) as usize] = ResponseExpectedFlag::AlwaysTrue;
80 result.device.response_expected[u8::from(AnalogOutV2BrickletFunction::GetIdentity) as usize] = ResponseExpectedFlag::AlwaysTrue;
81 result
82 }
83
84 pub fn get_response_expected(&mut self, fun: AnalogOutV2BrickletFunction) -> Result<bool, GetResponseExpectedError> {
99 self.device.get_response_expected(u8::from(fun))
100 }
101
102 pub fn set_response_expected(
111 &mut self,
112 fun: AnalogOutV2BrickletFunction,
113 response_expected: bool,
114 ) -> Result<(), SetResponseExpectedError> {
115 self.device.set_response_expected(u8::from(fun), response_expected)
116 }
117
118 pub fn set_response_expected_all(&mut self, response_expected: bool) {
120 self.device.set_response_expected_all(response_expected)
121 }
122
123 pub fn get_api_version(&self) -> [u8; 3] {
126 self.device.api_version
127 }
128
129 pub async fn set_output_voltage(&mut self, voltage: u16) -> Result<(), TinkerforgeError> {
131 let mut payload = [0; 2];
132 voltage.write_to_slice(&mut payload[0..2]);
133
134 #[allow(unused_variables)]
135 let result = self.device.set(u8::from(AnalogOutV2BrickletFunction::SetOutputVoltage), &payload).await?;
136 Ok(())
137 }
138
139 pub async fn get_output_voltage(&mut self) -> Result<u16, TinkerforgeError> {
141 let payload = [0; 0];
142
143 #[allow(unused_variables)]
144 let result = self.device.get(u8::from(AnalogOutV2BrickletFunction::GetOutputVoltage), &payload).await?;
145 Ok(u16::from_le_byte_slice(result.body()))
146 }
147
148 pub async fn get_input_voltage(&mut self) -> Result<u16, TinkerforgeError> {
150 let payload = [0; 0];
151
152 #[allow(unused_variables)]
153 let result = self.device.get(u8::from(AnalogOutV2BrickletFunction::GetInputVoltage), &payload).await?;
154 Ok(u16::from_le_byte_slice(result.body()))
155 }
156
157 pub async fn get_identity(&mut self) -> Result<Identity, TinkerforgeError> {
168 let payload = [0; 0];
169
170 #[allow(unused_variables)]
171 let result = self.device.get(u8::from(AnalogOutV2BrickletFunction::GetIdentity), &payload).await?;
172 Ok(Identity::from_le_byte_slice(result.body()))
173 }
174}