Gå til indhold

Byg firmware fra kildekode

Hvis du ønsker at foretage ændringer i et tastaturets tastebindinger eller tilføje understøttelse af nye tastaturer i SignalRGB QMK-protokollen, skal du bygge firmwaren fra kildekode.

Trin til opbygning fra kildekode:

  1. Download og installer QMK MSYS herfra.

Åbn QMK MSYS og udfør et Git-clone af din nødvendige QMK-fork / kildekode. (Dette kan være QMK Mainline _eller SonixQMK.)

Du skal derefter tilføje SignalRGB-protokol-submodulet til den fork-kildekode du kompilerer imod:

// cd in deinen Quell-Fork, gegen den du kompilieren wirst, im Terminal (QMK_MSYS, bash usw.)
git submodule add https://github.com/SRGBmods/QMK_Community_Module modules/signalrgb
git submodule update --init --recursive
  1. Indsæt de to ovenstående kommandoer i terminalvinduet (QMK_MSYS, bash osv.).
  2. Du skal oprette en keymap.json med følgende indhold i den specifikke tastaturmærke-mappe:
{
"modules": [
"signalrgb"
]
}

BEMÆRK: ERSTAT “KEYBOARD BRAND” MED DIT TASTATURMÆRKE, “MODEL” MED TASTATURMODELLEN OG “KM” MED KEYMAP-TYPEN (default / via / keychron / osv.).

KEYMAP-TYPER:

  • default: Dette er den keymap du bruger, når du ikke kompilerer til VIA.
  • via: Dette er den keymap du bruger, når du kompilerer til VIA. (Prøv dette først – din VIA-keymap kan du finde her)

Når du har kompileret din firmware, skal du flashe den til dit tastatur.

  • Du skal søge online efter flash-instruktioner til dit tastatur, da instruktionerne varierer mellem tastaturer.
  1. Når du har flashet dit tastatur, skal du tilpasse tastaturpluginnet nedenfor, så SignalRGB fungerer med dit tastatur.

Mappe med eksempler på QMK-plugins

  • Når du har downloadet det ovenstående tastaturplugin, åbn det i en 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;}
/* global
shutdownColor:readonly
LightingMode:readonly
forcedColor: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"},
];
}
  1. Når du åbner tastaturpluginnet, vil du se en skærm svarende til den ovenfor.
  • Du skal udfylde nogle af disse felter, startende med Name-feltet.
  • Name-feltet skal udfyldes med navnet på det tastatur du har udviklet firmware til.
export function Name() { return "Massdrop CTRL QMK Keyboard"; }
  1. Dernæst skal vi indtaste VendorId for tastaturet.
  • For at finde VendorId for tastaturet, åbn SignalRGB.
  • Klik derefter på indstillings-tandhjulet i nederste venstre hjørne.

Klik derefter på “Enhedsoplysninger”.

Find derefter dit tastatur og notér VendorID og ProductID.

Indtast nu VendorId og ProductId med disse værdier.

export function Name() { return "Massdrop CTRL QMK Keyboard"; }
export function VendorId() { return 0x04d8; }
export function ProductId() { return 0xEED2; }
  1. Det næste felt der skal udfyldes er Publisher-feltet. I Publisher-feltet kan du indtaste dit navn, brugernavn eller kaldenavn.
export function Name() { return "Massdrop CTRL QMK Keyboard"; }
export function VendorId() { return 0x04d8; }
export function ProductId() { return 0xEED2; }
export function Publisher() { return "WhirlwindFX"; }
  1. Nu er vi færdige med at udfylde felterne og går videre til arrays.

Der er 3 arrays der skal ændres: vKeys, vKeynames og vKeyPositions.

  • vKeys-arrayet tilknytter hvert tastaturets tast til dens position i de RGB-data der sendes til tastaturet.
  • vKeyNames-arrayet fortæller os, hvilken tast der svarer til hver vKey og vKeyPosition.
  • vKeyPositions-arrayet fortæller SignalRGB, hvor hver tast er placeret positionsmæssigt på tastaturet.
  • Tilpas først vKeyNames-arrayet, så det afspejler dit tastatur.
  • Det betyder at du skal omorganisere vKeyNames, så de passer til dit tastatur.
    • I vores tilfælde skulle vi fjerne taster og omorganisere de resterende, da vores bundkort er et TKL-bundkort.

Opdater derefter vKeyPositions-arrayet på samme måde som vKeyNames-arrayet blev opdateret.

Opdater til sidst vKeys-arrayet, så det stemmer overens med vKeyNames- og vKeysPositions-arrays.

  1. Gem nu din plugin-fil i %userprofile%/Documents/WhirlwindFX/plugins og genstart Signal.
  • Dit tastatur skulle nu lyse op og reagere på SignalRGB.

Hvis tastaturet ikke lyser op eller ikke reagerer korrekt på SignalRGB:

Sektion kaldt “Hvis tastaturet ikke lyser op eller ikke reagerer korrekt på SignalRGB:”
  1. Gå til enhedssiden i SignalRGB.

  1. Naviger derefter til dit tastatur og klik på indstillings-tandhjulet.

  1. Klik derefter på kontakten “Vis konsol”.

  • I konsollen bør det samlede antal LED’er på enheden vises. Sammenlign dette antal med det antal LED’er du har tildelt.
    • I vores tilfælde er der 119 LED’er i alt.

Hvis antallet af LED’er svarer til antallet af vKeys:

Sektion kaldt “Hvis antallet af LED’er svarer til antallet af vKeys:”
  • Sørg for at Size-feltet i dit plugin i begge retninger er 1 større end din højeste LED-koordinat:
    • I vores tilfælde befinder den fjerneste LED sig ved position [17,6], så vores Size-felt skal være [18,7].
export function Size() { return [18, 7]; }

Hvis antallet af LED’er ikke svarer til antallet af vKeys:

Sektion kaldt “Hvis antallet af LED’er ikke svarer til antallet af vKeys:”
  • Du skal tilføje vKeys, vKeyPositions og vKeyNames for at matche det samlede antal LED’er.
    • I vores tilfælde havde enheden 119 LED’er, så vi skulle tilføje 32 LED’er til tastaturets underglow.

  • Hvis antallet af vKeys svarer til det samlede antal LED’er og enheden er korrekt dimensioneret, men LED’erne er forkert tilknyttet:
  • Tilmeld dig Discord og bed om hjælp i QMK-kanalerne.

Sådan løser du blinkning af indikator-LED’er (CAPSLOCK, NUMLOCK, SCROLL-LOCK), når SignalRGB og tasten er aktive.

Sektion kaldt “Sådan løser du blinkning af indikator-LED’er (CAPSLOCK, NUMLOCK, SCROLL-LOCK), når SignalRGB og tasten er aktive.”

Dette er lidt avanceret, da det kræver kendskab til indeksværdierne for dine indikatorer (CAPS, NUM, SCROLL). (Disse findes oftest i enhedens underkategori ansi/iso eller direkte i <keyboard_name.c> – søg efter g_led_config og tilknyt indekset visuelt til den tilsvarende tast. Alternativt kan du, når dit SignalRGB-plugin fungerer, hente ID’et derfra og rekompilere med denne ændring!)

Når du kender ovenstående værdier, kræves der en lille ændring i signalrgb.c eller via.c afhængigt af dit firmware-build. Erstat CAPSLOCK_LED_INDEX_, NUM___LOCK_LED_INDEX eller SCROLL_LOCK_LED_INDEX med indeksværdierne for dit tastatur.

Hvis CAPS_LOCK-indekset er 61, ændres denne linje:

if ((index + i) == CAPS_LOCK_LED_INDEX && host_keyboard_led_state().caps_lock) {

Til denne linje:

if ((index + i) == 61 && hostkeyboard led_state().caps_lock) {

Komplet kodeeksempel (Dette erstatter denne specifikke funktion “led_streaming” fuldstændigt):

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);
}
}
}

** Tilmeld dig Discord og bed om hjælp i QMK-Custom-Builds-kanalen, hvis du har problemer med ovenstående instruktioner! **