Files
Dual-PID/P4_Display_Firmware/config.h
raw-designsandClaude Opus 5 e8fdc60fea fix(P4): Menü-Vorhang wieder öffenbar, RGB888 bleibt Vorgabe (1.6.5)
Zwei der drei Tempo-Maßnahmen aus 1.6.4 haben sich am Gerät als untauglich
erwiesen und stehen wieder auf ihrem alten Wert:

- WS7_COLOR_BITS = 24: Die Bridge dieses Panels nimmt kein RGB565 an.
- WS7_PARTIAL_REFRESH = 0: Der Menü-Vorhang ist halbtransparent und wird in
  den gerade aktiven Bildpuffer eingemischt. Die nächste Zustandsmeldung der
  S3 zeichnet in den zweiten Puffer, der ihn nie bekommen hat - der Vorhang
  war damit sofort wieder weg und der Knopf schien wirkungslos. Nutzbar wäre
  der Modus erst, wenn der LVGL-Port die geänderten Bereiche zwischen beiden
  Puffern abgleicht.

Beide bleiben als Schalter erhalten, mit Notiz woran sie gescheitert sind.
WS7_PARALLEL_RENDER bleibt eingeschaltet - von den drei Maßnahmen trägt nur
diese.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018QoLDQeUh1dCQz7yYZVb4Y
2026-09-01 13:13:28 +02:00

164 lines
8.4 KiB
C

// =====================================================================================
// P4-Touch-Display-Firmware fuer die Dual-PID-Siebtraegersteuerung
// config.h - zentrale Konfiguration (Panel-Typ, Pins, UART, Protokoll)
// =====================================================================================
//
// Zwei unterstuetzte Panels (Auswahl ueber JC_PANEL_TYPE weiter unten):
//
// JC_PANEL_43 - Guition JC4880P443C-I-W (4,3")
// - MCU: ESP32-P4 (UI / LVGL)
// - Display: ST7701 (480 x 800 IPS, MIPI-DSI) -> per Rotation 270 = 800 x 480
// - Touch: GT911 (kapazitiv, I2C SDA=7 / SCL=8)
// - LCD-Reset GPIO5, Backlight GPIO23 (LEDC-PWM)
//
// JC_PANEL_70 - Guition JC1060P470C-I-W (7,0")
// - MCU: ESP32-P4 (UI / LVGL)
// - Display: JD9165 (1024 x 600 IPS, MIPI-DSI) -> nativ Querformat, keine Rotation
// - Touch: GT911 (kapazitiv, I2C SDA=7 / SCL=8); meldet Rohkoordinaten in
// 800x480 und wird in board_bringup.c auf 1024x600 hochskaliert
// - LCD-Reset GPIO27, Backlight GPIO23 (LEDC-PWM)
//
// WS_PANEL_7H - Waveshare ESP32-P4-Pico + Waveshare 7inch DSI LCD (H)
// - MCU: ESP32-P4 (Rev. 1.3 / ECO2), 32 MB PSRAM, 32 MB Flash, KEIN ESP32-C6
// - Display: 1280 x 720 IPS, MIPI-DSI (2 Lanes), nativ Querformat, keine Rotation.
// Das Panel haengt hinter einer Waveshare-Bridge und akzeptiert NUR
// RGB888 -> LVGL laeuft bei diesem Panel mit 24 Bit Farbtiefe
// (siehe lv_conf.h). Kein LCD-Reset-Pin.
// - Touch: GT9271 (kapazitiv, I2C SDA=7 / SCL=8, Adresse 0x14); liefert
// Rohkoordinaten im Hochformat -> X/Y werden getauscht
// - Backlight: kein PWM-Pin, sondern Register der Bridge auf I2C-Adresse 0x45
//
// Gemeinsam: 16 MB Flash (Waveshare: 32 MB), PSRAM aktiviert, Audio ES8311 (optional).
// Bei den JC-Panels ist zusaetzlich ein ESP32-C6 bestueckt, der hier NICHT genutzt wird -
// WLAN/Webinterface laufen auf der Hauptplatine.
//
// Diese Firmware ist ein reiner UART-Client. Quelle der Wahrheit ist die Hauptplatine
// (ESP32-S3, Dual_PID_FastHeatUp.ino). Siehe Doku/P4-Display_UART-Protokoll.md.
// =====================================================================================
#pragma once
// -------------------------------------------------------------------------------------
// Panel-Modus (C-sicher hier definiert, da auch board_bringup.c ihn liest)
// 0 = Stub-Modus (kein Display-Treiber; Protokoll/Logik-Test)
// 1 = echte Hardware (Hersteller-BSP; siehe README)
// -------------------------------------------------------------------------------------
#ifndef JC_USE_REAL_PANEL
#define JC_USE_REAL_PANEL 1
#endif
// -------------------------------------------------------------------------------------
// Panel-Typ (C-sicher hier definiert, da auch board_bringup.c, pins_config.h und
// lv_conf.h ihn lesen)
// JC_PANEL_43 = Guition JC4880P443C-I-W : 4,3", ST7701, 480x800 (per Rotation 800x480)
// JC_PANEL_70 = Guition JC1060P470C-I-W : 7,0", JD9165, 1024x600 (nativ Querformat)
// WS_PANEL_7H = Waveshare ESP32-P4-Pico + Waveshare 7inch DSI LCD (H) : 1280x720
// HIER umschalten. Ein Compiler-Flag reicht NICHT sicher aus, weil lv_conf.h die
// Farbtiefe aus diesem Wert ableitet und auch die LVGL-Bibliothek damit uebersetzt
// werden muss.
// -------------------------------------------------------------------------------------
#define JC_PANEL_43 43
#define JC_PANEL_70 70
#define WS_PANEL_7H 77
#ifndef JC_PANEL_TYPE
#define JC_PANEL_TYPE WS_PANEL_7H
#endif
#if (JC_PANEL_TYPE != JC_PANEL_43) && (JC_PANEL_TYPE != JC_PANEL_70) && (JC_PANEL_TYPE != WS_PANEL_7H)
#error "JC_PANEL_TYPE muss JC_PANEL_43, JC_PANEL_70 oder WS_PANEL_7H sein"
#endif
// -------------------------------------------------------------------------------------
// DIAGNOSE: interner UART-Loopback-Selbsttest
// 1 = TX wird chip-intern auf RX gelegt (kein Draht, keine Pin-Unsicherheit).
// -> Laeuft "RX byte" im Debug-Panel hoch, sind Firmware+UART ok und das
// Problem liegt definitiv an Pins/Verkabelung. Bleibt es 0, ist es die
// Firmware/UART-Seite. NACH dem Test wieder auf 0 setzen!
// -------------------------------------------------------------------------------------
#ifndef UART_SELFTEST_INTERNAL_LOOPBACK
#define UART_SELFTEST_INTERNAL_LOOPBACK 0
#endif
// -------------------------------------------------------------------------------------
// DIAGNOSE: gruenes On-Screen-Debug-Panel (UART-Zaehler/letzte Rohzeile)
// 0 = aus (normale UI). 1 = Panel unten einblenden (fuer UART-Fehlersuche).
// -------------------------------------------------------------------------------------
#ifndef SHOW_DEBUG_OVERLAY
#define SHOW_DEBUG_OVERLAY 0
#endif
// -------------------------------------------------------------------------------------
// UART zur Hauptplatine
// -------------------------------------------------------------------------------------
// Gegenseite (S3): Serial1, 230400 8N1, TX=GPIO43 / RX=GPIO44.
// Verkabelung gekreuzt: S3-TX(43) -> P4-RX, S3-RX(44) -> P4-TX, GND <-> GND.
//
// 4,3" (JC_PANEL_43): Expand-IO-Header JP1, Schaltplan "4_USB&IO.png". Frei
// herausgefuehrte P4-GPIOs: 52/51/50/49/35/34/33/32/31/30/29/28 (+ ES_I2C, +3V3/+5V/GND).
// Die rechte Header-Spalte (C6_U01TXD/C6_I10RXD/...) gehoert zum ESP32-C6 -> NICHT nutzen.
//
// 7,0" (JC_PANEL_70): Expand-IO liegt auf den FPC-Buchsen FPC3/FPC4 (1,0 mm, 16-polig),
// Schaltplan "5-Schematic/4_CONN.png" - kein Stiftleisten-Header, Adapterkabel noetig.
// FPC4 fuehrt GPIO 34/33/32/31/30/29/28 heraus, FPC3 zusaetzlich 48/47/46/45/5/4/3/2.
//
// Beide JC-Panels: gleiche Pinwahl P4-TX = GPIO33, P4-RX = GPIO31.
// GPIO33 (P4 TX) ----> S3 GPIO44 (RX)
// GPIO31 (P4 RX) <---- S3 GPIO43 (TX)
// GND ---- S3 GND
//
// Waveshare ESP32-P4-Pico (WS_PANEL_7H): 40-poliger Header im Raspberry-Pi-Pico-Format.
// Belegt sind dort u.a. I2C (7/8), TF-Karte (9/10/11/12/13/53) und der Debug-UART0
// (37/38); diese Pins duerfen NICHT genommen werden. Genutzt werden GPIO20/GPIO21:
// GPIO20 (P4 TX) ----> S3 GPIO44 (RX)
// GPIO21 (P4 RX) <---- S3 GPIO43 (TX)
// GND ---- S3 GND
#define DISPLAY_UART_PORT Serial1
#define DISPLAY_UART_BAUDRATE 230400
#if JC_PANEL_TYPE == WS_PANEL_7H
#define DISPLAY_UART_TX_PIN 20
#define DISPLAY_UART_RX_PIN 21
#else
#define DISPLAY_UART_TX_PIN 33
#define DISPLAY_UART_RX_PIN 31
#endif
// -------------------------------------------------------------------------------------
// Firmware
// -------------------------------------------------------------------------------------
#define DISPLAY_FW_VERSION "1.6.5" // Firmware-Stand der P4-Display-Steuerung (Info-Seite)
// -------------------------------------------------------------------------------------
// Protokoll
// -------------------------------------------------------------------------------------
#define PROTO_EXPECTED_VERSION 2 // muss zur S3-Firmware passen (TOUCH_UART_PROTOCOL_VERSION)
// Die State-Zeile der S3 kann mit langem Status-/Profil-/SSID-Text ueber 2 KB gehen. Wird
// das Limit erreicht, verwirft der Client die GANZE Zeile und das Display friert auf dem
// letzten Stand ein -> Reserve deutlich groesser als der reale Bedarf (~2,3 KB).
#define PROTO_RX_LINE_MAX 4096 // max. eingehende Zeilenlaenge (Bytes)
#define PROTO_HEARTBEAT_MS 5000 // Intervall fuer 'ping' (S3-Timeout = 15 s)
#define PROTO_HELLO_RETRY_MS 2000 // erneuter 'hello'-Versuch, solange nicht verbunden
#define PROTO_LINK_TIMEOUT_MS 8000 // ohne empfangene Nachricht -> Verbindung gilt als tot
// -------------------------------------------------------------------------------------
// Display / LVGL
// -------------------------------------------------------------------------------------
// Querformat. 4,3": Panel ist physisch 480x800, per Rotation 270 (pins_config.h) -> 800x480.
// 7,0": Panel ist nativ 1024x600, keine Rotation noetig.
// 7" WS: Panel ist nativ 1280x720, keine Rotation noetig.
#if JC_PANEL_TYPE == WS_PANEL_7H
#define DISP_HOR_RES 1280
#define DISP_VER_RES 720
#elif JC_PANEL_TYPE == JC_PANEL_70
#define DISP_HOR_RES 1024
#define DISP_VER_RES 600
#else
#define DISP_HOR_RES 800
#define DISP_VER_RES 480
#endif
#define LVGL_TICK_MS 5
// Debug-Ausgaben ueber USB-CDC (nicht ueber den Display-UART!)
#define DBG_SERIAL Serial
#define DBG_BAUD 115200