| Age | Commit message (Collapse) | Author |
|
- Remove touchscreen WiFi setup (touch.c, keyboard.c, wifi_setup.c from build)
- Remove offscreen buffer and landscape rotation from axs15231b driver
- Add /setup HTML page with WiFi scan/connect via captive portal
- Add /wifi/scan, /wifi/connect, /wifi/status HTTP endpoints
- Display shows SETUP_PENDING (QR + SSID + setup URL) when unconfigured
- Display shows ERROR with setup URL when upstream is down
- All 101 unit tests pass, builds and flashes to Board C
|
|
The framebuffer was using s_width as row stride, but s_width changes
after rotation (320→480). This caused buffer overflows and black screen
in landscape mode. Now uses fixed stride=480 with 480*480*2 allocation.
|
|
highlight feedback
- Render functions use axs15231b_get_width/height() instead of hardcoded coords
- render_wifi_setup_list: dynamic item widths, screen-relative cancel button
- render_wifi_setup_password: dynamic field/eye/keyboard from kb_get_layout()
- render_wifi_setup_result: centered on screen, dynamic button placement
- handle_wifi_setup_touch: matching dynamic hit areas, highlight_rect() feedback
- Rotation lifecycle: enter_wifi_setup_rotation/exit wired into all entry/exit paths
- display_enter_wifi_setup + READY/ERROR touch + SUCCESS auto-return + LIST cancel
- Added kb_result_t typedef to keyboard.h (was only in .c)
- Fixed test_keyboard.c: use computed offsets from kb_layout_t defaults
- All 101 unit tests pass (touch:19, keyboard:46, wifi_setup:36)
|
|
Root cause: missing RAMWR (0x2C) command before pixel data transfer.
Without RAMWR, the display didn't know to write data into the RAM window
set by CASET/RASET, causing wrapping and double-vision artifacts.
- Add qspi_write_command(RAMWR) before pixel data in flush()
- Use internal DMA byte-swap buffer (MALLOC_CAP_DMA) for correct colors
- Reduce font scale: TollGate scale 2, starting... scale 1
- Centered text positions for 320x480 portrait
Display now shows: blue TollGate + yellow starting... on black
|
|
- Allocate 4KB internal DMA buffer (MALLOC_CAP_DMA) for pixel byte-swap
- Byte-swap from PSRAM framebuffer into DMA buffer in 2048-pixel chunks
- Matches ArduinoGFX approach: separate DMA buffer avoids PSRAM cache issues
- Restore render-on-change logic (only redraw on state/QR mode change)
- Use saturated colors: cyan 0x07FF for title, yellow 0xFFE0 for subtitle
- Remove debug flush log message
|
|
- DISPLAY_FIX_PLAN.md: root cause analysis, byte-order mismatch,
PSRAM cache coherency issue, reference implementations studied
- axs15231b.c: QSPI protocol rewrite with correct ArduinoGFX framing
(cmd=0x02 for regs, cmd=0x32/addr=0x003C00 for pixels)
- display.c: portrait centering for 320x480, render-on-change logic
- Makefile: Board C support (flash-c, lock-c)
- axs15231b.h: QSPI command/address constants
Display shows recognizable text, colors wrong due to byte-swap
|
|
The JC3248W535 uses Quad SPI with 4 data lines (D0-D3), not standard
SPI. The previous driver only wired D0 (MOSI), causing garbled pixel
data while register writes (single SPI) worked partially.
Changes:
- Wire all 4 data pins in spi_bus_config_t (data0-data3)
- Set SPI_DEVICE_HALFDUPLEX for QSPI output mode
- Send pixel data with SPI_TRANS_MODE_QIO flag for 4-bit parallel transfer
- Register writes (init, CASET, RASET, RAMWR cmd) remain single SPI
|
|
Components were untracked on master. Adding to feature/display-fix
branch so they are version-controlled before making QSPI fixes.
|