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 CompassBrickletFunction {
24 GetHeading,
25 SetHeadingCallbackConfiguration,
26 GetHeadingCallbackConfiguration,
27 GetMagneticFluxDensity,
28 SetMagneticFluxDensityCallbackConfiguration,
29 GetMagneticFluxDensityCallbackConfiguration,
30 SetConfiguration,
31 GetConfiguration,
32 SetCalibration,
33 GetCalibration,
34 GetSpitfpErrorCount,
35 SetBootloaderMode,
36 GetBootloaderMode,
37 SetWriteFirmwarePointer,
38 WriteFirmware,
39 SetStatusLedConfig,
40 GetStatusLedConfig,
41 GetChipTemperature,
42 Reset,
43 WriteUid,
44 ReadUid,
45 GetIdentity,
46 CallbackHeading,
47 CallbackMagneticFluxDensity,
48}
49impl From<CompassBrickletFunction> for u8 {
50 fn from(fun: CompassBrickletFunction) -> Self {
51 match fun {
52 CompassBrickletFunction::GetHeading => 1,
53 CompassBrickletFunction::SetHeadingCallbackConfiguration => 2,
54 CompassBrickletFunction::GetHeadingCallbackConfiguration => 3,
55 CompassBrickletFunction::GetMagneticFluxDensity => 5,
56 CompassBrickletFunction::SetMagneticFluxDensityCallbackConfiguration => 6,
57 CompassBrickletFunction::GetMagneticFluxDensityCallbackConfiguration => 7,
58 CompassBrickletFunction::SetConfiguration => 9,
59 CompassBrickletFunction::GetConfiguration => 10,
60 CompassBrickletFunction::SetCalibration => 11,
61 CompassBrickletFunction::GetCalibration => 12,
62 CompassBrickletFunction::GetSpitfpErrorCount => 234,
63 CompassBrickletFunction::SetBootloaderMode => 235,
64 CompassBrickletFunction::GetBootloaderMode => 236,
65 CompassBrickletFunction::SetWriteFirmwarePointer => 237,
66 CompassBrickletFunction::WriteFirmware => 238,
67 CompassBrickletFunction::SetStatusLedConfig => 239,
68 CompassBrickletFunction::GetStatusLedConfig => 240,
69 CompassBrickletFunction::GetChipTemperature => 242,
70 CompassBrickletFunction::Reset => 243,
71 CompassBrickletFunction::WriteUid => 248,
72 CompassBrickletFunction::ReadUid => 249,
73 CompassBrickletFunction::GetIdentity => 255,
74 CompassBrickletFunction::CallbackHeading => 4,
75 CompassBrickletFunction::CallbackMagneticFluxDensity => 8,
76 }
77 }
78}
79pub const COMPASS_BRICKLET_THRESHOLD_OPTION_OFF: char = 'x';
80pub const COMPASS_BRICKLET_THRESHOLD_OPTION_OUTSIDE: char = 'o';
81pub const COMPASS_BRICKLET_THRESHOLD_OPTION_INSIDE: char = 'i';
82pub const COMPASS_BRICKLET_THRESHOLD_OPTION_SMALLER: char = '<';
83pub const COMPASS_BRICKLET_THRESHOLD_OPTION_GREATER: char = '>';
84pub const COMPASS_BRICKLET_DATA_RATE_100HZ: u8 = 0;
85pub const COMPASS_BRICKLET_DATA_RATE_200HZ: u8 = 1;
86pub const COMPASS_BRICKLET_DATA_RATE_400HZ: u8 = 2;
87pub const COMPASS_BRICKLET_DATA_RATE_600HZ: u8 = 3;
88pub const COMPASS_BRICKLET_BOOTLOADER_MODE_BOOTLOADER: u8 = 0;
89pub const COMPASS_BRICKLET_BOOTLOADER_MODE_FIRMWARE: u8 = 1;
90pub const COMPASS_BRICKLET_BOOTLOADER_MODE_BOOTLOADER_WAIT_FOR_REBOOT: u8 = 2;
91pub const COMPASS_BRICKLET_BOOTLOADER_MODE_FIRMWARE_WAIT_FOR_REBOOT: u8 = 3;
92pub const COMPASS_BRICKLET_BOOTLOADER_MODE_FIRMWARE_WAIT_FOR_ERASE_AND_REBOOT: u8 = 4;
93pub const COMPASS_BRICKLET_BOOTLOADER_STATUS_OK: u8 = 0;
94pub const COMPASS_BRICKLET_BOOTLOADER_STATUS_INVALID_MODE: u8 = 1;
95pub const COMPASS_BRICKLET_BOOTLOADER_STATUS_NO_CHANGE: u8 = 2;
96pub const COMPASS_BRICKLET_BOOTLOADER_STATUS_ENTRY_FUNCTION_NOT_PRESENT: u8 = 3;
97pub const COMPASS_BRICKLET_BOOTLOADER_STATUS_DEVICE_IDENTIFIER_INCORRECT: u8 = 4;
98pub const COMPASS_BRICKLET_BOOTLOADER_STATUS_CRC_MISMATCH: u8 = 5;
99pub const COMPASS_BRICKLET_STATUS_LED_CONFIG_OFF: u8 = 0;
100pub const COMPASS_BRICKLET_STATUS_LED_CONFIG_ON: u8 = 1;
101pub const COMPASS_BRICKLET_STATUS_LED_CONFIG_SHOW_HEARTBEAT: u8 = 2;
102pub const COMPASS_BRICKLET_STATUS_LED_CONFIG_SHOW_STATUS: u8 = 3;
103
104#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
105pub struct HeadingCallbackConfiguration {
106 pub period: u32,
107 pub value_has_to_change: bool,
108 pub option: char,
109 pub min: i16,
110 pub max: i16,
111}
112impl FromByteSlice for HeadingCallbackConfiguration {
113 fn bytes_expected() -> usize {
114 10
115 }
116 fn from_le_byte_slice(bytes: &[u8]) -> HeadingCallbackConfiguration {
117 HeadingCallbackConfiguration {
118 period: <u32>::from_le_byte_slice(&bytes[0..4]),
119 value_has_to_change: <bool>::from_le_byte_slice(&bytes[4..5]),
120 option: <char>::from_le_byte_slice(&bytes[5..6]),
121 min: <i16>::from_le_byte_slice(&bytes[6..8]),
122 max: <i16>::from_le_byte_slice(&bytes[8..10]),
123 }
124 }
125}
126
127#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
128pub struct MagneticFluxDensity {
129 pub x: i32,
130 pub y: i32,
131 pub z: i32,
132}
133impl FromByteSlice for MagneticFluxDensity {
134 fn bytes_expected() -> usize {
135 12
136 }
137 fn from_le_byte_slice(bytes: &[u8]) -> MagneticFluxDensity {
138 MagneticFluxDensity {
139 x: <i32>::from_le_byte_slice(&bytes[0..4]),
140 y: <i32>::from_le_byte_slice(&bytes[4..8]),
141 z: <i32>::from_le_byte_slice(&bytes[8..12]),
142 }
143 }
144}
145
146#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
147pub struct MagneticFluxDensityCallbackConfiguration {
148 pub period: u32,
149 pub value_has_to_change: bool,
150}
151impl FromByteSlice for MagneticFluxDensityCallbackConfiguration {
152 fn bytes_expected() -> usize {
153 5
154 }
155 fn from_le_byte_slice(bytes: &[u8]) -> MagneticFluxDensityCallbackConfiguration {
156 MagneticFluxDensityCallbackConfiguration {
157 period: <u32>::from_le_byte_slice(&bytes[0..4]),
158 value_has_to_change: <bool>::from_le_byte_slice(&bytes[4..5]),
159 }
160 }
161}
162
163#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
164pub struct MagneticFluxDensityEvent {
165 pub x: i32,
166 pub y: i32,
167 pub z: i32,
168}
169impl FromByteSlice for MagneticFluxDensityEvent {
170 fn bytes_expected() -> usize {
171 12
172 }
173 fn from_le_byte_slice(bytes: &[u8]) -> MagneticFluxDensityEvent {
174 MagneticFluxDensityEvent {
175 x: <i32>::from_le_byte_slice(&bytes[0..4]),
176 y: <i32>::from_le_byte_slice(&bytes[4..8]),
177 z: <i32>::from_le_byte_slice(&bytes[8..12]),
178 }
179 }
180}
181
182#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
183pub struct Configuration {
184 pub data_rate: u8,
185 pub background_calibration: bool,
186}
187impl FromByteSlice for Configuration {
188 fn bytes_expected() -> usize {
189 2
190 }
191 fn from_le_byte_slice(bytes: &[u8]) -> Configuration {
192 Configuration {
193 data_rate: <u8>::from_le_byte_slice(&bytes[0..1]),
194 background_calibration: <bool>::from_le_byte_slice(&bytes[1..2]),
195 }
196 }
197}
198
199#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
200pub struct Calibration {
201 pub offset: [i16; 3],
202 pub gain: [i16; 3],
203}
204impl FromByteSlice for Calibration {
205 fn bytes_expected() -> usize {
206 12
207 }
208 fn from_le_byte_slice(bytes: &[u8]) -> Calibration {
209 Calibration { offset: <[i16; 3]>::from_le_byte_slice(&bytes[0..6]), gain: <[i16; 3]>::from_le_byte_slice(&bytes[6..12]) }
210 }
211}
212
213#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
214pub struct SpitfpErrorCount {
215 pub error_count_ack_checksum: u32,
216 pub error_count_message_checksum: u32,
217 pub error_count_frame: u32,
218 pub error_count_overflow: u32,
219}
220impl FromByteSlice for SpitfpErrorCount {
221 fn bytes_expected() -> usize {
222 16
223 }
224 fn from_le_byte_slice(bytes: &[u8]) -> SpitfpErrorCount {
225 SpitfpErrorCount {
226 error_count_ack_checksum: <u32>::from_le_byte_slice(&bytes[0..4]),
227 error_count_message_checksum: <u32>::from_le_byte_slice(&bytes[4..8]),
228 error_count_frame: <u32>::from_le_byte_slice(&bytes[8..12]),
229 error_count_overflow: <u32>::from_le_byte_slice(&bytes[12..16]),
230 }
231 }
232}
233
234#[derive(Clone, Debug, Default, PartialEq, Eq, Hash)]
235pub struct Identity {
236 pub uid: String,
237 pub connected_uid: String,
238 pub position: char,
239 pub hardware_version: [u8; 3],
240 pub firmware_version: [u8; 3],
241 pub device_identifier: u16,
242}
243impl FromByteSlice for Identity {
244 fn bytes_expected() -> usize {
245 25
246 }
247 fn from_le_byte_slice(bytes: &[u8]) -> Identity {
248 Identity {
249 uid: <String>::from_le_byte_slice(&bytes[0..8]),
250 connected_uid: <String>::from_le_byte_slice(&bytes[8..16]),
251 position: <char>::from_le_byte_slice(&bytes[16..17]),
252 hardware_version: <[u8; 3]>::from_le_byte_slice(&bytes[17..20]),
253 firmware_version: <[u8; 3]>::from_le_byte_slice(&bytes[20..23]),
254 device_identifier: <u16>::from_le_byte_slice(&bytes[23..25]),
255 }
256 }
257}
258
259#[derive(Clone)]
261pub struct CompassBricklet {
262 device: Device,
263}
264impl CompassBricklet {
265 pub const DEVICE_IDENTIFIER: u16 = 2153;
266 pub const DEVICE_DISPLAY_NAME: &'static str = "Compass Bricklet";
267 pub fn new(uid: Uid, connection: AsyncIpConnection) -> CompassBricklet {
269 let mut result = CompassBricklet { device: Device::new([2, 0, 10], uid, connection, Self::DEVICE_DISPLAY_NAME) };
270 result.device.response_expected[u8::from(CompassBrickletFunction::GetHeading) as usize] = ResponseExpectedFlag::AlwaysTrue;
271 result.device.response_expected[u8::from(CompassBrickletFunction::SetHeadingCallbackConfiguration) as usize] =
272 ResponseExpectedFlag::True;
273 result.device.response_expected[u8::from(CompassBrickletFunction::GetHeadingCallbackConfiguration) as usize] =
274 ResponseExpectedFlag::AlwaysTrue;
275 result.device.response_expected[u8::from(CompassBrickletFunction::GetMagneticFluxDensity) as usize] =
276 ResponseExpectedFlag::AlwaysTrue;
277 result.device.response_expected[u8::from(CompassBrickletFunction::SetMagneticFluxDensityCallbackConfiguration) as usize] =
278 ResponseExpectedFlag::True;
279 result.device.response_expected[u8::from(CompassBrickletFunction::GetMagneticFluxDensityCallbackConfiguration) as usize] =
280 ResponseExpectedFlag::AlwaysTrue;
281 result.device.response_expected[u8::from(CompassBrickletFunction::SetConfiguration) as usize] = ResponseExpectedFlag::False;
282 result.device.response_expected[u8::from(CompassBrickletFunction::GetConfiguration) as usize] = ResponseExpectedFlag::AlwaysTrue;
283 result.device.response_expected[u8::from(CompassBrickletFunction::SetCalibration) as usize] = ResponseExpectedFlag::False;
284 result.device.response_expected[u8::from(CompassBrickletFunction::GetCalibration) as usize] = ResponseExpectedFlag::AlwaysTrue;
285 result.device.response_expected[u8::from(CompassBrickletFunction::GetSpitfpErrorCount) as usize] = ResponseExpectedFlag::AlwaysTrue;
286 result.device.response_expected[u8::from(CompassBrickletFunction::SetBootloaderMode) as usize] = ResponseExpectedFlag::AlwaysTrue;
287 result.device.response_expected[u8::from(CompassBrickletFunction::GetBootloaderMode) as usize] = ResponseExpectedFlag::AlwaysTrue;
288 result.device.response_expected[u8::from(CompassBrickletFunction::SetWriteFirmwarePointer) as usize] = ResponseExpectedFlag::False;
289 result.device.response_expected[u8::from(CompassBrickletFunction::WriteFirmware) as usize] = ResponseExpectedFlag::AlwaysTrue;
290 result.device.response_expected[u8::from(CompassBrickletFunction::SetStatusLedConfig) as usize] = ResponseExpectedFlag::False;
291 result.device.response_expected[u8::from(CompassBrickletFunction::GetStatusLedConfig) as usize] = ResponseExpectedFlag::AlwaysTrue;
292 result.device.response_expected[u8::from(CompassBrickletFunction::GetChipTemperature) as usize] = ResponseExpectedFlag::AlwaysTrue;
293 result.device.response_expected[u8::from(CompassBrickletFunction::Reset) as usize] = ResponseExpectedFlag::False;
294 result.device.response_expected[u8::from(CompassBrickletFunction::WriteUid) as usize] = ResponseExpectedFlag::False;
295 result.device.response_expected[u8::from(CompassBrickletFunction::ReadUid) as usize] = ResponseExpectedFlag::AlwaysTrue;
296 result.device.response_expected[u8::from(CompassBrickletFunction::GetIdentity) as usize] = ResponseExpectedFlag::AlwaysTrue;
297 result
298 }
299
300 pub fn get_response_expected(&mut self, fun: CompassBrickletFunction) -> Result<bool, GetResponseExpectedError> {
315 self.device.get_response_expected(u8::from(fun))
316 }
317
318 pub fn set_response_expected(&mut self, fun: CompassBrickletFunction, response_expected: bool) -> Result<(), SetResponseExpectedError> {
327 self.device.set_response_expected(u8::from(fun), response_expected)
328 }
329
330 pub fn set_response_expected_all(&mut self, response_expected: bool) {
332 self.device.set_response_expected_all(response_expected)
333 }
334
335 pub fn get_api_version(&self) -> [u8; 3] {
338 self.device.api_version
339 }
340
341 pub async fn get_heading_callback_receiver(&mut self) -> impl Stream<Item = i16> {
349 self.device
350 .get_callback_receiver(u8::from(CompassBrickletFunction::CallbackHeading))
351 .await
352 .map(|p| i16::from_le_byte_slice(p.body()))
353 }
354
355 pub async fn get_magnetic_flux_density_callback_receiver(&mut self) -> impl Stream<Item = MagneticFluxDensityEvent> {
360 self.device
361 .get_callback_receiver(u8::from(CompassBrickletFunction::CallbackMagneticFluxDensity))
362 .await
363 .map(|p| MagneticFluxDensityEvent::from_le_byte_slice(p.body()))
364 }
365
366 pub async fn get_heading(&mut self) -> Result<i16, TinkerforgeError> {
376 let payload = [0; 0];
377
378 #[allow(unused_variables)]
379 let result = self.device.get(u8::from(CompassBrickletFunction::GetHeading), &payload).await?;
380 Ok(i16::from_le_byte_slice(result.body()))
381 }
382
383 pub async fn set_heading_callback_configuration(
416 &mut self,
417 period: u32,
418 value_has_to_change: bool,
419 option: char,
420 min: i16,
421 max: i16,
422 ) -> Result<(), TinkerforgeError> {
423 let mut payload = [0; 10];
424 period.write_to_slice(&mut payload[0..4]);
425 value_has_to_change.write_to_slice(&mut payload[4..5]);
426 option.write_to_slice(&mut payload[5..6]);
427 min.write_to_slice(&mut payload[6..8]);
428 max.write_to_slice(&mut payload[8..10]);
429
430 #[allow(unused_variables)]
431 let result = self.device.set(u8::from(CompassBrickletFunction::SetHeadingCallbackConfiguration), &payload).await?;
432 Ok(())
433 }
434
435 pub async fn get_heading_callback_configuration(&mut self) -> Result<HeadingCallbackConfiguration, TinkerforgeError> {
444 let payload = [0; 0];
445
446 #[allow(unused_variables)]
447 let result = self.device.get(u8::from(CompassBrickletFunction::GetHeadingCallbackConfiguration), &payload).await?;
448 Ok(HeadingCallbackConfiguration::from_le_byte_slice(result.body()))
449 }
450
451 pub async fn get_magnetic_flux_density(&mut self) -> Result<MagneticFluxDensity, TinkerforgeError> {
458 let payload = [0; 0];
459
460 #[allow(unused_variables)]
461 let result = self.device.get(u8::from(CompassBrickletFunction::GetMagneticFluxDensity), &payload).await?;
462 Ok(MagneticFluxDensity::from_le_byte_slice(result.body()))
463 }
464
465 pub async fn set_magnetic_flux_density_callback_configuration(
475 &mut self,
476 period: u32,
477 value_has_to_change: bool,
478 ) -> Result<(), TinkerforgeError> {
479 let mut payload = [0; 5];
480 period.write_to_slice(&mut payload[0..4]);
481 value_has_to_change.write_to_slice(&mut payload[4..5]);
482
483 #[allow(unused_variables)]
484 let result = self.device.set(u8::from(CompassBrickletFunction::SetMagneticFluxDensityCallbackConfiguration), &payload).await?;
485 Ok(())
486 }
487
488 pub async fn get_magnetic_flux_density_callback_configuration(
491 &mut self,
492 ) -> Result<MagneticFluxDensityCallbackConfiguration, TinkerforgeError> {
493 let payload = [0; 0];
494
495 #[allow(unused_variables)]
496 let result = self.device.get(u8::from(CompassBrickletFunction::GetMagneticFluxDensityCallbackConfiguration), &payload).await?;
497 Ok(MagneticFluxDensityCallbackConfiguration::from_le_byte_slice(result.body()))
498 }
499
500 pub async fn set_configuration(&mut self, data_rate: u8, background_calibration: bool) -> Result<(), TinkerforgeError> {
519 let mut payload = [0; 2];
520 data_rate.write_to_slice(&mut payload[0..1]);
521 background_calibration.write_to_slice(&mut payload[1..2]);
522
523 #[allow(unused_variables)]
524 let result = self.device.set(u8::from(CompassBrickletFunction::SetConfiguration), &payload).await?;
525 Ok(())
526 }
527
528 pub async fn get_configuration(&mut self) -> Result<Configuration, TinkerforgeError> {
536 let payload = [0; 0];
537
538 #[allow(unused_variables)]
539 let result = self.device.get(u8::from(CompassBrickletFunction::GetConfiguration), &payload).await?;
540 Ok(Configuration::from_le_byte_slice(result.body()))
541 }
542
543 pub async fn set_calibration(&mut self, offset: &[i16; 3], gain: &[i16; 3]) -> Result<(), TinkerforgeError> {
551 let mut payload = [0; 12];
552 offset.write_to_slice(&mut payload[0..6]);
553 gain.write_to_slice(&mut payload[6..12]);
554
555 #[allow(unused_variables)]
556 let result = self.device.set(u8::from(CompassBrickletFunction::SetCalibration), &payload).await?;
557 Ok(())
558 }
559
560 pub async fn get_calibration(&mut self) -> Result<Calibration, TinkerforgeError> {
562 let payload = [0; 0];
563
564 #[allow(unused_variables)]
565 let result = self.device.get(u8::from(CompassBrickletFunction::GetCalibration), &payload).await?;
566 Ok(Calibration::from_le_byte_slice(result.body()))
567 }
568
569 pub async fn get_spitfp_error_count(&mut self) -> Result<SpitfpErrorCount, TinkerforgeError> {
581 let payload = [0; 0];
582
583 #[allow(unused_variables)]
584 let result = self.device.get(u8::from(CompassBrickletFunction::GetSpitfpErrorCount), &payload).await?;
585 Ok(SpitfpErrorCount::from_le_byte_slice(result.body()))
586 }
587
588 pub async fn set_bootloader_mode(&mut self, mode: u8) -> Result<u8, TinkerforgeError> {
611 let mut payload = [0; 1];
612 mode.write_to_slice(&mut payload[0..1]);
613
614 #[allow(unused_variables)]
615 let result = self.device.get(u8::from(CompassBrickletFunction::SetBootloaderMode), &payload).await?;
616 Ok(u8::from_le_byte_slice(result.body()))
617 }
618
619 pub async fn get_bootloader_mode(&mut self) -> Result<u8, TinkerforgeError> {
628 let payload = [0; 0];
629
630 #[allow(unused_variables)]
631 let result = self.device.get(u8::from(CompassBrickletFunction::GetBootloaderMode), &payload).await?;
632 Ok(u8::from_le_byte_slice(result.body()))
633 }
634
635 pub async fn set_write_firmware_pointer(&mut self, pointer: u32) -> Result<(), TinkerforgeError> {
642 let mut payload = [0; 4];
643 pointer.write_to_slice(&mut payload[0..4]);
644
645 #[allow(unused_variables)]
646 let result = self.device.set(u8::from(CompassBrickletFunction::SetWriteFirmwarePointer), &payload).await?;
647 Ok(())
648 }
649
650 pub async fn write_firmware(&mut self, data: &[u8; 64]) -> Result<u8, TinkerforgeError> {
659 let mut payload = [0; 64];
660 data.write_to_slice(&mut payload[0..64]);
661
662 #[allow(unused_variables)]
663 let result = self.device.get(u8::from(CompassBrickletFunction::WriteFirmware), &payload).await?;
664 Ok(u8::from_le_byte_slice(result.body()))
665 }
666
667 pub async fn set_status_led_config(&mut self, config: u8) -> Result<(), TinkerforgeError> {
681 let mut payload = [0; 1];
682 config.write_to_slice(&mut payload[0..1]);
683
684 #[allow(unused_variables)]
685 let result = self.device.set(u8::from(CompassBrickletFunction::SetStatusLedConfig), &payload).await?;
686 Ok(())
687 }
688
689 pub async fn get_status_led_config(&mut self) -> Result<u8, TinkerforgeError> {
697 let payload = [0; 0];
698
699 #[allow(unused_variables)]
700 let result = self.device.get(u8::from(CompassBrickletFunction::GetStatusLedConfig), &payload).await?;
701 Ok(u8::from_le_byte_slice(result.body()))
702 }
703
704 pub async fn get_chip_temperature(&mut self) -> Result<i16, TinkerforgeError> {
711 let payload = [0; 0];
712
713 #[allow(unused_variables)]
714 let result = self.device.get(u8::from(CompassBrickletFunction::GetChipTemperature), &payload).await?;
715 Ok(i16::from_le_byte_slice(result.body()))
716 }
717
718 pub async fn reset(&mut self) -> Result<(), TinkerforgeError> {
725 let payload = [0; 0];
726
727 #[allow(unused_variables)]
728 let result = self.device.set(u8::from(CompassBrickletFunction::Reset), &payload).await?;
729 Ok(())
730 }
731
732 pub async fn write_uid(&mut self, uid: u32) -> Result<(), TinkerforgeError> {
738 let mut payload = [0; 4];
739 uid.write_to_slice(&mut payload[0..4]);
740
741 #[allow(unused_variables)]
742 let result = self.device.set(u8::from(CompassBrickletFunction::WriteUid), &payload).await?;
743 Ok(())
744 }
745
746 pub async fn read_uid(&mut self) -> Result<u32, TinkerforgeError> {
749 let payload = [0; 0];
750
751 #[allow(unused_variables)]
752 let result = self.device.get(u8::from(CompassBrickletFunction::ReadUid), &payload).await?;
753 Ok(u32::from_le_byte_slice(result.body()))
754 }
755
756 pub async fn get_identity(&mut self) -> Result<Identity, TinkerforgeError> {
767 let payload = [0; 0];
768
769 #[allow(unused_variables)]
770 let result = self.device.get(u8::from(CompassBrickletFunction::GetIdentity), &payload).await?;
771 Ok(Identity::from_le_byte_slice(result.body()))
772 }
773}