Skip to content

Расширение для QMK, позволяющее нажимать любой кейкод. Используется для создания других расширений.

Notifications You must be signed in to change notification settings

klavarog/arbitrary_keycode

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 

Repository files navigation

Возможность нажимать любой кейкод

В QMK имеются функции только для нажатия кейкодов вида KC_A через вызов register_keycode(KC_A), но нету возможности "нажать" более сложный кейкод, например: MO(4). Специально для устранения этого недостатка и создан этот модуль, он позволяет вам с минимальными усилиями "нажимать" любой кейкод. Может пригодиться если вы делаете нестандартное расширение для QMK, и вы не особо заботитесь о том насколько красив код внутри QMK, вам лишь важно чтобы оно работало у вас.

Данный модуль нужен для работы других модулей, например: аккорды.

Ещё одно интересное применение данного модуля: если у вас есть динамик в клавиатуре, то при помощи здешней функции можно прикрутить возможность проигрывать музыку при нажатии любой клавиши.

Применение

press_arbitrary_keycode(MO(4), true);

Где кейкод - MO(4), а true означает что клавиша будет зажата, false будет означать что она отпущена. Сигнатуру и реализацию можно посмотреть в файле include.h.

Использование

Подключить библиотеку

#include "arbitrary_keycode/include.h"

Модифицировать код QMK

  1. В файле quantum/keymap_common.c в функции keymap_key_to_keycode:
 __attribute__((weak)) uint16_t keymap_key_to_keycode(uint8_t layer, keypos_t key) {
     // Read entire word (16bits)
-    return pgm_read_word(&keymaps[(layer)][(key.row)][(key.col)]);
+    if (key.use_custom_keycode) {
+        return key.custom_keycode;
+    } else {
+        return pgm_read_word(&keymaps[(layer)][(key.row)][(key.col)]);
+    }
 }
  1. В файле tmk_core/quantum/keyboard.h в структуре keypos_t:
 typedef struct {
     uint8_t col;
     uint8_t row;
+    bool use_custom_keycode;
+    uint16_t custom_keycode;
 } keypos_t;
  1. В файле quantum/rgb_matrix.c в функции process_rgb_matrix. Это необходимо, чтобы вызове этой функции не подсвечивались рандомные клавиши.
 bool process_rgb_matrix(uint16_t keycode, keyrecord_t *record) {
+    if (record->event.key.custom_keycode) {
+        return true;
+    }
  1. В коде данного модуля закомментировать строчку с ошибкой, которая говорит прочитать данный документ.

Changelog

7.02.2021:

  • Теперь в коде есть сообщение об ошибке, которое направляет на эту страницу. Оно нужно, чтобы новичок при компиляции чего-то с данным модулем не думал что за странные ошибки у него вылезли.

20.01.2021:

  • Теперь надо модифицировать ещё и файл quantum/rgb_matrix.c.
  • Теперь не надо передавать row и col. Раньше они нужны были только для корректного отображения подсветки, а теперь с костылём в коде подсветки, это больше не нужно. Плюс, иногда передача текущих позиций ломала внутренний алгоритм QMK по обнаружению когда клавиша отжата или нажата, и это вызывало такие ошибки, что какие-то клавиши просто не отжимались.

About

Расширение для QMK, позволяющее нажимать любой кейкод. Используется для создания других расширений.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages