Dieselbe P4-Firmware läuft jetzt zusätzlich auf einem Waveshare ESP32-P4-Pico mit dem Waveshare 7inch DSI LCD (H) (1280x720). Auswahl über JC_PANEL_TYPE in config.h (neu: WS_PANEL_7H, ab jetzt Vorgabe); JC_PANEL_43 und JC_PANEL_70 bleiben unverändert. - board_bringup.c: DSI-Bus, DBI-Kommandokanal und DPI-Panel werden ohne Hersteller-Panel-Treiber direkt angelegt (PLL_F20M, 2 Lanes zu 1250 Mbit/s, 80 MHz DPI, Austastlücken 64/64/64, RGB888). Panel-Freigabe und Helligkeit über die Bridge auf I2C 0x45; Licht erst nach dem Start der DSI-Ausgabe. - lv_conf.h leitet LV_COLOR_DEPTH aus JC_PANEL_TYPE ab (24 Bit für das Waveshare-Panel, 16 Bit für die JC-Panels) und liest dafür config.h. display_hal.cpp sichert das mit static_assert ab. - Touch GT9271 (I2C 0x14) über den GT911-Treiber; Achsentausch und Begrenzung auf die Bildfläche im process_coordinates-Hook. - pins_config.h: Auflösung, DSI-Zeitbasis und Touch-Umrechnung als WS7_*-Werte. - README und Changelog ergänzt. Die UART-Pins zum S3 stehen für das Waveshare-Board noch auf den JC-Werten (GPIO33/31) und müssen nach dem Header-Aufdruck gesetzt werden. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DxAvqVnrY6YSoGFrNGeRTi
41 lines
1.9 KiB
C
41 lines
1.9 KiB
C
// =====================================================================================
|
|
// display_hal.h - Board-/Panel-/Touch-Anbindung (ST7701 / JD9165 / Waveshare-DSI) + LVGL-Glue
|
|
// =====================================================================================
|
|
// Einziger board-spezifischer Teil. Baut auf der HERSTELLER-LVGL-PORTIERUNG des
|
|
// JC4880P443C-I-W auf (1-Demo/arduino_examples/lvgl_v9_sw_rotation):
|
|
// - MIPI-DSI ST7701 (480x800), JD9165 (1024x600) oder Waveshare 7" (H) (1280x720)
|
|
// - Auswahl ueber JC_PANEL_TYPE
|
|
// - GT911- bzw. GT9271-Touch (I2C SDA=7/SCL=8); Backlight GPIO23 bzw. Bridge-Register
|
|
// - LVGL laeuft in einem EIGENEN FreeRTOS-Task -> UI-Zugriffe von aussen muessen
|
|
// mit hal_lock()/hal_unlock() (= lvgl_port_lock/unlock) geschuetzt werden.
|
|
//
|
|
// Schalter JC_USE_REAL_PANEL:
|
|
// 0 = Stub-Modus (kompiliert OHNE Hersteller-BSP; eigenes minimal-LVGL, rendert ins
|
|
// Leere). Zum Testen von Protokoll/UART/Logik am Schreibtisch.
|
|
// 1 = echte Hardware: erwartet die Hersteller-BSP-Dateien IM SKETCH-ORDNER:
|
|
// pins_config.h, lvgl_port_v9.h/.c, src/lcd/*, src/touch/*
|
|
// (aus arduino_examples/lvgl_v9_sw_rotation kopieren). Siehe README.md.
|
|
// =====================================================================================
|
|
|
|
#pragma once
|
|
|
|
#include "protocol_client.h"
|
|
|
|
#ifndef JC_USE_REAL_PANEL
|
|
#define JC_USE_REAL_PANEL 0
|
|
#endif
|
|
|
|
// Initialisiert LVGL + Panel + Touch und baut das Dashboard auf (ui_init unter Lock).
|
|
void hal_init(ProtocolClient* client);
|
|
|
|
// In loop() aufrufen. Realer Panel-Modus: leer (LVGL hat eigenen Task).
|
|
// Stub-Modus: ruft lv_timer_handler().
|
|
void hal_loop();
|
|
|
|
// LVGL-Mutex (im realen Modus zwingend vor jedem UI-Zugriff aus fremden Tasks).
|
|
void hal_lock();
|
|
void hal_unlock();
|
|
|
|
// Display-Hintergrundbeleuchtung setzen (0..100 %). Stub-Modus: ohne Wirkung.
|
|
void hal_backlight(int percent);
|