pcd8544_hal/
pcd8544_spi.rs1use 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}