Index 255 does not mean "auto-assign" in the firmware.
Must use combo_data.len() as next index (matching egui behavior).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Root cause of keyboard malfunction: binary SET/DELETE commands
followed by text QUERY commands confused the firmware state machine.
Changes:
- All create/delete (combo, leader, KO) back to TEXT protocol
(matching stable egui desktop behavior)
- TD_SET kept binary (isolated, no text query after)
- 50ms delay between all consecutive serial commands
- Removed dead v2 check in refresh_advanced
- Added delay between KEYSTATS? and BIGRAMS? queries
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
TAMA? and AUTOSHIFT? commands were causing keyboard to malfunction.
Added 50ms delay between serial queries to prevent buffer corruption.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Combo, Leader, KO create/delete all use send_binary() now:
- COMBO_SET (0x60), COMBO_DELETE (0x62)
- LEADER_SET (0x70), LEADER_DELETE (0x72)
- KO_SET (0x91), KO_DELETE (0x93)
Text protocol commands (COMBOSET, COMBODEL, etc.) were not working
with the v2 firmware.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Combo picker: pass key index directly instead of relying on selected_key_index
- TD actions: use DarkButton for consistent visibility
- Combo Add: validation message when keys not picked
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Tap Dance:
- Each TD action is now a clickable button that opens the key selector
- Clicking an action -> pick key from popup -> sends TD_SET binary to firmware
- Labels show 1-tap / 2-tap / 3-tap / hold columns
Combo creation:
- Added validation: "Pick both keys first" message if keys not selected
- Debug log for COMBOSET command
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- button-bg lighter (#565970) to stand out from bg-secondary
- Border on DarkButton and DarkComboBox (#6272a4)
- Primary button: dark text on purple bg
- Tab titles: inactive #9a9ebb (was #6272a4), 13px, bold 700 when active
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- DarkComboBox: PopupWindow dropdown with Dracula colors, replaces all std ComboBox
- DarkTab: custom tab bar with purple underline, replaces std TabWidget
- All 7 .slint files updated, zero std-widgets Button/ComboBox/TabWidget remaining
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Custom DarkButton component with Dracula theme colors:
- bg-secondary base, button-hover on hover
- primary variant with accent-purple
- Disabled state with reduced opacity
- Consistent 28px height, 4px border-radius
Also fixes PickDarkButton/KeyDarkButton naming errors from agent.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Full port of the KaSe/KeSp split keyboard configurator from egui to Slint:
- 6 tabs: Keymap, Advanced, Macros, Stats, Settings, Flash
- Responsive keyboard view with scale-to-fit and key rotations
- Key selector popup with categorized grid, MT/LT builders, hex input
- Combo key picker with inline keyboard visual
- Macro step builder with visual tags
- Serial communication via background threads + mpsc polling
- Heatmap overlay with blue-yellow-red gradient
- OTA flasher with prog port VID filtering and partition selector
- WPM polling, Tamagotchi, Autoshift controls
- Dracula theme matching egui version
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>