pcd8544_hal/
pcd8544_spi.rs

1use embedded_hal::delay::DelayNs;
2use embedded_hal::digital::OutputPin;
3use embedded_hal::spi::SpiBus;
4
5use crate::Pcd8544;
6
7pub struct Pcd8544Spi<SPI, DC, CS> {
8    spi: SPI,
9    dc: DC,
10    cs: CS,
11}
12
13impl<SPI, DC, CS> Pcd8544Spi<SPI, DC, CS>
14where
15    SPI: SpiBus,
16    DC: OutputPin,
17    CS: OutputPin,
18{
19    pub fn new<T: OutputPin, R: DelayNs>(
20        spi: SPI,
21        dc: DC,
22        cs: CS,
23        rst: Option<&mut T>,
24        delay: &mut R,
25    ) -> Pcd8544Spi<SPI, DC, CS> {
26        if let Some(r) = rst {
27            let _ = r.set_low();
28            delay.delay_ns(1);
29            let _ = r.set_high();
30        }
31
32        let mut pcd = Pcd8544Spi { spi, dc, cs };
33        pcd.init();
34        pcd
35    }
36}
37
38impl<SPI, DC, CS> Pcd8544 for Pcd8544Spi<SPI, DC, CS>
39where
40    SPI: SpiBus,
41    DC: OutputPin,
42    CS: OutputPin,
43{
44    fn command(&mut self, cmd: u8) {
45        let _ = self.dc.set_low();
46        let _ = self.cs.set_low();
47        let _ = self.spi.write(&[cmd]);
48        let _ = self.cs.set_high();
49    }
50
51    fn data(&mut self, data: &[u8]) {
52        let _ = self.dc.set_high();
53        let _ = self.cs.set_low();
54        let _ = self.spi.write(data);
55        let _ = self.cs.set_high();
56    }
57}