Сборка прошивки из исходного кода
Если вы хотите внести изменения в раскладку клавиатуры или добавить поддержку новых клавиатур в протокол SignalRGB QMK, вам потребуется собрать прошивку из исходного кода.
Шаги для сборки из исходного кода:
- Загрузите 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/signalrgbgit submodule update --init --recursive- Вставьте две вышеуказанные команды в окно терминала (QMK_MSYS, bash и т. д.).
- Необходимо добавить keymap.json со следующим содержимым в директорию конкретного бренда клавиатуры:
{ "modules": [ "signalrgb" ]}ПРИМЕЧАНИЕ: ЗАМЕНИТЕ KEYBOARD BRAND НА ВАШ БРЕНД КЛАВИАТУРЫ, MODEL НА МОДЕЛЬ КЛАВИАТУРЫ И KM НА ТИП РАСКЛАДКИ (default / via / keychron и т. д.).
ТИПЫ РАСКЛАДОК:
- default: эту раскладку следует использовать, если вы не компилируете для VIA
- via: эту раскладку следует использовать при компиляции для VIA (Попробуйте это сначала — раскладку via можно найти здесь)

- Если прошивка не компилируется, присоединитесь к Discord и попросите помощи в каналах QMK.
Теперь, когда вы скомпилировали прошивку, нужно прошить её в клавиатуру.
- Вам нужно найти инструкции по прошивке для вашей клавиатуры в интернете, так как они различаются для разных клавиатур.
- После прошивки клавиатуры нужно изменить плагин клавиатуры ниже, чтобы 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;}/* globalshutdownColor:readonlyLightingMode:readonlyforcedColor: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"}, ];}- После открытия плагина клавиатуры вы увидите экран, похожий на показанный выше.
- Необходимо заполнить некоторые из этих полей, начиная с поля Name.
- В поле Name нужно ввести название клавиатуры, для которой разрабатывалась прошивка.
export function Name() { return "Massdrop CTRL QMK Keyboard"; }- Далее необходимо заполнить 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; }- Следующее поле — Publisher. Можно указать своё имя, псевдоним или никнейм.
export function Name() { return "Massdrop CTRL QMK Keyboard"; }export function VendorId() { return 0x04d8; }export function ProductId() { return 0xEED2; }export function Publisher() { return "WhirlwindFX"; }- Теперь с полями закончено, переходим к массивам.
Нужно изменить 3 массива: vKeys, vKeynames и vKeyPositions

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

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

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

- Теперь сохраните файл плагина в %userprofile%/Documents/WhirlwindFX/plugins, затем перезапустите Signal.
- Клавиатура должна начать светиться и реагировать на SignalRGB.
Если клавиатура не светится или не реагирует должным образом на SignalRGB:
Заголовок раздела «Если клавиатура не светится или не реагирует должным образом на SignalRGB:»- Перейдите на страницу «Устройства» в SignalRGB.

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

- Затем нажмите переключатель «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 при возникновении проблем с вышеуказанными инструкциями!