diff options
Diffstat (limited to 'src/crc.rs')
-rw-r--r-- | src/crc.rs | 32 |
1 files changed, 21 insertions, 11 deletions
@@ -1,23 +1,25 @@ // Copyright 2019 Robin Krahl <robin.krahl@ireas.org> // SPDX-License-Identifier: GPL-3.0-or-later +use core::iter::Iterator; + use hal::stm32::CRC; -pub struct Crc { +pub trait Crc { + fn get(&self, data: &[u8]) -> u32 { + self.get_u32(data.chunks(4).map(slice_to_u32)) + } + + fn get_u32<I: Iterator<Item = u32>>(&self, iter: I) -> u32; +} + +pub struct Stm32Crc { crc: CRC, } -impl Crc { +impl Stm32Crc { pub fn new(crc: CRC) -> Self { - Crc { crc } - } - - pub fn get(&self, data: &[u8]) -> u32 { - self.reset(); - data.chunks(4) - .map(slice_to_u32) - .for_each(|val| self.write(val)); - self.read() + Self { crc } } fn write(&self, val: u32) { @@ -33,6 +35,14 @@ impl Crc { } } +impl Crc for Stm32Crc { + fn get_u32<I: Iterator<Item = u32>>(&self, iter: I) -> u32 { + self.reset(); + iter.for_each(|val| self.write(val)); + self.read() + } +} + fn slice_to_u32(data: &[u8]) -> u32 { data.iter() .enumerate() |