76 lines
2.6 KiB
Python
76 lines
2.6 KiB
Python
"""WeAct Black/White/Red e-paper displays using SSD1683 controller.
|
|
|
|
Supported models:
|
|
- weact-2.13in-3c: 122x250 pixels (2.13" display)
|
|
- weact-2.9in-3c: 128x296 pixels (2.9" display)
|
|
- weact-4.2in-3c: 400x300 pixels (4.2" display)
|
|
|
|
These displays use SSD1680 or SSD1683 controller and require a specific initialization
|
|
sequence. The DRV_OUT_CTL command is calculated from the display height.
|
|
"""
|
|
|
|
from . import EpaperModel
|
|
|
|
|
|
class WeActBWR(EpaperModel):
|
|
"""Base EpaperModel class for WeAct Black/White/Red displays using SSD1683 controller."""
|
|
|
|
def __init__(self, name, **defaults):
|
|
super().__init__(name, "EPaperWeAct3C", **defaults)
|
|
|
|
def get_init_sequence(self, config):
|
|
"""Generate initialization sequence for WeAct BWR displays.
|
|
|
|
The initialization sequence is based on SSD1680 and SSD1683 controller datasheet
|
|
and the WeAct display specifications.
|
|
"""
|
|
_, height = self.get_dimensions(config)
|
|
# DRV_OUT_CTL: MSB of (height-1), LSB of (height-1), gate setting (0x00)
|
|
height_minus_1 = height - 1
|
|
msb = height_minus_1 >> 8
|
|
lsb = height_minus_1 & 0xFF
|
|
return (
|
|
# Step 1: Software Reset (0x12) - REQUIRED per SSD1680, but works without it as well, so it's commented out for now
|
|
# (0x12,),
|
|
# Step 2: Wait 10ms after SWRESET (?) not sure how to implement wht waiting for 10ms after SWRESET, so it's commented out for now
|
|
# Step 3: DRV_OUT_CTL - driver output control (height-dependent)
|
|
# Format: (command, LSB, MSB, gate setting)
|
|
(0x01, lsb, msb, 0x00),
|
|
# Step 4: DATA_ENTRY - data entry mode (0x03 = decrement Y, increment X)
|
|
(0x11, 0x03),
|
|
# Step 5: BORDER_FULL - border waveform control
|
|
(0x3C, 0x05),
|
|
# Step 6: TEMP_SENS - internal temperature sensor
|
|
(0x18, 0x80),
|
|
# Step 7: DISPLAY_UPDATE - display update control
|
|
(0x21, 0x00, 0x80),
|
|
)
|
|
|
|
|
|
# Model: WeAct 2.9" 3C - 128x296 pixels, SSD1680 controller
|
|
weact_2p9in3c = WeActBWR(
|
|
"weact-2.9in-3c",
|
|
width=128,
|
|
height=296,
|
|
data_rate="10MHz",
|
|
minimum_update_interval="1s",
|
|
)
|
|
|
|
# Model: WeAct 2.13" 3C - 122x250 pixels, SSD1680 controller
|
|
weact_2p13in3c = WeActBWR(
|
|
"weact-2.13in-3c",
|
|
width=122,
|
|
height=250,
|
|
data_rate="10MHz",
|
|
minimum_update_interval="1s",
|
|
)
|
|
|
|
# Model: WeAct 4.2" 3C - 400x300 pixels, SSD1683 controller
|
|
weact_4p2in3c = WeActBWR(
|
|
"weact-4.2in-3c",
|
|
width=400,
|
|
height=300,
|
|
data_rate="10MHz",
|
|
minimum_update_interval="10s",
|
|
)
|