pub const IPC_MSG_WORDS: usize = 6; pub const MAX_IPC_BYTES: usize = 40; pub fn pack_bytes(src: &[u8]) -> [u64; IPC_MSG_WORDS] { let count = src.len().min(MAX_IPC_BYTES); let mut msg = [0u64; IPC_MSG_WORDS]; msg[0] = count as u64; (0..count).for_each(|i| { let word_idx = i / 8; let byte_idx = i % 8; msg[1 + word_idx] |= (src[i] as u64) << (byte_idx * 8); }); msg } pub fn unpack_bytes(msg: &[u64; IPC_MSG_WORDS], dst: &mut [u8; MAX_IPC_BYTES]) -> usize { let actual = (msg[0] as usize).min(MAX_IPC_BYTES); (0..actual).for_each(|i| { let word_idx = i / 8; let byte_idx = i % 8; dst[i] = ((msg[1 + word_idx] >> (byte_idx * 8)) & 0xFF) as u8; }); actual }