Added some helper functions to St7735IO

This commit is contained in:
Sebastian 2018-09-02 21:04:33 +02:00
parent 74fd69dec8
commit ca92459649
1 changed files with 56 additions and 6 deletions

View File

@ -332,18 +332,40 @@ impl St7735 {
-> St7735IO<SPIAddr, GPIOAddr>
where SPIAddr: Location,
GPIOAddr: Location {
St7735IO {
st7735: self,
spi : spi,
gpio : gpio
}
St7735IO::start(self, spi, gpio)
}
}
impl<SPIAddr, GPIOAddr> St7735IO<SPIAddr, GPIOAddr>
where SPIAddr: Location,
GPIOAddr: Location {
pub fn start(st7735 : St7735, mut spi : PeripheralRef<spi::SPI, SPIAddr>, gpio : PeripheralRef<gpio::GPIO, GPIOAddr>)
-> St7735IO<SPIAddr, GPIOAddr>
where SPIAddr: Location,
GPIOAddr: Location {
spi.configure(|s| {
s.set_enabled(true)
.set_master_mode(true)
.set_software_slave_select(true)
.set_clock_divider(128)
// required for master mode, even if ss is done manually
.set_slave_select_output_enabled(true)
});
let mut io = St7735IO {
st7735: st7735,
spi : spi,
gpio : gpio
};
io.set_cs();
io
}
fn set_rs(&mut self) {
self.gpio.set_bit(self.st7735.rs_pin);
}
@ -386,11 +408,39 @@ impl<SPIAddr, GPIOAddr> St7735IO<SPIAddr, GPIOAddr>
delay_ms(500);
}
fn write_byte(&mut self, byte : u8) {
self.spi.set_data(byte as u32);
while self.spi.busy() {}
}
fn write_data_byte(&mut self, data : u8) {
self.set_rs();
self.reset_cs();
self.write_byte(data);
self.set_cs();
}
fn write_command_byte(&mut self, cmd : u8) {
self.set_rs();
self.reset_cs();
self.write_byte(cmd);
self.set_cs();
}
pub fn write_command(&mut self, cmd : Command) {
let cmd_byte = command_to_byte(cmd);
self.write_command_byte(cmd_byte);
}
pub fn init(&mut self) {
}
pub fn done(self) -> (St7735, PeripheralRef<spi::SPI, SPIAddr>, PeripheralRef<gpio::GPIO, GPIOAddr>) {
pub fn done(mut self) -> (St7735, PeripheralRef<spi::SPI, SPIAddr>, PeripheralRef<gpio::GPIO, GPIOAddr>) {
self.set_cs();
self.spi.set_enabled(false);
(self.st7735, self.spi, self.gpio)
}
}