Hoppa till innehåll

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:

  1. Ladda ner och installera QMK MSYS härifrån.

Ö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/signalrgb
git submodule update --init --recursive
  1. Klistra in de två kommandona ovan i terminalfönstret (QMK_MSYS, bash etc.).
  2. 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.
  1. 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.

Mapp med QMK-plugin-exempel

  • 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;}
/* 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 ö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"; }
  1. 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; }
  1. 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"; }
  1. 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.

  1. 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:”
  1. Gå till Enheter-sidan i SignalRGB.

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

  1. 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.
  • 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! **