Перейти к содержимому

Сборка прошивки из исходного кода

Если вы хотите внести изменения в раскладку клавиатуры или добавить поддержку новых клавиатур в протокол SignalRGB QMK, вам потребуется собрать прошивку из исходного кода.

Шаги для сборки из исходного кода:

  1. Загрузите QMK MSYS отсюда и установите.

Откройте QMK MSYS и выполните git clone нужного форка QMK / исходного кода. (Это может быть QMK Mainline _или SonixQMK).

Затем добавьте подмодуль SignalRGB Protocol к форку, который вы собираете:

// cd to your source fork you will be compiling against in the terminal (QMK_MSYS, bash, etc)
git submodule add https://github.com/SRGBmods/QMK_Community_Module modules/signalrgb
git submodule update --init --recursive
  1. Вставьте две вышеуказанные команды в окно терминала (QMK_MSYS, bash и т. д.).
  2. Необходимо добавить keymap.json со следующим содержимым в директорию конкретного бренда клавиатуры:
{
"modules": [
"signalrgb"
]
}

ПРИМЕЧАНИЕ: ЗАМЕНИТЕ KEYBOARD BRAND НА ВАШ БРЕНД КЛАВИАТУРЫ, MODEL НА МОДЕЛЬ КЛАВИАТУРЫ И KM НА ТИП РАСКЛАДКИ (default / via / keychron и т. д.).

ТИПЫ РАСКЛАДОК:

  • default: эту раскладку следует использовать, если вы не компилируете для VIA
  • via: эту раскладку следует использовать при компиляции для VIA (Попробуйте это сначала — раскладку via можно найти здесь)

Теперь, когда вы скомпилировали прошивку, нужно прошить её в клавиатуру.

  • Вам нужно найти инструкции по прошивке для вашей клавиатуры в интернете, так как они различаются для разных клавиатур.
  1. После прошивки клавиатуры нужно изменить плагин клавиатуры ниже, чтобы SignalRGB заработал с ней.

Папка с примерами плагинов QMK

  • После загрузки плагина клавиатуры откройте его в текстовом редакторе.
export function Name() { return "QMK Keyboard"; }
export function Version() { return "X.X.X"; }
export function VendorId() { return 0x0000; }
export function ProductId() { return 0x0000; }
export function Publisher() { return "WhirlwindFX"; }
export function Size() { return [14, 5]; }
export function DefaultPosition(){return [10, 100]; }
export function DefaultScale(){return 8.0;}
/* global
shutdownColor:readonly
LightingMode:readonly
forcedColor:readonly
*/
export function ControllableParameters()
{
return [
{"property":"shutdownColor", "group":"lighting", "label":"Shutdown Color", "min":"0", "max":"360", "type":"color", "default":"009bde"},
{"property":"LightingMode", "group":"lighting", "label":"Lighting Mode", "type":"combobox", "values":["Canvas", "Forced"], "default":"Canvas"},
{"property":"forcedColor", "group":"lighting", "label":"Forced Color", "min":"0", "max":"360", "type":"color", "default":"009bde"},
];
}
  1. После открытия плагина клавиатуры вы увидите экран, похожий на показанный выше.
  • Необходимо заполнить некоторые из этих полей, начиная с поля Name.
  • В поле Name нужно ввести название клавиатуры, для которой разрабатывалась прошивка.
export function Name() { return "Massdrop CTRL QMK Keyboard"; }
  1. Далее необходимо заполнить VendorId для клавиатуры.
  • Для поиска VendorId откройте SignalRGB.
  • Нажмите значок шестерёнки настроек в нижнем левом углу.

Затем нажмите «Информация об устройствах».

Найдите клавиатуру и запишите её VendorID и ProductID.

Теперь заполните поля VendorId и ProductId этими значениями.

export function Name() { return "Massdrop CTRL QMK Keyboard"; }
export function VendorId() { return 0x04d8; }
export function ProductId() { return 0xEED2; }
  1. Следующее поле — Publisher. Можно указать своё имя, псевдоним или никнейм.
export function Name() { return "Massdrop CTRL QMK Keyboard"; }
export function VendorId() { return 0x04d8; }
export function ProductId() { return 0xEED2; }
export function Publisher() { return "WhirlwindFX"; }
  1. Теперь с полями закончено, переходим к массивам.

Нужно изменить 3 массива: vKeys, vKeynames и vKeyPositions

  • Массив vKeys привязывает каждую клавишу клавиатуры к её позиции в RGB-данных, отправляемых на клавиатуру.
  • Массив vKeyNames показывает, какая клавиша соответствует каждому vKey и vKeyPosition.
  • Массив vKeyPositions указывает SignalRGB, где расположена каждая клавиша на клавиатуре.
  • Сначала измените массив vKeyNames в соответствии с вашей клавиатурой.
  • Это означает, что нужно переупорядочить vKeyNames так, чтобы они соответствовали вашей клавиатуре.
    • В нашем случае потребовалось удалить клавиши и реорганизовать оставшиеся, так как наша плата — TKL.

Затем обновите массив vKeyPositions так же, как обновлялся массив vKeyNames.

Наконец, обновите массив vKeys так, чтобы он соответствовал массивам vKeyNames и vKeysPositions.

  1. Теперь сохраните файл плагина в %userprofile%/Documents/WhirlwindFX/plugins, затем перезапустите Signal.
  • Клавиатура должна начать светиться и реагировать на SignalRGB.

Если клавиатура не светится или не реагирует должным образом на SignalRGB:

Заголовок раздела «Если клавиатура не светится или не реагирует должным образом на SignalRGB:»
  1. Перейдите на страницу «Устройства» в SignalRGB.

  1. Затем перейдите к клавиатуре и нажмите значок шестерёнки.

  1. Затем нажмите переключатель «Show Console».

  • В консоли должно быть Device Total LED Count. Сравните его с количеством назначенных светодиодов.
    • В нашем случае — 119 Total LEDs.

Если количество светодиодов совпадает с количеством vKeys:

Заголовок раздела «Если количество светодиодов совпадает с количеством vKeys:»
  • Убедитесь, что поле size вашего плагина на 1 больше в каждом направлении, чем наибольшая координата светодиода:
    • В нашем случае самый дальний светодиод — в позиции [17,6], поэтому поле Size должно быть [18,7].
export function Size() { return [18, 7]; }

Если количество светодиодов не совпадает с количеством vKeys:

Заголовок раздела «Если количество светодиодов не совпадает с количеством vKeys:»
  • Нужно добавить vKeys, vKeyPositions и vKeyNames до совпадения с Total LED Count.
    • В нашем случае устройство имело 119 светодиодов, поэтому потребовалось добавить 32 светодиода для подсветки снизу клавиатуры.

  • Если количество vKeys совпадает с Total LED Count и устройство правильно отмасштабировано, но светодиоды неправильно привязаны:
  • Присоединитесь к Discord и попросите помощи в каналах QMK.

Как исправить мигание индикаторных светодиодов (CAPSLOCK, NUMLOCK, SCROLL-LOCK) при активном SignalRGB и активной клавише.

Заголовок раздела «Как исправить мигание индикаторных светодиодов (CAPSLOCK, NUMLOCK, SCROLL-LOCK) при активном SignalRGB и активной клавише.»

Это требует предварительного знания индексных значений для индикаторов (CAPS, NUM, SCROLL). (Обычно это можно найти в подтипе устройства ansi/iso или непосредственно в файле <keyboard_name.c> — найдите g_led_config и визуально сопоставьте индекс с соответствующей клавишей, или, когда плагин SignalRGB заработает, можно получить ID оттуда и перекомпилировать с этой модификацией!)

Зная вышеуказанные значения, требуется небольшая модификация в signalrgb.c или via.c в зависимости от вашей сборки прошивки. Замените CAPSLOCK_LED_INDEX, NUM_LOCK_LED_INDEX или SCROLL_LOCK_LED_INDEX на индексные значения вашей клавиатуры.

Если индекс CAPS_LOCK равен 61, эта строка:

if ((index + i) == CAPS_LOCK_LED_INDEX && host_keyboard_led_state().caps_lock) {

Становится такой строкой:

if ((index + i) == 61 && hostkeyboard led_state().caps_lock) {

Полный пример кода (заменяет целиком эту конкретную функцию “led_streaming”):

void led_streaming(uint8_t *data) //Stream data from HID Packets to Keyboard.
{
uint8_t index = data[1];
uint8_t numberofleds = data[2];
if(numberofleds >= 10)
{
packet[1] = DEVICE_ERROR_LEDS;
raw_hid_send(packet,32);
return;
}
for (uint8_t i = 0; i < numberofleds; i++)
{
uint8_t offset = (i * 3) + 3;
uint8_t r = data[offset];
uint8_t g = data[offset + 1];
uint8_t b = data[offset + 2];
/* ONLY USE ONE OF THESE */
/* Remove the // from the beginning of the line you wish to use and update the INDEX accordingly */
/* This is for all three CAPS, NUM, and SCROLL LOCKS */
// if ( ((index + i) == CAPS_LOCK_LED_INDEX && host_keyboard_led_state().caps_lock) || ((index + i) == NUM_LOCK_LED_INDEX && host_keyboard_led_state().num_lock) || ((index + i) == SCROLL_LOCK_LED_INDEX && host_keyboard_led_state().scroll_lock)) {
/* This is for CAPS and NUM LOCK */
// if ( ((index + i) == CAPS_LOCK_LED_INDEX && host_keyboard_led_state().caps_lock) || ((index + i) == NUM_LOCK_LED_INDEX && host_keyboard_led_state().num_lock)) {
/* This is for CAPS LOCK */
// if ((index + i) == CAPS_LOCK_LED_INDEX && host_keyboard_led_state().caps_lock) {
/* This is for NUM LOCK */
// if ((index + i) == NUM_LOCK_LED_INDEX && host_keyboard_led_state().num_lock) {
/* ONLY USE ONE OF THE ABOVE */
rgb_matrix_set_color(index + i, 255, 255, 255);
} else {
rgb_matrix_set_color(index + i, r, g, b);
}
}
}

Присоединитесь к Discord и попросите помощи в канале qmk-custom-builds при возникновении проблем с вышеуказанными инструкциями!