Add Waveshare ESP32-S3-Touch-AMOLED-1.8 (368×448) board support
Port the firmware to a second Waveshare AMOLED board variant alongside
the original 2.16" / 480×480. Selection is at build time via a board
macro; both envs continue to build and flash independently.
Hardware delta vs AMOLED-2.16:
* Display: SH8601 QSPI (vs CO5300), 368×448 portrait (vs 480² square),
SCLK on GPIO 11 (vs 38), RST routed through an XCA9554 I/O expander
(vs direct GPIO).
* Touch: FT3168 @ 0x38 (vs CST9220 @ 0x5A). Driven by a ~30-line
inline FocalTech-protocol reader in main.cpp — Waveshare's
Arduino_DriveBus library is GPLv3 and would force the project's
license, which the README explicitly avoids.
* I/O expander: new XCA9554/PCA9554 @ I2C 0x20 gates LCD_RST, TP_RST,
audio amp enable, and the PWR button. Wrapped in io_expander.{h,cpp}.
Must initialize BEFORE display/touch or both stay in reset.
* PMU + IMU: same AXP2101 + QMI8658 as 2.16, so power.cpp/imu.cpp
largely reuse. IMU is initialized for I2C bus health but rotation
is fixed at 0° (the portrait panel doesn't benefit from auto-rotate
and the strip-rotation CPU path is excluded entirely).
* Buttons: only BOOT (GPIO 0) is a direct GPIO; PWR is read via
XCA9554 EXIO4 polling. No third button — the AMOLED-2.16's
Shift+Tab key (GPIO 18) is dropped for this board.
* Flash: 16MB (vs 8MB), partition table set to default_16MB.csv.
Code structure:
* display_cfg.h hosts a #ifdef BOARD_AMOLED_18 / #else / #endif split
with a PlatformDisplay typedef so call sites elsewhere stay clean.
* main.cpp, power.cpp, ui.cpp, splash.cpp gate board-specific bits on
the same macro. Layout constants (panel heights, content Y, font
choices on the Bluetooth screen) compress for the 368×448 portrait
footprint so two usage panels + bottom animation label fit without
horizontal overflow.
* Splash scales the 20×20 pixel-art grid to 360×360 (CELL=18 vs 24)
and centers in the portrait canvas.
* Old AMOLED-2.16 env is unchanged at the source level (gated under
#ifndef BOARD_AMOLED_18) and continues to compile + flash on the
original hardware.
CLAUDE.md updated with the two-board pin maps, build/flash commands
for both envs (macOS + Linux device paths), and the per-board gotchas.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.7
parent
57e5d73c6e
commit
f3ed2425bf
+10
-2
@@ -2,13 +2,21 @@
|
||||
#include "splash_animations.h"
|
||||
#include "theme.h"
|
||||
#include "usage_rate.h"
|
||||
#include "display_cfg.h"
|
||||
#include <Arduino.h>
|
||||
#include <string.h>
|
||||
#include <esp_heap_caps.h>
|
||||
|
||||
// 20x20 grid scaled 24x to fill 480x480
|
||||
// 20x20 grid. CELL chosen per board so the canvas fits the screen
|
||||
// (must satisfy GRID*CELL <= min(LCD_WIDTH, LCD_HEIGHT)).
|
||||
// AMOLED-2.16 (480x480 square): CELL=24 → 480x480 fills screen
|
||||
// AMOLED-1.8 (368x448 portrait): CELL=18 → 360x360 centered, vertical margin
|
||||
#define GRID 20
|
||||
#ifdef BOARD_AMOLED_18
|
||||
#define CELL 18
|
||||
#else
|
||||
#define CELL 24
|
||||
#endif
|
||||
#define CANVAS_W (GRID * CELL)
|
||||
#define CANVAS_H (GRID * CELL)
|
||||
|
||||
@@ -99,7 +107,7 @@ void splash_init(lv_obj_t *parent) {
|
||||
}
|
||||
|
||||
splash_container = lv_obj_create(parent);
|
||||
lv_obj_set_size(splash_container, 480, 480);
|
||||
lv_obj_set_size(splash_container, LCD_WIDTH, LCD_HEIGHT);
|
||||
lv_obj_set_pos(splash_container, 0, 0);
|
||||
lv_obj_set_style_bg_color(splash_container, THEME_BG, 0);
|
||||
lv_obj_set_style_bg_opa(splash_container, LV_OPA_COVER, 0);
|
||||
|
||||
Reference in New Issue
Block a user