1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
//! Rust driver for Adafruit e-Paper displays (EPD), for use with [embedded-hal].
//!
//! ## Supported Displays
//!
//! | Display | Controller | Colors | Grayscale |
//! |---------|-----------|--------|-----------|
//! | Adafruit ThinkInk 2.9" EAAMFGN (2025 MagTag) | SSD1680 | BW | Gray2 (2-bit, 4-level) |
//! | Adafruit ThinkInk 2.9" T5 (original MagTag) | IL0373 | BW | Gray2 (2-bit, 4-level) |
//!
//! ## Usage
//!
//! ### ThinkInk 2.9" — Monochrome (SSD1680)
//!
//! ```rust, ignore
//! use epd_datafuri::displays::adafruit_thinkink_290_mfgn::{ThinkInk2in9Mono, Display2in9Mono};
//! use epd_datafuri::prelude::*;
//!
//! let mut driver = ThinkInk2in9Mono::new(spi, busy, dc, rst)?;
//! let mut display = Display2in9Mono::new();
//!
//! // Draw using embedded-graphics
//! Text::new("Hello!", Point::new(10, 20), text_style).draw(&mut display)?;
//!
//! driver.begin(&mut delay)?;
//! driver.update_and_display(display.buffer(), &mut delay)?;
//! ```
//!
//! ### ThinkInk 2.9" — Grayscale (SSD1680)
//!
//! ```rust, ignore
//! use epd_datafuri::displays::adafruit_thinkink_290_mfgn::{ThinkInk2in9Gray2, Display2in9Gray2};
//! use epd_datafuri::prelude::*;
//! use embedded_graphics::pixelcolor::Gray2;
//!
//! let mut driver = ThinkInk2in9Gray2::new(spi, busy, dc, rst)?;
//! let mut display = Display2in9Gray2::new();
//!
//! // Draw using embedded-graphics with 4-level gray
//! Text::new("Hello!", Point::new(10, 20), text_style).draw(&mut display)?;
//!
//! driver.begin(&mut delay)?;
//! driver.update_gray2_and_display(display.high_buffer(), display.low_buffer(), &mut delay)?;
//! ```
//!
//! ### MagTag 2.9" — Grayscale (IL0373)
//!
//! ```rust, ignore
//! use epd_datafuri::displays::adafruit_thinkink_290_t5::{ThinkInk2in9Gray2, Display2in9Gray2};
//! use epd_datafuri::prelude::*;
//! use embedded_graphics::pixelcolor::Gray2;
//!
//! let mut driver = ThinkInk2in9Gray2::new(spi, busy, dc, rst)?;
//! let mut display = Display2in9Gray2::new();
//!
//! driver.begin(&mut delay)?;
//! driver.update_gray2_and_display(display.high_buffer(), display.low_buffer(), &mut delay)?;
//! ```
//!
//! ## Grayscale
//!
//! 2-bit, 4-level grayscale (Gray2) is supported for both displays. Each display module
//! exports its own `Display2in9Gray2` with the correct plane mapping for that controller:
//!
//! - [`displays::adafruit_thinkink_290_mfgn::Display2in9Gray2`] for the ThinkInk 2.9" (SSD1680)
//! - [`displays::adafruit_thinkink_290_t5::Display2in9Gray2`] for the MagTag 2.9" (IL0373)
//!
//! ## Notes
//!
//! Partial updates are not supported.
//!
//! [embedded-hal]: https://crates.io/crates/embedded-hal
/// Useful exports