From 33adcc5aa4bd487ff4df179e5254792c546b69e2 Mon Sep 17 00:00:00 2001 From: Mae PUGIN <48982737+mornepousse@users.noreply.github.com> Date: Tue, 7 Apr 2026 10:58:07 +0200 Subject: [PATCH] fix: Use correct index for combo/KO/leader creation 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) --- src/main.rs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main.rs b/src/main.rs index 3115023..1ebeaf8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1062,7 +1062,8 @@ fn main() { w.global::().set_status_text("Pick both keys first".into()); return; } - let cmd = logic::protocol::cmd_comboset(255, r1, c1, r2, c2, result); + let next_idx = adv.get_combos().row_count() as u8; + let cmd = logic::protocol::cmd_comboset(next_idx, r1, c1, r2, c2, result); let serial = serial.clone(); let tx = tx.clone(); std::thread::spawn(move || { @@ -1083,11 +1084,13 @@ fn main() { let window_weak = window.as_weak(); window.global::().on_create_ko(move |trig_code, trig_mod_idx, result_code, res_mod_idx| { + let Some(w) = window_weak.upgrade() else { return }; let trig = trig_code as u8; let trig_mod = mod_idx_to_byte(trig_mod_idx); let result = result_code as u8; let res_mod = mod_idx_to_byte(res_mod_idx); - let cmd = logic::protocol::cmd_koset(255, trig, trig_mod, result, res_mod); + let next_idx = w.global::().get_key_overrides().row_count() as u8; + let cmd = logic::protocol::cmd_koset(next_idx, trig, trig_mod, result, res_mod); let serial = serial.clone(); let tx = tx.clone(); std::thread::spawn(move || { @@ -1120,7 +1123,8 @@ fn main() { if count > 3 { sequence.push(adv.get_new_leader_seq3_code() as u8); } let result = result_code as u8; let result_mod = mod_idx_to_byte(mod_idx); - let cmd = logic::protocol::cmd_leaderset(255, &sequence, result, result_mod); + let next_idx = adv.get_leaders().row_count() as u8; + let cmd = logic::protocol::cmd_leaderset(next_idx, &sequence, result, result_mod); let serial = serial.clone(); let tx = tx.clone(); std::thread::spawn(move || {