Budowanie oprogramowania układowego ze źródeł
Jeśli chcesz wprowadzić zmiany w układzie klawiszy klawiatury lub dodać obsługę nowych klawiatur do protokołu SignalRGB QMK, musisz zbudować je ze źródeł.
Kroki do zbudowania ze źródeł:
- Pobierz QMK MSYS tutaj i zainstaluj.

Otwórz QMK MSYS i wykonaj git clone wymaganego forka/kodu źródłowego QMK. (Może to być QMK Mainline lub SonixQMK).
Następnie będziesz chciał dodać submoduł protokołu SignalRGB do kodu źródłowego forka, względem którego budujesz:
// 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- Wklej powyższe dwa polecenia do okna terminala (QMK_MSYS, bash, itp.).
- Musisz dodać keymap.json z następującą zawartością w folderze dla swojej konkretnej marki klawiatury:
{ "modules": [ "signalrgb" ]}UWAGA: ZASTĄP KEYBOARD BRAND MARKĄ SWOJEJ KLAWIATURY, MODEL MODELEM KLAWIATURY I KM TYPEM UKŁADU KLAWISZY (default / via / keychron / itp.).
TYPY UKŁADÓW KLAWISZY:
- default: To jest układ klawiszy, którego używasz, jeśli nie kompilujesz dla VIA
- via: To jest układ klawiszy, którego używasz, jeśli kompilujesz dla VIA (Wypróbuj to najpierw — swój układ VIA znajdziesz tutaj)

- Jeśli oprogramowanie układowe nie kompiluje się, dołącz do Discord i poproś o pomoc na kanałach QMK.
Teraz, gdy skompilowałeś swoje oprogramowanie układowe, musisz je sflashować na klawiaturę.
- Musisz poszukać instrukcji flashowania online dla swojej konkretnej klawiatury, ponieważ instrukcje flashowania różnią się w zależności od klawiatury.
- Po sflashowaniu klawiatury musisz dostosować poniższą wtyczkę klawiatury, aby SignalRGB działał z twoją klawiaturą.
Folder z przykładowymi wtyczkami QMK
- Po pobraniu powyższej wtyczki klawiatury otwórz ją w edytorze tekstu.
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"}, ];}- Po otwarciu wtyczki klawiatury zobaczysz ekran podobny do powyższego.
- Musisz wypełnić niektóre z tych pól, zaczynając od pola Name.
- Pole Name należy wypełnić nazwą klawiatury, dla której opracowałeś oprogramowanie układowe.
export function Name() { return "Massdrop CTRL QMK Keyboard"; }- Następnie musimy wypełnić VendorId dla klawiatury.
- Aby znaleźć VendorId dla klawiatury, otwórz SignalRGB.
- Następnie kliknij koło zębate ustawień w lewym dolnym rogu.

Następnie kliknij Informacje o urządzeniu.

Znajdź swoją klawiaturę i zanotuj VendorID i ProductID.


Teraz wypełnij pola VendorId i ProductId tymi wartościami.
export function Name() { return "Massdrop CTRL QMK Keyboard"; }export function VendorId() { return 0x04d8; }export function ProductId() { return 0xEED2; }- Następnym polem do wypełnienia jest pole Publisher. W polu Publisher możesz wpisać swoje imię, nazwę użytkownika lub alias.
export function Name() { return "Massdrop CTRL QMK Keyboard"; }export function VendorId() { return 0x04d8; }export function ProductId() { return 0xEED2; }export function Publisher() { return "WhirlwindFX"; }- Teraz skończyliśmy wypełniać pola i przechodzimy do tablic.
Są 3 tablice do zmodyfikowania: vKeys, vKeynames i vKeyPositions

- Tablica vKeys mapuje każdy klawisz klawiatury na jego pozycję w danych RGB wysyłanych do klawiatury.
- Tablica vKeyNames mówi nam, który klawisz odpowiada każdemu vKey i vKeyPosition.
- Tablica vKeyPositions mówi SignalRGB, gdzie pozycyjnie znajduje się każdy klawisz na klawiaturze.
- Najpierw zmodyfikuj tablicę vKeyNames, aby odzwierciedlała twoją klawiaturę.
- Oznacza to, że musisz przeorganizować vKeyNames, aby pasowały do twojej klawiatury.
- W naszym przypadku musieliśmy usunąć klawisze i przeorganizować pozostałe, ponieważ nasza płytka to płytka TKL.

Następnie zaktualizuj tablicę vKeyPositions w taki sam sposób, w jaki zaktualizowano tablicę vKeyNames.

Na koniec zaktualizuj tablicę vKeys, aby pasowała do tablic vKeyNames i vKeysPositions.

- Teraz zapisz plik wtyczki w %userprofile%/Documents/WhirlwindFX/plugins i uruchom ponownie Signal.
- Twoja klawiatura powinna zacząć świecić i reagować z SignalRGB.
Jeśli klawiatura nie świeci lub nie reaguje poprawnie z SignalRGB:
Dział zatytułowany „Jeśli klawiatura nie świeci lub nie reaguje poprawnie z SignalRGB:”- Przejdź do strony urządzeń w SignalRGB.

- Następnie przejdź do swojej klawiatury i kliknij koło zębate ustawień.

- Następnie kliknij przełącznik Pokaż konsolę.

- W konsoli powinna być widoczna całkowita liczba LED urządzenia. Porównaj tę całkowitą liczbę LED z liczbą LED, które przypisałeś.
- W naszym przypadku łącznie jest 119 LED-ów.
Jeśli liczba LED-ów odpowiada liczbie posiadanych vKeys:
Dział zatytułowany „Jeśli liczba LED-ów odpowiada liczbie posiadanych vKeys:”- Upewnij się, że pole Size twojej wtyczki jest o 1 większe niż najwyższa współrzędna LED w każdym kierunku:
- W naszym przypadku najdalsza LED jest na pozycji [17,6], więc nasze pole Size musi wynosić [18,7].
export function Size() { return [18, 7]; }Jeśli liczba LED-ów nie odpowiada liczbie posiadanych vKeys:
Dział zatytułowany „Jeśli liczba LED-ów nie odpowiada liczbie posiadanych vKeys:”- Musisz dodać vKeys, vKeyPositions i vKeyNames, aby pasowały do całkowitej liczby LED-ów.
- W naszym przypadku urządzenie miało 119 LED-ów, więc musieliśmy dodać 32 LED-y dla underglow klawiatury.



- Jeśli liczba vKeys pasuje do całkowitej liczby LED-ów, a urządzenie ma prawidłowy rozmiar, ale LED-y są przypisane nieprawidłowo:
- Dołącz do Discord i poproś o pomoc na kanałach QMK.
Jak zapobiec migotaniu LED-ów wskaźników (CAPSLOCK, NUMLOCK, SCROLL-LOCK) gdy SignalRGB i klawisz są aktywne.
Dział zatytułowany „Jak zapobiec migotaniu LED-ów wskaźników (CAPSLOCK, NUMLOCK, SCROLL-LOCK) gdy SignalRGB i klawisz są aktywne.”Jest to nieco skomplikowane, ponieważ wymaga wcześniejszej wiedzy o wartościach indeksów dla twoich wskaźników (CAPS, NUM, SCROLL). (Zazwyczaj można to znaleźć w podtypie urządzenia ansi/iso lub bezpośrednio w <keyboard_name.c> — szukaj g_led_config i wizualnie mapuj indeks do klawisza, który reprezentuje, lub gdy wtyczka SignalRGB działa, możesz stamtąd pobrać ID i ponownie skompilować z tą poprawką!)

Po znalezieniu powyższych wartości wymagana jest mała poprawka w signalrgb.c lub via.c, w zależności od buildu oprogramowania układowego. Zastąp CAPSLOCK_LED_INDEX, NUM_LOCK_LED_INDEX lub SCROLL_LOCK_LED_INDEX wartościami indeksów dla swojej klawiatury.
Więc jeśli indeks CAPS_LOCK wynosi 61, ta linia:
if ((index + i) == CAPS_LOCK_LED_INDEX && host_keyboard_led_state().caps_lock) {Staje się tą linią:
if ((index + i) == 61 && hostkeyboard led_state().caps_lock) {Pełny przykład kodu poniżej (Zastępuje całkowicie tę konkretną funkcję: “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); } }}Dołącz do Discord i poproś o pomoc na kanale qmk custom-builds, jeśli masz problemy z powyższymi instrukcjami!