Firmware bouwen vanuit broncode
Als u wijzigingen wilt aanbrengen in de toetsindeling van een toetsenbord of ondersteuning wilt toevoegen voor nieuwe toetsenborden aan het SignalRGB QMK-protocol, moet u het bouwen vanuit broncode.
Stappen om vanuit broncode te bouwen:
- Download QMK MSYS hier en installeer het.

Open QMK MSYS en voer een git clone uit van uw benodigde QMK-fork/broncode. (Dit kan QMK Mainline of SonixQMK zijn).
Vervolgens wilt u de SignalRGB-protocolsubmodule toevoegen aan de fork-broncode waartegen u bouwt:
// 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- Plak de bovenstaande twee opdrachten in het terminalvenster (QMK_MSYS, bash, enz.).
- U moet een keymap.json toevoegen met de volgende inhoud in de map voor uw specifieke toetsenbordmerk:
{ "modules": [ "signalrgb" ]}OPMERKING: VERVANG KEYBOARD BRAND DOOR UW TOETSENBORDMERK, MODEL DOOR HET TOETSENBORDMODEL EN KM DOOR HET TYPE TOETSINDELING (default / via / keychron / enz.).
TYPEN TOETSINDELINGEN:
- default: Dit is de toetsindeling die u gebruikt als u niet compileert voor VIA
- via: Dit is de toetsindeling die u gebruikt als u compileert voor VIA (Probeer dit eerst — uw VIA-toetsindeling vindt u hier)

- Als de firmware niet compileert, doe dan mee aan de Discord en vraag om hulp in de QMK-kanalen.
Nu u uw firmware heeft gecompileerd, moet u deze flashen naar uw toetsenbord.
- U moet online flashinstructies zoeken voor uw specifieke toetsenbord, aangezien flashinstructies per toetsenbord verschillen.
- Na het flashen van uw toetsenbord moet u de onderstaande toetsenbordplugin aanpassen om SignalRGB met uw toetsenbord te laten werken.
- Na het downloaden van de bovenstaande toetsenbordplugin, opent u deze in een teksteditor.
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"}, ];}- Na het openen van de toetsenbordplugin krijgt u een scherm te zien dat vergelijkbaar is met het bovenstaande.
- U moet enkele van deze velden invullen, te beginnen met het veld Name.
- Het naamveld moet worden ingevuld met de naam van het toetsenbord waarvoor u firmware heeft ontwikkeld.
export function Name() { return "Massdrop CTRL QMK Keyboard"; }- Vervolgens moeten we de VendorId voor het toetsenbord invullen.
- Om de VendorId voor het toetsenbord te vinden, opent u SignalRGB.
- Klik vervolgens op het instellingstandarwiel linksonder.

Klik dan op Apparaatinformatie.

Zoek uw toetsenbord en noteer de VendorID en ProductID.


Vul nu de velden VendorId en ProductId in met deze waarden.
export function Name() { return "Massdrop CTRL QMK Keyboard"; }export function VendorId() { return 0x04d8; }export function ProductId() { return 0xEED2; }- Het volgende veld dat ingevuld moet worden, is het veld Publisher. In het veld Publisher kunt u uw naam, gebruikersnaam of alias invullen.
export function Name() { return "Massdrop CTRL QMK Keyboard"; }export function VendorId() { return 0x04d8; }export function ProductId() { return 0xEED2; }export function Publisher() { return "WhirlwindFX"; }- Nu zijn we klaar met het invullen van velden en gaan we over naar arrays.
Er zijn 3 arrays die moeten worden aangepast: vKeys, vKeynames en vKeyPositions

- De array vKeys koppelt elke toetsenbordtoets aan zijn positie binnen de RGB-data die naar het toetsenbord wordt gestuurd.
- De array vKeyNames vertelt ons welke toets overeenkomt met elke vKey en vKeyPosition.
- De array vKeyPositions vertelt SignalRGB waar elke toets op het toetsenbord positiegewijs staat.
- Wijzig eerst de array vKeyNames om uw toetsenbord weer te geven.
- Dit betekent dat u de vKeyNames moet herschikken zodat ze overeenkomen met uw toetsenbord.
- In ons geval moesten we toetsen verwijderen en de resterende opnieuw organiseren, omdat ons bord een TKL-bord is.

Werk vervolgens de array vKeyPositions bij op dezelfde manier als de array vKeyNames is bijgewerkt.

Werk tot slot de array vKeys bij zodat deze overeenkomt met de arrays vKeyNames en vKeysPositions.

- Sla nu uw pluginbestand op in %userprofile%/Documents/WhirlwindFX/plugins en start Signal opnieuw op.
- Uw toetsenbord zou moeten beginnen op te lichten en te reageren met SignalRGB.
Als het toetsenbord niet oplicht of niet correct reageert op SignalRGB:
Section titled “Als het toetsenbord niet oplicht of niet correct reageert op SignalRGB:”- Ga naar de apparatenpagina in SignalRGB.

- Ga vervolgens naar uw toetsenbord en klik op het instellingstandarwiel.

- Klik vervolgens op de schakelaar Console weergeven.

- Er zou een totaal LED-aantal van het apparaat in de console moeten staan. Vergelijk dat totale LED-aantal met het aantal LED’s dat u heeft toegewezen.
- In ons geval zijn er 119 LED’s in totaal.
Als het aantal LED’s overeenkomt met het aantal vKeys dat u heeft:
Section titled “Als het aantal LED’s overeenkomt met het aantal vKeys dat u heeft:”- Zorg ervoor dat het veld Size van uw plugin in elke richting 1 groter is dan uw hoogste LED-coördinaat:
- In ons geval is de verste LED op positie [17,6], dus ons veld Size moet [18,7] zijn.
export function Size() { return [18, 7]; }Als het aantal LED’s niet overeenkomt met het aantal vKeys dat u heeft:
Section titled “Als het aantal LED’s niet overeenkomt met het aantal vKeys dat u heeft:”- U moet vKeys, vKeyPositions en vKeyNames toevoegen om overeen te komen met het totale aantal LED’s.
- In ons geval had het apparaat 119 LED’s, dus moesten we 32 LED’s toevoegen voor de underglow van het toetsenbord.



- Als het aantal vKeys overeenkomt met het totale aantal LED’s en het apparaat correct is aangepast qua grootte, maar de LED’s zijn onjuist toegewezen:
- Word lid van de Discord en vraag om hulp in de QMK-kanalen.
Hoe u kunt voorkomen dat indicator-LED’s (CAPSLOCK, NUMLOCK, SCROLL-LOCK) knipperen wanneer SignalRGB en de toets actief zijn.
Section titled “Hoe u kunt voorkomen dat indicator-LED’s (CAPSLOCK, NUMLOCK, SCROLL-LOCK) knipperen wanneer SignalRGB en de toets actief zijn.”Dit is enigszins ingewikkeld omdat het voorafgaande kennis vereist van de indexwaarden voor uw indicatoren (CAPS, NUM, SCROLL). (Dit kan meestal worden gevonden in het apparaatsubtype ansi/iso of rechtstreeks in <keyboard_name.c> — zoek naar g_led_config en wijs de index visueel toe aan de toets die het vertegenwoordigt, of zodra uw SignalRGB-plugin werkt, kunt u de ID ervanaf halen en opnieuw compileren met deze aanpassing!)

Zodra u de bovenstaande waarde(n) kent, is een kleine aanpassing vereist in signalrgb.c of via.c, afhankelijk van uw firmwarebuild. Vervang CAPSLOCK_LED_INDEX, NUM_LOCK_LED_INDEX of SCROLL_LOCK_LED_INDEX door de indexwaarden voor uw toetsenbord.
Dus als CAPS_LOCK-index 61 is, wordt deze regel:
if ((index + i) == CAPS_LOCK_LED_INDEX && host_keyboard_led_state().caps_lock) {Deze regel:
if ((index + i) == 61 && hostkeyboard led_state().caps_lock) {Volledig codevoorbeeld volgt (Dit vervangt deze specifieke functie volledig: “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); } }}Word lid van de Discord en vraag om hulp in het QMK custom-builds kanaal als u problemen heeft met de bovenstaande instructies!