Kreiranje firmvera iz izvornog koda
Ako želite da napravite izmene u mapiranju tastera tastature ili da dodate podršku za nove tastature u SignalRGB QMK protokolu, morate kreirati firmver iz izvornog koda.
Koraci za kreiranje iz izvornog koda:
- Preuzmite i instalirajte QMK MSYS odavde.

Otvorite QMK MSYS i izvršite git clone vašeg potrebnog QMK fork-a / izvornog koda. (Ovo može biti QMK Mainline _ili SonixQMK.)
Zatim morate dodati SignalRGB protokol submodul u fork izvorni kod protiv kojeg kompajlirate:
// cd u vaš izvorni fork protiv kojeg kompajlirate u terminalu (QMK_MSYS, bash itd.)git submodule add https://github.com/SRGBmods/QMK_Community_Module modules/signalrgbgit submodule update --init --recursive- Nalepite gornje dve komande u prozor terminala (QMK_MSYS, bash itd.).
- Morate kreirati keymap.json sa sledećim sadržajem u specifičnom direktorijumu marke tastature:
{ "modules": [ "signalrgb" ]}NAPOMENA: ZAMENITE “KEYBOARD BRAND” SA BRENDOM VAŠE TASTATURE, “MODEL” SA MODELOM TASTATURE I “KM” SA TIPOM KEYMAPA (default / via / keychron / itd.).
TIPOVI KEYMAPA:
- default: Ovo je keymap koji koristite kada ne kompajlirate za VIA.
- via: Ovo je keymap koji koristite kada kompajlirate za VIA. (Pokušajte ovo najpre — vaš VIA keymap možete pronaći ovde)

- Ako se firmver ne može kompajlirati, pridružite se Discord-u i zatražite pomoć u QMK kanalima.
Nakon kompajliranja firmvera, morate ga flešovati na tastaturu.
- Morate online potražiti uputstvo za flešovanje za vašu tastaturu, jer se uputstva razlikuju između tastatura.
- Nakon flešovanja tastature, morate prilagoditi plugin za tastaturu ispod da bi SignalRGB radio sa vašom tastaturom.
Folder sa primerima QMK plugina
- Nakon preuzimanja gorenavedenog plugina za tastaturu, otvorite ga u tekstualnom editoru.
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"}, ];}- Nakon otvaranja plugina za tastaturu, dočekaće vas ekran sličan gornjem.
- Morate popuniti neka od ovih polja, počevši od polja Name.
- Polje Name mora biti popunjeno nazivom tastature za koju ste razvili firmver.
export function Name() { return "Massdrop CTRL QMK Keyboard"; }- Zatim moramo uneti VendorId za tastaturu.
- Da biste pronašli VendorId za tastaturu, otvorite SignalRGB.
- Zatim kliknite na zupčanik za podešavanja u donjem levom uglu.

Kliknite na “Informacije o uređaju”.

Pronađite tastaturu i zabeležite VendorID i ProductID.


Sada unesite VendorId i ProductId sa ovim vrednostima.
export function Name() { return "Massdrop CTRL QMK Keyboard"; }export function VendorId() { return 0x04d8; }export function ProductId() { return 0xEED2; }- Sledeće polje koje treba popuniti je polje Publisher. U polje Publisher možete uneti svoje ime, korisničko ime ili nadimak.
export function Name() { return "Massdrop CTRL QMK Keyboard"; }export function VendorId() { return 0x04d8; }export function ProductId() { return 0xEED2; }export function Publisher() { return "WhirlwindFX"; }- Sada smo završili sa popunjavanjem polja i prelazimo na nizove.
Postoje 3 niza koje treba izmeniti: vKeys, vKeynames i vKeyPositions.

- Niz vKeys mapira svaki taster tastature na njegovu poziciju u RGB podacima koji se šalju tastaturi.
- Niz vKeyNames govori nam koji taster odgovara svakom vKey-u i vKeyPosition-u.
- Niz vKeyPositions govori SignalRGBu gde se svaki taster pozicijski nalazi na tastaturi.
- Najpre izmenite niz vKeyNames da odražava vašu tastaturu.
- To znači da morate reorganizovati vKeyNames da odgovaraju vašoj tastaturi.
- U našem slučaju morali smo ukloniti tastere i preurediti preostale, jer je naša pločica TKL pločica.

Zatim ažurirajte niz vKeyPositions na isti način kao što je ažuriran niz vKeyNames.

Na kraju ažurirajte niz vKeys da odgovara nizovima vKeyNames i vKeysPositions.

- Sada sačuvajte datoteku plugina u %userprofile%/Documents/WhirlwindFX/plugins i restartujte Signal.
- Vaša tastatura treba sada da svetli i da reaguje na SignalRGB.
Ako tastatura ne svetli ili ne reaguje ispravno na SignalRGB:
Section titled “Ako tastatura ne svetli ili ne reaguje ispravno na SignalRGB:”- Idite na stranicu Uređaji u SignalRGBu.

- Navigirajte do tastature i kliknite na zupčanik za podešavanja.

- Kliknite na prekidač “Prikaži konzolu”.

- U konzoli treba da se prikaže ukupan broj LED dioda uređaja. Uporedite ovaj ukupan broj sa brojem LED dioda koje ste dodelili.
- U našem slučaju postoji ukupno 119 LED dioda.
Ako broj LED dioda odgovara broju vKeys:
Section titled “Ako broj LED dioda odgovara broju vKeys:”- Uverite se da je polje Size vašeg plugina za jedan veće od vaše najviše LED koordinate u svakom pravcu:
- U našem slučaju najudaljenija LED se nalazi na poziciji [17,6], pa naše polje Size mora biti [18,7].
export function Size() { return [18, 7]; }Ako broj LED dioda ne odgovara broju vKeys:
Section titled “Ako broj LED dioda ne odgovara broju vKeys:”- Morate dodati vKeys, vKeyPositions i vKeyNames da se usklade sa ukupnim brojem LED dioda.
- U našem slučaju uređaj je imao 119 LED dioda, pa smo morali dodati 32 LED diode za underglow tastature.



- Ako broj vKeys odgovara ukupnom broju LED dioda i uređaj je ispravno dimenzionisan, ali su LED diode pogrešno mapirane:
- Pridružite se Discord-u i zatražite pomoć u QMK kanalima.
Kako rešiti treperenje LED indikatora (CAPSLOCK, NUMLOCK, SCROLL-LOCK) kada su SignalRGB i taster aktivni.
Section titled “Kako rešiti treperenje LED indikatora (CAPSLOCK, NUMLOCK, SCROLL-LOCK) kada su SignalRGB i taster aktivni.”Ovo je nešto zahtevnije, jer zahteva prethodno znanje o vrednostima indeksa za vaše indikatore (CAPS, NUM, SCROLL). (Ovi se obično nalaze u potkategoriji uređaja ansi/iso ili direktno u <keyboard_name.c> — potražite g_led_config i vizuelno povežite indeks sa odgovarajućim tasterom. Alternativno, kada vaš SignalRGB plugin funkcioniše, možete preuzeti ID odatle i ponovo kompajlirati sa ovom izmenom!)

Kada znate gorenavedene vrednosti, potrebna je mala izmena u signalrgb.c ili via.c, zavisno od vašeg build-a firmvera. Zamenite CAPSLOCK_LED_INDEX_, NUM___LOCK_LED_INDEX ili SCROLL_LOCK_LED_INDEX vrednostima indeksa za vašu tastaturu.
Ako je CAPS_LOCK indeks 61, ova linija:
if ((index + i) == CAPS_LOCK_LED_INDEX && host_keyboard_led_state().caps_lock) {postaje ova linija:
if ((index + i) == 61 && hostkeyboard led_state().caps_lock) {Kompletan primer koda (Ovo u potpunosti zamenjuje ovu specifičnu funkciju “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); } }}** Pridružite se Discord-u i zatražite pomoć u kanalu QMK-Custom-Builds ako imate problema sa gorenavedenim uputstvima! **