Skip to content

Commit 6dfba59

Browse files
authored
Move bounded drawing calculation from interfaces into the only call site (#113)
* Move bounded drawing calculation from interfaces into the only call site * Add CHANGELOG.md entry for public interface change Signed-off-by: Daniel Egger <[email protected]>
1 parent e10b527 commit 6dfba59

File tree

6 files changed

+21
-97
lines changed

6 files changed

+21
-97
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@
66

77
## [Unreleased] - ReleaseDate
88

9+
### Changed
10+
11+
- **(breaking)** [#113](https://github.com/jamwaffles/ssd1306/pull/113) Removed public `send_bounded_data` from DisplayInterface and implementations
12+
913
## [0.3.1] - 2020-03-21
1014

1115
### Fixed

src/interface/i2c.rs

Lines changed: 0 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -61,52 +61,4 @@ where
6161
.map_err(Error::Comm)
6262
})
6363
}
64-
65-
fn send_bounded_data(
66-
&mut self,
67-
buf: &[u8],
68-
disp_width: usize,
69-
upper_left: (u8, u8),
70-
lower_right: (u8, u8),
71-
) -> Result<(), Self::Error> {
72-
// Noop if the data buffer is empty
73-
if buf.is_empty() {
74-
return Ok(());
75-
}
76-
77-
// Write buffer. Writes are sent in chunks of 16 bytes plus DC byte
78-
let mut writebuf: [u8; 17] = [0x0; 17];
79-
80-
// Data mode
81-
// 8.1.5.2 5) b) in the datasheet
82-
writebuf[0] = 0x40;
83-
84-
// Divide by 8 since each row is actually 8 pixels tall
85-
let num_pages = ((lower_right.1 - upper_left.1) / 8) as usize + 1;
86-
87-
// Each page is 8 bits tall, so calculate which page number to start at (rounded down) from
88-
// the top of the display
89-
let starting_page = (upper_left.1 / 8) as usize;
90-
91-
// Calculate start and end X coordinates for each page
92-
let page_lower = upper_left.0 as usize;
93-
let page_upper = lower_right.0 as usize;
94-
95-
buf.chunks(disp_width)
96-
.skip(starting_page)
97-
.take(num_pages)
98-
.map(|s| &s[page_lower..page_upper])
99-
.try_for_each(|c| {
100-
c.chunks(16).try_for_each(|c| {
101-
let chunk_len = c.len();
102-
103-
// Copy over all data from buffer, leaving the data command byte intact
104-
writebuf[1..=chunk_len].copy_from_slice(c);
105-
106-
self.i2c
107-
.write(self.addr, &writebuf[0..=chunk_len])
108-
.map_err(Error::Comm)
109-
})
110-
})
111-
}
11264
}

src/interface/mod.rs

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -61,17 +61,6 @@ pub trait DisplayInterface {
6161
fn send_commands(&mut self, cmd: &[u8]) -> Result<(), Self::Error>;
6262
/// Send data to display.
6363
fn send_data(&mut self, buf: &[u8]) -> Result<(), Self::Error>;
64-
/// Send data to display, taking advantage of bounded data.
65-
///
66-
/// upper_left and lower_right should contain the x and y coordinates of the
67-
/// minimum bounding rectangle of the modified pixels.
68-
fn send_bounded_data(
69-
&mut self,
70-
buf: &[u8],
71-
disp_width: usize,
72-
upper_left: (u8, u8),
73-
lower_right: (u8, u8),
74-
) -> Result<(), Self::Error>;
7564
}
7665

7766
pub use self::{i2c::I2cInterface, spi::SpiInterface};

src/interface/spi.rs

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -46,31 +46,4 @@ where
4646

4747
self.spi.write(&buf).map_err(Error::Comm)
4848
}
49-
50-
fn send_bounded_data(
51-
&mut self,
52-
buf: &[u8],
53-
disp_width: usize,
54-
upper_left: (u8, u8),
55-
lower_right: (u8, u8),
56-
) -> Result<(), Self::Error> {
57-
self.dc.set_high().map_err(Error::Pin)?;
58-
59-
// Divide by 8 since each row is actually 8 pixels tall
60-
let num_pages = ((lower_right.1 - upper_left.1) / 8) as usize + 1;
61-
62-
// Each page is 8 bits tall, so calculate which page number to start at (rounded down) from
63-
// the top of the display
64-
let starting_page = (upper_left.1 / 8) as usize;
65-
66-
// Calculate start and end X coordinates for each page
67-
let page_lower = upper_left.0 as usize;
68-
let page_upper = lower_right.0 as usize;
69-
70-
buf.chunks(disp_width)
71-
.skip(starting_page)
72-
.take(num_pages)
73-
.map(|s| &s[page_lower..page_upper])
74-
.try_for_each(|c| self.spi.write(&c).map_err(Error::Comm))
75-
}
7649
}

src/properties.rs

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,8 +151,23 @@ where
151151
upper_left: (u8, u8),
152152
lower_right: (u8, u8),
153153
) -> Result<(), DI::Error> {
154-
self.iface
155-
.send_bounded_data(&buffer, disp_width, upper_left, lower_right)
154+
// Divide by 8 since each row is actually 8 pixels tall
155+
let num_pages = ((lower_right.1 - upper_left.1) / 8) as usize + 1;
156+
157+
// Each page is 8 bits tall, so calculate which page number to start at (rounded down) from
158+
// the top of the display
159+
let starting_page = (upper_left.1 / 8) as usize;
160+
161+
// Calculate start and end X coordinates for each page
162+
let page_lower = upper_left.0 as usize;
163+
let page_upper = lower_right.0 as usize;
164+
165+
buffer
166+
.chunks(disp_width)
167+
.skip(starting_page)
168+
.take(num_pages)
169+
.map(|s| &s[page_lower..page_upper])
170+
.try_for_each(|c| self.iface.send_data(&c))
156171
}
157172

158173
/// Get the configured display size

src/test_helpers.rs

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -70,13 +70,4 @@ impl DisplayInterface for StubInterface {
7070
fn send_data(&mut self, _buf: &[u8]) -> Result<(), ()> {
7171
Ok(())
7272
}
73-
fn send_bounded_data(
74-
&mut self,
75-
_buf: &[u8],
76-
_disp_width: usize,
77-
_upper_left: (u8, u8),
78-
_lower_right: (u8, u8),
79-
) -> Result<(), ()> {
80-
Ok(())
81-
}
8273
}

0 commit comments

Comments
 (0)