Skip to content

Latest commit

 

History

History
55 lines (37 loc) · 6.23 KB

как-адаптировать-раскладку-под-мою-клавиатуру.md

File metadata and controls

55 lines (37 loc) · 6.23 KB

Как адаптировать раскладку под мою клавиатуру?

В этой инструкции для примера взята K:02 от ErgoHaven.

Для начала нам понадобится репозиторий QMK/Vial, где будут готовые настройки для вашей клавиатуры. В нашем примере, клонируем репозиторий vial-qmk от ErgoHaven. В нём уже есть все настройки под их клавиатуры, настроен OLED, контроллеры, Vial и т.д.

Сама раскладка лежит в keyboards/ergohaven/k02/keymaps. Берём за основу ту, что называется ergohaven. Просто дублируем эту папку и работаем в ней. Раскладка состоит из нескольких файлов, главный из которых keymap.c. Наша задача — адаптировать эту стандартную раскладку, под Wellum. А именно, нам понадобится изменить количество, название и состав слоёв, добавить подключение файлов с доп. функциями и т.д.

Названия слоёв по умолчанию объявлены в users/ergohaven/ergohaven.h, но каждая кастомная раскладка обычно использует свои названия. Поэтому копируем блок с enum layers { ... } в файл keymap.c.

Далее, custom keycodes (собственные названия комбинаций клавиш): они тоже объявлены где-то по-умолчанию, в том же ergohaven.h, поэтому можем их перенести в keymap.c, если хотим использовать. Также, переносим эти кастомные коды из прошивки (они идут до объявления enum layers { ... }).

Важно: они должны идти перед определением содержимого слоёв const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ... }

Копируем содержимое этой секции из раскладки Wellum, там будет шесть секций (_DEF, _GAM, _GFN, _SYM, _NAV, _NUM). Проблема в том, что они ориентированы на 36-клавишную разметку, а у нас она может (и скорее всего будет) другая. Например, на Corne 42 клавиши, а у K:02 вообще 58.

Нужно соблюсти размерность и проставить в недостающих клавишах KC_NO — пустую клавишу. К примеру, для K:02 весь верхний ряд нужно занять KC_NO, добавить столбец пустых слева и справа, а также для четырёх нижних клавиш под средними и безымянными пальцами тоже проставить KC_NO.

Оставшийся код прошивки (после секции keymaps) просто вставляем после этой секции. Далее там есть код про OLED, который отображает название активного слоя. Его нужно подправить под наши новые названия слоёв (_DEF, _GAM, ...).

С раскладкой закончили, осталось подключить доп. функционал (oneshot.c/h, swapper.c/h). Эти файлы просто копируем так, чтобы они лежали рядом с rules.mk. А в самом rules.mk в конец дописываем

SRC += ./oneshot.c
SRC += ./swapper.c

Далее, мелкие, быть может, необязательные фиксы:

  • в файле k02/config.h устанавливаем кол-во слоёв с помощью #define DYNAMIC_KEYMAP_LAYER_COUNT 6.
  • в файле k02/info.json правим лейблы под клавиши в соответствии с раскладкой.

И всё, можно билдить. Для этого понадобится Docker.

В корне репозитория вызываем util/docker_build.sh ergohaven/k02:wellum. Формат такой: <папка с клавиатурой>:<папка с раскладкой>. Docker подтянет все нужные зависимости и попытается сбилдить прошивку. Если будут ошибки, то они выведутся в консоль. К примеру, у меня возникала ошибка с ненайденным файлом ergohaven.h. Он лежит в users/ergogaven, но команда билда почему-то его не подхватывает. Тут надо спросить у ErgoHaven какой командой они делают билд... Но я просто забил на этот файл, закомментил в файле keymap.c его импорт. А его содержимое растащил по другим файлам — там была секция

NKRO_ENABLE = yes # Enable N-Key Rollover
BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
MOUSEKEY_ENABLE = yes
EXTRAKEY_ENABLE = yes
LTO_ENABLE = no
VIA_ENABLE = yes
TAP_DANCE_ENABLE = yes
COMBO_ENABLE = yes
KEY_OVERRIDE_ENABLE = yes
DYNAMIC_MACRO_ENABLE = yes
CAPS_WORD_ENABLE = yes
REPEAT_KEY_ENABLE = yes
AUTO_SHIFT_ENABLE = yes

которую я положил в k02/rules.mk. В ней включаются и настраиваются всякие фичи Vial: комбо, макросы и т.д. Без этого билд упадёт, т.к. будет пытаться в комбо, а они не включены.

После успешного билда в папке .build появится файл с прошивкой — ergohaven_k02_wellum.uf2. Его уже и прошиваем на обе половинки и радуемся?