Skip to content

Kreiranje firmvera iz izvornog koda

Ako želite da napravite izmene u mapiranju tastera tastature ili da dodate podršku za nove tastature u SignalRGB QMK protokolu, morate kreirati firmver iz izvornog koda.

Koraci za kreiranje iz izvornog koda:

  1. Preuzmite i instalirajte QMK MSYS odavde.

Otvorite QMK MSYS i izvršite git clone vašeg potrebnog QMK fork-a / izvornog koda. (Ovo može biti QMK Mainline _ili SonixQMK.)

Zatim morate dodati SignalRGB protokol submodul u fork izvorni kod protiv kojeg kompajlirate:

// cd u vaš izvorni fork protiv kojeg kompajlirate u terminalu (QMK_MSYS, bash itd.)
git submodule add https://github.com/SRGBmods/QMK_Community_Module modules/signalrgb
git submodule update --init --recursive
  1. Nalepite gornje dve komande u prozor terminala (QMK_MSYS, bash itd.).
  2. Morate kreirati keymap.json sa sledećim sadržajem u specifičnom direktorijumu marke tastature:
{
"modules": [
"signalrgb"
]
}

NAPOMENA: ZAMENITE “KEYBOARD BRAND” SA BRENDOM VAŠE TASTATURE, “MODEL” SA MODELOM TASTATURE I “KM” SA TIPOM KEYMAPA (default / via / keychron / itd.).

TIPOVI KEYMAPA:

  • default: Ovo je keymap koji koristite kada ne kompajlirate za VIA.
  • via: Ovo je keymap koji koristite kada kompajlirate za VIA. (Pokušajte ovo najpre — vaš VIA keymap možete pronaći ovde)

Nakon kompajliranja firmvera, morate ga flešovati na tastaturu.

  • Morate online potražiti uputstvo za flešovanje za vašu tastaturu, jer se uputstva razlikuju između tastatura.
  1. Nakon flešovanja tastature, morate prilagoditi plugin za tastaturu ispod da bi SignalRGB radio sa vašom tastaturom.

Folder sa primerima QMK plugina

  • Nakon preuzimanja gorenavedenog plugina za tastaturu, otvorite ga u tekstualnom editoru.
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. Nakon otvaranja plugina za tastaturu, dočekaće vas ekran sličan gornjem.
  • Morate popuniti neka od ovih polja, počevši od polja Name.
  • Polje Name mora biti popunjeno nazivom tastature za koju ste razvili firmver.
export function Name() { return "Massdrop CTRL QMK Keyboard"; }
  1. Zatim moramo uneti VendorId za tastaturu.
  • Da biste pronašli VendorId za tastaturu, otvorite SignalRGB.
  • Zatim kliknite na zupčanik za podešavanja u donjem levom uglu.

Kliknite na “Informacije o uređaju”.

Pronađite tastaturu i zabeležite VendorID i ProductID.

Sada unesite VendorId i ProductId sa ovim vrednostima.

export function Name() { return "Massdrop CTRL QMK Keyboard"; }
export function VendorId() { return 0x04d8; }
export function ProductId() { return 0xEED2; }
  1. Sledeće polje koje treba popuniti je polje Publisher. U polje Publisher možete uneti svoje ime, korisničko ime ili nadimak.
export function Name() { return "Massdrop CTRL QMK Keyboard"; }
export function VendorId() { return 0x04d8; }
export function ProductId() { return 0xEED2; }
export function Publisher() { return "WhirlwindFX"; }
  1. Sada smo završili sa popunjavanjem polja i prelazimo na nizove.

Postoje 3 niza koje treba izmeniti: vKeys, vKeynames i vKeyPositions.

  • Niz vKeys mapira svaki taster tastature na njegovu poziciju u RGB podacima koji se šalju tastaturi.
  • Niz vKeyNames govori nam koji taster odgovara svakom vKey-u i vKeyPosition-u.
  • Niz vKeyPositions govori SignalRGBu gde se svaki taster pozicijski nalazi na tastaturi.
  • Najpre izmenite niz vKeyNames da odražava vašu tastaturu.
  • To znači da morate reorganizovati vKeyNames da odgovaraju vašoj tastaturi.
    • U našem slučaju morali smo ukloniti tastere i preurediti preostale, jer je naša pločica TKL pločica.

Zatim ažurirajte niz vKeyPositions na isti način kao što je ažuriran niz vKeyNames.

Na kraju ažurirajte niz vKeys da odgovara nizovima vKeyNames i vKeysPositions.

  1. Sada sačuvajte datoteku plugina u %userprofile%/Documents/WhirlwindFX/plugins i restartujte Signal.
  • Vaša tastatura treba sada da svetli i da reaguje na SignalRGB.

Ako tastatura ne svetli ili ne reaguje ispravno na SignalRGB:

Section titled “Ako tastatura ne svetli ili ne reaguje ispravno na SignalRGB:”
  1. Idite na stranicu Uređaji u SignalRGBu.

  1. Navigirajte do tastature i kliknite na zupčanik za podešavanja.

  1. Kliknite na prekidač “Prikaži konzolu”.

  • U konzoli treba da se prikaže ukupan broj LED dioda uređaja. Uporedite ovaj ukupan broj sa brojem LED dioda koje ste dodelili.
    • U našem slučaju postoji ukupno 119 LED dioda.
  • Uverite se da je polje Size vašeg plugina za jedan veće od vaše najviše LED koordinate u svakom pravcu:
    • U našem slučaju najudaljenija LED se nalazi na poziciji [17,6], pa naše polje Size mora biti [18,7].
export function Size() { return [18, 7]; }

Ako broj LED dioda ne odgovara broju vKeys:

Section titled “Ako broj LED dioda ne odgovara broju vKeys:”
  • Morate dodati vKeys, vKeyPositions i vKeyNames da se usklade sa ukupnim brojem LED dioda.
    • U našem slučaju uređaj je imao 119 LED dioda, pa smo morali dodati 32 LED diode za underglow tastature.

  • Ako broj vKeys odgovara ukupnom broju LED dioda i uređaj je ispravno dimenzionisan, ali su LED diode pogrešno mapirane:
  • Pridružite se Discord-u i zatražite pomoć u QMK kanalima.

Kako rešiti treperenje LED indikatora (CAPSLOCK, NUMLOCK, SCROLL-LOCK) kada su SignalRGB i taster aktivni.

Section titled “Kako rešiti treperenje LED indikatora (CAPSLOCK, NUMLOCK, SCROLL-LOCK) kada su SignalRGB i taster aktivni.”

Ovo je nešto zahtevnije, jer zahteva prethodno znanje o vrednostima indeksa za vaše indikatore (CAPS, NUM, SCROLL). (Ovi se obično nalaze u potkategoriji uređaja ansi/iso ili direktno u <keyboard_name.c> — potražite g_led_config i vizuelno povežite indeks sa odgovarajućim tasterom. Alternativno, kada vaš SignalRGB plugin funkcioniše, možete preuzeti ID odatle i ponovo kompajlirati sa ovom izmenom!)

Kada znate gorenavedene vrednosti, potrebna je mala izmena u signalrgb.c ili via.c, zavisno od vašeg build-a firmvera. Zamenite CAPSLOCK_LED_INDEX_, NUM___LOCK_LED_INDEX ili SCROLL_LOCK_LED_INDEX vrednostima indeksa za vašu tastaturu.

Ako je CAPS_LOCK indeks 61, ova linija:

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

postaje ova linija:

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

Kompletan primer koda (Ovo u potpunosti zamenjuje ovu specifičnu funkciju “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);
}
}
}

** Pridružite se Discord-u i zatražite pomoć u kanalu QMK-Custom-Builds ako imate problema sa gorenavedenim uputstvima! **