tools/k1_harness: one CLI over existing COM/BLE/RTT scripts covering
App SysEx 01-06, BLE smoke, TM1629/TM1617 key inject, 1/2/3.bin pack
checks with pick/outro regression, and UI nav (log status/TAP/DUMP).
Unified PASS/FAIL/SKIP/SENT markdown report to Doc/reports.
firmware hooks in app_log.c: 'tm1617 key N', 'adc key N on|off',
'tone bin2 [idx]', 'chord key N hold' (sticky inject survives physical
idle scan so normal-mode pick tests can hold a chord).
Co-authored-by: Cursor <cursoragent@cursor.com>
Require left-hand pad held (PressFlag) before pick starts; skip the default I-chord fallback in normal mode. Release (key 0) stops AutoBand immediately instead of looping.
Co-authored-by: Cursor <cursoragent@cursor.com>
Ignore TM1629 keys 0-21 in universal so pad no longer changes KEY_ID or arms OutTime_Stop; keep tap-tempo and stop. Clear stale KEY_ID/PressFlag when entering universal tab.
Co-authored-by: Cursor <cursoragent@cursor.com>
Exit piece mode before Postamble so universal chord loops can switch into the style outro stage once 3.bin has PostambleMIDI.
Co-authored-by: Cursor <cursoragent@cursor.com>
AutoBand ignores input octave, so shift engine MIDI output by -12 for those chords (except drums) to keep the range from low #IV up to natural IV.
Co-authored-by: Cursor <cursoragent@cursor.com>
When switching from a longer title to a shorter one, the old gradient-only clear left uncovered glyph fragments outside the pill bounds.
Co-authored-by: Cursor <cursoragent@cursor.com>
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>