Dieselbe Display-Firmware bedient jetzt wahlweise das bisherige 4,3-Zoll-Panel JC4880P443C-I-W (ST7701, 480x800) oder das neue 7-Zoll-Panel JC1060P470C-I-W (JD9165, 1024x600). Umgeschaltet wird über JC_PANEL_TYPE in config.h (JC_PANEL_43 / JC_PANEL_70) oder per Compiler-Flag -DJC_PANEL_TYPE=70. Vorgabe bleibt das 4,3-Zoll-Panel; dessen Verhalten ändert sich nicht. - src/lcd/esp_lcd_jd9165.c/.h aus dem Hersteller-Paket übernommen; board_bringup.c legt je nach Panel DSI-Bus, DPI-Zeitbasis und Herstellertreiber an. - pins_config.h liefert Auflösung, LCD-Reset (4,3": GPIO5, 7,0": GPIO27) und Ausrichtung panelabhängig. Das 7-Zoll-Panel ist nativ Querformat, deshalb entfallen dort die 270-Grad-Rotation und die PPA-Beschleunigung. - lvgl_port_v9.h bezieht LVGL_PORT_H/V_RES aus pins_config.h statt fest 480/800. - Der GT911 des 7-Zöllers meldet Rohkoordinaten im Raster 800x480 statt 1024x600. Die Umrechnung hängt am process_coordinates-Hook von esp_lcd_touch, damit die Herstellerdatei esp_lcd_touch_gt911.c unverändert bleibt. - ui.cpp rechnet nicht mehr mit fest verdrahteten 480 Pixeln Höhe, sondern mit DISP_VER_RES. Layout und Schriften bleiben sonst unverändert. - Hersteller-Paket des 7-Zöllers unter JC_Display_Firmware_7zoll/ abgelegt; Werkzeuge, Archive und mitgelieferte Fremdbibliotheken per .gitignore ausgeschlossen (587 MB im Original, 21 MB im Repo). Kompiliertest ESP32-P4, beide Varianten: 4,3": 1.173.768 B Flash (37 %), 322.880 B RAM (98 %) 7,0": 1.138.752 B Flash (36 %), 322.600 B RAM (98 %) Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
132 lines
6.7 KiB
C
132 lines
6.7 KiB
C
// =====================================================================================
|
|
// JC-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)
|
|
//
|
|
// Gemeinsam: ESP32-C6 (hier NICHT genutzt - WLAN/Webinterface laufen auf der
|
|
// Hauptplatine), 16 MB Flash, PSRAM aktiviert, Audio ES8311 (optional).
|
|
//
|
|
// Diese Firmware ist ein reiner UART-Client. Quelle der Wahrheit ist die Hauptplatine
|
|
// (ESP32-S3, Dual_PID_FastHeatUp.ino). Siehe Doku/JC-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 und pins_config.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)
|
|
// Umschalten entweder hier oder per Compiler-Flag -DJC_PANEL_TYPE=JC_PANEL_70.
|
|
// -------------------------------------------------------------------------------------
|
|
#define JC_PANEL_43 43
|
|
#define JC_PANEL_70 70
|
|
|
|
#ifndef JC_PANEL_TYPE
|
|
#define JC_PANEL_TYPE JC_PANEL_43
|
|
#endif
|
|
|
|
#if (JC_PANEL_TYPE != JC_PANEL_43) && (JC_PANEL_TYPE != JC_PANEL_70)
|
|
#error "JC_PANEL_TYPE muss JC_PANEL_43 oder JC_PANEL_70 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 Panels: gleiche Pinwahl P4-TX = GPIO33, P4-RX = GPIO31.
|
|
// GPIO33 (P4 TX) ----> S3 GPIO44 (RX)
|
|
// GPIO31 (P4 RX) <---- S3 GPIO43 (TX)
|
|
// GND ---- S3 GND
|
|
#define DISPLAY_UART_PORT Serial1
|
|
#define DISPLAY_UART_BAUDRATE 230400
|
|
#define DISPLAY_UART_TX_PIN 33
|
|
#define DISPLAY_UART_RX_PIN 31
|
|
|
|
// -------------------------------------------------------------------------------------
|
|
// Firmware
|
|
// -------------------------------------------------------------------------------------
|
|
#define DISPLAY_FW_VERSION "1.5.0" // 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.
|
|
#if 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
|