Nothing to see here, move along
1pub const IPC_MSG_WORDS: usize = 6;
2pub const MAX_IPC_BYTES: usize = 40;
3
4pub fn pack_bytes(src: &[u8]) -> [u64; IPC_MSG_WORDS] {
5 let count = src.len().min(MAX_IPC_BYTES);
6 let mut msg = [0u64; IPC_MSG_WORDS];
7 msg[0] = count as u64;
8 (0..count).for_each(|i| {
9 let word_idx = i / 8;
10 let byte_idx = i % 8;
11 msg[1 + word_idx] |= (src[i] as u64) << (byte_idx * 8);
12 });
13 msg
14}
15
16pub fn unpack_bytes(msg: &[u64; IPC_MSG_WORDS], dst: &mut [u8; MAX_IPC_BYTES]) -> usize {
17 let actual = (msg[0] as usize).min(MAX_IPC_BYTES);
18 (0..actual).for_each(|i| {
19 let word_idx = i / 8;
20 let byte_idx = i % 8;
21 dst[i] = ((msg[1 + word_idx] >> (byte_idx * 8)) & 0xFF) as u8;
22 });
23 actual
24}