Kompilera firmware från källkod
Om du vill göra ändringar i ett tangentbords tangentmappning eller lägga till stöd för ett nytt tangentbord i SignalRGB QMK-protokollet behöver du kompilera från källkod.
Steg för att kompilera från källkod:

Öppna QMK MSYS och git clone den QMK-fork/källkod du behöver. (Det kan vara QMK Mainstream _eller SonixQMK.)
Sedan vill du lägga till SignalRGB Protocol-submodulen till den fork-källkod du kompilerar:
// cd till källforken du kompilerar i din terminal (QMK_MSYS, bash etc.)git submodule add https://github.com/SRGBmods/QMK_Community_Module modules/signalrgbgit submodule update --init --recursive- Klistra in de två kommandona ovan i terminalfönstret (QMK_MSYS, bash etc.).
- I din specifika tangentbordsmärkes-katalog behöver du lägga till en keymap.json med följande innehåll:
{ "modules": [ "signalrgb" ]}OBS: ERSÄTT MÄRKE MED DITT TANGENTBORDSMÄRKE, MODELL MED TANGENTBORDSMODELLEN OCH KM MED DIN KEYMAP-TYP (default / via / keychron etc.).
KEYMAP-TYPER:
- default: Keymap att använda om du inte kompilerar för VIA
- via: Keymap att använda om du kompilerar för VIA (det rekommenderas att du provar det här först — du kan hitta din via-keymap här)

- Om firmwarekompileringen misslyckas, gå med i Discord och be om hjälp i QMK-kanalerna.
Nu har du kompilerat firmware och behöver flasha det på ditt tangentbord.
- Eftersom installationsinstruktioner varierar mellan tangentbord behöver du hitta installationsinstruktionerna för ditt tangentbord online.
- När du har installerat firmware på ditt tangentbord måste du anpassa följande tangentbords-plugin för att SignalRGB ska fungera med ditt tangentbord.
- När du har laddat ner tangentbords-plugin-et ovan, öppna det i en textredigerare.
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"}, ];}- När du öppnar tangentbords-plugin-et ser du något liknande ovan.
- Du behöver fylla i några av de här fälten; börja med Name-fältet.
- I Name-fältet ska du ange namnet på tangentbordet du bygger firmware för.
export function Name() { return "Massdrop CTRL QMK Keyboard"; }- Sedan behöver vi fylla i VendorId för tangentbordet.
- För att hitta VendorId för tangentbordet, öppna SignalRGB.
- Klicka sedan på inställningskuggen i det nedre vänstra hörnet.

Klicka sedan på Enhetsinformation.

Hitta ditt tangentbord och anteckna VendorID- och ProductID-värdena.


Fyll nu i fälten VendorId och ProductId med dessa värden.
export function Name() { return "Massdrop CTRL QMK Keyboard"; }export function VendorId() { return 0x04d8; }export function ProductId() { return 0xEED2; }- Nästa fält som behöver fyllas i är Publisher-fältet. I Publisher-fältet kan du ange ditt namn, användarnamn eller alias.
export function Name() { return "Massdrop CTRL QMK Keyboard"; }export function VendorId() { return 0x04d8; }export function ProductId() { return 0xEED2; }export function Publisher() { return "WhirlwindFX"; }- Nu är vi klara med fälten och går vidare till arrayerna.
Det finns 3 arrayer som behöver ändras: vKeys, vKeynames och vKeyPositions

- vKeys-arrayen mappar varje tangentbordstangent till sin position i RGBData som skickas till tangentbordet.
- vKeyNames-arrayen berättar för oss vilken tangent som motsvarar varje vKey och vKeyPosition.
- vKeyPositions-arrayen talar om för SignalRGB var varje tangent på tangentbordet är positionerad.
- Börja med att ändra vKeyNames-arrayen så att den speglar ditt tangentbord.
- Det innebär att du behöver ordna om vKeyNames för att matcha ditt tangentbord.
- I vårt fall var vi tvungna att ta bort tangenter och ordna om de återstående eftersom vårt kort är ett TKL-kort.

Uppdatera sedan vKeyPositions-arrayen på samma sätt som vKeyNames-arrayen uppdaterades.

Uppdatera slutligen vKeys-arrayen för att matcha vKeyNames- och vKeysPositions-arrayerna.

- Spara nu din plugin-fil i %userprofile%/Documents/WhirlwindFX/plugins och starta sedan om Signal.
- Ditt tangentbord ska börja lysa och reagera med SignalRGB.
Om tangentbordet inte lyser eller inte svarar korrekt på SignalRGB:
Section titled “Om tangentbordet inte lyser eller inte svarar korrekt på SignalRGB:”- Gå till Enheter-sidan i SignalRGB.

- Gå sedan till ditt tangentbord och klicka på inställningskuggen.

- Klicka sedan på växlingen Visa konsol.

- Det bör finnas ett Totalt antal LED på enhet i konsolen. Jämför det totala antalet LED med antalet LED du tilldelade.
- I vårt fall fanns det 119 totala LED.
Om LED-antalet matchar vKeys-antalet:
Section titled “Om LED-antalet matchar vKeys-antalet:”- Se till att size-fältet i ditt plugin är 1 större än den högsta LED-koordinaten i varje riktning:
- I vårt fall var den längst bort belägna LED vid [17,6], så vårt Size-fält måste vara [18,7].
export function Size() { return [18, 7]; }Om LED-antalet inte matchar vKeys-antalet:
Section titled “Om LED-antalet inte matchar vKeys-antalet:”- Du måste lägga till vKeys, vKeyPositions och vKeyNames för att matcha det totala antalet LED.
- I vårt fall hade enheten 119 LED, så vi behövde lägga till 32 LED för tangentbordets underlysning.



- Om vKeys-antalet matchar det totala antalet LED och enheten är korrekt dimensionerad, men LED:arna är felmappade:
- Gå med i Discord och be om hjälp i QMK-kanalerna.
Hur du åtgärdar indikator-LED:ar: SignalRGB och tangenten tänds (CAPSLOCK, NUMLOCK, SCROLL-LOCK) blinkar.
Section titled “Hur du åtgärdar indikator-LED:ar: SignalRGB och tangenten tänds (CAPSLOCK, NUMLOCK, SCROLL-LOCK) blinkar.”Det här är lite komplicerat eftersom det kräver att du känner till indexvärdena för dina indikatorer (CAPS, NUM, SCROLL) i förväg. (Det här finns vanligtvis i ansi/iso-enhetens undertyp eller direkt i <keyboard_name.c>-filen; titta på g_led_config och mappa indexet visuellt till tangenten det representerar, eller så kan du hämta id:t därifrån när ditt SignalRGB-plugin fungerar och kompilera om med den ändringen!)

När du känner till värdet/värdena ovan krävs en liten ändring i signalrgb.c eller via.c, beroende på vilken firmware du kompilerade. Ersätt CAPSLOCK_LED_INDEX_, NUM___LOCK_LED_INDEX eller SCROLL_LOCK_LED_INDEX med det giltiga indexvärdet för ditt tangentbord.
Om till exempel CAPS_LOCK-indexet är 61, ändras den här raden:
if ((index + i) == CAPS_LOCK_LED_INDEX && host_keyboard_led_state().caps_lock) {Till den här raden:
if ((index + i) == 61 && hostkeyboard led_state().caps_lock) {Fullständigt kodexempel nedan (det här ersätter hela den här specifika funktionen som kallas “led_streaming”):
void led_streaming(uint8_t *data) // Strömma data från HID-paket till tangentbordet.{ 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];
/* ANVÄND BARA EN */ /* Ta bort // i början av raden du vill använda och uppdatera INDEX:et därefter */
/* Det här är för alla tre: CAPS, NUM och SCROLL 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) || ((index + i) == SCROLL_LOCK_LED_INDEX && host_keyboard_led_state().scroll_lock)) {
/* Det här är för CAPS och 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)) {
/* Det här är för CAPS LOCK */ // if ((index + i) == CAPS_LOCK_LED_INDEX && host_keyboard_led_state().caps_lock) {
/* Det här är för NUM LOCK */ // if ((index + i) == NUM_LOCK_LED_INDEX && host_keyboard_led_state().num_lock) {
/* ANVÄND BARA EN AV OVANSTÅENDE */
rgb_matrix_set_color(index + i, 255, 255, 255); } else { rgb_matrix_set_color(index + i, r, g, b); } }}** Gå med i Discord och be om hjälp i QMK custom-builds-kanalen om du har problem med instruktionerna ovan! **