C语言 使用QMK修改键

30byixjq  于 2023-06-21  发布在  其他
关注(0)|答案(4)|浏览(229)

我得到这个错误,当我尝试使用 * 修改键 * 我的旋转编码器像这样:

bool encoder_update_user(uint8_t index, bool clockwise) {
    if (index == 0) { /* First encoder */
        if (clockwise) {
            tap_code(QK_LCTL | KC_F24);
        } else {
            tap_code(QK_LCTL | KC_F23);
        }
    } 
    return false;
}

这就是错误:

Compiling: keyboards/planck/keymaps/dawz/keymap.c                                                  keyboards/planck/keymaps/dawz/keymap.c: In function 'encoder_update_user':
keyboards/planck/keymaps/dawz/keymap.c:68:22: error: unsigned conversion from 'int' to 'uint8_t' {aka 'unsigned char'} changes value from '371' to '115' [-Werror=overflow]
   68 |             tap_code(QK_LCTL | KC_F24);
      |                      ^~~~~~~~~~~~~~~~
keyboards/planck/keymaps/dawz/keymap.c:70:22: error: unsigned conversion from 'int' to 'uint8_t' {aka 'unsigned char'} changes value from '370' to '114' [-Werror=overflow]
   70 |             tap_code(QK_LCTL | KC_F23);
      |                      ^~~~~~~~~~~~~~~~
cc1.exe: all warnings being treated as errors
 [ERRORS]
 |
 |
 |
make[1]: *** [tmk_core/rules.mk:443: .build/obj_planck_rev6_drop_dawz/keyboards/planck/keymaps/dawz/keymap.o] Error 1
Make finished with errors
make: *** [Makefile:539: planck/rev6_drop:dawz] Error 1

当我输入一个常规的键码,如KC_VOLUP或KC_VOLDOWN时,编码器工作,但我试图使用Ctrl + F23,F24,所以我可以使用旋钮作为Voicemeeter宏按钮控制器。

dxxyhpgq

dxxyhpgq1#

您可以使用宏LCTL(kc)(以及其他MOD的类似宏)表示“Ctrl +(基本键)”组合,但技术上这会创建16位键码。因此,而不是tap_code(),它仅限于8位基本键码,使用tap_code16()来点击它:

// Copyright 2022 Google LLC.
// SPDX-License-Identifier: Apache-2.0
bool encoder_update_user(uint8_t index, bool clockwise) {
  if (index == 0) {
    tap_code16(clockwise ? LCTL(KC_F24) : LCTL(KC_F23));
  } 
  return false;
}

另请参阅QMK编码器文档。

bihw5rsg

bihw5rsg2#

如果你想在这里使用编码器的修改键,你应该尝试使用tap_code16而不是tap_code
试试这个:

bool encoder_update_user(uint8_t index, bool clockwise) {
    if (index == 0) { /* First encoder */
        if (clockwise) {
            tap_code16(QK_LCTL | KC_F24);
        } else {
            tap_code16(QK_LCTL | KC_F23);
        }
    } 
    return false;
}

这里是QMK文档的链接

q35jwt9p

q35jwt9p3#

您可以分解按下组合键的方式:
1.按住修改键
1.按某个键(通常是字母或数字)
1.释放修改键
然后你可以描述整个过程:

bool encoder_update_user(uint8_t index, bool clockwise) {
    if (index == 0) { /* First encoder */
        if (clockwise) {
            register_code(QK_LCTL);   // Press and keep holding down
            tap_code(KC_F24);         // Press and release
            unregister_code(QK_LCTL); // Release
        } else {
            register_code(QK_LCTL);
            tap_code(KC_F23);
            unregister_code(QK_LCTL);
        }
    } 
    return false;
}

这种方法看起来很愚蠢,但是你可以实现更复杂的情况,比如Ctrl+Alt+Shift+A或者一些用键码很难做到的事情。
我这样做是为了我的一个自制键盘,它工作正常。

1szpjjfi

1szpjjfi4#

看看我的keymap在https://github.com/qmk/qmk_firmware/tree/master/keyboards/keebio/iris/keymaps/sq5rix你有工作的编码器在那里看看rules.mk,config.h和keymap.c -变化无处不在

相关问题