blob: f1702253134e048c8974c4ef3f401d6a5dfae08a [file]
use crate::gpio::GpioPinWrite;
use crate::result::TockResult;
pub struct ShiftRegister {
data_pin: GpioPinWrite,
clock_pin: GpioPinWrite,
latch_pin: GpioPinWrite,
}
impl ShiftRegister {
pub fn new(
data_pin: GpioPinWrite,
clock_pin: GpioPinWrite,
latch_pin: GpioPinWrite,
) -> ShiftRegister {
ShiftRegister {
data_pin,
clock_pin,
latch_pin,
}
}
pub fn write_bits(&self, values: &[bool]) -> TockResult<()> {
for i in values {
self.push_bit(*i)?;
}
self.display()
}
fn push_bit(&self, value: bool) -> TockResult<()> {
if value {
self.data_pin.set_high()
} else {
self.data_pin.set_low()
}?;
self.clock_pin.set_high()?;
self.clock_pin.set_low()
}
fn display(&self) -> TockResult<()> {
self.latch_pin.set_high()?;
self.latch_pin.set_low()
}
}