Skip to content

Commit 2c4c52b

Browse files
authored
Upgrade embedded-graphics, modernise examples, add animated DVD screensaver (#110)
* Upgrade crate to embedded-graphics 0.6.0-beta.1 Also bumps a few other dev deps * Fix examples from e-g upgrade * Squelch unused warnings * Make rand a dev dependency It's used in the noise_i2c demo and nowhere else, so shouldn't be included in release builds. * Some dep explanations * Add DVD player bouncing logo demo * Changelog entry * Update before build * Modernise examples and switch to panic_halt
1 parent fc5a6f7 commit 2c4c52b

18 files changed

+315
-142
lines changed

.circleci/config.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ target_steps: &target_steps
1010
- run: sudo pip install linkchecker
1111
- run: rustup default ${RUST_VERSION:-stable}
1212
- run: rustup component add rustfmt
13+
- run: cargo update
1314
- run: |
1415
SYSROOT=$(rustc --print sysroot)
1516

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,16 @@
1616

1717
### Changed
1818

19+
- [#110](https://github.com/jamwaffles/ssd1306/pull/110) Upgrade to embedded-graphics 0.6.0-beta.1
1920
- [#107](https://github.com/jamwaffles/ssd1306/pull/107) Migrate from Travis to CircleCI
2021
- [#105](https://github.com/jamwaffles/ssd1306/pull/105) Reduce flash usage by around 400 bytes by replacing some internal `unwrap()`s with `as` coercions.
2122
- [#106](https://github.com/jamwaffles/ssd1306/pull/106) Optimise internals by using iterators to elide bounds checks. Should also speed up `GraphicsMode` (and `embedded-graphics` operations) with a cleaned-up `set_pixel`.
2223
- [#108](https://github.com/jamwaffles/ssd1306/pull/108) Add an example using `DisplayProperties.draw()` to send a raw buffer of random bytes to the display over I2C.
2324

25+
### Added
26+
27+
- [#110](https://github.com/jamwaffles/ssd1306/pull/110) Add an animated image example `rtfm_dvd` using [RTFM](https://crates.io/crates/cortex-m-rtfm)
28+
2429
## [0.3.0-alpha.4] - 2020-02-07
2530

2631
### Added

Cargo.toml

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,25 +23,28 @@ embedded-hal = "0.2.3"
2323

2424
[dependencies.embedded-graphics]
2525
optional = true
26-
version = "=0.6.0-alpha.3"
26+
version = "=0.6.0-beta.1"
2727

2828
[dev-dependencies]
29-
cortex-m = "0.6.1"
30-
cortex-m-rt = "0.6.11"
31-
panic-semihosting = "0.5.3"
32-
33-
[dependencies.rand]
29+
cortex-m = "0.6.2"
30+
cortex-m-rt = "0.6.12"
31+
cortex-m-rtfm = "0.5.1"
32+
panic-halt = "0.2.0"
33+
34+
# Used to load BMP images in various examples
35+
[dev-dependencies.tinybmp]
36+
version = "0.2.1"
37+
# Enable embedded-graphics integration
38+
features = [ "graphics" ]
39+
40+
# Used by the noise_i2c examples
41+
[dev-dependencies.rand]
3442
version = "0.7.3"
3543
default-features = false
3644
features = [ "small_rng" ]
3745

38-
# Turn on `bmp` feature for examples
39-
[dev-dependencies.embedded-graphics]
40-
version = "=0.6.0-alpha.3"
41-
features = ["bmp"]
42-
4346
[dev-dependencies.stm32f1xx-hal]
44-
version = "0.5.2"
47+
version = "0.5.3"
4548
features = [ "rt", "stm32f103" ]
4649

4750
[features]

README.md

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,27 +24,31 @@ From [`examples/image_i2c.rs`](examples/image_i2c.rs):
2424
#![no_std]
2525
#![no_main]
2626

27-
extern crate cortex_m;
28-
extern crate cortex_m_rt as rt;
29-
extern crate panic_semihosting;
30-
extern crate stm32f1xx_hal as hal;
31-
3227
use cortex_m_rt::{entry, exception, ExceptionFrame};
33-
use embedded_graphics::{image::Image, pixelcolor::BinaryColor, prelude::*};
34-
use hal::{
28+
use embedded_graphics::{
29+
image::{Image, ImageRaw},
30+
pixelcolor::BinaryColor,
31+
prelude::*,
32+
};
33+
use panic_halt as _;
34+
use ssd1306::{prelude::*, Builder};
35+
use stm32f1xx_hal::{
3536
i2c::{BlockingI2c, DutyCycle, Mode},
3637
prelude::*,
3738
stm32,
3839
};
39-
use ssd1306::{prelude::*, Builder};
4040

4141
#[entry]
4242
fn main() -> ! {
4343
let dp = stm32::Peripherals::take().unwrap();
44+
4445
let mut flash = dp.FLASH.constrain();
4546
let mut rcc = dp.RCC.constrain();
47+
4648
let clocks = rcc.cfgr.freeze(&mut flash.acr);
49+
4750
let mut afio = dp.AFIO.constrain(&mut rcc.apb2);
51+
4852
let mut gpiob = dp.GPIOB.split(&mut rcc.apb2);
4953

5054
let scl = gpiob.pb8.into_alternate_open_drain(&mut gpiob.crh);
@@ -70,10 +74,11 @@ fn main() -> ! {
7074

7175
disp.init().unwrap();
7276

73-
let im: Image<BinaryColor> =
74-
Image::new(include_bytes!("./rust.raw"), 64, 64).translate(Point::new(32, 0));
77+
let raw: ImageRaw<BinaryColor> = ImageRaw::new(include_bytes!("./rust.raw"), 64, 64);
7578

76-
im.draw(&mut disp);
79+
let im = Image::new(&raw, Point::new(32, 0));
80+
81+
im.draw(&mut disp).unwrap();
7782

7883
disp.flush().unwrap();
7984

@@ -84,6 +89,7 @@ fn main() -> ! {
8489
fn HardFault(ef: &ExceptionFrame) -> ! {
8590
panic!("{:#?}", ef);
8691
}
92+
8793
```
8894

8995
## License

examples/bmp_i2c.rs

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,23 +21,20 @@
2121
#![no_std]
2222
#![no_main]
2323

24-
extern crate cortex_m;
25-
extern crate cortex_m_rt as rt;
26-
extern crate panic_semihosting;
27-
extern crate stm32f1xx_hal as hal;
28-
2924
use cortex_m_rt::{entry, exception, ExceptionFrame};
3025
use embedded_graphics::{
31-
image::ImageBmp,
26+
image::Image,
3227
pixelcolor::{BinaryColor, Rgb565},
3328
prelude::*,
3429
};
35-
use hal::{
30+
use panic_halt as _;
31+
use ssd1306::{prelude::*, Builder};
32+
use stm32f1xx_hal::{
3633
i2c::{BlockingI2c, DutyCycle, Mode},
3734
prelude::*,
3835
stm32,
3936
};
40-
use ssd1306::{prelude::*, Builder};
37+
use tinybmp::Bmp;
4138

4239
#[entry]
4340
fn main() -> ! {
@@ -75,11 +72,12 @@ fn main() -> ! {
7572

7673
disp.init().unwrap();
7774

78-
// The image is an RGB565 encoded BMP, so specifying the type as `ImageBmp<Rgb565>` will read
75+
let bmp =
76+
Bmp::from_slice(include_bytes!("./rust-pride.bmp")).expect("Failed to load BMP image");
77+
78+
// The image is an RGB565 encoded BMP, so specifying the type as `Image<Bmp, Rgb565>` will read
7979
// the pixels correctly
80-
let im: ImageBmp<Rgb565> = ImageBmp::new(include_bytes!("./rust-pride.bmp"))
81-
.expect("Failed to load BMP image")
82-
.translate(Point::new(32, 0));
80+
let im: Image<Bmp, Rgb565> = Image::new(&bmp, Point::new(32, 0));
8381

8482
// The display uses `BinaryColor` pixels (on/off only). Here, we `map()` over every pixel
8583
// and naively convert the color to an on/off value. The logic below simply converts any
@@ -95,7 +93,8 @@ fn main() -> ! {
9593
},
9694
)
9795
})
98-
.draw(&mut disp);
96+
.draw(&mut disp)
97+
.unwrap();
9998

10099
disp.flush().unwrap();
101100

examples/dvd.bmp

2.76 KB
Binary file not shown.

examples/graphics.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,25 +20,21 @@
2020
#![no_std]
2121
#![no_main]
2222

23-
extern crate cortex_m;
24-
extern crate cortex_m_rt as rt;
25-
extern crate panic_semihosting;
26-
extern crate stm32f1xx_hal as hal;
27-
2823
use cortex_m_rt::{entry, exception, ExceptionFrame};
2924
use embedded_graphics::{
3025
pixelcolor::BinaryColor,
3126
prelude::*,
3227
primitives::{Circle, Rectangle, Triangle},
3328
style::PrimitiveStyleBuilder,
3429
};
35-
use hal::{
30+
use panic_halt as _;
31+
use ssd1306::{prelude::*, Builder};
32+
use stm32f1xx_hal::{
3633
delay::Delay,
3734
prelude::*,
3835
spi::{Mode, Phase, Polarity, Spi},
3936
stm32,
4037
};
41-
use ssd1306::{prelude::*, Builder};
4238

4339
#[entry]
4440
fn main() -> ! {
@@ -95,7 +91,8 @@ fn main() -> ! {
9591
// enum to the _Builder_ struct
9692
Rectangle::new(Point::new(0, 0), Point::new(127, 63))
9793
.into_styled(style)
98-
.draw(&mut disp);
94+
.draw(&mut disp)
95+
.unwrap();
9996

10097
// triangle
10198
Triangle::new(
@@ -104,17 +101,20 @@ fn main() -> ! {
104101
Point::new(16 + 8, yoffset),
105102
)
106103
.into_styled(style)
107-
.draw(&mut disp);
104+
.draw(&mut disp)
105+
.unwrap();
108106

109107
// square
110108
Rectangle::new(Point::new(52, yoffset), Point::new(52 + 16, 16 + yoffset))
111109
.into_styled(style)
112-
.draw(&mut disp);
110+
.draw(&mut disp)
111+
.unwrap();
113112

114113
// circle
115114
Circle::new(Point::new(96, yoffset + 8), 8)
116115
.into_styled(style)
117-
.draw(&mut disp);
116+
.draw(&mut disp)
117+
.unwrap();
118118

119119
disp.flush().unwrap();
120120

examples/graphics_i2c.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,24 +17,20 @@
1717
#![no_std]
1818
#![no_main]
1919

20-
extern crate cortex_m;
21-
extern crate cortex_m_rt as rt;
22-
extern crate panic_semihosting;
23-
extern crate stm32f1xx_hal as hal;
24-
2520
use cortex_m_rt::{entry, exception, ExceptionFrame};
2621
use embedded_graphics::{
2722
pixelcolor::BinaryColor,
2823
prelude::*,
2924
primitives::{Circle, Rectangle, Triangle},
3025
style::PrimitiveStyleBuilder,
3126
};
32-
use hal::{
27+
use panic_halt as _;
28+
use ssd1306::{prelude::*, Builder};
29+
use stm32f1xx_hal::{
3330
i2c::{BlockingI2c, DutyCycle, Mode},
3431
prelude::*,
3532
stm32,
3633
};
37-
use ssd1306::{prelude::*, Builder};
3834

3935
#[entry]
4036
fn main() -> ! {
@@ -84,7 +80,8 @@ fn main() -> ! {
8480
// enum to the _Builder_ struct
8581
Rectangle::new(Point::new(0, 0), Point::new(127, 63))
8682
.into_styled(style)
87-
.draw(&mut disp);
83+
.draw(&mut disp)
84+
.unwrap();
8885

8986
// triangle
9087
Triangle::new(
@@ -93,17 +90,20 @@ fn main() -> ! {
9390
Point::new(16 + 8, yoffset),
9491
)
9592
.into_styled(style)
96-
.draw(&mut disp);
93+
.draw(&mut disp)
94+
.unwrap();
9795

9896
// square
9997
Rectangle::new(Point::new(52, yoffset), Point::new(52 + 16, 16 + yoffset))
10098
.into_styled(style)
101-
.draw(&mut disp);
99+
.draw(&mut disp)
100+
.unwrap();
102101

103102
// circle
104103
Circle::new(Point::new(96, yoffset + 8), 8)
105104
.into_styled(style)
106-
.draw(&mut disp);
105+
.draw(&mut disp)
106+
.unwrap();
107107

108108
disp.flush().unwrap();
109109

examples/graphics_i2c_128x32.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,24 +17,20 @@
1717
#![no_std]
1818
#![no_main]
1919

20-
extern crate cortex_m;
21-
extern crate cortex_m_rt as rt;
22-
extern crate panic_semihosting;
23-
extern crate stm32f1xx_hal as hal;
24-
2520
use cortex_m_rt::{entry, exception, ExceptionFrame};
2621
use embedded_graphics::{
2722
pixelcolor::BinaryColor,
2823
prelude::*,
2924
primitives::{Circle, Rectangle, Triangle},
3025
style::PrimitiveStyleBuilder,
3126
};
32-
use hal::{
27+
use panic_halt as _;
28+
use ssd1306::{prelude::*, Builder};
29+
use stm32f1xx_hal::{
3330
i2c::{BlockingI2c, DutyCycle, Mode},
3431
prelude::*,
3532
stm32,
3633
};
37-
use ssd1306::{prelude::*, Builder};
3834

3935
#[entry]
4036
fn main() -> ! {
@@ -86,7 +82,8 @@ fn main() -> ! {
8682
// enum to the _Builder_ struct
8783
Rectangle::new(Point::new(0, 0), Point::new(127, 31))
8884
.into_styled(style)
89-
.draw(&mut disp);
85+
.draw(&mut disp)
86+
.unwrap();
9087

9188
// triangle
9289
Triangle::new(
@@ -95,17 +92,20 @@ fn main() -> ! {
9592
Point::new(16 + 8, yoffset),
9693
)
9794
.into_styled(style)
98-
.draw(&mut disp);
95+
.draw(&mut disp)
96+
.unwrap();
9997

10098
// square
10199
Rectangle::new(Point::new(52, yoffset), Point::new(52 + 16, 16 + yoffset))
102100
.into_styled(style)
103-
.draw(&mut disp);
101+
.draw(&mut disp)
102+
.unwrap();
104103

105104
// circle
106105
Circle::new(Point::new(96, yoffset + 8), 8)
107106
.into_styled(style)
108-
.draw(&mut disp);
107+
.draw(&mut disp)
108+
.unwrap();
109109

110110
disp.flush().unwrap();
111111

0 commit comments

Comments
 (0)