Implement full SSD1306 OLED display support: - Splash screen on boot (1.5s) with project name, version, board - Dashboard showing radio state, config, counters, RSSI/SNR - RSSI history sparkline (64-sample ring buffer, 2px-wide bars) - DisplayOn/DisplayOff host commands routed via dedicated channel - Pure render functions against generic DrawTarget (no hardware coupling) - Display on/off control bypasses radio task entirely Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
13 KiB
13 KiB
Changelog
ssd1306 is a no-std driver written in Rust for the popular
SSD1306 monochrome OLED display.
Unreleased - ReleaseDate
0.10.0 - 2025-03-22
Changed
- Added
DisplaySize64x32to the prelude - Update
embedded-hal-busdependency to 0.3.0 - Update examples
Fixed
- Switch to resolver version 2. This fixes compilation issues when the
asyncfeature is enabled. - Parentheses for expression in mode/terminal.rs (see precedence) in mode/terminal.rs
- Switch iterator in
write_strin mode/terminal.rs from last() to next_back (see double_ended_iterator_last) - If feature
asyncis enabled, theembedded_hal_async::i2c::I2cis used instead ofembedded_hal::i2c::I2cso the I2C can be shared - Update dependencies for
embassy-executorto 0.7.0 - Remove
embassy-executorfeature "integrated-timer". See https://github.com/embassy-rs/embassy/blob/main/embassy-executor/CHANGELOG.md - Switch
embassy-executorfrom git to crates.io - Update dependencies for
embassy-stm32to 0.2.0 - Switch
embassy-stm32from git to crates.io - Update dependencies for
embassy-timeto 0.4.0 - Switch
embassy-timefrom git to crates.io - Update dependencies for
tinybmpto 0.5.0 - Update root-toolchain to 1.84 for github workflow in ci.yml
0.9.0 - 2024-08-30
- Updated dependencies for
embedded-hal1.0.0. - Switch examples to embassy STM32 PAC which implements
embedded-hal1.0.0 traits. - Add an asynchronous interface, enabled via the
asyncfeature. - (breaking) Increased MSRV to 1.75.0
Added
- #203 Added
Ssd1306::release(self)to release the contained i2c interface.
Changed
- #212 Switch from circleci to github actions. Adjust urls now repository is hosted on rust-embedded-community. Update code and config for modern rust and tools
0.8.4 - 2023-10-27
Fixed
- #201 Fixed
BufferedGraphicsMode::clear(On)such that it fills all pixels withOn, not only some.
0.8.3 - 2023-10-09
Changed
- #195 Changed
BasicMode::clearto clear in small batches instead of one big write. This drops RAM requirement by ~900b and fixes issues on MCUs with less than 1Kb of RAM. - #195 Changed
TerminalModeto use lookup by ASCII code instead of per-character match when searching for glyph. This may save up to 3.5Kb of compiled code on AVR MCUs.
0.8.2 - 2023-09-29
Fixed
- #197 Fixed terminal mode panic and wrapping behaviour for rotated displays.
0.8.1 - 2023-08-18
Added
- #190 Added
Ssd1306::set_invertto invert the screen pixels
0.8.0 - 2023-06-01
Added
- #183
Brightness::custom()is now publicly available.
Fixed
- #177 Fixed a few spelling mistakes.
Changed
- (breaking) #184 Increased MSRV to 1.61.0
- (breaking) #179 Changed
Ssd1306::resetsignature. - #181 Update embedded-graphics-core dependency to 0.4
- (breaking) #185 The inherent
BufferedGraphicsMode::clearhas been renamed toclear_buffer. - #185 Some methods no longer require
DI: WriteOnlyDataCommand.
0.7.1 - 2022-08-15
Added
- #161 Added a
set_mirrormethod to enable or disable display mirroring. - #166 Added
DisplaySizeconfiguration for 64x32 displays.
0.7.0 - 2021-07-08
Changed
- (breaking) #158 Migrate away from
generic-arrayto a solution using const generics. This raises the crate MSRV to 1.51.
0.6.0 - 2021-06-22
Changed
-
(breaking) #156 Migrate from
embedded-graphicstoembedded-graphics-core. -
(breaking) #150
BufferedGraphicsMode::set_pixelnow accepts aboolinstead of au8for the pixel color value. -
(breaking) #150
display_onis now calledset_display_on. -
(breaking) #150
TerminalMode::get_positionis now calledpositionto conform with Rust API guidelines. -
(breaking) #150 Refactor the crate API to be more versatile and to make code clearer to understand.
A graphics mode initialisation now looks like this:
use ssd1306::{prelude::*, I2CDisplayInterface, Ssd1306}; let interface = I2CDisplayInterface::new(i2c); let mut display = Ssd1306::new(interface, DisplaySize128x64, DisplayRotation::Rotate0) .into_buffered_graphics_mode(); display.init().unwrap();
0.5.2 - 2021-04-19
0.5.1 - 2021-01-09
0.5.0 - 2020-12-21
0.4.2 - 2020-12-15 (yanked)
Changed
- (breaking) #139 Removed default display size type parameters.
Fixed
- #141 72x40 displays can now be set to higher brightnesses, matching other sizes.
0.4.1 - 2020-12-01
Changed
- #137 Replaced
TerminalModefont with a new, more consistent one. This now uses thezxpixfont from https://jared.geek.nz/2014/jan/custom-fonts-for-microcontrollers.
0.4.0 - 2020-08-03
Added
- #121 Added brightness control with the
set_brightness()method. - #118
DisplayModeTrait::into_properties()new method that consumes the driver and returns theDisplayProperties
Changed
- (breaking) #129
TerminalMode::set_rotationnow resets the cursor position - (breaking) #125 Redesigned display size handling.
- (breaking) #126 Moved
resetmethod toDisplayModeTrait. If the prelude is not used, add eitheruse ssd1306::prelude::*orssd1306::mode::displaymode::DisplayModeTraitto your imports. - (breaking) #119 Remove
DisplayModeandRawMode - #120 Update to v0.4
display-interface - (breaking) #118 Change
releasemethod to return the display interface instead of theDisplayProperties. - (breaking) #116 Replace custom I2C and SPI
interfaces by generic
display-interface - (breaking) #113 Removed public
send_bounded_datafrom DisplayInterface and implementations
Fixed
- #129 Fixed
Rotate90andRotate270rotation modes forTerminalMode
0.3.1 - 2020-03-21
Fixed
- Fix docs.rs build config
0.3.0 - 2020-03-20
Fixed
- #111 Fix TerminalMode offset for smaller displays.
Added
- #111 Add support for modules with a 64x48px display size.
Changed
- (breaking) #112 Upgrade to embedded-graphics 0.6.0
- #107 Migrate from Travis to CircleCI
- #105 Reduce flash usage by around 400 bytes by
replacing some internal
unwrap()s withascoercions. - #106 Optimise internals by using iterators to
elide bounds checks. Should also speed up
GraphicsMode(andembedded-graphicsoperations) with a cleaned-upset_pixel. - #108 Add an example using
DisplayProperties.draw()to send a raw buffer of random bytes to the display over I2C.
Added
0.3.0-alpha.4 - 2020-02-07
Added
- #101 Add support for modules with a 72x40px
display size. These are often advertised as 70x40px displays which are likely the same hardware.
An example is also added -
graphics_i2c_72x40.
Fixed
- Fix docs.rs build by targeting
x86_64-unknown-linux-gnu
Changed
- (breaking) Upgrade embedded-graphics from
0.6.0-alpha.2to version0.6.0-alpha.3 - #106 Switch out some
forloops for iterators internally to speed up data transfers and reduce code size in--releasemode.
0.3.0-alpha.3 - 2020-02-03
Changed
- #97 Use the new
Triangleprimitive from Embedded Graphics 0.6.0-alpha.2 in the three SSD1306graphics*.rsexamples - #103 Pin embedded-graphics version to 0.6.0-alpha.2
0.3.0-alpha.2
Fixed
- #80
TerminalModenow has a cursor. Newlines (\n) and carriage returns (\r) are now supported.
Changed
- #94 Programs that only change some parts of the display should now run much faster. The driver keeps track of changed pixels and only sends a bounding box of updated pixels instead of updating the entire display every time.
0.3.0-alpha.1
Changed
- (breaking) Upgraded to Embedded Graphics 0.6.0-alpha.2
0.2.6
Added
- Added a changelog!
- Display power control (#86) - call
.display_on(true)or.display_on(false)to turn on or off the display respectively.
Fixed
- Doc examples are now tested in CI (#89)
Changed
- Builder docs clarify the order of method calls (#89)