Skip to content

Commit bd30333

Browse files
authored
Restructure crate to simplify usage/contributing (#150)
* First passing build * Only allow reset() for SPI interfaces * Fix default addressing mode to Horizontal * Upgrade example deps * Tidy CI config * Get rid of linkchecker * Fix doc formatting * Attempt to fix cast issue * Changelog entry * Remove I2C builder, replace with static methods * Add some more docs * More restructuring * Update to new pattern using into_* methods * Fix changelog * Remove pinned version hack * Use bools for pixel color values * Rename some methods * Fix potential underflow error * Rename get_position to position * Remove panics from set area methods * Add clear() method to basic mode * Update README example
1 parent 55bc848 commit bd30333

34 files changed

+941
-1178
lines changed

.cargo/config

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,4 @@ rustflags = [
2323
]
2424

2525
[build]
26-
target = "thumbv7m-none-eabi"
26+
target = "thumbv7m-none-eabi"

.circleci/config.yml

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
target_steps: &target_steps
22
docker:
3-
- image: circleci/rust:1.41.0
3+
- image: cimg/rust:1.51.0
44
steps:
55
- checkout
66
- restore_cache:
7-
key: v2-ssd1306-{{ .Environment.CIRCLE_JOB }}-{{ checksum "Cargo.toml" }}
7+
key: v3-ssd1306-{{ .Environment.CIRCLE_JOB }}-{{ checksum "Cargo.toml" }}
88
- run: rustup self update
9-
- run: sudo apt install -qq linkchecker
109
- run: rustup default ${RUST_VERSION:-stable}
1110
- run: rustup component add rustfmt
1211
- run: cargo update
@@ -20,10 +19,10 @@ target_steps: &target_steps
2019
fi
2120
- run: ./build.sh
2221
- save_cache:
23-
key: v2-ssd1306-{{ .Environment.CIRCLE_JOB }}-{{ checksum "Cargo.toml" }}
22+
key: v3-ssd1306-{{ .Environment.CIRCLE_JOB }}-{{ checksum "Cargo.toml" }}
2423
paths:
2524
- ./target
26-
- /usr/local/cargo/registry
25+
- /home/circleci/.cargo/registry
2726

2827
version: 2
2928
jobs:

CHANGELOG.md

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,24 @@
66

77
## [Unreleased] - ReleaseDate
88

9+
- **(breaking)** [#150](https://github.com/jamwaffles/ssd1306/pull/150) `BufferedGraphicsMode::set_pixel` now accepts a `bool` instead of a `u8` for the pixel color value.
10+
- **(breaking)** [#150](https://github.com/jamwaffles/ssd1306/pull/150) `display_on` is now called `set_display_on`.
11+
- **(breaking)** [#150](https://github.com/jamwaffles/ssd1306/pull/150) `TerminalMode::get_position` is now called `position` to conform with Rust API guidelines.
12+
- **(breaking)** [#150](https://github.com/jamwaffles/ssd1306/pull/150) Refactor the crate API to be more versatile and to make code clearer to understand.
13+
14+
A graphics mode initialisation now looks like this:
15+
16+
```rust
17+
use ssd1306::{prelude::*, I2CDisplayInterface, Ssd1306};
18+
19+
let interface = I2CDisplayInterface::new(i2c);
20+
21+
let mut display = Ssd1306::new(interface, DisplaySize128x64, DisplayRotation::Rotate0)
22+
.into_buffered_graphics_mode();
23+
24+
display.init().unwrap();
25+
```
26+
927
## [0.5.2] - 2021-04-19
1028

1129
- [#145](https://github.com/jamwaffles/ssd1306/pull/145) Fixed rotation for 96x16 and 72x40 displays.
@@ -135,10 +153,10 @@
135153
- Builder docs clarify the order of method calls (#89)
136154

137155
<!-- next-url -->
156+
138157
[unreleased]: https://github.com/jamwaffles/ssd1306/compare/v0.5.2...HEAD
139158
[0.5.2]: https://github.com/jamwaffles/ssd1306/compare/v0.5.1...v0.5.2
140159
[0.5.1]: https://github.com/jamwaffles/ssd1306/compare/v0.5.0...v0.5.1
141-
142160
[0.5.0]: https://github.com/jamwaffles/ssd1306/compare/v0.4.2...v0.5.0
143161
[0.4.2]: https://github.com/jamwaffles/ssd1306/compare/v0.4.1...v0.4.2
144162
[0.4.1]: https://github.com/jamwaffles/ssd1306/compare/v0.4.0...v0.4.1

Cargo.toml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ readme = "README.md"
1010
repository = "https://github.com/jamwaffles/ssd1306"
1111
version = "0.5.2"
1212
edition = "2018"
13-
1413
exclude = [ "build.rs", "build.sh", "memory.x", "doc", "*.jpg", "*.png", "*.bmp" ]
1514

1615
[badges]
@@ -31,10 +30,11 @@ optional = true
3130
version = "0.6.0"
3231

3332
[dev-dependencies]
34-
cortex-m = "0.6.2"
33+
cortex-m = "0.7.2"
3534
cortex-m-rt = "0.6.12"
3635
cortex-m-rtic = "0.5.3"
3736
panic-halt = "0.2.0"
37+
cast = { version = "0.2.6", default-features = false }
3838

3939
# Used to load BMP images in various examples
4040
[dev-dependencies.tinybmp]
@@ -44,12 +44,12 @@ features = [ "graphics" ]
4444

4545
# Used by the noise_i2c examples
4646
[dev-dependencies.rand]
47-
version = "0.7.3"
47+
version = "0.8.3"
4848
default-features = false
4949
features = [ "small_rng" ]
5050

5151
[dev-dependencies.stm32f1xx-hal]
52-
version = "0.5.3"
52+
version = "0.7.0"
5353
features = [ "rt", "stm32f103" ]
5454

5555
[features]

README.md

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@
88

99
I2C and SPI (4 wire) driver for the SSD1306 OLED display.
1010

11-
See the [announcement blog post](https://wapl.es/electronics/rust/2018/04/30/ssd1306-driver.html) for more information.
12-
1311
Please consider [becoming a sponsor](https://github.com/sponsors/jamwaffles/) so I may continue to maintain this crate in my spare time!
1412

1513
## [Documentation](https://docs.rs/ssd1306)
@@ -31,7 +29,7 @@ use embedded_graphics::{
3129
prelude::*,
3230
};
3331
use panic_halt as _;
34-
use ssd1306::{prelude::*, Builder, I2CDIBuilder};
32+
use ssd1306::{prelude::*, I2CDisplayInterface, Ssd1306};
3533
use stm32f1xx_hal::{
3634
i2c::{BlockingI2c, DutyCycle, Mode},
3735
prelude::*,
@@ -70,18 +68,18 @@ fn main() -> ! {
7068
1000,
7169
);
7270

73-
let interface = I2CDIBuilder::new().init(i2c);
74-
let mut disp: GraphicsMode<_, _> = Builder::new().connect(interface).into();
75-
76-
disp.init().unwrap();
71+
let interface = I2CDisplayInterface::new(i2c);
72+
let mut display = Ssd1306::new(interface, DisplaySize128x64, DisplayRotation::Rotate0)
73+
.into_buffered_graphics_mode();
74+
display.init().unwrap();
7775

7876
let raw: ImageRaw<BinaryColor> = ImageRaw::new(include_bytes!("./rust.raw"), 64, 64);
7977

8078
let im = Image::new(&raw, Point::new(32, 0));
8179

82-
im.draw(&mut disp).unwrap();
80+
im.draw(&mut display).unwrap();
8381

84-
disp.flush().unwrap();
82+
display.flush().unwrap();
8583

8684
loop {}
8785
}

build.sh

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,5 +28,3 @@ cargo clean --doc
2828
cargo clean --doc --target $TARGET
2929

3030
cargo doc --all-features --target $TARGET
31-
32-
linkchecker target/$TARGET/doc/ssd1306/index.html

examples/bmp_i2c.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ use embedded_graphics::{
2828
prelude::*,
2929
};
3030
use panic_halt as _;
31-
use ssd1306::{prelude::*, Builder, I2CDIBuilder};
31+
use ssd1306::{prelude::*, I2CDisplayInterface, Ssd1306};
3232
use stm32f1xx_hal::{
3333
i2c::{BlockingI2c, DutyCycle, Mode},
3434
prelude::*,
@@ -68,9 +68,10 @@ fn main() -> ! {
6868
1000,
6969
);
7070

71-
let interface = I2CDIBuilder::new().init(i2c);
72-
let mut disp: GraphicsMode<_, _> = Builder::new().connect(interface).into();
73-
disp.init().unwrap();
71+
let interface = I2CDisplayInterface::new(i2c);
72+
let mut display = Ssd1306::new(interface, DisplaySize128x64, DisplayRotation::Rotate0)
73+
.into_buffered_graphics_mode();
74+
display.init().unwrap();
7475

7576
let bmp =
7677
Bmp::from_slice(include_bytes!("./rust-pride.bmp")).expect("Failed to load BMP image");
@@ -93,10 +94,10 @@ fn main() -> ! {
9394
},
9495
)
9596
})
96-
.draw(&mut disp)
97+
.draw(&mut display)
9798
.unwrap();
9899

99-
disp.flush().unwrap();
100+
display.flush().unwrap();
100101

101102
loop {}
102103
}

examples/graphics.rs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ use embedded_graphics::{
2828
style::PrimitiveStyleBuilder,
2929
};
3030
use panic_halt as _;
31-
use ssd1306::{prelude::*, Builder};
31+
use ssd1306::{prelude::*, Ssd1306};
3232
use stm32f1xx_hal::{
3333
delay::Delay,
3434
prelude::*,
@@ -75,10 +75,11 @@ fn main() -> ! {
7575
);
7676

7777
let interface = display_interface_spi::SPIInterfaceNoCS::new(spi, dc);
78-
let mut disp: GraphicsMode<_, _> = Builder::new().connect(interface).into();
78+
let mut display = Ssd1306::new(interface, DisplaySize128x64, DisplayRotation::Rotate0)
79+
.into_buffered_graphics_mode();
7980

80-
disp.reset(&mut rst, &mut delay).unwrap();
81-
disp.init().unwrap();
81+
display.reset(&mut rst, &mut delay).unwrap();
82+
display.init().unwrap();
8283

8384
let yoffset = 20;
8485

@@ -92,7 +93,7 @@ fn main() -> ! {
9293
// enum to the _Builder_ struct
9394
Rectangle::new(Point::new(0, 0), Point::new(127, 63))
9495
.into_styled(style)
95-
.draw(&mut disp)
96+
.draw(&mut display)
9697
.unwrap();
9798

9899
// triangle
@@ -102,22 +103,22 @@ fn main() -> ! {
102103
Point::new(16 + 8, yoffset),
103104
)
104105
.into_styled(style)
105-
.draw(&mut disp)
106+
.draw(&mut display)
106107
.unwrap();
107108

108109
// square
109110
Rectangle::new(Point::new(52, yoffset), Point::new(52 + 16, 16 + yoffset))
110111
.into_styled(style)
111-
.draw(&mut disp)
112+
.draw(&mut display)
112113
.unwrap();
113114

114115
// circle
115116
Circle::new(Point::new(96, yoffset + 8), 8)
116117
.into_styled(style)
117-
.draw(&mut disp)
118+
.draw(&mut display)
118119
.unwrap();
119120

120-
disp.flush().unwrap();
121+
display.flush().unwrap();
121122

122123
loop {}
123124
}

examples/graphics_i2c.rs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ use embedded_graphics::{
2525
style::PrimitiveStyleBuilder,
2626
};
2727
use panic_halt as _;
28-
use ssd1306::{prelude::*, Builder, I2CDIBuilder};
28+
use ssd1306::{prelude::*, I2CDisplayInterface, Ssd1306};
2929
use stm32f1xx_hal::{
3030
i2c::{BlockingI2c, DutyCycle, Mode},
3131
prelude::*,
@@ -64,9 +64,10 @@ fn main() -> ! {
6464
1000,
6565
);
6666

67-
let interface = I2CDIBuilder::new().init(i2c);
68-
let mut disp: GraphicsMode<_, _> = Builder::new().connect(interface).into();
69-
disp.init().unwrap();
67+
let interface = I2CDisplayInterface::new(i2c);
68+
let mut display = Ssd1306::new(interface, DisplaySize128x64, DisplayRotation::Rotate0)
69+
.into_buffered_graphics_mode();
70+
display.init().unwrap();
7071

7172
let yoffset = 20;
7273

@@ -80,7 +81,7 @@ fn main() -> ! {
8081
// enum to the _Builder_ struct
8182
Rectangle::new(Point::new(0, 0), Point::new(127, 63))
8283
.into_styled(style)
83-
.draw(&mut disp)
84+
.draw(&mut display)
8485
.unwrap();
8586

8687
// triangle
@@ -90,22 +91,22 @@ fn main() -> ! {
9091
Point::new(16 + 8, yoffset),
9192
)
9293
.into_styled(style)
93-
.draw(&mut disp)
94+
.draw(&mut display)
9495
.unwrap();
9596

9697
// square
9798
Rectangle::new(Point::new(52, yoffset), Point::new(52 + 16, 16 + yoffset))
9899
.into_styled(style)
99-
.draw(&mut disp)
100+
.draw(&mut display)
100101
.unwrap();
101102

102103
// circle
103104
Circle::new(Point::new(96, yoffset + 8), 8)
104105
.into_styled(style)
105-
.draw(&mut disp)
106+
.draw(&mut display)
106107
.unwrap();
107108

108-
disp.flush().unwrap();
109+
display.flush().unwrap();
109110

110111
loop {}
111112
}

examples/graphics_i2c_128x32.rs

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ use embedded_graphics::{
2525
style::PrimitiveStyleBuilder,
2626
};
2727
use panic_halt as _;
28-
use ssd1306::{prelude::*, Builder, I2CDIBuilder};
28+
use ssd1306::{prelude::*, I2CDisplayInterface, Ssd1306};
2929
use stm32f1xx_hal::{
3030
i2c::{BlockingI2c, DutyCycle, Mode},
3131
prelude::*,
@@ -64,12 +64,10 @@ fn main() -> ! {
6464
1000,
6565
);
6666

67-
let interface = I2CDIBuilder::new().init(i2c);
68-
let mut disp: GraphicsMode<_, _> = Builder::new()
69-
.size(DisplaySize128x32)
70-
.connect(interface)
71-
.into();
72-
disp.init().unwrap();
67+
let interface = I2CDisplayInterface::new(i2c);
68+
let mut display = Ssd1306::new(interface, DisplaySize128x32, DisplayRotation::Rotate0)
69+
.into_buffered_graphics_mode();
70+
display.init().unwrap();
7371

7472
let yoffset = 8;
7573

@@ -83,7 +81,7 @@ fn main() -> ! {
8381
// enum to the _Builder_ struct
8482
Rectangle::new(Point::new(0, 0), Point::new(127, 31))
8583
.into_styled(style)
86-
.draw(&mut disp)
84+
.draw(&mut display)
8785
.unwrap();
8886

8987
// triangle
@@ -93,22 +91,22 @@ fn main() -> ! {
9391
Point::new(16 + 8, yoffset),
9492
)
9593
.into_styled(style)
96-
.draw(&mut disp)
94+
.draw(&mut display)
9795
.unwrap();
9896

9997
// square
10098
Rectangle::new(Point::new(52, yoffset), Point::new(52 + 16, 16 + yoffset))
10199
.into_styled(style)
102-
.draw(&mut disp)
100+
.draw(&mut display)
103101
.unwrap();
104102

105103
// circle
106104
Circle::new(Point::new(96, yoffset + 8), 8)
107105
.into_styled(style)
108-
.draw(&mut disp)
106+
.draw(&mut display)
109107
.unwrap();
110108

111-
disp.flush().unwrap();
109+
display.flush().unwrap();
112110

113111
loop {}
114112
}

0 commit comments

Comments
 (0)