diff options
| author | Luke Hoersten <[email protected]> | 2026-06-14 18:30:44 -0500 |
|---|---|---|
| committer | Luke Hoersten <[email protected]> | 2026-06-14 18:30:44 -0500 |
| commit | 186fd85422f99dfb59d89ae9338dc50627f7c3e5 (patch) | |
| tree | 59db53e2962dc815151b9e70a4d6f1ce53c22a98 /main/display.c | |
| parent | 4a6bbdb075a5e4f9910cb9b85e615ff8c50aa4ec (diff) | |
Tidy: delete dead code, inline single-use helpers, fix double-lock
Code-review pass after the M5 colour fix. -126 net lines (-215 / +89).
Dead code removed:
- display_fill, display_test_pattern — M3 bring-up self-tests, no callers
- net_eth_is_up — no callers
- nvs_config_reset — no callers (factory-reset gesture was removed earlier;
NVS wipe now goes through `idf.py erase-flash`)
Helpers inlined or collapsed (each had one call site):
- state_name / orientation_name — ternaries at the cJSON site
- fmt_bytes / fmt_uptime — inline scope in local_screens_show_info
- expected_dims (http_api) + effective_dims (local_screens) — merged into
viewport_state_effective_dims() in viewport_state, one canonical source
state_machine cleanup:
- arm_idle_timer_unlocked / disarm_idle_timer collapsed to one arm_idle_timer(ms)
that takes the snapshotted timeout (ms==0 disables). Removes the misleading
name and the second viewport_state lock acquisition per painted frame.
- state_machine_set + state_machine_frame_painted now snapshot state + idle_ms
under one lock.
mdns_service cleanup:
- snapshot_state / apply_hostname / apply_txt collapsed into a single
apply_state(include_hostname) helper; mdns_service_start grabs hostname
once for hostname_set + log instead of going under the lock three times.
http_api cleanup:
- POST /config brightness-changed path uses the local `bright` it already
validated instead of re-locking + re-reading st->brightness.
- Trimmed verbose bring-up comments (stack-size justification, M5 saga,
DSI shadow struct) to one line each — kept the load-bearing facts.
Smoke-tested on hardware: boot clean, display + JPEG + touch all up
([DJT]), info screen renders, no crashes.
Diffstat (limited to 'main/display.c')
| -rw-r--r-- | main/display.c | 57 |
1 files changed, 5 insertions, 52 deletions
diff --git a/main/display.c b/main/display.c index 13babdb..a704891 100644 --- a/main/display.c +++ b/main/display.c @@ -101,13 +101,8 @@ enum { #define TC_PPI_STARTPPI 0x0104 #define TC_DSI_STARTDSI 0x0204 -// Shadow of esp_lcd_dsi_bus_t. The IDF private struct is -// { int bus_id; mipi_dsi_hal_context_t hal; esp_pm_lock_handle_t pm_lock; } -// (esp-idf/components/esp_lcd/dsi/mipi_dsi_priv.h). We only need bus_id + -// hal to reach the LL/HAL APIs, so the trailing pm_lock is fine to ignore. -// If the IDF layout shifts in a future release this is the place that -// breaks first — guarded by ESP-IDF version is overkill until it actually -// breaks. +// Mirror of esp_lcd_dsi_bus_t (esp-idf/components/esp_lcd/dsi/mipi_dsi_priv.h) +// — needed to reach the HAL/LL APIs for the TC358762 bridge init. typedef struct { int bus_id; mipi_dsi_hal_context_t hal; @@ -424,12 +419,9 @@ esp_err_t display_wake(void) return err; } -// RGB565 → RGB888 in B,G,R byte order. The ESP32-P4 DSI engine + TC358762 -// bridge pipeline expects BGR on the wire for the panel's RGB channels — -// writing R first paints pure blue as solid red on the panel (verified -// with the M5 self-test: decoded buffer holds 0x001F, panel showed red). -// Symmetric pixels (white text on black) don't expose this; saturated -// channel inputs do. +// RGB565 → 24-bit pixel in B,G,R memory order — what the DSI engine + +// TC358762 + Pi panel pipeline expects (the "RGB888" label refers to the +// MIPI wire bit order, not byte position in PSRAM). static inline void rgb565_to_rgb888(uint16_t px, uint8_t *out) { out[0] = (uint8_t)(( px & 0x1F) * 255 / 31); // B @@ -437,22 +429,6 @@ static inline void rgb565_to_rgb888(uint16_t px, uint8_t *out) out[2] = (uint8_t)(((px >> 11) & 0x1F) * 255 / 31); // R } -esp_err_t display_fill(uint16_t rgb565) -{ - if (!s_up || !s_rot_buf) return ESP_ERR_INVALID_STATE; - uint8_t rgb[3]; - rgb565_to_rgb888(rgb565, rgb); - size_t n = PANEL_H_ACTIVE * PANEL_V_ACTIVE; - for (size_t i = 0; i < n; ++i) { - s_rot_buf[i * 3 + 0] = rgb[0]; - s_rot_buf[i * 3 + 1] = rgb[1]; - s_rot_buf[i * 3 + 2] = rgb[2]; - } - return esp_lcd_panel_draw_bitmap(s_panel, 0, 0, - PANEL_H_ACTIVE, PANEL_V_ACTIVE, - s_rot_buf); -} - esp_err_t display_present_rgb565(const uint16_t *src, uint16_t src_w, uint16_t src_h) @@ -463,8 +439,6 @@ esp_err_t display_present_rgb565(const uint16_t *src, viewport_orientation_t orient = viewport_state_get()->orientation; viewport_state_unlock(); - if (!s_rot_buf) return ESP_ERR_INVALID_STATE; - if (orient == VIEWPORT_ORIENTATION_LANDSCAPE) { if (src_w != PANEL_H_ACTIVE || src_h != PANEL_V_ACTIVE) return ESP_ERR_INVALID_SIZE; @@ -489,24 +463,3 @@ esp_err_t display_present_rgb565(const uint16_t *src, PANEL_H_ACTIVE, PANEL_V_ACTIVE, s_rot_buf); } - -esp_err_t display_test_pattern(void) -{ - if (!s_up || !s_rot_buf) return ESP_ERR_INVALID_STATE; - static const uint16_t bars[8] = { - 0xFFFF, 0xFFE0, 0x07FF, 0x07E0, - 0xF81F, 0xF800, 0x001F, 0x0000, - }; - const int bar_w = PANEL_H_ACTIVE / 8; - for (int y = 0; y < PANEL_V_ACTIVE; ++y) { - for (int x = 0; x < PANEL_H_ACTIVE; ++x) { - int b = x / bar_w; - if (b > 7) b = 7; - size_t idx = ((size_t)y * PANEL_H_ACTIVE + x) * 3; - rgb565_to_rgb888(bars[b], &s_rot_buf[idx]); - } - } - return esp_lcd_panel_draw_bitmap(s_panel, 0, 0, - PANEL_H_ACTIVE, PANEL_V_ACTIVE, - s_rot_buf); -} |
