Procházet zdrojové kódy

docs: refresh panel table for the 750/579 status; finish row_interleave->line_order

- CONTRIBUTING.md supported-panels table regenerated: GDEY075T7 added,
  GDEY0579F51 now verified (7 of 10 hardware-verified).
- Rename the last row_interleave references (now line_order) in the harness
  help text, emitted candidate header, check_descriptors, and capture.py.
- Repoint the two stale DESIGN.md references (deleted; moved to
  CONTRIBUTING.md) in panel_table.py and the F52 descriptor comment.
Comments/docs only, no behavior change.
ZiB před 3 týdny
rodič
revize
00bd4e3be7

+ 2 - 1
CONTRIBUTING.md

@@ -202,8 +202,9 @@ from it, and a non-verified panel logs a warning in its boot `dump_config`.
 | `GxEPD2_213c_GDEY0213F52` | GDEY0213F52 | JD79676 | 4-color | ✅ verified |
 | `GxEPD2_213c_GDEY0213F52` | GDEY0213F52 | JD79676 | 4-color | ✅ verified |
 | `GxEPD2_426_GDEQ0426T82` | GDEQ0426T82 | SSD1677 | mono | ✅ verified |
 | `GxEPD2_426_GDEQ0426T82` | GDEQ0426T82 | SSD1677 | mono | ✅ verified |
 | `GxEPD2_583_GDEQ0583T31` | GDEQ0583T31 | UC8179 | mono | ✅ verified |
 | `GxEPD2_583_GDEQ0583T31` | GDEQ0583T31 | UC8179 | mono | ✅ verified |
+| `GxEPD2_750_GDEY075T7` | GDEY075T7 | UC8179 | mono | ✅ verified |
 | `GxEPD2_290c_GDEY029F51` | GDEY029F51 | JD79667 | 4-color | ⚪ structural |
 | `GxEPD2_290c_GDEY029F51` | GDEY029F51 | JD79667 | 4-color | ⚪ structural |
-| `GxEPD2_579c_GDEY0579F51` | GDEY0579F51 | HX8717 | 4-color | ⚪ structural |
+| `GxEPD2_579c_GDEY0579F51` | GDEY0579F51 | HX8717 | 4-color | ✅ verified |
 | `GxEPD2_579c_GDEY0579F51_MASTER_ONLY` | GDEY0579F51 | HX8717 | 4-color | 🔧 diagnostic |
 | `GxEPD2_579c_GDEY0579F51_MASTER_ONLY` | GDEY0579F51 | HX8717 | 4-color | 🔧 diagnostic |
 
 
 ✅ rendered correctly on real hardware · ⚪ captured, not yet bench-confirmed · 🔧 diagnostic variant.
 ✅ rendered correctly on real hardware · ⚪ captured, not yet bench-confirmed · 🔧 diagnostic variant.

+ 1 - 1
components/gxepd2/panel_213c_gdey0213f52.h

@@ -17,7 +17,7 @@
 //
 //
 // Packed 4-color: bits_per_pixel=2, GXEPD2_PALETTE_4C (the vendor's own
 // Packed 4-color: bits_per_pixel=2, GXEPD2_PALETTE_4C (the vendor's own
 // color4() black0/white1/yellow2/red3, validated by the diag Pattern-B pass -
 // color4() black0/white1/yellow2/red3, validated by the diag Pattern-B pass -
-// see DESIGN.md §12; the F52 uses the same GxEPD2_4C wrapper). blank_code=0x01
+// see CONTRIBUTING.md "Limits"; the F52 uses the same GxEPD2_4C wrapper). blank_code=0x01
 // matches the observed 0x55 white clear (code 01 x4). If colors come out wrong
 // matches the observed 0x55 white clear (code 01 x4). If colors come out wrong
 // on hardware the palette/codes are the thing to re-check for JD79676.
 // on hardware the palette/codes are the thing to re-check for JD79676.
 //
 //

+ 1 - 1
tools/capture.py

@@ -12,7 +12,7 @@ just a host C++ compiler. See tools/gxepd2_harness/README.md and CONTRIBUTING.md
     tools/capture.py GxEPD2_154_Z90c --debug     # also dump the capture structure
     tools/capture.py GxEPD2_154_Z90c --debug     # also dump the capture structure
 
 
 The output is a *candidate*: review it, fill any TODO fields the diag passes
 The output is a *candidate*: review it, fill any TODO fields the diag passes
-own (bits_per_pixel/palette for packed panels; plane_width/row_interleave for
+own (bits_per_pixel/palette for packed panels; plane_width/line_order for
 dual-region), save it as components/gxepd2/panel_<model>.h, add it to
 dual-region), save it as components/gxepd2/panel_<model>.h, add it to
 display.py's MODELS, compile, and bench-verify before marking it verified.
 display.py's MODELS, compile, and bench-verify before marking it verified.
 """
 """

+ 1 - 1
tools/check_descriptors.py

@@ -5,7 +5,7 @@ the result against the committed components/gxepd2/panel_*.h.
 Compares only the structure the emitter authoritatively produces - the INIT /
 Compares only the structure the emitter authoritatively produces - the INIT /
 WINDOW / REFRESH command sequences, plane count, plane-write command(s),
 WINDOW / REFRESH command sequences, plane count, plane-write command(s),
 window_per_plane, and plane_invert - not the hand/diag-filled fields
 window_per_plane, and plane_invert - not the hand/diag-filled fields
-(bits_per_pixel/palette/blank_code/plane_width/row_interleave), which carry
+(bits_per_pixel/palette/blank_code/plane_width/line_order), which carry
 comments and names the emitter doesn't reproduce.
 comments and names the emitter doesn't reproduce.
 
 
 Catches two things: an emitter regression (reproduction breaks), and GxEPD2
 Catches two things: an emitter regression (reproduction breaks), and GxEPD2

+ 1 - 1
tools/gxepd2_harness/README.md

@@ -36,7 +36,7 @@ init / window / refresh sequences + plane-write command(s), reads
 resolution / busy-polarity / timeout from the driver, and derives
 resolution / busy-polarity / timeout from the driver, and derives
 `plane_invert` and 1bpp-vs-packed from a fill probe. Review the result, add any
 `plane_invert` and 1bpp-vs-packed from a fill probe. Review the result, add any
 packed-format fields the diag passes own (`bits_per_pixel` / `palette` for
 packed-format fields the diag passes own (`bits_per_pixel` / `palette` for
-packed panels; `plane_width` / `row_interleave` for dual-region), then save it
+packed panels; `plane_width` / `line_order` for dual-region), then save it
 as `components/gxepd2/panel_<panel>.h` and wire it into `display.py`'s `MODELS`.
 as `components/gxepd2/panel_<panel>.h` and wire it into `display.py`'s `MODELS`.
 
 
 `EMIT_DEBUG=1 /tmp/emit_<panel>` dumps the image-stage command/burst structure.
 `EMIT_DEBUG=1 /tmp/emit_<panel>` dumps the image-stage command/burst structure.

+ 3 - 3
tools/gxepd2_harness/emit_descriptor.h

@@ -18,7 +18,7 @@
 //                           duplicate window command leaves the REFRESH seq.
 //                           duplicate window command leaves the REFRESH seq.
 //
 //
 // Out of scope here (comes from the diag Pattern A/B passes, not one capture):
 // Out of scope here (comes from the diag Pattern A/B passes, not one capture):
-// bits_per_pixel / palette / plane_invert / row_interleave. Those are emitted
+// bits_per_pixel / palette / plane_invert / line_order. Those are emitted
 // as TODO placeholders so the diff against the hand file is about segmentation.
 // as TODO placeholders so the diff against the hand file is about segmentation.
 
 
 #include <cstdint>
 #include <cstdint>
@@ -371,7 +371,7 @@ template<typename Driver> void emit_descriptor(const char *class_name, const cha
 
 
   // --- emit ---
   // --- emit ---
   printf("// GENERATED by emit_descriptor from %s - candidate, segmentation only.\n", class_name);
   printf("// GENERATED by emit_descriptor from %s - candidate, segmentation only.\n", class_name);
-  printf("// bits_per_pixel/palette/plane_invert/plane_width/row_interleave still\n");
+  printf("// bits_per_pixel/palette/plane_invert/plane_width/line_order still\n");
   printf("// come from the diag passes.\n");
   printf("// come from the diag passes.\n");
   printf("#pragma once\n#include \"epd_command.h\"\n\nnamespace esphome::gxepd2 {\n\n");
   printf("#pragma once\n#include \"epd_command.h\"\n\nnamespace esphome::gxepd2 {\n\n");
 
 
@@ -422,7 +422,7 @@ template<typename Driver> void emit_descriptor(const char *class_name, const cha
   printf("    .plane_count = %zu,\n", nplanes);
   printf("    .plane_count = %zu,\n", nplanes);
   printf("    .plane_write_cmd = {0x%02X, 0x%02X},\n", p0cmd, p1cmd);
   printf("    .plane_write_cmd = {0x%02X, 0x%02X},\n", p0cmd, p1cmd);
   // Fields below are emitted in struct-declaration order (plane_invert,
   // Fields below are emitted in struct-declaration order (plane_invert,
-  // plane_width, row_interleave, bits_per_pixel, palette, palette_len,
+  // plane_width, line_order, bits_per_pixel, palette, palette_len,
   // blank_code) so the designated initializer stays well-formed.
   // blank_code) so the designated initializer stays well-formed.
   if (pv.is_1bpp) {
   if (pv.is_1bpp) {
     const bool i1 = (nplanes > 1 && pv.plane1_valid) ? pv.inv1 : false;
     const bool i1 = (nplanes > 1 && pv.plane1_valid) ? pv.inv1 : false;

+ 1 - 1
tools/gxepd2_harness/run_diag_harness.h

@@ -4,7 +4,7 @@
 // gxepd2-diag-fill-spec memory. Instead of the uniform 0xA5 fill, it fills
 // gxepd2-diag-fill-spec memory. Instead of the uniform 0xA5 fill, it fills
 // the 1bpp plane buffer with a positional TAG, records the exact wire-byte
 // the 1bpp plane buffer with a positional TAG, records the exact wire-byte
 // stream (trace.h recording), and inverts the tag to recover the driver's
 // stream (trace.h recording), and inverts the tag to recover the driver's
-// buffer->wire row permutation (identity / reversed / row_interleave /
+// buffer->wire row permutation (identity / reversed / line_order /
 // unknown). Host-only, no hardware.
 // unknown). Host-only, no hardware.
 //
 //
 // Scope: 1bpp byte-preserving writeImage path (mono, and the per-plane
 // Scope: 1bpp byte-preserving writeImage path (mono, and the per-plane

+ 1 - 1
tools/panel_table.py

@@ -3,7 +3,7 @@
 
 
 PANELS (in components/gxepd2/display.py) is the single source of truth for
 PANELS (in components/gxepd2/display.py) is the single source of truth for
 which panels ship and their status. This reads it by AST (no esphome import)
 which panels ship and their status. This reads it by AST (no esphome import)
-and prints a Markdown table for the README / DESIGN.md.
+and prints a Markdown table for the README / CONTRIBUTING.md.
 
 
     tools/panel_table.py
     tools/panel_table.py
 """
 """