Skip to content

Commit 0b19677

Browse files
committed
Backend: don't handle QMK features on non-QMK board
1 parent 71fd9c2 commit 0b19677

File tree

2 files changed

+31
-24
lines changed

2 files changed

+31
-24
lines changed

backend/src/keycode.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ impl std::fmt::Display for Keycode {
127127
write!(f, " | ")?;
128128
}
129129
write!(f, "{}", mod_name)?;
130+
has_mod = true;
130131
}
131132
if !(scancode_name == "NONE" && has_mod) {
132133
write!(f, "{}", scancode_name)?;
@@ -140,6 +141,7 @@ impl std::fmt::Display for Keycode {
140141
write!(f, " | ")?;
141142
}
142143
write!(f, "{}", mod_name)?;
144+
has_mod = true;
143145
}
144146
write!(f, ", {})", scancode_name)?;
145147
}

backend/src/layout/mod.rs

Lines changed: 29 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -140,35 +140,36 @@ impl Layout {
140140

141141
/// Get the scancode number corresponding to a name
142142
pub fn scancode_to_name(&self, scancode: u16) -> Option<Keycode> {
143-
// XXX only on QMK?
144-
if scancode >= QK_MOD_TAP && scancode <= QK_MOD_TAP_MAX {
145-
let mods = Mods::from_bits((scancode >> 8) & 0x1f)?;
146-
let kc = scancode & 0xff;
147-
let kc_name = self.scancode_names.get(&kc)?;
148-
Some(Keycode::MT(mods, kc_name.clone()))
149-
} else if scancode >= QK_LAYER_TAP && scancode <= QK_LAYER_TAP_MAX {
150-
let layer = ((scancode >> 8) & 0xf) as u8;
151-
let kc = scancode & 0xff;
152-
let kc_name = self.scancode_names.get(&kc)?;
153-
Some(Keycode::LT(layer, kc_name.clone()))
154-
} else if scancode >= QK_MODS && scancode <= QK_MODS_MAX {
155-
let mods = Mods::from_bits((scancode >> 8) & 0x1f)?;
156-
let kc = scancode & 0xff;
157-
let kc_name = self.scancode_names.get(&kc)?;
158-
Some(Keycode::Basic(mods, kc_name.clone()))
159-
} else {
160-
let kc_name = self.scancode_names.get(&scancode)?;
161-
if let Some(mods) = Mods::from_mod_str(kc_name) {
162-
Some(Keycode::Basic(mods, "NONE".to_string()))
163-
} else {
164-
Some(Keycode::Basic(Mods::empty(), kc_name.clone()))
143+
if self.meta.is_qmk {
144+
if scancode >= QK_MOD_TAP && scancode <= QK_MOD_TAP_MAX {
145+
let mods = Mods::from_bits((scancode >> 8) & 0x1f)?;
146+
let kc = scancode & 0xff;
147+
let kc_name = self.scancode_names.get(&kc)?;
148+
return Some(Keycode::MT(mods, kc_name.clone()));
149+
} else if scancode >= QK_LAYER_TAP && scancode <= QK_LAYER_TAP_MAX {
150+
let layer = ((scancode >> 8) & 0xf) as u8;
151+
let kc = scancode & 0xff;
152+
let kc_name = self.scancode_names.get(&kc)?;
153+
return Some(Keycode::LT(layer, kc_name.clone()));
154+
} else if scancode >= QK_MODS && scancode <= QK_MODS_MAX {
155+
let mods = Mods::from_bits((scancode >> 8) & 0x1f)?;
156+
let kc = scancode & 0xff;
157+
let kc_name = self.scancode_names.get(&kc)?;
158+
return Some(Keycode::Basic(mods, kc_name.clone()));
165159
}
166160
}
161+
let kc_name = self.scancode_names.get(&scancode)?;
162+
if let Some(mods) = Mods::from_mod_str(kc_name) {
163+
Some(Keycode::Basic(mods, "NONE".to_string()))
164+
} else {
165+
Some(Keycode::Basic(Mods::empty(), kc_name.clone()))
166+
}
167167
}
168168

169169
/// Get the name corresponding to a scancode number
170170
pub fn scancode_from_name(&self, name: &Keycode) -> Option<u16> {
171171
match name {
172+
Keycode::MT(_, _) | Keycode::LT(_, _) if !self.meta.is_qmk => None,
172173
Keycode::MT(mods, keycode_name) => {
173174
let kc = *self.keymap.get(keycode_name)?;
174175
Some(QK_MOD_TAP | (mods.bits() << 8) | (kc & 0xff))
@@ -189,8 +190,12 @@ impl Layout {
189190
return self.keymap.get(mod_name).copied();
190191
}
191192
}
192-
let kc = *self.keymap.get(keycode_name)?;
193-
Some((mods.bits() << 8) | (kc & 0xff))
193+
if self.meta.is_qmk {
194+
let kc = *self.keymap.get(keycode_name)?;
195+
Some((mods.bits() << 8) | (kc & 0xff))
196+
} else {
197+
None
198+
}
194199
}
195200
}
196201
}

0 commit comments

Comments
 (0)