fix: eliminate diagonal dither pattern from display driver

Root cause: Panel_ED2208's epd_quality mode applies _dither_row_rgb_pair
(diagonal bias pattern with dither=140) during _exec_transfer(). Since our
ImagePipeline already does proper Floyd-Steinberg dithering, the driver's
additional dithering was creating visible diagonal artifacts.

Fix: setEpdMode(epd_fastest) selects _dither_row_none (clean nearest-color
lookup, no spatial bias). On Panel_ED2208 this only affects the dither
function — NOT refresh quality or waveform.

Also: default dither_noise setting to OFF since error scatter was targeting
the wrong layer (it made gradient areas fuzzier without fixing the real
problem in the display driver).

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-03 19:52:22 -04:00
parent fe20841d9e
commit 51756be080
20 changed files with 1100 additions and 138 deletions

View File

@@ -22,7 +22,10 @@ Settings SettingsManager::get() {
s.meta_pos = static_cast<MetaPosition>(readU8("meta_pos", DEFAULT_META_POS));
s.date_fmt = readString("date_fmt", "%Y-%m-%d");
s.time_fmt = readString("time_fmt", "%H:%M:%S");
s.pipeline_mode = readU8("pipe_mode", DEFAULT_PIPELINE_MODE);
s.dither_noise = readU8("dith_noise", DEFAULT_DITHER_NOISE);
s.led_brightness = readU8("led_bright", DEFAULT_LED_BRIGHTNESS);
s.show_battery = readU8("show_batt", 1);
s.queue_cursor = readU32("queue_cursor", 0);
s.albums_json = readString("albums_json", "[]");
return s;
@@ -40,7 +43,10 @@ void SettingsManager::save(const Settings& s) {
writeU8("meta_pos", static_cast<uint8_t>(s.meta_pos));
writeString("date_fmt", s.date_fmt);
writeString("time_fmt", s.time_fmt);
writeU8("pipe_mode", s.pipeline_mode);
writeU8("dith_noise", s.dither_noise);
writeU8("led_bright", s.led_brightness);
writeU8("show_batt", s.show_battery);
writeU32("queue_cursor", s.queue_cursor);
writeString("albums_json", s.albums_json);
Serial.println("[settings] All settings saved");