(
buffer: &mut [u8],
first_interface_number: InterfaceNumber,
f: impl FnOnce(&mut [u8]) -> Result<usize>,
)
| 101 | } |
| 102 | |
| 103 | fn write_function_subset( |
| 104 | buffer: &mut [u8], |
| 105 | first_interface_number: InterfaceNumber, |
| 106 | f: impl FnOnce(&mut [u8]) -> Result<usize>, |
| 107 | ) -> Result<usize> { |
| 108 | let length = 8usize; |
| 109 | if buffer.len() < length { |
| 110 | return Err(UsbError::BufferOverflow); |
| 111 | } |
| 112 | buffer[0] = u16_lo(length as u16); |
| 113 | buffer[1] = u16_hi(length as u16); |
| 114 | buffer[2] = u16_lo(MS_OS_20_SUBSET_HEADER_FUNCTION); |
| 115 | buffer[3] = u16_hi(MS_OS_20_SUBSET_HEADER_FUNCTION); |
| 116 | buffer[4] = first_interface_number.into(); |
| 117 | buffer[5] = 0; // reserved |
| 118 | let total_length = f(&mut buffer[length..])? + length; |
| 119 | buffer[6] = u16_lo(total_length as u16); |
| 120 | buffer[7] = u16_hi(total_length as u16); |
| 121 | Ok(total_length) |
| 122 | } |
| 123 | |
| 124 | fn write_compatible_id( |
| 125 | buffer: &mut [u8], |
no test coverage detected