我编写了一些代码,表明numlock通过改变LED颜色而处于活动状态,如下所示:
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case TOG_NUMS:
if (record->event.pressed) {
tap_code(KC_NUM_LOCK); // Synthetic Numlock keypress
isToggle[IND_NUMS] = !isToggle[IND_NUMS]; // Toggle the indicator
set_toggle_indicator(IND_NUMS); // Change LED colour based on isToggle value
}
return true;
default:
return true;
}
return true;
}此操作如出一辙:自定义密钥代码TOG_NUMS通过调用tap_code来切换numpad,并调用我的set_toggle_indicator函数来更新分类账。但是,当我用自定义的自动转移键尝试相同的操作时,我会遇到问题。这就是我所做的,试图遵循同样的模式:
case TOG_ASHF:
if (record->event.pressed) {
tap_code(KC_ASTG);
isToggle[IND_ASHF] = !isToggle[IND_ASHF];
set_toggle_indicator(IND_ASHF);
}
return true;但是,上面没有编译,因为KC_ASTG密钥代码的类型是整数,而tap_code参数是一个无符号字符。编译器提供了以下错误消息:
错误:从'int‘到'uint8_t’{aka‘无符号字符’}的无符号转换将值从'23578‘更改为'26’
如果我用tap_code替换tap_code16,我的代码会编译,但是键的行为很奇怪。它似乎只是简单地给我一个小写w时按下。如何使KC_ASTG按键在不使用tapcode的情况下触发
发布于 2022-10-03 17:46:20
我想出来了!合成按键是错误的方法。KC_ASTG密钥代码不像numpad键那样具有匹配的扫描代码。而不是通过USB将扫描代码发送到操作系统,而是在process_auto_shift中间件中处理逻辑。我将process_auto_shift.h包含到我的keymap文件中,并将中间件的实现复制到TOG_ASHF case语句中,如下所示:
case TOG_ASHF:
if (record->event.pressed) {
autoshift_toggle();
isToggle[IND_ASHF] = !isToggle[IND_ASHF];
set_toggle_indicator(IND_ASHF);
}
return true;它的行为和预期的一样。
https://stackoverflow.com/questions/73927083
复制相似问题