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}