upleb.uk

Public git repos — served from a NIP-34 GRASP relay at git.upleb.uk

summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
authorYour Name <you@example.com>2026-05-18 18:34:33 +0530
committerYour Name <you@example.com>2026-05-18 18:34:33 +0530
commit067a5700e26518d9a3f8bd92966c8957d17f0817 (patch)
tree1379c544731f0edd9c52016c117221085713887d /Makefile
parent8f00db9d57e9e06df7fbf3e7285ae9256d21d716 (diff)
Document QSPI protocol findings and display fix plan
- 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
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile43
1 files changed, 40 insertions, 3 deletions
diff --git a/Makefile b/Makefile
index 044ad6b..05c004e 100644
--- a/Makefile
+++ b/Makefile
@@ -9,6 +9,7 @@ PROJECT_DIR := $(shell pwd)
9BUILD_DIR := $(PROJECT_DIR)/build 9BUILD_DIR := $(PROJECT_DIR)/build
10PORT_A ?= /dev/ttyACM1 10PORT_A ?= /dev/ttyACM1
11PORT_B ?= /dev/ttyACM2 11PORT_B ?= /dev/ttyACM2
12PORT_C ?= /dev/ttyACM0
12PORT ?= $(PORT_A) 13PORT ?= $(PORT_A)
13BAUD ?= 460800 14BAUD ?= 460800
14TARGET ?= esp32s3 15TARGET ?= esp32s3
@@ -45,6 +46,14 @@ define require_lock_b
45 fi 46 fi
46endef 47endef
47 48
49define require_lock_c
50 @if [ ! -f "$(HARDWARE_LOCK_DIR)/board-c.lock" ]; then \
51 echo "$(RED)$(BOLD)Board C not locked — run 'make lock-c PHASE=\"description\"' first$(RESET)"; \
52 echo "$(YELLOW)Another LLM session may be using Board C.$(RESET)"; \
53 exit 1; \
54 fi
55endef
56
48define _require_board_lock 57define _require_board_lock
49 @if [ ! -f "$(HARDWARE_LOCK_DIR)/board-$(BOARD).lock" ]; then \ 58 @if [ ! -f "$(HARDWARE_LOCK_DIR)/board-$(BOARD).lock" ]; then \
50 echo "$(RED)$(BOLD)Board $(BOARD) not locked — run 'make lock-$(BOARD) PHASE=\"description\"' first$(RESET)"; \ 59 echo "$(RED)$(BOLD)Board $(BOARD) not locked — run 'make lock-$(BOARD) PHASE=\"description\"' first$(RESET)"; \
@@ -83,7 +92,7 @@ endef
83.PHONY: tokens wallet-setup wallet-info wallet-balance mint-token send-token 92.PHONY: tokens wallet-setup wallet-info wallet-balance mint-token send-token
84.PHONY: clean erase-nvs reset serial-log bootstrap-config 93.PHONY: clean erase-nvs reset serial-log bootstrap-config
85.PHONY: cvm-pubkey cvm-test-tool cvm-announce 94.PHONY: cvm-pubkey cvm-test-tool cvm-announce
86.PHONY: lock-a lock-b unlock-a unlock-b force-unlock-a force-unlock-b lock-status 95.PHONY: lock-a lock-b lock-c unlock-a unlock-b unlock-c force-unlock-a force-unlock-b force-unlock-c lock-status
87 96
88help: 97help:
89 @echo "TollGate ESP32 — Makefile" 98 @echo "TollGate ESP32 — Makefile"
@@ -186,7 +195,7 @@ setup:
186 195
187flash: build 196flash: build
188 @echo "=== Flashing to $(PORT) ===" 197 @echo "=== Flashing to $(PORT) ==="
189 @echo "$(RED)Error: use 'make flash-a' or 'make flash-b' (per-board lock required)$(RESET)" 198 @echo "$(RED)Error: use 'make flash-a', 'make flash-b', or 'make flash-c' (per-board lock required)$(RESET)"
190 @exit 1 199 @exit 1
191 200
192flash-a: build 201flash-a: build
@@ -199,6 +208,11 @@ flash-b: build
199 @echo "=== Flashing to $(PORT_B) (Board B) ===" 208 @echo "=== Flashing to $(PORT_B) (Board B) ==="
200 . $(IDF_PATH)/export.sh && idf.py -p $(PORT_B) -b $(BAUD) flash 209 . $(IDF_PATH)/export.sh && idf.py -p $(PORT_B) -b $(BAUD) flash
201 210
211flash-c: build
212 $(call require_lock_c)
213 @echo "=== Flashing to $(PORT_C) (Board C / Display) ==="
214 . $(IDF_PATH)/export.sh && idf.py -p $(PORT_C) -b $(BAUD) flash
215
202build: 216build:
203 @echo "=== Building $(TARGET) ===" 217 @echo "=== Building $(TARGET) ==="
204 . $(IDF_PATH)/export.sh && \ 218 . $(IDF_PATH)/export.sh && \
@@ -213,6 +227,10 @@ monitor-b:
213 $(call require_lock_b) 227 $(call require_lock_b)
214 . $(IDF_PATH)/export.sh && idf.py -p $(PORT_B) monitor 228 . $(IDF_PATH)/export.sh && idf.py -p $(PORT_B) monitor
215 229
230monitor-c:
231 $(call require_lock_c)
232 . $(IDF_PATH)/export.sh && idf.py -p $(PORT_C) monitor
233
216# ────────────────────────────────────────────── 234# ──────────────────────────────────────────────
217# Testing 235# Testing
218# ────────────────────────────────────────────── 236# ──────────────────────────────────────────────
@@ -379,6 +397,9 @@ lock-a: ## Acquire Board A lock (set PHASE="description")
379lock-b: ## Acquire Board B lock (set PHASE="description") 397lock-b: ## Acquire Board B lock (set PHASE="description")
380 $(call _acquire_lock,board-b) 398 $(call _acquire_lock,board-b)
381 399
400lock-c: ## Acquire Board C lock (set PHASE="description")
401 $(call _acquire_lock,board-c)
402
382unlock-a: ## Release Board A lock 403unlock-a: ## Release Board A lock
383 @if [ ! -f "$(HARDWARE_LOCK_DIR)/board-a.lock" ]; then \ 404 @if [ ! -f "$(HARDWARE_LOCK_DIR)/board-a.lock" ]; then \
384 echo "$(YELLOW)Board A not locked.$(RESET)"; exit 0; \ 405 echo "$(YELLOW)Board A not locked.$(RESET)"; exit 0; \
@@ -393,6 +414,13 @@ unlock-b: ## Release Board B lock
393 rm -f $(HARDWARE_LOCK_DIR)/board-b.lock; \ 414 rm -f $(HARDWARE_LOCK_DIR)/board-b.lock; \
394 echo "$(GREEN)Board B lock released.$(RESET)" 415 echo "$(GREEN)Board B lock released.$(RESET)"
395 416
417unlock-c: ## Release Board C lock
418 @if [ ! -f "$(HARDWARE_LOCK_DIR)/board-c.lock" ]; then \
419 echo "$(YELLOW)Board C not locked.$(RESET)"; exit 0; \
420 fi; \
421 rm -f $(HARDWARE_LOCK_DIR)/board-c.lock; \
422 echo "$(GREEN)Board C lock released.$(RESET)"
423
396force-unlock-a: ## Force-release Board A lock 424force-unlock-a: ## Force-release Board A lock
397 @if [ ! -f "$(HARDWARE_LOCK_DIR)/board-a.lock" ]; then \ 425 @if [ ! -f "$(HARDWARE_LOCK_DIR)/board-a.lock" ]; then \
398 echo "$(YELLOW)Board A not locked.$(RESET)"; exit 0; \ 426 echo "$(YELLOW)Board A not locked.$(RESET)"; exit 0; \
@@ -411,8 +439,17 @@ force-unlock-b: ## Force-release Board B lock
411 rm -f $(HARDWARE_LOCK_DIR)/board-b.lock; \ 439 rm -f $(HARDWARE_LOCK_DIR)/board-b.lock; \
412 echo "$(GREEN)Board B force-released.$(RESET)" 440 echo "$(GREEN)Board B force-released.$(RESET)"
413 441
442force-unlock-c: ## Force-release Board C lock
443 @if [ ! -f "$(HARDWARE_LOCK_DIR)/board-c.lock" ]; then \
444 echo "$(YELLOW)Board C not locked.$(RESET)"; exit 0; \
445 fi; \
446 echo "$(RED)$(BOLD)WARNING: Force-releasing Board C!$(RESET)"; \
447 cat $(HARDWARE_LOCK_DIR)/board-c.lock | sed 's/^/ /'; \
448 rm -f $(HARDWARE_LOCK_DIR)/board-c.lock; \
449 echo "$(GREEN)Board C force-released.$(RESET)"
450
414lock-status: ## Show all board lock statuses 451lock-status: ## Show all board lock statuses
415 @for board in a b; do \ 452 @for board in a b c; do \
416 if [ -f "$(HARDWARE_LOCK_DIR)/board-$$board.lock" ]; then \ 453 if [ -f "$(HARDWARE_LOCK_DIR)/board-$$board.lock" ]; then \
417 echo "$(YELLOW)Board $$board: LOCKED$(RESET)"; \ 454 echo "$(YELLOW)Board $$board: LOCKED$(RESET)"; \
418 cat $(HARDWARE_LOCK_DIR)/board-$$board.lock | sed 's/^/ /'; \ 455 cat $(HARDWARE_LOCK_DIR)/board-$$board.lock | sed 's/^/ /'; \