1#[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 PtcV2BrickletFunction {
24 GetTemperature,
25 SetTemperatureCallbackConfiguration,
26 GetTemperatureCallbackConfiguration,
27 GetResistance,
28 SetResistanceCallbackConfiguration,
29 GetResistanceCallbackConfiguration,
30 SetNoiseRejectionFilter,
31 GetNoiseRejectionFilter,
32 IsSensorConnected,
33 SetWireMode,
34 GetWireMode,
35 SetMovingAverageConfiguration,
36 GetMovingAverageConfiguration,
37 SetSensorConnectedCallbackConfiguration,
38 GetSensorConnectedCallbackConfiguration,
39 GetSpitfpErrorCount,
40 SetBootloaderMode,
41 GetBootloaderMode,
42 SetWriteFirmwarePointer,
43 WriteFirmware,
44 SetStatusLedConfig,
45 GetStatusLedConfig,
46 GetChipTemperature,
47 Reset,
48 WriteUid,
49 ReadUid,
50 GetIdentity,
51 CallbackTemperature,
52 CallbackResistance,
53 CallbackSensorConnected,
54}
55impl From<PtcV2BrickletFunction> for u8 {
56 fn from(fun: PtcV2BrickletFunction) -> Self {
57 match fun {
58 PtcV2BrickletFunction::GetTemperature => 1,
59 PtcV2BrickletFunction::SetTemperatureCallbackConfiguration => 2,
60 PtcV2BrickletFunction::GetTemperatureCallbackConfiguration => 3,
61 PtcV2BrickletFunction::GetResistance => 5,
62 PtcV2BrickletFunction::SetResistanceCallbackConfiguration => 6,
63 PtcV2BrickletFunction::GetResistanceCallbackConfiguration => 7,
64 PtcV2BrickletFunction::SetNoiseRejectionFilter => 9,
65 PtcV2BrickletFunction::GetNoiseRejectionFilter => 10,
66 PtcV2BrickletFunction::IsSensorConnected => 11,
67 PtcV2BrickletFunction::SetWireMode => 12,
68 PtcV2BrickletFunction::GetWireMode => 13,
69 PtcV2BrickletFunction::SetMovingAverageConfiguration => 14,
70 PtcV2BrickletFunction::GetMovingAverageConfiguration => 15,
71 PtcV2BrickletFunction::SetSensorConnectedCallbackConfiguration => 16,
72 PtcV2BrickletFunction::GetSensorConnectedCallbackConfiguration => 17,
73 PtcV2BrickletFunction::GetSpitfpErrorCount => 234,
74 PtcV2BrickletFunction::SetBootloaderMode => 235,
75 PtcV2BrickletFunction::GetBootloaderMode => 236,
76 PtcV2BrickletFunction::SetWriteFirmwarePointer => 237,
77 PtcV2BrickletFunction::WriteFirmware => 238,
78 PtcV2BrickletFunction::SetStatusLedConfig => 239,
79 PtcV2BrickletFunction::GetStatusLedConfig => 240,
80 PtcV2BrickletFunction::GetChipTemperature => 242,
81 PtcV2BrickletFunction::Reset => 243,
82 PtcV2BrickletFunction::WriteUid => 248,
83 PtcV2BrickletFunction::ReadUid => 249,
84 PtcV2BrickletFunction::GetIdentity => 255,
85 PtcV2BrickletFunction::CallbackTemperature => 4,
86 PtcV2BrickletFunction::CallbackResistance => 8,
87 PtcV2BrickletFunction::CallbackSensorConnected => 18,
88 }
89 }
90}
91pub const PTC_V2_BRICKLET_THRESHOLD_OPTION_OFF: char = 'x';
92pub const PTC_V2_BRICKLET_THRESHOLD_OPTION_OUTSIDE: char = 'o';
93pub const PTC_V2_BRICKLET_THRESHOLD_OPTION_INSIDE: char = 'i';
94pub const PTC_V2_BRICKLET_THRESHOLD_OPTION_SMALLER: char = '<';
95pub const PTC_V2_BRICKLET_THRESHOLD_OPTION_GREATER: char = '>';
96pub const PTC_V2_BRICKLET_FILTER_OPTION_50HZ: u8 = 0;
97pub const PTC_V2_BRICKLET_FILTER_OPTION_60HZ: u8 = 1;
98pub const PTC_V2_BRICKLET_WIRE_MODE_2: u8 = 2;
99pub const PTC_V2_BRICKLET_WIRE_MODE_3: u8 = 3;
100pub const PTC_V2_BRICKLET_WIRE_MODE_4: u8 = 4;
101pub const PTC_V2_BRICKLET_BOOTLOADER_MODE_BOOTLOADER: u8 = 0;
102pub const PTC_V2_BRICKLET_BOOTLOADER_MODE_FIRMWARE: u8 = 1;
103pub const PTC_V2_BRICKLET_BOOTLOADER_MODE_BOOTLOADER_WAIT_FOR_REBOOT: u8 = 2;
104pub const PTC_V2_BRICKLET_BOOTLOADER_MODE_FIRMWARE_WAIT_FOR_REBOOT: u8 = 3;
105pub const PTC_V2_BRICKLET_BOOTLOADER_MODE_FIRMWARE_WAIT_FOR_ERASE_AND_REBOOT: u8 = 4;
106pub const PTC_V2_BRICKLET_BOOTLOADER_STATUS_OK: u8 = 0;
107pub const PTC_V2_BRICKLET_BOOTLOADER_STATUS_INVALID_MODE: u8 = 1;
108pub const PTC_V2_BRICKLET_BOOTLOADER_STATUS_NO_CHANGE: u8 = 2;
109pub const PTC_V2_BRICKLET_BOOTLOADER_STATUS_ENTRY_FUNCTION_NOT_PRESENT: u8 = 3;
110pub const PTC_V2_BRICKLET_BOOTLOADER_STATUS_DEVICE_IDENTIFIER_INCORRECT: u8 = 4;
111pub const PTC_V2_BRICKLET_BOOTLOADER_STATUS_CRC_MISMATCH: u8 = 5;
112pub const PTC_V2_BRICKLET_STATUS_LED_CONFIG_OFF: u8 = 0;
113pub const PTC_V2_BRICKLET_STATUS_LED_CONFIG_ON: u8 = 1;
114pub const PTC_V2_BRICKLET_STATUS_LED_CONFIG_SHOW_HEARTBEAT: u8 = 2;
115pub const PTC_V2_BRICKLET_STATUS_LED_CONFIG_SHOW_STATUS: u8 = 3;
116
117#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
118pub struct TemperatureCallbackConfiguration {
119 pub period: u32,
120 pub value_has_to_change: bool,
121 pub option: char,
122 pub min: i32,
123 pub max: i32,
124}
125impl FromByteSlice for TemperatureCallbackConfiguration {
126 fn bytes_expected() -> usize {
127 14
128 }
129 fn from_le_byte_slice(bytes: &[u8]) -> TemperatureCallbackConfiguration {
130 TemperatureCallbackConfiguration {
131 period: <u32>::from_le_byte_slice(&bytes[0..4]),
132 value_has_to_change: <bool>::from_le_byte_slice(&bytes[4..5]),
133 option: <char>::from_le_byte_slice(&bytes[5..6]),
134 min: <i32>::from_le_byte_slice(&bytes[6..10]),
135 max: <i32>::from_le_byte_slice(&bytes[10..14]),
136 }
137 }
138}
139
140#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
141pub struct ResistanceCallbackConfiguration {
142 pub period: u32,
143 pub value_has_to_change: bool,
144 pub option: char,
145 pub min: i32,
146 pub max: i32,
147}
148impl FromByteSlice for ResistanceCallbackConfiguration {
149 fn bytes_expected() -> usize {
150 14
151 }
152 fn from_le_byte_slice(bytes: &[u8]) -> ResistanceCallbackConfiguration {
153 ResistanceCallbackConfiguration {
154 period: <u32>::from_le_byte_slice(&bytes[0..4]),
155 value_has_to_change: <bool>::from_le_byte_slice(&bytes[4..5]),
156 option: <char>::from_le_byte_slice(&bytes[5..6]),
157 min: <i32>::from_le_byte_slice(&bytes[6..10]),
158 max: <i32>::from_le_byte_slice(&bytes[10..14]),
159 }
160 }
161}
162
163#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
164pub struct MovingAverageConfiguration {
165 pub moving_average_length_resistance: u16,
166 pub moving_average_length_temperature: u16,
167}
168impl FromByteSlice for MovingAverageConfiguration {
169 fn bytes_expected() -> usize {
170 4
171 }
172 fn from_le_byte_slice(bytes: &[u8]) -> MovingAverageConfiguration {
173 MovingAverageConfiguration {
174 moving_average_length_resistance: <u16>::from_le_byte_slice(&bytes[0..2]),
175 moving_average_length_temperature: <u16>::from_le_byte_slice(&bytes[2..4]),
176 }
177 }
178}
179
180#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
181pub struct SpitfpErrorCount {
182 pub error_count_ack_checksum: u32,
183 pub error_count_message_checksum: u32,
184 pub error_count_frame: u32,
185 pub error_count_overflow: u32,
186}
187impl FromByteSlice for SpitfpErrorCount {
188 fn bytes_expected() -> usize {
189 16
190 }
191 fn from_le_byte_slice(bytes: &[u8]) -> SpitfpErrorCount {
192 SpitfpErrorCount {
193 error_count_ack_checksum: <u32>::from_le_byte_slice(&bytes[0..4]),
194 error_count_message_checksum: <u32>::from_le_byte_slice(&bytes[4..8]),
195 error_count_frame: <u32>::from_le_byte_slice(&bytes[8..12]),
196 error_count_overflow: <u32>::from_le_byte_slice(&bytes[12..16]),
197 }
198 }
199}
200
201#[derive(Clone, Debug, Default, PartialEq, Eq, Hash)]
202pub struct Identity {
203 pub uid: String,
204 pub connected_uid: String,
205 pub position: char,
206 pub hardware_version: [u8; 3],
207 pub firmware_version: [u8; 3],
208 pub device_identifier: u16,
209}
210impl FromByteSlice for Identity {
211 fn bytes_expected() -> usize {
212 25
213 }
214 fn from_le_byte_slice(bytes: &[u8]) -> Identity {
215 Identity {
216 uid: <String>::from_le_byte_slice(&bytes[0..8]),
217 connected_uid: <String>::from_le_byte_slice(&bytes[8..16]),
218 position: <char>::from_le_byte_slice(&bytes[16..17]),
219 hardware_version: <[u8; 3]>::from_le_byte_slice(&bytes[17..20]),
220 firmware_version: <[u8; 3]>::from_le_byte_slice(&bytes[20..23]),
221 device_identifier: <u16>::from_le_byte_slice(&bytes[23..25]),
222 }
223 }
224}
225
226#[derive(Clone)]
228pub struct PtcV2Bricklet {
229 device: Device,
230}
231impl PtcV2Bricklet {
232 pub const DEVICE_IDENTIFIER: u16 = 2101;
233 pub const DEVICE_DISPLAY_NAME: &'static str = "PTC Bricklet 2.0";
234 pub fn new(uid: Uid, connection: AsyncIpConnection) -> PtcV2Bricklet {
236 let mut result = PtcV2Bricklet { device: Device::new([2, 0, 10], uid, connection, Self::DEVICE_DISPLAY_NAME) };
237 result.device.response_expected[u8::from(PtcV2BrickletFunction::GetTemperature) as usize] = ResponseExpectedFlag::AlwaysTrue;
238 result.device.response_expected[u8::from(PtcV2BrickletFunction::SetTemperatureCallbackConfiguration) as usize] =
239 ResponseExpectedFlag::True;
240 result.device.response_expected[u8::from(PtcV2BrickletFunction::GetTemperatureCallbackConfiguration) as usize] =
241 ResponseExpectedFlag::AlwaysTrue;
242 result.device.response_expected[u8::from(PtcV2BrickletFunction::GetResistance) as usize] = ResponseExpectedFlag::AlwaysTrue;
243 result.device.response_expected[u8::from(PtcV2BrickletFunction::SetResistanceCallbackConfiguration) as usize] =
244 ResponseExpectedFlag::True;
245 result.device.response_expected[u8::from(PtcV2BrickletFunction::GetResistanceCallbackConfiguration) as usize] =
246 ResponseExpectedFlag::AlwaysTrue;
247 result.device.response_expected[u8::from(PtcV2BrickletFunction::SetNoiseRejectionFilter) as usize] = ResponseExpectedFlag::False;
248 result.device.response_expected[u8::from(PtcV2BrickletFunction::GetNoiseRejectionFilter) as usize] =
249 ResponseExpectedFlag::AlwaysTrue;
250 result.device.response_expected[u8::from(PtcV2BrickletFunction::IsSensorConnected) as usize] = ResponseExpectedFlag::AlwaysTrue;
251 result.device.response_expected[u8::from(PtcV2BrickletFunction::SetWireMode) as usize] = ResponseExpectedFlag::False;
252 result.device.response_expected[u8::from(PtcV2BrickletFunction::GetWireMode) as usize] = ResponseExpectedFlag::AlwaysTrue;
253 result.device.response_expected[u8::from(PtcV2BrickletFunction::SetMovingAverageConfiguration) as usize] =
254 ResponseExpectedFlag::False;
255 result.device.response_expected[u8::from(PtcV2BrickletFunction::GetMovingAverageConfiguration) as usize] =
256 ResponseExpectedFlag::AlwaysTrue;
257 result.device.response_expected[u8::from(PtcV2BrickletFunction::SetSensorConnectedCallbackConfiguration) as usize] =
258 ResponseExpectedFlag::True;
259 result.device.response_expected[u8::from(PtcV2BrickletFunction::GetSensorConnectedCallbackConfiguration) as usize] =
260 ResponseExpectedFlag::AlwaysTrue;
261 result.device.response_expected[u8::from(PtcV2BrickletFunction::GetSpitfpErrorCount) as usize] = ResponseExpectedFlag::AlwaysTrue;
262 result.device.response_expected[u8::from(PtcV2BrickletFunction::SetBootloaderMode) as usize] = ResponseExpectedFlag::AlwaysTrue;
263 result.device.response_expected[u8::from(PtcV2BrickletFunction::GetBootloaderMode) as usize] = ResponseExpectedFlag::AlwaysTrue;
264 result.device.response_expected[u8::from(PtcV2BrickletFunction::SetWriteFirmwarePointer) as usize] = ResponseExpectedFlag::False;
265 result.device.response_expected[u8::from(PtcV2BrickletFunction::WriteFirmware) as usize] = ResponseExpectedFlag::AlwaysTrue;
266 result.device.response_expected[u8::from(PtcV2BrickletFunction::SetStatusLedConfig) as usize] = ResponseExpectedFlag::False;
267 result.device.response_expected[u8::from(PtcV2BrickletFunction::GetStatusLedConfig) as usize] = ResponseExpectedFlag::AlwaysTrue;
268 result.device.response_expected[u8::from(PtcV2BrickletFunction::GetChipTemperature) as usize] = ResponseExpectedFlag::AlwaysTrue;
269 result.device.response_expected[u8::from(PtcV2BrickletFunction::Reset) as usize] = ResponseExpectedFlag::False;
270 result.device.response_expected[u8::from(PtcV2BrickletFunction::WriteUid) as usize] = ResponseExpectedFlag::False;
271 result.device.response_expected[u8::from(PtcV2BrickletFunction::ReadUid) as usize] = ResponseExpectedFlag::AlwaysTrue;
272 result.device.response_expected[u8::from(PtcV2BrickletFunction::GetIdentity) as usize] = ResponseExpectedFlag::AlwaysTrue;
273 result
274 }
275
276 pub fn get_response_expected(&mut self, fun: PtcV2BrickletFunction) -> Result<bool, GetResponseExpectedError> {
291 self.device.get_response_expected(u8::from(fun))
292 }
293
294 pub fn set_response_expected(&mut self, fun: PtcV2BrickletFunction, response_expected: bool) -> Result<(), SetResponseExpectedError> {
303 self.device.set_response_expected(u8::from(fun), response_expected)
304 }
305
306 pub fn set_response_expected_all(&mut self, response_expected: bool) {
308 self.device.set_response_expected_all(response_expected)
309 }
310
311 pub fn get_api_version(&self) -> [u8; 3] {
314 self.device.api_version
315 }
316
317 pub async fn get_temperature_callback_receiver(&mut self) -> impl Stream<Item = i32> {
325 self.device
326 .get_callback_receiver(u8::from(PtcV2BrickletFunction::CallbackTemperature))
327 .await
328 .map(|p| i32::from_le_byte_slice(p.body()))
329 }
330
331 pub async fn get_resistance_callback_receiver(&mut self) -> impl Stream<Item = i32> {
336 self.device
337 .get_callback_receiver(u8::from(PtcV2BrickletFunction::CallbackResistance))
338 .await
339 .map(|p| i32::from_le_byte_slice(p.body()))
340 }
341
342 pub async fn get_sensor_connected_callback_receiver(&mut self) -> impl Stream<Item = bool> {
347 self.device
348 .get_callback_receiver(u8::from(PtcV2BrickletFunction::CallbackSensorConnected))
349 .await
350 .map(|p| bool::from_le_byte_slice(p.body()))
351 }
352
353 pub async fn get_temperature(&mut self) -> Result<i32, TinkerforgeError> {
360 let payload = [0; 0];
361
362 #[allow(unused_variables)]
363 let result = self.device.get(u8::from(PtcV2BrickletFunction::GetTemperature), &payload).await?;
364 Ok(i32::from_le_byte_slice(result.body()))
365 }
366
367 pub async fn set_temperature_callback_configuration(
400 &mut self,
401 period: u32,
402 value_has_to_change: bool,
403 option: char,
404 min: i32,
405 max: i32,
406 ) -> Result<(), TinkerforgeError> {
407 let mut payload = [0; 14];
408 period.write_to_slice(&mut payload[0..4]);
409 value_has_to_change.write_to_slice(&mut payload[4..5]);
410 option.write_to_slice(&mut payload[5..6]);
411 min.write_to_slice(&mut payload[6..10]);
412 max.write_to_slice(&mut payload[10..14]);
413
414 #[allow(unused_variables)]
415 let result = self.device.set(u8::from(PtcV2BrickletFunction::SetTemperatureCallbackConfiguration), &payload).await?;
416 Ok(())
417 }
418
419 pub async fn get_temperature_callback_configuration(&mut self) -> Result<TemperatureCallbackConfiguration, TinkerforgeError> {
428 let payload = [0; 0];
429
430 #[allow(unused_variables)]
431 let result = self.device.get(u8::from(PtcV2BrickletFunction::GetTemperatureCallbackConfiguration), &payload).await?;
432 Ok(TemperatureCallbackConfiguration::from_le_byte_slice(result.body()))
433 }
434
435 pub async fn get_resistance(&mut self) -> Result<i32, TinkerforgeError> {
447 let payload = [0; 0];
448
449 #[allow(unused_variables)]
450 let result = self.device.get(u8::from(PtcV2BrickletFunction::GetResistance), &payload).await?;
451 Ok(i32::from_le_byte_slice(result.body()))
452 }
453
454 pub async fn set_resistance_callback_configuration(
487 &mut self,
488 period: u32,
489 value_has_to_change: bool,
490 option: char,
491 min: i32,
492 max: i32,
493 ) -> Result<(), TinkerforgeError> {
494 let mut payload = [0; 14];
495 period.write_to_slice(&mut payload[0..4]);
496 value_has_to_change.write_to_slice(&mut payload[4..5]);
497 option.write_to_slice(&mut payload[5..6]);
498 min.write_to_slice(&mut payload[6..10]);
499 max.write_to_slice(&mut payload[10..14]);
500
501 #[allow(unused_variables)]
502 let result = self.device.set(u8::from(PtcV2BrickletFunction::SetResistanceCallbackConfiguration), &payload).await?;
503 Ok(())
504 }
505
506 pub async fn get_resistance_callback_configuration(&mut self) -> Result<ResistanceCallbackConfiguration, TinkerforgeError> {
515 let payload = [0; 0];
516
517 #[allow(unused_variables)]
518 let result = self.device.get(u8::from(PtcV2BrickletFunction::GetResistanceCallbackConfiguration), &payload).await?;
519 Ok(ResistanceCallbackConfiguration::from_le_byte_slice(result.body()))
520 }
521
522 pub async fn set_noise_rejection_filter(&mut self, filter: u8) -> Result<(), TinkerforgeError> {
531 let mut payload = [0; 1];
532 filter.write_to_slice(&mut payload[0..1]);
533
534 #[allow(unused_variables)]
535 let result = self.device.set(u8::from(PtcV2BrickletFunction::SetNoiseRejectionFilter), &payload).await?;
536 Ok(())
537 }
538
539 pub async fn get_noise_rejection_filter(&mut self) -> Result<u8, TinkerforgeError> {
546 let payload = [0; 0];
547
548 #[allow(unused_variables)]
549 let result = self.device.get(u8::from(PtcV2BrickletFunction::GetNoiseRejectionFilter), &payload).await?;
550 Ok(u8::from_le_byte_slice(result.body()))
551 }
552
553 pub async fn is_sensor_connected(&mut self) -> Result<bool, TinkerforgeError> {
563 let payload = [0; 0];
564
565 #[allow(unused_variables)]
566 let result = self.device.get(u8::from(PtcV2BrickletFunction::IsSensorConnected), &payload).await?;
567 Ok(bool::from_le_byte_slice(result.body()))
568 }
569
570 pub async fn set_wire_mode(&mut self, mode: u8) -> Result<(), TinkerforgeError> {
579 let mut payload = [0; 1];
580 mode.write_to_slice(&mut payload[0..1]);
581
582 #[allow(unused_variables)]
583 let result = self.device.set(u8::from(PtcV2BrickletFunction::SetWireMode), &payload).await?;
584 Ok(())
585 }
586
587 pub async fn get_wire_mode(&mut self) -> Result<u8, TinkerforgeError> {
594 let payload = [0; 0];
595
596 #[allow(unused_variables)]
597 let result = self.device.get(u8::from(PtcV2BrickletFunction::GetWireMode), &payload).await?;
598 Ok(u8::from_le_byte_slice(result.body()))
599 }
600
601 pub async fn set_moving_average_configuration(
613 &mut self,
614 moving_average_length_resistance: u16,
615 moving_average_length_temperature: u16,
616 ) -> Result<(), TinkerforgeError> {
617 let mut payload = [0; 4];
618 moving_average_length_resistance.write_to_slice(&mut payload[0..2]);
619 moving_average_length_temperature.write_to_slice(&mut payload[2..4]);
620
621 #[allow(unused_variables)]
622 let result = self.device.set(u8::from(PtcV2BrickletFunction::SetMovingAverageConfiguration), &payload).await?;
623 Ok(())
624 }
625
626 pub async fn get_moving_average_configuration(&mut self) -> Result<MovingAverageConfiguration, TinkerforgeError> {
628 let payload = [0; 0];
629
630 #[allow(unused_variables)]
631 let result = self.device.get(u8::from(PtcV2BrickletFunction::GetMovingAverageConfiguration), &payload).await?;
632 Ok(MovingAverageConfiguration::from_le_byte_slice(result.body()))
633 }
634
635 pub async fn set_sensor_connected_callback_configuration(&mut self, enabled: bool) -> Result<(), TinkerforgeError> {
638 let mut payload = [0; 1];
639 enabled.write_to_slice(&mut payload[0..1]);
640
641 #[allow(unused_variables)]
642 let result = self.device.set(u8::from(PtcV2BrickletFunction::SetSensorConnectedCallbackConfiguration), &payload).await?;
643 Ok(())
644 }
645
646 pub async fn get_sensor_connected_callback_configuration(&mut self) -> Result<bool, TinkerforgeError> {
648 let payload = [0; 0];
649
650 #[allow(unused_variables)]
651 let result = self.device.get(u8::from(PtcV2BrickletFunction::GetSensorConnectedCallbackConfiguration), &payload).await?;
652 Ok(bool::from_le_byte_slice(result.body()))
653 }
654
655 pub async fn get_spitfp_error_count(&mut self) -> Result<SpitfpErrorCount, TinkerforgeError> {
667 let payload = [0; 0];
668
669 #[allow(unused_variables)]
670 let result = self.device.get(u8::from(PtcV2BrickletFunction::GetSpitfpErrorCount), &payload).await?;
671 Ok(SpitfpErrorCount::from_le_byte_slice(result.body()))
672 }
673
674 pub async fn set_bootloader_mode(&mut self, mode: u8) -> Result<u8, TinkerforgeError> {
697 let mut payload = [0; 1];
698 mode.write_to_slice(&mut payload[0..1]);
699
700 #[allow(unused_variables)]
701 let result = self.device.get(u8::from(PtcV2BrickletFunction::SetBootloaderMode), &payload).await?;
702 Ok(u8::from_le_byte_slice(result.body()))
703 }
704
705 pub async fn get_bootloader_mode(&mut self) -> Result<u8, TinkerforgeError> {
714 let payload = [0; 0];
715
716 #[allow(unused_variables)]
717 let result = self.device.get(u8::from(PtcV2BrickletFunction::GetBootloaderMode), &payload).await?;
718 Ok(u8::from_le_byte_slice(result.body()))
719 }
720
721 pub async fn set_write_firmware_pointer(&mut self, pointer: u32) -> Result<(), TinkerforgeError> {
728 let mut payload = [0; 4];
729 pointer.write_to_slice(&mut payload[0..4]);
730
731 #[allow(unused_variables)]
732 let result = self.device.set(u8::from(PtcV2BrickletFunction::SetWriteFirmwarePointer), &payload).await?;
733 Ok(())
734 }
735
736 pub async fn write_firmware(&mut self, data: &[u8; 64]) -> Result<u8, TinkerforgeError> {
745 let mut payload = [0; 64];
746 data.write_to_slice(&mut payload[0..64]);
747
748 #[allow(unused_variables)]
749 let result = self.device.get(u8::from(PtcV2BrickletFunction::WriteFirmware), &payload).await?;
750 Ok(u8::from_le_byte_slice(result.body()))
751 }
752
753 pub async fn set_status_led_config(&mut self, config: u8) -> Result<(), TinkerforgeError> {
767 let mut payload = [0; 1];
768 config.write_to_slice(&mut payload[0..1]);
769
770 #[allow(unused_variables)]
771 let result = self.device.set(u8::from(PtcV2BrickletFunction::SetStatusLedConfig), &payload).await?;
772 Ok(())
773 }
774
775 pub async fn get_status_led_config(&mut self) -> Result<u8, TinkerforgeError> {
783 let payload = [0; 0];
784
785 #[allow(unused_variables)]
786 let result = self.device.get(u8::from(PtcV2BrickletFunction::GetStatusLedConfig), &payload).await?;
787 Ok(u8::from_le_byte_slice(result.body()))
788 }
789
790 pub async fn get_chip_temperature(&mut self) -> Result<i16, TinkerforgeError> {
797 let payload = [0; 0];
798
799 #[allow(unused_variables)]
800 let result = self.device.get(u8::from(PtcV2BrickletFunction::GetChipTemperature), &payload).await?;
801 Ok(i16::from_le_byte_slice(result.body()))
802 }
803
804 pub async fn reset(&mut self) -> Result<(), TinkerforgeError> {
811 let payload = [0; 0];
812
813 #[allow(unused_variables)]
814 let result = self.device.set(u8::from(PtcV2BrickletFunction::Reset), &payload).await?;
815 Ok(())
816 }
817
818 pub async fn write_uid(&mut self, uid: u32) -> Result<(), TinkerforgeError> {
824 let mut payload = [0; 4];
825 uid.write_to_slice(&mut payload[0..4]);
826
827 #[allow(unused_variables)]
828 let result = self.device.set(u8::from(PtcV2BrickletFunction::WriteUid), &payload).await?;
829 Ok(())
830 }
831
832 pub async fn read_uid(&mut self) -> Result<u32, TinkerforgeError> {
835 let payload = [0; 0];
836
837 #[allow(unused_variables)]
838 let result = self.device.get(u8::from(PtcV2BrickletFunction::ReadUid), &payload).await?;
839 Ok(u32::from_le_byte_slice(result.body()))
840 }
841
842 pub async fn get_identity(&mut self) -> Result<Identity, TinkerforgeError> {
853 let payload = [0; 0];
854
855 #[allow(unused_variables)]
856 let result = self.device.get(u8::from(PtcV2BrickletFunction::GetIdentity), &payload).await?;
857 Ok(Identity::from_le_byte_slice(result.body()))
858 }
859}