(&self, image_data: &[u8], parameters: WriteImageParameters, header_fn: T)
| 484 | } |
| 485 | |
| 486 | fn write_image_data_reports<T>(&self, image_data: &[u8], parameters: WriteImageParameters, header_fn: T) -> Result<(), StreamDeckError> |
| 487 | where |
| 488 | T: Fn(usize, usize, bool) -> Vec<u8>, |
| 489 | { |
| 490 | let image_report_length = parameters.image_report_length; |
| 491 | let image_report_payload_length = parameters.image_report_payload_length; |
| 492 | |
| 493 | let mut page_number = 0; |
| 494 | let mut bytes_remaining = image_data.len(); |
| 495 | |
| 496 | while bytes_remaining > 0 { |
| 497 | let this_length = bytes_remaining.min(image_report_payload_length); |
| 498 | let bytes_sent = page_number * image_report_payload_length; |
| 499 | |
| 500 | // Selecting header based on device |
| 501 | let mut buf: Vec<u8> = header_fn(page_number, this_length, this_length == bytes_remaining); |
| 502 | |
| 503 | buf.extend(&image_data[bytes_sent..bytes_sent + this_length]); |
| 504 | |
| 505 | // Adding padding |
| 506 | buf.extend(vec![0u8; image_report_length - buf.len()]); |
| 507 | |
| 508 | write_data(&self.device, &buf)?; |
| 509 | |
| 510 | bytes_remaining -= this_length; |
| 511 | page_number += 1; |
| 512 | } |
| 513 | |
| 514 | Ok(()) |
| 515 | } |
| 516 | } |
| 517 | |
| 518 | #[derive(Clone, Copy)] |
no test coverage detected