latreclib/
lib.rs

1//! # Latency Recorder library (latreclib)
2//! 
3//! Helper functions for the device firmware 
4
5#![no_std]
6
7use core::array::from_fn;
8
9/// Convert an unsigned 8-bit integer to an array of 8 bools
10/// 
11/// # Examples
12/// 
13/// ```
14/// let out = latreclib::num2bools(33);
15/// 
16/// assert_eq!(out, [true, false, false, false, false, true, false, false])
17/// ````
18#[must_use]
19pub fn num2bools(val: u8) -> [bool; 8] {
20    // big endian
21    from_fn(|i| (val >> i & 1) == 1)
22}
23
24/// Convert an array of 8 bools to an unsigned 8-bit integer
25/// 
26/// # Examples
27/// 
28/// ```
29/// let out = latreclib::bools2num([true, false, true, false, false, false, false, true]);
30/// 
31/// assert_eq!(out, 133)
32/// ````
33#[must_use]
34pub fn bools2num(val: [bool; 8]) -> u8 {
35    // big endian
36    const Z: [u8; 8] = [1, 2, 4, 8, 16, 32, 64, 128];
37    val.iter().enumerate().map(
38        |(i, b)| {if *b { Z[i]} else {0}}
39    ).sum()
40}