1use rand::Rng;
2
3pub fn random_byte() -> u8 {
4 rand::thread_rng().gen_range(1..=31) << 3
5}
6
7pub fn crc8(data: &[u8]) -> u8 {
8 data.iter().fold(0x00, |mut crc, &byte| {
9 crc ^= byte;
10 for _ in 0..8 {
11 crc = if crc & 0x80 != 0 {
12 (crc << 1) ^ 0x07
13 } else {
14 crc << 1
15 };
16 }
17 crc
18 })
19}
20
21pub fn u16le_from(buffer: &[u8], offset: usize) -> u16 {
22 u16::from_le_bytes([buffer[offset], buffer[offset + 1]])
23}
24
25pub fn byte_to_fraction(value: u8) -> f32 {
26 ((value as f32) / 255.0) * 100.0
27}
28
29pub fn fraction_of_byte(value: f32) -> u8 {
30 (value * 255.0).round() as u8
31}