Files
esphome-lsm6ds/esphome/components/epaper_spi/models/weact_bwr.py
T

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",
)