Files
Dual-PID/JC_Display_Firmware/config.h
T
raw-designsandClaude Opus 5 b6155acafe feat: Cold Extraction warnt bei fehlender Waage (S3 5.3.4 / P4 1.1.2)
Ohne aktive und verbundene Waage greifen weder das Zielgewicht noch die
Stillstands-Erkennung — der Bezug endet dann erst nach der maximalen Bezugsdauer,
die damit faktisch zur Dosierung wird. Bisher passierte diese Degradierung
stillschweigend.

Die Funktion bleibt ohne Waage bewusst nutzbar (Zeitsteuerung als Rückfallebene),
damit ein kurzzeitig abgemeldeter HX711 die kalte Extraktion nicht komplett
blockiert. Angezeigt wird der Zustand jetzt an vier Stellen: dauerhafter
Warnhinweis auf /Brew-Control (Zielgewicht-Feld zusätzlich als "nur mit Waage
wirksam" beschriftet), Hinweiszeile unter dem Dashboard-Schalter, Statustext
"Cold Extraction bereit (ohne Waage: Zeitsteuerung)" und eine einmalige Meldung
beim Aktivieren.

P4: Statuszeile zeigt "ohne Waage, Ende nach Zeit" in Warnfarbe statt des blauen
Normalhinweises; Erklärzeile am Schalter und Parameter-Anzeige auf der Brew-Seite
ergänzen den Hinweis und nennen bei aktivem Modus ohne Waage die Zeit statt des
Zielgewichts. Neuer cxNotice-Code 4 (additiv, Protokoll bleibt v2).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 02:05:50 +02:00

93 lines
4.9 KiB
C

// =====================================================================================
// JC4880P443C-I-W - Touch-Display-Firmware fuer die Dual-PID-Siebtraegersteuerung
// config.h - zentrale Konfiguration (Pins, UART, Protokoll)
// =====================================================================================
//
// Ziel-Hardware: Guition JC4880P443C-I-W
// - MCU: ESP32-P4 (UI / LVGL)
// - WLAN: ESP32-C6 (hier NICHT genutzt - WLAN/Webinterface laufen auf der Hauptplatine)
// - Display: ST7701 (480 x 800 IPS, MIPI-DSI)
// - Touch: GT911 (kapazitiv, I2C)
// - 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
// -------------------------------------------------------------------------------------
// 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.
//
// Pins laut Schaltplan "4_USB&IO.png" (Expand-IO-Header JP1). Frei herausgefuehrte
// P4-GPIOs dort: 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.
// Gewaehlt: P4-TX = GPIO33, P4-RX = GPIO31.
// JP1 GPIO33 (P4 TX) ----> S3 GPIO44 (RX)
// JP1 GPIO31 (P4 RX) <---- S3 GPIO43 (TX)
// JP1 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.1.2" // 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: Panel ist physisch 480x800, per Rotation 90 (pins_config.h) -> 800x480.
#define DISP_HOR_RES 800
#define DISP_VER_RES 480
#define LVGL_TICK_MS 5
// Debug-Ausgaben ueber USB-CDC (nicht ueber den Display-UART!)
#define DBG_SERIAL Serial
#define DBG_BAUD 115200