1#[allow(unused_imports)]
15use crate::{
16 base58::Uid,
17 byte_converter::*,
18 converting_receiver::{BrickletError, BrickletRecvTimeoutError},
19 device::*,
20 error::TinkerforgeError,
21 ip_connection::async_io::AsyncIpConnection,
22 low_level_traits::LowLevelRead,
23};
24#[allow(unused_imports)]
25use futures_core::Stream;
26#[allow(unused_imports)]
27use tokio_stream::StreamExt;
28pub enum EPaper296x128BrickletFunction {
29 Draw,
30 GetDrawStatus,
31 WriteBlackWhiteLowLevel,
32 ReadBlackWhiteLowLevel,
33 WriteColorLowLevel,
34 ReadColorLowLevel,
35 FillDisplay,
36 DrawText,
37 DrawLine,
38 DrawBox,
39 SetUpdateMode,
40 GetUpdateMode,
41 SetDisplayType,
42 GetDisplayType,
43 SetDisplayDriver,
44 GetDisplayDriver,
45 GetSpitfpErrorCount,
46 SetBootloaderMode,
47 GetBootloaderMode,
48 SetWriteFirmwarePointer,
49 WriteFirmware,
50 SetStatusLedConfig,
51 GetStatusLedConfig,
52 GetChipTemperature,
53 Reset,
54 WriteUid,
55 ReadUid,
56 GetIdentity,
57 CallbackDrawStatus,
58}
59impl From<EPaper296x128BrickletFunction> for u8 {
60 fn from(fun: EPaper296x128BrickletFunction) -> Self {
61 match fun {
62 EPaper296x128BrickletFunction::Draw => 1,
63 EPaper296x128BrickletFunction::GetDrawStatus => 2,
64 EPaper296x128BrickletFunction::WriteBlackWhiteLowLevel => 3,
65 EPaper296x128BrickletFunction::ReadBlackWhiteLowLevel => 4,
66 EPaper296x128BrickletFunction::WriteColorLowLevel => 5,
67 EPaper296x128BrickletFunction::ReadColorLowLevel => 6,
68 EPaper296x128BrickletFunction::FillDisplay => 7,
69 EPaper296x128BrickletFunction::DrawText => 8,
70 EPaper296x128BrickletFunction::DrawLine => 9,
71 EPaper296x128BrickletFunction::DrawBox => 10,
72 EPaper296x128BrickletFunction::SetUpdateMode => 12,
73 EPaper296x128BrickletFunction::GetUpdateMode => 13,
74 EPaper296x128BrickletFunction::SetDisplayType => 14,
75 EPaper296x128BrickletFunction::GetDisplayType => 15,
76 EPaper296x128BrickletFunction::SetDisplayDriver => 16,
77 EPaper296x128BrickletFunction::GetDisplayDriver => 17,
78 EPaper296x128BrickletFunction::GetSpitfpErrorCount => 234,
79 EPaper296x128BrickletFunction::SetBootloaderMode => 235,
80 EPaper296x128BrickletFunction::GetBootloaderMode => 236,
81 EPaper296x128BrickletFunction::SetWriteFirmwarePointer => 237,
82 EPaper296x128BrickletFunction::WriteFirmware => 238,
83 EPaper296x128BrickletFunction::SetStatusLedConfig => 239,
84 EPaper296x128BrickletFunction::GetStatusLedConfig => 240,
85 EPaper296x128BrickletFunction::GetChipTemperature => 242,
86 EPaper296x128BrickletFunction::Reset => 243,
87 EPaper296x128BrickletFunction::WriteUid => 248,
88 EPaper296x128BrickletFunction::ReadUid => 249,
89 EPaper296x128BrickletFunction::GetIdentity => 255,
90 EPaper296x128BrickletFunction::CallbackDrawStatus => 11,
91 }
92 }
93}
94pub const E_PAPER_296X128_BRICKLET_DRAW_STATUS_IDLE: u8 = 0;
95pub const E_PAPER_296X128_BRICKLET_DRAW_STATUS_COPYING: u8 = 1;
96pub const E_PAPER_296X128_BRICKLET_DRAW_STATUS_DRAWING: u8 = 2;
97pub const E_PAPER_296X128_BRICKLET_COLOR_BLACK: u8 = 0;
98pub const E_PAPER_296X128_BRICKLET_COLOR_WHITE: u8 = 1;
99pub const E_PAPER_296X128_BRICKLET_COLOR_RED: u8 = 2;
100pub const E_PAPER_296X128_BRICKLET_COLOR_GRAY: u8 = 2;
101pub const E_PAPER_296X128_BRICKLET_FONT_6X8: u8 = 0;
102pub const E_PAPER_296X128_BRICKLET_FONT_6X16: u8 = 1;
103pub const E_PAPER_296X128_BRICKLET_FONT_6X24: u8 = 2;
104pub const E_PAPER_296X128_BRICKLET_FONT_6X32: u8 = 3;
105pub const E_PAPER_296X128_BRICKLET_FONT_12X16: u8 = 4;
106pub const E_PAPER_296X128_BRICKLET_FONT_12X24: u8 = 5;
107pub const E_PAPER_296X128_BRICKLET_FONT_12X32: u8 = 6;
108pub const E_PAPER_296X128_BRICKLET_FONT_18X24: u8 = 7;
109pub const E_PAPER_296X128_BRICKLET_FONT_18X32: u8 = 8;
110pub const E_PAPER_296X128_BRICKLET_FONT_24X32: u8 = 9;
111pub const E_PAPER_296X128_BRICKLET_ORIENTATION_HORIZONTAL: u8 = 0;
112pub const E_PAPER_296X128_BRICKLET_ORIENTATION_VERTICAL: u8 = 1;
113pub const E_PAPER_296X128_BRICKLET_UPDATE_MODE_DEFAULT: u8 = 0;
114pub const E_PAPER_296X128_BRICKLET_UPDATE_MODE_BLACK_WHITE: u8 = 1;
115pub const E_PAPER_296X128_BRICKLET_UPDATE_MODE_DELTA: u8 = 2;
116pub const E_PAPER_296X128_BRICKLET_DISPLAY_TYPE_BLACK_WHITE_RED: u8 = 0;
117pub const E_PAPER_296X128_BRICKLET_DISPLAY_TYPE_BLACK_WHITE_GRAY: u8 = 1;
118pub const E_PAPER_296X128_BRICKLET_DISPLAY_DRIVER_SSD1675A: u8 = 0;
119pub const E_PAPER_296X128_BRICKLET_DISPLAY_DRIVER_SSD1680: u8 = 1;
120pub const E_PAPER_296X128_BRICKLET_BOOTLOADER_MODE_BOOTLOADER: u8 = 0;
121pub const E_PAPER_296X128_BRICKLET_BOOTLOADER_MODE_FIRMWARE: u8 = 1;
122pub const E_PAPER_296X128_BRICKLET_BOOTLOADER_MODE_BOOTLOADER_WAIT_FOR_REBOOT: u8 = 2;
123pub const E_PAPER_296X128_BRICKLET_BOOTLOADER_MODE_FIRMWARE_WAIT_FOR_REBOOT: u8 = 3;
124pub const E_PAPER_296X128_BRICKLET_BOOTLOADER_MODE_FIRMWARE_WAIT_FOR_ERASE_AND_REBOOT: u8 = 4;
125pub const E_PAPER_296X128_BRICKLET_BOOTLOADER_STATUS_OK: u8 = 0;
126pub const E_PAPER_296X128_BRICKLET_BOOTLOADER_STATUS_INVALID_MODE: u8 = 1;
127pub const E_PAPER_296X128_BRICKLET_BOOTLOADER_STATUS_NO_CHANGE: u8 = 2;
128pub const E_PAPER_296X128_BRICKLET_BOOTLOADER_STATUS_ENTRY_FUNCTION_NOT_PRESENT: u8 = 3;
129pub const E_PAPER_296X128_BRICKLET_BOOTLOADER_STATUS_DEVICE_IDENTIFIER_INCORRECT: u8 = 4;
130pub const E_PAPER_296X128_BRICKLET_BOOTLOADER_STATUS_CRC_MISMATCH: u8 = 5;
131pub const E_PAPER_296X128_BRICKLET_STATUS_LED_CONFIG_OFF: u8 = 0;
132pub const E_PAPER_296X128_BRICKLET_STATUS_LED_CONFIG_ON: u8 = 1;
133pub const E_PAPER_296X128_BRICKLET_STATUS_LED_CONFIG_SHOW_HEARTBEAT: u8 = 2;
134pub const E_PAPER_296X128_BRICKLET_STATUS_LED_CONFIG_SHOW_STATUS: u8 = 3;
135
136#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
137pub struct WriteBlackWhiteLowLevel {}
138impl FromByteSlice for WriteBlackWhiteLowLevel {
139 fn bytes_expected() -> usize {
140 0
141 }
142 fn from_le_byte_slice(_bytes: &[u8]) -> WriteBlackWhiteLowLevel {
143 WriteBlackWhiteLowLevel {}
144 }
145}
146
147#[derive(Clone, Copy)]
148pub struct ReadBlackWhiteLowLevel {
149 pub pixels_length: u16,
150 pub pixels_chunk_offset: u16,
151 pub pixels_chunk_data: [bool; 464],
152}
153impl FromByteSlice for ReadBlackWhiteLowLevel {
154 fn bytes_expected() -> usize {
155 62
156 }
157 fn from_le_byte_slice(bytes: &[u8]) -> ReadBlackWhiteLowLevel {
158 ReadBlackWhiteLowLevel {
159 pixels_length: <u16>::from_le_byte_slice(&bytes[0..2]),
160 pixels_chunk_offset: <u16>::from_le_byte_slice(&bytes[2..4]),
161 pixels_chunk_data: <[bool; 464]>::from_le_byte_slice(&bytes[4..62]),
162 }
163 }
164}
165impl LowLevelRead<bool, ReadBlackWhiteResult> for ReadBlackWhiteLowLevel {
166 fn ll_message_length(&self) -> usize {
167 self.pixels_length as usize
168 }
169
170 fn ll_message_chunk_offset(&self) -> usize {
171 self.pixels_chunk_offset as usize
172 }
173
174 fn ll_message_chunk_data(&self) -> &[bool] {
175 &self.pixels_chunk_data
176 }
177
178 fn get_result(&self) -> ReadBlackWhiteResult {
179 ReadBlackWhiteResult {}
180 }
181}
182
183#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
184pub struct WriteColorLowLevel {}
185impl FromByteSlice for WriteColorLowLevel {
186 fn bytes_expected() -> usize {
187 0
188 }
189 fn from_le_byte_slice(_bytes: &[u8]) -> WriteColorLowLevel {
190 WriteColorLowLevel {}
191 }
192}
193
194#[derive(Clone, Copy)]
195pub struct ReadColorLowLevel {
196 pub pixels_length: u16,
197 pub pixels_chunk_offset: u16,
198 pub pixels_chunk_data: [bool; 464],
199}
200impl FromByteSlice for ReadColorLowLevel {
201 fn bytes_expected() -> usize {
202 62
203 }
204 fn from_le_byte_slice(bytes: &[u8]) -> ReadColorLowLevel {
205 ReadColorLowLevel {
206 pixels_length: <u16>::from_le_byte_slice(&bytes[0..2]),
207 pixels_chunk_offset: <u16>::from_le_byte_slice(&bytes[2..4]),
208 pixels_chunk_data: <[bool; 464]>::from_le_byte_slice(&bytes[4..62]),
209 }
210 }
211}
212impl LowLevelRead<bool, ReadColorResult> for ReadColorLowLevel {
213 fn ll_message_length(&self) -> usize {
214 self.pixels_length as usize
215 }
216
217 fn ll_message_chunk_offset(&self) -> usize {
218 self.pixels_chunk_offset as usize
219 }
220
221 fn ll_message_chunk_data(&self) -> &[bool] {
222 &self.pixels_chunk_data
223 }
224
225 fn get_result(&self) -> ReadColorResult {
226 ReadColorResult {}
227 }
228}
229
230#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
231pub struct SpitfpErrorCount {
232 pub error_count_ack_checksum: u32,
233 pub error_count_message_checksum: u32,
234 pub error_count_frame: u32,
235 pub error_count_overflow: u32,
236}
237impl FromByteSlice for SpitfpErrorCount {
238 fn bytes_expected() -> usize {
239 16
240 }
241 fn from_le_byte_slice(bytes: &[u8]) -> SpitfpErrorCount {
242 SpitfpErrorCount {
243 error_count_ack_checksum: <u32>::from_le_byte_slice(&bytes[0..4]),
244 error_count_message_checksum: <u32>::from_le_byte_slice(&bytes[4..8]),
245 error_count_frame: <u32>::from_le_byte_slice(&bytes[8..12]),
246 error_count_overflow: <u32>::from_le_byte_slice(&bytes[12..16]),
247 }
248 }
249}
250
251#[derive(Clone, Debug, Default, PartialEq, Eq, Hash)]
252pub struct Identity {
253 pub uid: String,
254 pub connected_uid: String,
255 pub position: char,
256 pub hardware_version: [u8; 3],
257 pub firmware_version: [u8; 3],
258 pub device_identifier: u16,
259}
260impl FromByteSlice for Identity {
261 fn bytes_expected() -> usize {
262 25
263 }
264 fn from_le_byte_slice(bytes: &[u8]) -> Identity {
265 Identity {
266 uid: <String>::from_le_byte_slice(&bytes[0..8]),
267 connected_uid: <String>::from_le_byte_slice(&bytes[8..16]),
268 position: <char>::from_le_byte_slice(&bytes[16..17]),
269 hardware_version: <[u8; 3]>::from_le_byte_slice(&bytes[17..20]),
270 firmware_version: <[u8; 3]>::from_le_byte_slice(&bytes[20..23]),
271 device_identifier: <u16>::from_le_byte_slice(&bytes[23..25]),
272 }
273 }
274}
275
276#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
277pub struct WriteBlackWhiteResult {}
278
279#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
280pub struct ReadBlackWhiteResult {}
281
282#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
283pub struct WriteColorResult {}
284
285#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
286pub struct ReadColorResult {}
287
288#[derive(Clone)]
290pub struct EPaper296x128Bricklet {
291 device: Device,
292}
293impl EPaper296x128Bricklet {
294 pub const DEVICE_IDENTIFIER: u16 = 2146;
295 pub const DEVICE_DISPLAY_NAME: &'static str = "E-Paper 296x128 Bricklet";
296 pub fn new(uid: Uid, connection: AsyncIpConnection) -> EPaper296x128Bricklet {
298 let mut result = EPaper296x128Bricklet { device: Device::new([2, 0, 10], uid, connection, Self::DEVICE_DISPLAY_NAME) };
299 result.device.response_expected[u8::from(EPaper296x128BrickletFunction::Draw) as usize] = ResponseExpectedFlag::False;
300 result.device.response_expected[u8::from(EPaper296x128BrickletFunction::GetDrawStatus) as usize] = ResponseExpectedFlag::AlwaysTrue;
301 result.device.response_expected[u8::from(EPaper296x128BrickletFunction::WriteBlackWhiteLowLevel) as usize] =
302 ResponseExpectedFlag::True;
303 result.device.response_expected[u8::from(EPaper296x128BrickletFunction::ReadBlackWhiteLowLevel) as usize] =
304 ResponseExpectedFlag::AlwaysTrue;
305 result.device.response_expected[u8::from(EPaper296x128BrickletFunction::WriteColorLowLevel) as usize] = ResponseExpectedFlag::True;
306 result.device.response_expected[u8::from(EPaper296x128BrickletFunction::ReadColorLowLevel) as usize] =
307 ResponseExpectedFlag::AlwaysTrue;
308 result.device.response_expected[u8::from(EPaper296x128BrickletFunction::FillDisplay) as usize] = ResponseExpectedFlag::False;
309 result.device.response_expected[u8::from(EPaper296x128BrickletFunction::DrawText) as usize] = ResponseExpectedFlag::False;
310 result.device.response_expected[u8::from(EPaper296x128BrickletFunction::DrawLine) as usize] = ResponseExpectedFlag::False;
311 result.device.response_expected[u8::from(EPaper296x128BrickletFunction::DrawBox) as usize] = ResponseExpectedFlag::False;
312 result.device.response_expected[u8::from(EPaper296x128BrickletFunction::SetUpdateMode) as usize] = ResponseExpectedFlag::False;
313 result.device.response_expected[u8::from(EPaper296x128BrickletFunction::GetUpdateMode) as usize] = ResponseExpectedFlag::AlwaysTrue;
314 result.device.response_expected[u8::from(EPaper296x128BrickletFunction::SetDisplayType) as usize] = ResponseExpectedFlag::False;
315 result.device.response_expected[u8::from(EPaper296x128BrickletFunction::GetDisplayType) as usize] =
316 ResponseExpectedFlag::AlwaysTrue;
317 result.device.response_expected[u8::from(EPaper296x128BrickletFunction::SetDisplayDriver) as usize] = ResponseExpectedFlag::False;
318 result.device.response_expected[u8::from(EPaper296x128BrickletFunction::GetDisplayDriver) as usize] =
319 ResponseExpectedFlag::AlwaysTrue;
320 result.device.response_expected[u8::from(EPaper296x128BrickletFunction::GetSpitfpErrorCount) as usize] =
321 ResponseExpectedFlag::AlwaysTrue;
322 result.device.response_expected[u8::from(EPaper296x128BrickletFunction::SetBootloaderMode) as usize] =
323 ResponseExpectedFlag::AlwaysTrue;
324 result.device.response_expected[u8::from(EPaper296x128BrickletFunction::GetBootloaderMode) as usize] =
325 ResponseExpectedFlag::AlwaysTrue;
326 result.device.response_expected[u8::from(EPaper296x128BrickletFunction::SetWriteFirmwarePointer) as usize] =
327 ResponseExpectedFlag::False;
328 result.device.response_expected[u8::from(EPaper296x128BrickletFunction::WriteFirmware) as usize] = ResponseExpectedFlag::AlwaysTrue;
329 result.device.response_expected[u8::from(EPaper296x128BrickletFunction::SetStatusLedConfig) as usize] = ResponseExpectedFlag::False;
330 result.device.response_expected[u8::from(EPaper296x128BrickletFunction::GetStatusLedConfig) as usize] =
331 ResponseExpectedFlag::AlwaysTrue;
332 result.device.response_expected[u8::from(EPaper296x128BrickletFunction::GetChipTemperature) as usize] =
333 ResponseExpectedFlag::AlwaysTrue;
334 result.device.response_expected[u8::from(EPaper296x128BrickletFunction::Reset) as usize] = ResponseExpectedFlag::False;
335 result.device.response_expected[u8::from(EPaper296x128BrickletFunction::WriteUid) as usize] = ResponseExpectedFlag::False;
336 result.device.response_expected[u8::from(EPaper296x128BrickletFunction::ReadUid) as usize] = ResponseExpectedFlag::AlwaysTrue;
337 result.device.response_expected[u8::from(EPaper296x128BrickletFunction::GetIdentity) as usize] = ResponseExpectedFlag::AlwaysTrue;
338 result
339 }
340
341 pub fn get_response_expected(&mut self, fun: EPaper296x128BrickletFunction) -> Result<bool, GetResponseExpectedError> {
356 self.device.get_response_expected(u8::from(fun))
357 }
358
359 pub fn set_response_expected(
368 &mut self,
369 fun: EPaper296x128BrickletFunction,
370 response_expected: bool,
371 ) -> Result<(), SetResponseExpectedError> {
372 self.device.set_response_expected(u8::from(fun), response_expected)
373 }
374
375 pub fn set_response_expected_all(&mut self, response_expected: bool) {
377 self.device.set_response_expected_all(response_expected)
378 }
379
380 pub fn get_api_version(&self) -> [u8; 3] {
383 self.device.api_version
384 }
385
386 pub async fn get_draw_status_callback_receiver(&mut self) -> impl Stream<Item = u8> {
391 self.device
392 .get_callback_receiver(u8::from(EPaper296x128BrickletFunction::CallbackDrawStatus))
393 .await
394 .map(|p| u8::from_le_byte_slice(p.body()))
395 }
396
397 pub async fn draw(&mut self) -> Result<(), TinkerforgeError> {
402 let payload = [0; 0];
403
404 #[allow(unused_variables)]
405 let result = self.device.set(u8::from(EPaper296x128BrickletFunction::Draw), &payload).await?;
406 Ok(())
407 }
408
409 pub async fn get_draw_status(&mut self) -> Result<u8, TinkerforgeError> {
424 let payload = [0; 0];
425
426 #[allow(unused_variables)]
427 let result = self.device.get(u8::from(EPaper296x128BrickletFunction::GetDrawStatus), &payload).await?;
428 Ok(u8::from_le_byte_slice(result.body()))
429 }
430
431 pub async fn write_black_white_low_level(
444 &mut self,
445 x_start: u16,
446 y_start: u8,
447 x_end: u16,
448 y_end: u8,
449 pixels_length: u16,
450 pixels_chunk_offset: u16,
451 pixels_chunk_data: &[bool; 432],
452 ) -> Result<WriteBlackWhiteLowLevel, TinkerforgeError> {
453 let mut payload = [0; 64];
454 x_start.write_to_slice(&mut payload[0..2]);
455 y_start.write_to_slice(&mut payload[2..3]);
456 x_end.write_to_slice(&mut payload[3..5]);
457 y_end.write_to_slice(&mut payload[5..6]);
458 pixels_length.write_to_slice(&mut payload[6..8]);
459 pixels_chunk_offset.write_to_slice(&mut payload[8..10]);
460 pixels_chunk_data.write_to_slice(&mut payload[10..64]);
461
462 #[allow(unused_variables)]
463 let result = self.device.set(u8::from(EPaper296x128BrickletFunction::WriteBlackWhiteLowLevel), &payload).await?.unwrap();
464 Ok(WriteBlackWhiteLowLevel::from_le_byte_slice(result.body()))
465 }
466
467 pub async fn read_black_white_low_level(
476 &mut self,
477 x_start: u16,
478 y_start: u8,
479 x_end: u16,
480 y_end: u8,
481 ) -> Result<ReadBlackWhiteLowLevel, TinkerforgeError> {
482 let mut payload = [0; 6];
483 x_start.write_to_slice(&mut payload[0..2]);
484 y_start.write_to_slice(&mut payload[2..3]);
485 x_end.write_to_slice(&mut payload[3..5]);
486 y_end.write_to_slice(&mut payload[5..6]);
487
488 #[allow(unused_variables)]
489 let result = self.device.get(u8::from(EPaper296x128BrickletFunction::ReadBlackWhiteLowLevel), &payload).await?;
490 Ok(ReadBlackWhiteLowLevel::from_le_byte_slice(result.body()))
491 }
492
493 pub async fn write_color_low_level(
509 &mut self,
510 x_start: u16,
511 y_start: u8,
512 x_end: u16,
513 y_end: u8,
514 pixels_length: u16,
515 pixels_chunk_offset: u16,
516 pixels_chunk_data: &[bool; 432],
517 ) -> Result<WriteColorLowLevel, TinkerforgeError> {
518 let mut payload = [0; 64];
519 x_start.write_to_slice(&mut payload[0..2]);
520 y_start.write_to_slice(&mut payload[2..3]);
521 x_end.write_to_slice(&mut payload[3..5]);
522 y_end.write_to_slice(&mut payload[5..6]);
523 pixels_length.write_to_slice(&mut payload[6..8]);
524 pixels_chunk_offset.write_to_slice(&mut payload[8..10]);
525 pixels_chunk_data.write_to_slice(&mut payload[10..64]);
526
527 #[allow(unused_variables)]
528 let result = self.device.set(u8::from(EPaper296x128BrickletFunction::WriteColorLowLevel), &payload).await?.unwrap();
529 Ok(WriteColorLowLevel::from_le_byte_slice(result.body()))
530 }
531
532 pub async fn read_color_low_level(
541 &mut self,
542 x_start: u16,
543 y_start: u8,
544 x_end: u16,
545 y_end: u8,
546 ) -> Result<ReadColorLowLevel, TinkerforgeError> {
547 let mut payload = [0; 6];
548 x_start.write_to_slice(&mut payload[0..2]);
549 y_start.write_to_slice(&mut payload[2..3]);
550 x_end.write_to_slice(&mut payload[3..5]);
551 y_end.write_to_slice(&mut payload[5..6]);
552
553 #[allow(unused_variables)]
554 let result = self.device.get(u8::from(EPaper296x128BrickletFunction::ReadColorLowLevel), &payload).await?;
555 Ok(ReadColorLowLevel::from_le_byte_slice(result.body()))
556 }
557
558 pub async fn fill_display(&mut self, color: u8) -> Result<(), TinkerforgeError> {
569 let mut payload = [0; 1];
570 color.write_to_slice(&mut payload[0..1]);
571
572 #[allow(unused_variables)]
573 let result = self.device.set(u8::from(EPaper296x128BrickletFunction::FillDisplay), &payload).await?;
574 Ok(())
575 }
576
577 pub async fn draw_text(
605 &mut self,
606 position_x: u16,
607 position_y: u8,
608 font: u8,
609 color: u8,
610 orientation: u8,
611 text: String,
612 ) -> Result<(), TinkerforgeError> {
613 let mut payload = [0; 56];
614 position_x.write_to_slice(&mut payload[0..2]);
615 position_y.write_to_slice(&mut payload[2..3]);
616 font.write_to_slice(&mut payload[3..4]);
617 color.write_to_slice(&mut payload[4..5]);
618 orientation.write_to_slice(&mut payload[5..6]);
619 text.try_write_to_slice(50, &mut payload)?;
620
621 #[allow(unused_variables)]
622 let result = self.device.set(u8::from(EPaper296x128BrickletFunction::DrawText), &payload).await?;
623 Ok(())
624 }
625
626 pub async fn draw_line(
637 &mut self,
638 position_x_start: u16,
639 position_y_start: u8,
640 position_x_end: u16,
641 position_y_end: u8,
642 color: u8,
643 ) -> Result<(), TinkerforgeError> {
644 let mut payload = [0; 7];
645 position_x_start.write_to_slice(&mut payload[0..2]);
646 position_y_start.write_to_slice(&mut payload[2..3]);
647 position_x_end.write_to_slice(&mut payload[3..5]);
648 position_y_end.write_to_slice(&mut payload[5..6]);
649 color.write_to_slice(&mut payload[6..7]);
650
651 #[allow(unused_variables)]
652 let result = self.device.set(u8::from(EPaper296x128BrickletFunction::DrawLine), &payload).await?;
653 Ok(())
654 }
655
656 pub async fn draw_box(
670 &mut self,
671 position_x_start: u16,
672 position_y_start: u8,
673 position_x_end: u16,
674 position_y_end: u8,
675 fill: bool,
676 color: u8,
677 ) -> Result<(), TinkerforgeError> {
678 let mut payload = [0; 8];
679 position_x_start.write_to_slice(&mut payload[0..2]);
680 position_y_start.write_to_slice(&mut payload[2..3]);
681 position_x_end.write_to_slice(&mut payload[3..5]);
682 position_y_end.write_to_slice(&mut payload[5..6]);
683 fill.write_to_slice(&mut payload[6..7]);
684 color.write_to_slice(&mut payload[7..8]);
685
686 #[allow(unused_variables)]
687 let result = self.device.set(u8::from(EPaper296x128BrickletFunction::DrawBox), &payload).await?;
688 Ok(())
689 }
690
691 pub async fn set_update_mode(&mut self, update_mode: u8) -> Result<(), TinkerforgeError> {
731 let mut payload = [0; 1];
732 update_mode.write_to_slice(&mut payload[0..1]);
733
734 #[allow(unused_variables)]
735 let result = self.device.set(u8::from(EPaper296x128BrickletFunction::SetUpdateMode), &payload).await?;
736 Ok(())
737 }
738
739 pub async fn get_update_mode(&mut self) -> Result<u8, TinkerforgeError> {
746 let payload = [0; 0];
747
748 #[allow(unused_variables)]
749 let result = self.device.get(u8::from(EPaper296x128BrickletFunction::GetUpdateMode), &payload).await?;
750 Ok(u8::from_le_byte_slice(result.body()))
751 }
752
753 pub async fn set_display_type(&mut self, display_type: u8) -> Result<(), TinkerforgeError> {
762 let mut payload = [0; 1];
763 display_type.write_to_slice(&mut payload[0..1]);
764
765 #[allow(unused_variables)]
766 let result = self.device.set(u8::from(EPaper296x128BrickletFunction::SetDisplayType), &payload).await?;
767 Ok(())
768 }
769
770 pub async fn get_display_type(&mut self) -> Result<u8, TinkerforgeError> {
777 let payload = [0; 0];
778
779 #[allow(unused_variables)]
780 let result = self.device.get(u8::from(EPaper296x128BrickletFunction::GetDisplayType), &payload).await?;
781 Ok(u8::from_le_byte_slice(result.body()))
782 }
783
784 pub async fn set_display_driver(&mut self, display_driver: u8) -> Result<(), TinkerforgeError> {
796 let mut payload = [0; 1];
797 display_driver.write_to_slice(&mut payload[0..1]);
798
799 #[allow(unused_variables)]
800 let result = self.device.set(u8::from(EPaper296x128BrickletFunction::SetDisplayDriver), &payload).await?;
801 Ok(())
802 }
803
804 pub async fn get_display_driver(&mut self) -> Result<u8, TinkerforgeError> {
813 let payload = [0; 0];
814
815 #[allow(unused_variables)]
816 let result = self.device.get(u8::from(EPaper296x128BrickletFunction::GetDisplayDriver), &payload).await?;
817 Ok(u8::from_le_byte_slice(result.body()))
818 }
819
820 pub async fn get_spitfp_error_count(&mut self) -> Result<SpitfpErrorCount, TinkerforgeError> {
832 let payload = [0; 0];
833
834 #[allow(unused_variables)]
835 let result = self.device.get(u8::from(EPaper296x128BrickletFunction::GetSpitfpErrorCount), &payload).await?;
836 Ok(SpitfpErrorCount::from_le_byte_slice(result.body()))
837 }
838
839 pub async fn set_bootloader_mode(&mut self, mode: u8) -> Result<u8, TinkerforgeError> {
862 let mut payload = [0; 1];
863 mode.write_to_slice(&mut payload[0..1]);
864
865 #[allow(unused_variables)]
866 let result = self.device.get(u8::from(EPaper296x128BrickletFunction::SetBootloaderMode), &payload).await?;
867 Ok(u8::from_le_byte_slice(result.body()))
868 }
869
870 pub async fn get_bootloader_mode(&mut self) -> Result<u8, TinkerforgeError> {
879 let payload = [0; 0];
880
881 #[allow(unused_variables)]
882 let result = self.device.get(u8::from(EPaper296x128BrickletFunction::GetBootloaderMode), &payload).await?;
883 Ok(u8::from_le_byte_slice(result.body()))
884 }
885
886 pub async fn set_write_firmware_pointer(&mut self, pointer: u32) -> Result<(), TinkerforgeError> {
893 let mut payload = [0; 4];
894 pointer.write_to_slice(&mut payload[0..4]);
895
896 #[allow(unused_variables)]
897 let result = self.device.set(u8::from(EPaper296x128BrickletFunction::SetWriteFirmwarePointer), &payload).await?;
898 Ok(())
899 }
900
901 pub async fn write_firmware(&mut self, data: &[u8; 64]) -> Result<u8, TinkerforgeError> {
910 let mut payload = [0; 64];
911 data.write_to_slice(&mut payload[0..64]);
912
913 #[allow(unused_variables)]
914 let result = self.device.get(u8::from(EPaper296x128BrickletFunction::WriteFirmware), &payload).await?;
915 Ok(u8::from_le_byte_slice(result.body()))
916 }
917
918 pub async fn set_status_led_config(&mut self, config: u8) -> Result<(), TinkerforgeError> {
932 let mut payload = [0; 1];
933 config.write_to_slice(&mut payload[0..1]);
934
935 #[allow(unused_variables)]
936 let result = self.device.set(u8::from(EPaper296x128BrickletFunction::SetStatusLedConfig), &payload).await?;
937 Ok(())
938 }
939
940 pub async fn get_status_led_config(&mut self) -> Result<u8, TinkerforgeError> {
948 let payload = [0; 0];
949
950 #[allow(unused_variables)]
951 let result = self.device.get(u8::from(EPaper296x128BrickletFunction::GetStatusLedConfig), &payload).await?;
952 Ok(u8::from_le_byte_slice(result.body()))
953 }
954
955 pub async fn get_chip_temperature(&mut self) -> Result<i16, TinkerforgeError> {
962 let payload = [0; 0];
963
964 #[allow(unused_variables)]
965 let result = self.device.get(u8::from(EPaper296x128BrickletFunction::GetChipTemperature), &payload).await?;
966 Ok(i16::from_le_byte_slice(result.body()))
967 }
968
969 pub async fn reset(&mut self) -> Result<(), TinkerforgeError> {
976 let payload = [0; 0];
977
978 #[allow(unused_variables)]
979 let result = self.device.set(u8::from(EPaper296x128BrickletFunction::Reset), &payload).await?;
980 Ok(())
981 }
982
983 pub async fn write_uid(&mut self, uid: u32) -> Result<(), TinkerforgeError> {
989 let mut payload = [0; 4];
990 uid.write_to_slice(&mut payload[0..4]);
991
992 #[allow(unused_variables)]
993 let result = self.device.set(u8::from(EPaper296x128BrickletFunction::WriteUid), &payload).await?;
994 Ok(())
995 }
996
997 pub async fn read_uid(&mut self) -> Result<u32, TinkerforgeError> {
1000 let payload = [0; 0];
1001
1002 #[allow(unused_variables)]
1003 let result = self.device.get(u8::from(EPaper296x128BrickletFunction::ReadUid), &payload).await?;
1004 Ok(u32::from_le_byte_slice(result.body()))
1005 }
1006
1007 pub async fn get_identity(&mut self) -> Result<Identity, TinkerforgeError> {
1018 let payload = [0; 0];
1019
1020 #[allow(unused_variables)]
1021 let result = self.device.get(u8::from(EPaper296x128BrickletFunction::GetIdentity), &payload).await?;
1022 Ok(Identity::from_le_byte_slice(result.body()))
1023 }
1024}