Zum Inhalt springen

Firmware aus dem Quellcode erstellen

Wenn du Änderungen an der Tastenbelegung einer Tastatur vornehmen oder Unterstützung für neue Tastaturen im SignalRGB QMK-Protokoll hinzufügen möchtest, musst du die Firmware aus dem Quellcode erstellen.

Schritte zum Erstellen aus dem Quellcode:

  1. Lade QMK MSYS von hier herunter und installiere es.

Öffne QMK MSYS und führe einen Git-Clone deines benötigten QMK-Forks / Quellcodes durch. (Dies kann QMK Mainline _oder SonixQMK sein.)

Du musst dann das SignalRGB-Protokoll-Submodul zum Fork-Quellcode hinzufügen, gegen den du kompilierst:

// 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. Füge die obigen zwei Befehle in das Terminal-Fenster (QMK_MSYS, bash usw.) ein.
  2. Du musst eine keymap.json mit folgendem Inhalt im spezifischen Tastaturmarken-Verzeichnis anlegen:
{
"modules": [
"signalrgb"
]
}

HINWEIS: ERSETZE “KEYBOARD BRAND” MIT DEINER TASTATURMARKE, “MODEL” MIT DEM TASTATURMODELL UND “KM” MIT DEM KEYMAP-TYP (default / via / keychron / usw.).

KEYMAP-TYPEN:

  • default: Dies ist die Keymap, die du verwendest, wenn du nicht für VIA kompilierst.
  • via: Dies ist die Keymap, die du verwendest, wenn du für VIA kompilierst. (Versuche dies zuerst – deine VIA-Keymap findest du hier)

  • Wenn die Firmware nicht kompiliert werden kann, tritt dem Discord bei und bitte um Hilfe in den QMK-Kanälen.

Nachdem du deine Firmware kompiliert hast, musst du sie auf deine Tastatur flashen.

  • Du musst online nach Flash-Anweisungen für deine Tastatur suchen, da sich die Anweisungen zwischen Tastaturen unterscheiden.
  1. Nachdem du deine Tastatur geflasht hast, musst du das Tastatur-Plugin unten anpassen, damit SignalRGB mit deiner Tastatur funktioniert.

Ordner mit Beispielen für QMK-Plugins

  • Nachdem du das obige Tastatur-Plugin heruntergeladen hast, öffne es in einem Texteditor.
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. Nach dem Öffnen des Tastatur-Plugins wirst du mit einem Bildschirm ähnlich dem obigen begrüßt.
  • Du musst einige dieser Felder ausfüllen, beginnend mit dem Name-Feld.
  • Das Name-Feld muss mit dem Namen der Tastatur ausgefüllt werden, für die du Firmware entwickelt hast.
export function Name() { return "Massdrop CTRL QMK Keyboard"; }
  1. Als nächstes müssen wir die VendorId für die Tastatur eintragen.
  • Um die VendorId für die Tastatur zu finden, öffne SignalRGB.
  • Klicke dann auf das Einstellungs-Zahnrad in der unteren linken Ecke.

Klicke dann auf “Geräteinformationen”.

Suche dann deine Tastatur und notiere die VendorID und ProductID.

Trage nun die VendorId und ProductId mit diesen Werten ein.

export function Name() { return "Massdrop CTRL QMK Keyboard"; }
export function VendorId() { return 0x04d8; }
export function ProductId() { return 0xEED2; }
  1. Das nächste Feld, das ausgefüllt werden muss, ist das Publisher-Feld. Im Publisher-Feld kannst du deinen Namen, Benutzernamen oder dein Handle eintragen.
export function Name() { return "Massdrop CTRL QMK Keyboard"; }
export function VendorId() { return 0x04d8; }
export function ProductId() { return 0xEED2; }
export function Publisher() { return "WhirlwindFX"; }
  1. Jetzt sind wir mit dem Ausfüllen der Felder fertig und gehen zu den Arrays über.

Es gibt 3 Arrays, die geändert werden müssen: vKeys, vKeynames und vKeyPositions.

  • Das vKeys-Array ordnet jede Tastaturtaste ihrer Position in den RGB-Daten zu, die an die Tastatur gesendet werden.
  • Das vKeyNames-Array teilt uns mit, welche Taste jedem vKey und jeder vKeyPosition entspricht.
  • Das vKeyPositions-Array teilt SignalRGB mit, wo sich jede Taste auf der Tastatur positionsmäßig befindet.
  • Ändere zunächst das vKeyNames-Array so, dass es deine Tastatur widerspiegelt.
  • Das bedeutet, dass du die vKeyNames so umorganisieren musst, dass sie zu deiner Tastatur passen.
    • In unserem Fall mussten wir Tasten entfernen und die verbleibenden neu anordnen, da unsere Platine eine TKL-Platine ist.

Aktualisiere dann das vKeyPositions-Array auf die gleiche Weise, wie das vKeyNames-Array aktualisiert wurde.

Aktualisiere schließlich das vKeys-Array so, dass es mit den vKeyNames- und vKeysPositions-Arrays übereinstimmt.

  1. Speichere nun deine Plugin-Datei in %userprofile%/Documents/WhirlwindFX/plugins und starte Signal neu.
  • Deine Tastatur sollte nun aufleuchten und auf SignalRGB reagieren.

Wenn die Tastatur nicht aufleuchtet oder nicht korrekt auf SignalRGB reagiert:

Abschnitt betitelt „Wenn die Tastatur nicht aufleuchtet oder nicht korrekt auf SignalRGB reagiert:“
  1. Gehe zur Geräte-Seite in SignalRGB.

  1. Navigiere dann zu deiner Tastatur und klicke auf das Einstellungs-Zahnrad.

  1. Klicke dann auf den Schalter “Konsole anzeigen”.

  • In der Konsole sollte eine Gesamtzahl der LEDs des Geräts angezeigt werden. Vergleiche diese Gesamtzahl mit der Anzahl der LEDs, die du zugewiesen hast.
    • In unserem Fall gibt es 119 LEDs insgesamt.

Wenn die Anzahl der LEDs mit der Anzahl der vKeys übereinstimmt:

Abschnitt betitelt „Wenn die Anzahl der LEDs mit der Anzahl der vKeys übereinstimmt:“
  • Stelle sicher, dass das Size-Feld deines Plugins in jede Richtung um 1 größer ist als deine höchste LED-Koordinate:
    • In unserem Fall befindet sich die am weitesten entfernte LED an Position [17,6], daher muss unser Size-Feld [18,7] sein.
export function Size() { return [18, 7]; }

Wenn die Anzahl der LEDs nicht mit der Anzahl der vKeys übereinstimmt:

Abschnitt betitelt „Wenn die Anzahl der LEDs nicht mit der Anzahl der vKeys übereinstimmt:“
  • Du musst vKeys, vKeyPositions und vKeyNames hinzufügen, um sie an die Gesamtzahl der LEDs anzupassen.
    • In unserem Fall hatte das Gerät 119 LEDs, daher mussten wir 32 LEDs für das Underglow der Tastatur hinzufügen.

  • Wenn die Anzahl der vKeys mit der Gesamtzahl der LEDs übereinstimmt und das Gerät korrekt dimensioniert ist, die LEDs aber falsch zugeordnet sind:
  • Tritt dem Discord bei und bitte um Hilfe in den QMK-Kanälen.

So behebst du das Blinken der Indikatoren-LEDs (CAPSLOCK, NUMLOCK, SCROLL-LOCK), wenn SignalRGB und die Taste aktiv sind.

Abschnitt betitelt „So behebst du das Blinken der Indikatoren-LEDs (CAPSLOCK, NUMLOCK, SCROLL-LOCK), wenn SignalRGB und die Taste aktiv sind.“

Dies ist etwas aufwendig, da es Vorkenntnisse der Index-Werte für deine Indikatoren (CAPS, NUM, SCROLL) erfordert. (Diese sind meist in der Geräte-Unterkategorie ansi/iso oder direkt in der <keyboard_name.c> zu finden – suche nach g_led_config und ordne den Index visuell der entsprechenden Taste zu. Alternativ kannst du, sobald dein SignalRGB-Plugin funktioniert, die ID von dort abrufen und mit dieser Änderung neu kompilieren!)

Sobald du die obigen Werte kennst, ist eine kleine Änderung an signalrgb.c oder via.c erforderlich, je nach deinem Firmware-Build. Ersetze CAPSLOCK_LED_INDEX_, NUM___LOCK_LED_INDEX oder SCROLL_LOCK_LED_INDEX durch die Index-Werte für deine Tastatur.

Wenn der CAPS_LOCK-Index 61 ist, wird aus dieser Zeile:

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

Diese Zeile:

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

Vollständiges Code-Beispiel (Dies ersetzt diese spezifische Funktion “led_streaming” vollständig):

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

** Tritt dem Discord bei und bitte um Hilfe im QMK-Custom-Builds-Kanal, wenn du Probleme mit den obigen Anweisungen hast! **