Bump firmware version after BT recv stack/log fixes and pitch/chord bounds so Phoenix Atelier map/LED traffic no longer stack-smashes the MCU.
Co-authored-by: Cursor <cursoragent@cursor.com>
Enlarge BT recv stack, move large handlers/log buffers off the stack, clamp key indexes, and yield in W25Q busy-wait so BLE protocol tests stay stable.
Co-authored-by: Cursor <cursoragent@cursor.com>
Update pack/publish to enforce 41KB song limit, verify 1/2/3.bin at fixed addresses, and emit .res aliases for the tone and ALL extflash images.
Co-authored-by: Cursor <cursoragent@cursor.com>
Variable 2.bin length previously moved 3.bin; firmware still read 0xA71AC and saw zeros. Pack now pads to the fixed slot and publish verifies DAB headers before shipping ALL.res.
Co-authored-by: Cursor <cursoragent@cursor.com>
Log Flash magic on load failure, expose RTT flash bin3, and document the 0903 pack offset for the universal bank.
Co-authored-by: Cursor <cursoragent@cursor.com>
The ROW_BG full-width fill over the universal row top corners showed as a second separator under the status bar; source art no longer needs it.
Co-authored-by: Cursor <cursoragent@cursor.com>
Matches 0902-07: restore is a drill-in row with thin > (ICON_CHEVRON), not the prev/next filled triangle.
Co-authored-by: Cursor <cursoragent@cursor.com>
Fixes the left-biased index+name layout, unifies index-name gap across rows, and shifts play-section numbers +2px per UI markup.
Co-authored-by: Cursor <cursoragent@cursor.com>
Point system-settings rows at the correct Flash icons, keep Main/UI alive across soft-off, and expose git build id for 01 0C with matching BLE tests.
Co-authored-by: Cursor <cursoragent@cursor.com>
Default --unpair on Windows, probe/reconnect on first timeout, resync FrameParser on duplicate F0, and retry query once.
Co-authored-by: Cursor <cursoragent@cursor.com>
Encode 01 07 UID as hex ASCII and use 01 0F (keep 01 FF alias) so high-bit bytes are not dropped as timestamps.
Co-authored-by: Cursor <cursoragent@cursor.com>
TaskBTRecvThread previously started only after mode select, so GATT SysEx never reached the parser until then; verified BLE-MIDI 01 01 now replies with GATT notify.
Co-authored-by: Cursor <cursoragent@cursor.com>
Drop the hand-tuned/mislabeled variants; use the 9pt Song bitmap that matched the first-version 弦音色选择 look.
Co-authored-by: Cursor <cursoragent@cursor.com>
Keep GBK D4F1 mapping but revert glyph data to the pre-regeneration art that matched the known-good UI look.
Co-authored-by: Cursor <cursoragent@cursor.com>
Label-size 择 was inset and hard to read; scale the clear 16px bitmap into each size so it matches neighbors edge-to-edge.
Co-authored-by: Cursor <cursoragent@cursor.com>
Font table had wrongly mapped GBK 议 (D2E9) as 择; remap to D4F1 and regenerate the MiSans glyph so 弦音色选择/歌曲选择 render fully.
Co-authored-by: Cursor <cursoragent@cursor.com>
Replace settings-hub mixer/gear bitmaps, and show Boot IAP screen from UI0902_FLASH_MODE in external Flash.
Co-authored-by: Cursor <cursoragent@cursor.com>
Reuse the unused Language slot as BluetoothSW, sync top-bar icon from the saved switch, and keep factory restore defaulting Bluetooth to on.
Co-authored-by: Cursor <cursoragent@cursor.com>
Raise ascii_115 '4' to match '5' height, nudge auto-off digits down 2px, and align version box / restore chevron to the shared val_x2 right edge.
Co-authored-by: Cursor <cursoragent@cursor.com>
Unfocused FillRoundRect left blue pixels from the prior gradient roundrect; erase the full card box to page background first.
Co-authored-by: Cursor <cursoragent@cursor.com>
Use correct BT/restore glyphs and triangle steppers, put version periods on the baseline, and center auto-off minutes between the triangles.
Co-authored-by: Cursor <cursoragent@cursor.com>
Use a lighter gray-blue at 2px so top and bottom dividers stay matched and readable on the dark background.
Co-authored-by: Cursor <cursoragent@cursor.com>
Put the status divider at y=36 and start mode rows at CARD_Y=48 so Universal matches transpose/tempo tops with draft row height 88 and pitch 92.
Co-authored-by: Cursor <cursoragent@cursor.com>
Bottom fill started at y=263 and erased the lower 2px of the r=6 roundrects, so bottoms looked flatter than tops.
Co-authored-by: Cursor <cursoragent@cursor.com>