mirror of
https://github.com/Feliix42/ssd1675.git
synced 2024-11-24 19:56:30 +00:00
Implement clearing with colours and add tests for it
This commit is contained in:
parent
1a05a8cf30
commit
0481bd185b
2 changed files with 66 additions and 21 deletions
|
@ -19,15 +19,20 @@ impl<'a, I> GraphicDisplay<'a, I> where I: DisplayInterface {
|
||||||
self.display.update(self.black_buffer, self.red_buffer, delay)
|
self.display.update(self.black_buffer, self.red_buffer, delay)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn clear(&mut self, _color: Color) {
|
pub fn clear(&mut self, color: Color) {
|
||||||
// TODO: Support color
|
let (black, red) = match color {
|
||||||
|
Color::White => (0xFF, 0x00),
|
||||||
|
Color::Black => (0x00, 0x00),
|
||||||
|
Color::Red => (0xFF, 0xFF),
|
||||||
|
};
|
||||||
|
|
||||||
for byte in &mut self.black_buffer.iter_mut() {
|
for byte in &mut self.black_buffer.iter_mut() {
|
||||||
*byte = 1; // background_color.get_byte_value();
|
*byte = black; // background_color.get_byte_value();
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Combine loops
|
// TODO: Combine loops
|
||||||
for byte in &mut self.red_buffer.iter_mut() {
|
for byte in &mut self.red_buffer.iter_mut() {
|
||||||
*byte = 0; // background_color.get_byte_value();
|
*byte = red; // background_color.get_byte_value();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -113,9 +118,9 @@ mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
use ::{Display, DisplayInterface, Dimensions, GraphicDisplay, Color, Rotation};
|
use ::{Display, DisplayInterface, Dimensions, GraphicDisplay, Color, Rotation};
|
||||||
|
|
||||||
const ROWS: u16 = 212;
|
const ROWS: u16 = 3;
|
||||||
const COLS: u8 = 104;
|
const COLS: u8 = 3;
|
||||||
const BUFFER_SIZE: usize = ROWS as usize * COLS as usize;
|
const BUFFER_SIZE: usize = 2; //((ROWS * COLS as u16) as f32 / 8.).ceil() as usize;
|
||||||
|
|
||||||
struct MockInterface {}
|
struct MockInterface {}
|
||||||
struct MockError {}
|
struct MockError {}
|
||||||
|
@ -129,14 +134,14 @@ mod tests {
|
||||||
impl DisplayInterface for MockInterface {
|
impl DisplayInterface for MockInterface {
|
||||||
type Error = MockError;
|
type Error = MockError;
|
||||||
|
|
||||||
fn reset<D: hal::blocking::delay::DelayMs<u8>>(&mut self, delay: &mut D) {
|
fn reset<D: hal::blocking::delay::DelayMs<u8>>(&mut self, _delay: &mut D) {
|
||||||
// self.reset.set_low();
|
// self.reset.set_low();
|
||||||
// delay.delay_ms(RESET_DELAY_MS);
|
// delay.delay_ms(RESET_DELAY_MS);
|
||||||
// self.reset.set_high();
|
// self.reset.set_high();
|
||||||
// delay.delay_ms(RESET_DELAY_MS);
|
// delay.delay_ms(RESET_DELAY_MS);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn send_command(&mut self, command: u8) -> Result<(), Self::Error> {
|
fn send_command(&mut self, _command: u8) -> Result<(), Self::Error> {
|
||||||
// self.dc.set_low();
|
// self.dc.set_low();
|
||||||
// self.write(&[command])?;
|
// self.write(&[command])?;
|
||||||
// self.dc.set_high();
|
// self.dc.set_high();
|
||||||
|
@ -144,7 +149,7 @@ mod tests {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn send_data(&mut self, data: &[u8]) -> Result<(), Self::Error> {
|
fn send_data(&mut self, _data: &[u8]) -> Result<(), Self::Error> {
|
||||||
// self.dc.set_high();
|
// self.dc.set_high();
|
||||||
// self.write(data)
|
// self.write(data)
|
||||||
Ok(())
|
Ok(())
|
||||||
|
@ -159,12 +164,56 @@ mod tests {
|
||||||
// }
|
// }
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn set_corner_pixels() {
|
fn clear_white() {
|
||||||
let interface = MockInterface::new();
|
let interface = MockInterface::new();
|
||||||
let dimensions = Dimensions { rows: ROWS, cols: COLS };
|
let dimensions = Dimensions { rows: ROWS, cols: COLS };
|
||||||
let mut black_buffer = [0u8; BUFFER_SIZE]; // FIXME: This is using 1 byte per pixel when it only needs to be one bit
|
let mut black_buffer = [0u8; BUFFER_SIZE];
|
||||||
let mut red_buffer = [0u8; BUFFER_SIZE];
|
let mut red_buffer = [0u8; BUFFER_SIZE];
|
||||||
|
|
||||||
|
{
|
||||||
let display = Display::new(interface, dimensions, Rotation::Rotate270);
|
let display = Display::new(interface, dimensions, Rotation::Rotate270);
|
||||||
GraphicDisplay::new(display, &mut black_buffer, &mut red_buffer);
|
let mut display = GraphicDisplay::new(display, &mut black_buffer, &mut red_buffer);
|
||||||
|
|
||||||
|
display.clear(Color::White);
|
||||||
|
}
|
||||||
|
|
||||||
|
assert_eq!(black_buffer, [0xFF, 0xFF]);
|
||||||
|
assert_eq!(red_buffer, [0x00, 0x00]);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn clear_black() {
|
||||||
|
let interface = MockInterface::new();
|
||||||
|
let dimensions = Dimensions { rows: ROWS, cols: COLS };
|
||||||
|
let mut black_buffer = [0u8; BUFFER_SIZE];
|
||||||
|
let mut red_buffer = [0u8; BUFFER_SIZE];
|
||||||
|
|
||||||
|
{
|
||||||
|
let display = Display::new(interface, dimensions, Rotation::Rotate270);
|
||||||
|
let mut display = GraphicDisplay::new(display, &mut black_buffer, &mut red_buffer);
|
||||||
|
|
||||||
|
display.clear(Color::Black);
|
||||||
|
}
|
||||||
|
|
||||||
|
assert_eq!(black_buffer, [0x00, 0x00]);
|
||||||
|
assert_eq!(red_buffer, [0x00, 0x00]);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn clear_red() {
|
||||||
|
let interface = MockInterface::new();
|
||||||
|
let dimensions = Dimensions { rows: ROWS, cols: COLS };
|
||||||
|
let mut black_buffer = [0u8; BUFFER_SIZE];
|
||||||
|
let mut red_buffer = [0u8; BUFFER_SIZE];
|
||||||
|
|
||||||
|
{
|
||||||
|
let display = Display::new(interface, dimensions, Rotation::Rotate270);
|
||||||
|
let mut display = GraphicDisplay::new(display, &mut black_buffer, &mut red_buffer);
|
||||||
|
|
||||||
|
display.clear(Color::Red);
|
||||||
|
}
|
||||||
|
|
||||||
|
assert_eq!(black_buffer, [0xFF, 0xFF]);
|
||||||
|
assert_eq!(red_buffer, [0xFF, 0xFF]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
12
src/lib.rs
12
src/lib.rs
|
@ -2,6 +2,10 @@
|
||||||
|
|
||||||
extern crate embedded_hal as hal;
|
extern crate embedded_hal as hal;
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
#[macro_use]
|
||||||
|
extern crate std;
|
||||||
|
|
||||||
mod command;
|
mod command;
|
||||||
mod interface;
|
mod interface;
|
||||||
mod display;
|
mod display;
|
||||||
|
@ -13,11 +17,3 @@ pub use interface::Interface;
|
||||||
pub use display::{Display, Dimensions, Rotation};
|
pub use display::{Display, Dimensions, Rotation};
|
||||||
pub use graphics::GraphicDisplay;
|
pub use graphics::GraphicDisplay;
|
||||||
pub use color::Color;
|
pub use color::Color;
|
||||||
|
|
||||||
#[cfg(test)]
|
|
||||||
mod tests {
|
|
||||||
#[test]
|
|
||||||
fn it_works() {
|
|
||||||
assert_eq!(2 + 2, 4);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in a new issue