tinkerforge_async/bindings/
temperature_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 TemperatureV2BrickletFunction {
24 GetTemperature,
25 SetTemperatureCallbackConfiguration,
26 GetTemperatureCallbackConfiguration,
27 SetHeaterConfiguration,
28 GetHeaterConfiguration,
29 GetSpitfpErrorCount,
30 SetBootloaderMode,
31 GetBootloaderMode,
32 SetWriteFirmwarePointer,
33 WriteFirmware,
34 SetStatusLedConfig,
35 GetStatusLedConfig,
36 GetChipTemperature,
37 Reset,
38 WriteUid,
39 ReadUid,
40 GetIdentity,
41 CallbackTemperature,
42}
43impl From<TemperatureV2BrickletFunction> for u8 {
44 fn from(fun: TemperatureV2BrickletFunction) -> Self {
45 match fun {
46 TemperatureV2BrickletFunction::GetTemperature => 1,
47 TemperatureV2BrickletFunction::SetTemperatureCallbackConfiguration => 2,
48 TemperatureV2BrickletFunction::GetTemperatureCallbackConfiguration => 3,
49 TemperatureV2BrickletFunction::SetHeaterConfiguration => 5,
50 TemperatureV2BrickletFunction::GetHeaterConfiguration => 6,
51 TemperatureV2BrickletFunction::GetSpitfpErrorCount => 234,
52 TemperatureV2BrickletFunction::SetBootloaderMode => 235,
53 TemperatureV2BrickletFunction::GetBootloaderMode => 236,
54 TemperatureV2BrickletFunction::SetWriteFirmwarePointer => 237,
55 TemperatureV2BrickletFunction::WriteFirmware => 238,
56 TemperatureV2BrickletFunction::SetStatusLedConfig => 239,
57 TemperatureV2BrickletFunction::GetStatusLedConfig => 240,
58 TemperatureV2BrickletFunction::GetChipTemperature => 242,
59 TemperatureV2BrickletFunction::Reset => 243,
60 TemperatureV2BrickletFunction::WriteUid => 248,
61 TemperatureV2BrickletFunction::ReadUid => 249,
62 TemperatureV2BrickletFunction::GetIdentity => 255,
63 TemperatureV2BrickletFunction::CallbackTemperature => 4,
64 }
65 }
66}
67pub const TEMPERATURE_V2_BRICKLET_THRESHOLD_OPTION_OFF: char = 'x';
68pub const TEMPERATURE_V2_BRICKLET_THRESHOLD_OPTION_OUTSIDE: char = 'o';
69pub const TEMPERATURE_V2_BRICKLET_THRESHOLD_OPTION_INSIDE: char = 'i';
70pub const TEMPERATURE_V2_BRICKLET_THRESHOLD_OPTION_SMALLER: char = '<';
71pub const TEMPERATURE_V2_BRICKLET_THRESHOLD_OPTION_GREATER: char = '>';
72pub const TEMPERATURE_V2_BRICKLET_HEATER_CONFIG_DISABLED: u8 = 0;
73pub const TEMPERATURE_V2_BRICKLET_HEATER_CONFIG_ENABLED: u8 = 1;
74pub const TEMPERATURE_V2_BRICKLET_BOOTLOADER_MODE_BOOTLOADER: u8 = 0;
75pub const TEMPERATURE_V2_BRICKLET_BOOTLOADER_MODE_FIRMWARE: u8 = 1;
76pub const TEMPERATURE_V2_BRICKLET_BOOTLOADER_MODE_BOOTLOADER_WAIT_FOR_REBOOT: u8 = 2;
77pub const TEMPERATURE_V2_BRICKLET_BOOTLOADER_MODE_FIRMWARE_WAIT_FOR_REBOOT: u8 = 3;
78pub const TEMPERATURE_V2_BRICKLET_BOOTLOADER_MODE_FIRMWARE_WAIT_FOR_ERASE_AND_REBOOT: u8 = 4;
79pub const TEMPERATURE_V2_BRICKLET_BOOTLOADER_STATUS_OK: u8 = 0;
80pub const TEMPERATURE_V2_BRICKLET_BOOTLOADER_STATUS_INVALID_MODE: u8 = 1;
81pub const TEMPERATURE_V2_BRICKLET_BOOTLOADER_STATUS_NO_CHANGE: u8 = 2;
82pub const TEMPERATURE_V2_BRICKLET_BOOTLOADER_STATUS_ENTRY_FUNCTION_NOT_PRESENT: u8 = 3;
83pub const TEMPERATURE_V2_BRICKLET_BOOTLOADER_STATUS_DEVICE_IDENTIFIER_INCORRECT: u8 = 4;
84pub const TEMPERATURE_V2_BRICKLET_BOOTLOADER_STATUS_CRC_MISMATCH: u8 = 5;
85pub const TEMPERATURE_V2_BRICKLET_STATUS_LED_CONFIG_OFF: u8 = 0;
86pub const TEMPERATURE_V2_BRICKLET_STATUS_LED_CONFIG_ON: u8 = 1;
87pub const TEMPERATURE_V2_BRICKLET_STATUS_LED_CONFIG_SHOW_HEARTBEAT: u8 = 2;
88pub const TEMPERATURE_V2_BRICKLET_STATUS_LED_CONFIG_SHOW_STATUS: u8 = 3;
89
90#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
91pub struct TemperatureCallbackConfiguration {
92 pub period: u32,
93 pub value_has_to_change: bool,
94 pub option: char,
95 pub min: i16,
96 pub max: i16,
97}
98impl FromByteSlice for TemperatureCallbackConfiguration {
99 fn bytes_expected() -> usize {
100 10
101 }
102 fn from_le_byte_slice(bytes: &[u8]) -> TemperatureCallbackConfiguration {
103 TemperatureCallbackConfiguration {
104 period: <u32>::from_le_byte_slice(&bytes[0..4]),
105 value_has_to_change: <bool>::from_le_byte_slice(&bytes[4..5]),
106 option: <char>::from_le_byte_slice(&bytes[5..6]),
107 min: <i16>::from_le_byte_slice(&bytes[6..8]),
108 max: <i16>::from_le_byte_slice(&bytes[8..10]),
109 }
110 }
111}
112
113#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
114pub struct SpitfpErrorCount {
115 pub error_count_ack_checksum: u32,
116 pub error_count_message_checksum: u32,
117 pub error_count_frame: u32,
118 pub error_count_overflow: u32,
119}
120impl FromByteSlice for SpitfpErrorCount {
121 fn bytes_expected() -> usize {
122 16
123 }
124 fn from_le_byte_slice(bytes: &[u8]) -> SpitfpErrorCount {
125 SpitfpErrorCount {
126 error_count_ack_checksum: <u32>::from_le_byte_slice(&bytes[0..4]),
127 error_count_message_checksum: <u32>::from_le_byte_slice(&bytes[4..8]),
128 error_count_frame: <u32>::from_le_byte_slice(&bytes[8..12]),
129 error_count_overflow: <u32>::from_le_byte_slice(&bytes[12..16]),
130 }
131 }
132}
133
134#[derive(Clone, Debug, Default, PartialEq, Eq, Hash)]
135pub struct Identity {
136 pub uid: String,
137 pub connected_uid: String,
138 pub position: char,
139 pub hardware_version: [u8; 3],
140 pub firmware_version: [u8; 3],
141 pub device_identifier: u16,
142}
143impl FromByteSlice for Identity {
144 fn bytes_expected() -> usize {
145 25
146 }
147 fn from_le_byte_slice(bytes: &[u8]) -> Identity {
148 Identity {
149 uid: <String>::from_le_byte_slice(&bytes[0..8]),
150 connected_uid: <String>::from_le_byte_slice(&bytes[8..16]),
151 position: <char>::from_le_byte_slice(&bytes[16..17]),
152 hardware_version: <[u8; 3]>::from_le_byte_slice(&bytes[17..20]),
153 firmware_version: <[u8; 3]>::from_le_byte_slice(&bytes[20..23]),
154 device_identifier: <u16>::from_le_byte_slice(&bytes[23..25]),
155 }
156 }
157}
158
159#[derive(Clone)]
161pub struct TemperatureV2Bricklet {
162 device: Device,
163}
164impl TemperatureV2Bricklet {
165 pub const DEVICE_IDENTIFIER: u16 = 2113;
166 pub const DEVICE_DISPLAY_NAME: &'static str = "Temperature Bricklet 2.0";
167 pub fn new(uid: Uid, connection: AsyncIpConnection) -> TemperatureV2Bricklet {
169 let mut result = TemperatureV2Bricklet { device: Device::new([2, 0, 10], uid, connection, Self::DEVICE_DISPLAY_NAME) };
170 result.device.response_expected[u8::from(TemperatureV2BrickletFunction::GetTemperature) as usize] =
171 ResponseExpectedFlag::AlwaysTrue;
172 result.device.response_expected[u8::from(TemperatureV2BrickletFunction::SetTemperatureCallbackConfiguration) as usize] =
173 ResponseExpectedFlag::True;
174 result.device.response_expected[u8::from(TemperatureV2BrickletFunction::GetTemperatureCallbackConfiguration) as usize] =
175 ResponseExpectedFlag::AlwaysTrue;
176 result.device.response_expected[u8::from(TemperatureV2BrickletFunction::SetHeaterConfiguration) as usize] =
177 ResponseExpectedFlag::False;
178 result.device.response_expected[u8::from(TemperatureV2BrickletFunction::GetHeaterConfiguration) as usize] =
179 ResponseExpectedFlag::AlwaysTrue;
180 result.device.response_expected[u8::from(TemperatureV2BrickletFunction::GetSpitfpErrorCount) as usize] =
181 ResponseExpectedFlag::AlwaysTrue;
182 result.device.response_expected[u8::from(TemperatureV2BrickletFunction::SetBootloaderMode) as usize] =
183 ResponseExpectedFlag::AlwaysTrue;
184 result.device.response_expected[u8::from(TemperatureV2BrickletFunction::GetBootloaderMode) as usize] =
185 ResponseExpectedFlag::AlwaysTrue;
186 result.device.response_expected[u8::from(TemperatureV2BrickletFunction::SetWriteFirmwarePointer) as usize] =
187 ResponseExpectedFlag::False;
188 result.device.response_expected[u8::from(TemperatureV2BrickletFunction::WriteFirmware) as usize] = ResponseExpectedFlag::AlwaysTrue;
189 result.device.response_expected[u8::from(TemperatureV2BrickletFunction::SetStatusLedConfig) as usize] = ResponseExpectedFlag::False;
190 result.device.response_expected[u8::from(TemperatureV2BrickletFunction::GetStatusLedConfig) as usize] =
191 ResponseExpectedFlag::AlwaysTrue;
192 result.device.response_expected[u8::from(TemperatureV2BrickletFunction::GetChipTemperature) as usize] =
193 ResponseExpectedFlag::AlwaysTrue;
194 result.device.response_expected[u8::from(TemperatureV2BrickletFunction::Reset) as usize] = ResponseExpectedFlag::False;
195 result.device.response_expected[u8::from(TemperatureV2BrickletFunction::WriteUid) as usize] = ResponseExpectedFlag::False;
196 result.device.response_expected[u8::from(TemperatureV2BrickletFunction::ReadUid) as usize] = ResponseExpectedFlag::AlwaysTrue;
197 result.device.response_expected[u8::from(TemperatureV2BrickletFunction::GetIdentity) as usize] = ResponseExpectedFlag::AlwaysTrue;
198 result
199 }
200
201 pub fn get_response_expected(&mut self, fun: TemperatureV2BrickletFunction) -> Result<bool, GetResponseExpectedError> {
216 self.device.get_response_expected(u8::from(fun))
217 }
218
219 pub fn set_response_expected(
228 &mut self,
229 fun: TemperatureV2BrickletFunction,
230 response_expected: bool,
231 ) -> Result<(), SetResponseExpectedError> {
232 self.device.set_response_expected(u8::from(fun), response_expected)
233 }
234
235 pub fn set_response_expected_all(&mut self, response_expected: bool) {
237 self.device.set_response_expected_all(response_expected)
238 }
239
240 pub fn get_api_version(&self) -> [u8; 3] {
243 self.device.api_version
244 }
245
246 pub async fn get_temperature_callback_receiver(&mut self) -> impl Stream<Item = i16> {
254 self.device
255 .get_callback_receiver(u8::from(TemperatureV2BrickletFunction::CallbackTemperature))
256 .await
257 .map(|p| i16::from_le_byte_slice(p.body()))
258 }
259
260 pub async fn get_temperature(&mut self) -> Result<i16, TinkerforgeError> {
267 let payload = [0; 0];
268
269 #[allow(unused_variables)]
270 let result = self.device.get(u8::from(TemperatureV2BrickletFunction::GetTemperature), &payload).await?;
271 Ok(i16::from_le_byte_slice(result.body()))
272 }
273
274 pub async fn set_temperature_callback_configuration(
307 &mut self,
308 period: u32,
309 value_has_to_change: bool,
310 option: char,
311 min: i16,
312 max: i16,
313 ) -> Result<(), TinkerforgeError> {
314 let mut payload = [0; 10];
315 period.write_to_slice(&mut payload[0..4]);
316 value_has_to_change.write_to_slice(&mut payload[4..5]);
317 option.write_to_slice(&mut payload[5..6]);
318 min.write_to_slice(&mut payload[6..8]);
319 max.write_to_slice(&mut payload[8..10]);
320
321 #[allow(unused_variables)]
322 let result = self.device.set(u8::from(TemperatureV2BrickletFunction::SetTemperatureCallbackConfiguration), &payload).await?;
323 Ok(())
324 }
325
326 pub async fn get_temperature_callback_configuration(&mut self) -> Result<TemperatureCallbackConfiguration, TinkerforgeError> {
335 let payload = [0; 0];
336
337 #[allow(unused_variables)]
338 let result = self.device.get(u8::from(TemperatureV2BrickletFunction::GetTemperatureCallbackConfiguration), &payload).await?;
339 Ok(TemperatureCallbackConfiguration::from_le_byte_slice(result.body()))
340 }
341
342 pub async fn set_heater_configuration(&mut self, heater_config: u8) -> Result<(), TinkerforgeError> {
348 let mut payload = [0; 1];
349 heater_config.write_to_slice(&mut payload[0..1]);
350
351 #[allow(unused_variables)]
352 let result = self.device.set(u8::from(TemperatureV2BrickletFunction::SetHeaterConfiguration), &payload).await?;
353 Ok(())
354 }
355
356 pub async fn get_heater_configuration(&mut self) -> Result<u8, TinkerforgeError> {
362 let payload = [0; 0];
363
364 #[allow(unused_variables)]
365 let result = self.device.get(u8::from(TemperatureV2BrickletFunction::GetHeaterConfiguration), &payload).await?;
366 Ok(u8::from_le_byte_slice(result.body()))
367 }
368
369 pub async fn get_spitfp_error_count(&mut self) -> Result<SpitfpErrorCount, TinkerforgeError> {
381 let payload = [0; 0];
382
383 #[allow(unused_variables)]
384 let result = self.device.get(u8::from(TemperatureV2BrickletFunction::GetSpitfpErrorCount), &payload).await?;
385 Ok(SpitfpErrorCount::from_le_byte_slice(result.body()))
386 }
387
388 pub async fn set_bootloader_mode(&mut self, mode: u8) -> Result<u8, TinkerforgeError> {
411 let mut payload = [0; 1];
412 mode.write_to_slice(&mut payload[0..1]);
413
414 #[allow(unused_variables)]
415 let result = self.device.get(u8::from(TemperatureV2BrickletFunction::SetBootloaderMode), &payload).await?;
416 Ok(u8::from_le_byte_slice(result.body()))
417 }
418
419 pub async fn get_bootloader_mode(&mut self) -> Result<u8, TinkerforgeError> {
428 let payload = [0; 0];
429
430 #[allow(unused_variables)]
431 let result = self.device.get(u8::from(TemperatureV2BrickletFunction::GetBootloaderMode), &payload).await?;
432 Ok(u8::from_le_byte_slice(result.body()))
433 }
434
435 pub async fn set_write_firmware_pointer(&mut self, pointer: u32) -> Result<(), TinkerforgeError> {
442 let mut payload = [0; 4];
443 pointer.write_to_slice(&mut payload[0..4]);
444
445 #[allow(unused_variables)]
446 let result = self.device.set(u8::from(TemperatureV2BrickletFunction::SetWriteFirmwarePointer), &payload).await?;
447 Ok(())
448 }
449
450 pub async fn write_firmware(&mut self, data: &[u8; 64]) -> Result<u8, TinkerforgeError> {
459 let mut payload = [0; 64];
460 data.write_to_slice(&mut payload[0..64]);
461
462 #[allow(unused_variables)]
463 let result = self.device.get(u8::from(TemperatureV2BrickletFunction::WriteFirmware), &payload).await?;
464 Ok(u8::from_le_byte_slice(result.body()))
465 }
466
467 pub async fn set_status_led_config(&mut self, config: u8) -> Result<(), TinkerforgeError> {
481 let mut payload = [0; 1];
482 config.write_to_slice(&mut payload[0..1]);
483
484 #[allow(unused_variables)]
485 let result = self.device.set(u8::from(TemperatureV2BrickletFunction::SetStatusLedConfig), &payload).await?;
486 Ok(())
487 }
488
489 pub async fn get_status_led_config(&mut self) -> Result<u8, TinkerforgeError> {
497 let payload = [0; 0];
498
499 #[allow(unused_variables)]
500 let result = self.device.get(u8::from(TemperatureV2BrickletFunction::GetStatusLedConfig), &payload).await?;
501 Ok(u8::from_le_byte_slice(result.body()))
502 }
503
504 pub async fn get_chip_temperature(&mut self) -> Result<i16, TinkerforgeError> {
511 let payload = [0; 0];
512
513 #[allow(unused_variables)]
514 let result = self.device.get(u8::from(TemperatureV2BrickletFunction::GetChipTemperature), &payload).await?;
515 Ok(i16::from_le_byte_slice(result.body()))
516 }
517
518 pub async fn reset(&mut self) -> Result<(), TinkerforgeError> {
525 let payload = [0; 0];
526
527 #[allow(unused_variables)]
528 let result = self.device.set(u8::from(TemperatureV2BrickletFunction::Reset), &payload).await?;
529 Ok(())
530 }
531
532 pub async fn write_uid(&mut self, uid: u32) -> Result<(), TinkerforgeError> {
538 let mut payload = [0; 4];
539 uid.write_to_slice(&mut payload[0..4]);
540
541 #[allow(unused_variables)]
542 let result = self.device.set(u8::from(TemperatureV2BrickletFunction::WriteUid), &payload).await?;
543 Ok(())
544 }
545
546 pub async fn read_uid(&mut self) -> Result<u32, TinkerforgeError> {
549 let payload = [0; 0];
550
551 #[allow(unused_variables)]
552 let result = self.device.get(u8::from(TemperatureV2BrickletFunction::ReadUid), &payload).await?;
553 Ok(u32::from_le_byte_slice(result.body()))
554 }
555
556 pub async fn get_identity(&mut self) -> Result<Identity, TinkerforgeError> {
567 let payload = [0; 0];
568
569 #[allow(unused_variables)]
570 let result = self.device.get(u8::from(TemperatureV2BrickletFunction::GetIdentity), &payload).await?;
571 Ok(Identity::from_le_byte_slice(result.body()))
572 }
573}