tlv320dac3100 0.1.0

A driver for Texas Instruments TLV320DAC3100 module.
Documentation
pub(crate) fn get_bits(byte: u8, bits: u8, lsb_offset: u8) -> u8 {
    (byte >> lsb_offset) & ((1 << (bits)) - 1)
}

pub(crate) fn set_bits(byte: &mut u8, data: u8, lsb_offset: u8, mask: u8) {
    *byte &= !mask;
    *byte |= (data << lsb_offset) & mask
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    #[should_panic]
    fn get_bits_8_bits_0_offset() {
        let byte = 0b1011_1101;
        let bits = get_bits(byte, 8, 0);
        assert_eq!(bits, 0b1011_1101);
    }

    #[test]
    fn get_bits_0_bits_0_offset() {
        let byte = 0b1011_1101;
        let bits = get_bits(byte, 0, 0);
        assert_eq!(bits, 0b0);
    }

    #[test]
    #[should_panic]
    fn get_bits_1_bit_7_offset_overflow() {
        let byte = 0b1011_1101;
        let bits = get_bits(byte, 1, 7);
        assert_eq!(bits, 0b011_1101);
    }

    #[test]
    #[should_panic]
    fn get_bits_1_bit_8_offset_overflow() {
        let byte = 0b1011_1101;
        let bits = get_bits(byte, 1, 8);
        assert_eq!(bits, 0b0);
    }

    #[test]
    fn update_bits() {
        let mut byte = 0b1010_0001;
        set_bits(&mut byte, 0b11, 2, 0b0000_1100);
        assert_eq!(0b1010_1101, byte);
        set_bits(&mut byte, 0b10, 5, 0b0110_0000);
        assert_eq!(0b1100_1101, byte);
    }
}