Przejdź do głównej zawartości

Budowanie oprogramowania układowego ze źródeł

Jeśli chcesz wprowadzić zmiany w układzie klawiszy klawiatury lub dodać obsługę nowych klawiatur do protokołu SignalRGB QMK, musisz zbudować je ze źródeł.

Kroki do zbudowania ze źródeł:

  1. Pobierz QMK MSYS tutaj i zainstaluj.

Otwórz QMK MSYS i wykonaj git clone wymaganego forka/kodu źródłowego QMK. (Może to być QMK Mainline lub SonixQMK).

Następnie będziesz chciał dodać submoduł protokołu SignalRGB do kodu źródłowego forka, względem którego budujesz:

// 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/signalrgb
git submodule update --init --recursive
  1. Wklej powyższe dwa polecenia do okna terminala (QMK_MSYS, bash, itp.).
  2. Musisz dodać keymap.json z następującą zawartością w folderze dla swojej konkretnej marki klawiatury:
{
"modules": [
"signalrgb"
]
}

UWAGA: ZASTĄP KEYBOARD BRAND MARKĄ SWOJEJ KLAWIATURY, MODEL MODELEM KLAWIATURY I KM TYPEM UKŁADU KLAWISZY (default / via / keychron / itp.).

TYPY UKŁADÓW KLAWISZY:

  • default: To jest układ klawiszy, którego używasz, jeśli nie kompilujesz dla VIA
  • via: To jest układ klawiszy, którego używasz, jeśli kompilujesz dla VIA (Wypróbuj to najpierw — swój układ VIA znajdziesz tutaj)

  • Jeśli oprogramowanie układowe nie kompiluje się, dołącz do Discord i poproś o pomoc na kanałach QMK.

Teraz, gdy skompilowałeś swoje oprogramowanie układowe, musisz je sflashować na klawiaturę.

  • Musisz poszukać instrukcji flashowania online dla swojej konkretnej klawiatury, ponieważ instrukcje flashowania różnią się w zależności od klawiatury.
  1. Po sflashowaniu klawiatury musisz dostosować poniższą wtyczkę klawiatury, aby SignalRGB działał z twoją klawiaturą.

Folder z przykładowymi wtyczkami QMK

  • Po pobraniu powyższej wtyczki klawiatury otwórz ją w edytorze tekstu.
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. Po otwarciu wtyczki klawiatury zobaczysz ekran podobny do powyższego.
  • Musisz wypełnić niektóre z tych pól, zaczynając od pola Name.
  • Pole Name należy wypełnić nazwą klawiatury, dla której opracowałeś oprogramowanie układowe.
export function Name() { return "Massdrop CTRL QMK Keyboard"; }
  1. Następnie musimy wypełnić VendorId dla klawiatury.
  • Aby znaleźć VendorId dla klawiatury, otwórz SignalRGB.
  • Następnie kliknij koło zębate ustawień w lewym dolnym rogu.

Następnie kliknij Informacje o urządzeniu.

Znajdź swoją klawiaturę i zanotuj VendorID i ProductID.

Teraz wypełnij pola VendorId i ProductId tymi wartościami.

export function Name() { return "Massdrop CTRL QMK Keyboard"; }
export function VendorId() { return 0x04d8; }
export function ProductId() { return 0xEED2; }
  1. Następnym polem do wypełnienia jest pole Publisher. W polu Publisher możesz wpisać swoje imię, nazwę użytkownika lub 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. Teraz skończyliśmy wypełniać pola i przechodzimy do tablic.

Są 3 tablice do zmodyfikowania: vKeys, vKeynames i vKeyPositions

  • Tablica vKeys mapuje każdy klawisz klawiatury na jego pozycję w danych RGB wysyłanych do klawiatury.
  • Tablica vKeyNames mówi nam, który klawisz odpowiada każdemu vKey i vKeyPosition.
  • Tablica vKeyPositions mówi SignalRGB, gdzie pozycyjnie znajduje się każdy klawisz na klawiaturze.
  • Najpierw zmodyfikuj tablicę vKeyNames, aby odzwierciedlała twoją klawiaturę.
  • Oznacza to, że musisz przeorganizować vKeyNames, aby pasowały do twojej klawiatury.
    • W naszym przypadku musieliśmy usunąć klawisze i przeorganizować pozostałe, ponieważ nasza płytka to płytka TKL.

Następnie zaktualizuj tablicę vKeyPositions w taki sam sposób, w jaki zaktualizowano tablicę vKeyNames.

Na koniec zaktualizuj tablicę vKeys, aby pasowała do tablic vKeyNames i vKeysPositions.

  1. Teraz zapisz plik wtyczki w %userprofile%/Documents/WhirlwindFX/plugins i uruchom ponownie Signal.
  • Twoja klawiatura powinna zacząć świecić i reagować z SignalRGB.

Jeśli klawiatura nie świeci lub nie reaguje poprawnie z SignalRGB:

Dział zatytułowany „Jeśli klawiatura nie świeci lub nie reaguje poprawnie z SignalRGB:”
  1. Przejdź do strony urządzeń w SignalRGB.

  1. Następnie przejdź do swojej klawiatury i kliknij koło zębate ustawień.

  1. Następnie kliknij przełącznik Pokaż konsolę.

  • W konsoli powinna być widoczna całkowita liczba LED urządzenia. Porównaj tę całkowitą liczbę LED z liczbą LED, które przypisałeś.
    • W naszym przypadku łącznie jest 119 LED-ów.

Jeśli liczba LED-ów odpowiada liczbie posiadanych vKeys:

Dział zatytułowany „Jeśli liczba LED-ów odpowiada liczbie posiadanych vKeys:”
  • Upewnij się, że pole Size twojej wtyczki jest o 1 większe niż najwyższa współrzędna LED w każdym kierunku:
    • W naszym przypadku najdalsza LED jest na pozycji [17,6], więc nasze pole Size musi wynosić [18,7].
export function Size() { return [18, 7]; }

Jeśli liczba LED-ów nie odpowiada liczbie posiadanych vKeys:

Dział zatytułowany „Jeśli liczba LED-ów nie odpowiada liczbie posiadanych vKeys:”
  • Musisz dodać vKeys, vKeyPositions i vKeyNames, aby pasowały do całkowitej liczby LED-ów.
    • W naszym przypadku urządzenie miało 119 LED-ów, więc musieliśmy dodać 32 LED-y dla underglow klawiatury.

  • Jeśli liczba vKeys pasuje do całkowitej liczby LED-ów, a urządzenie ma prawidłowy rozmiar, ale LED-y są przypisane nieprawidłowo:
  • Dołącz do Discord i poproś o pomoc na kanałach QMK.

Jak zapobiec migotaniu LED-ów wskaźników (CAPSLOCK, NUMLOCK, SCROLL-LOCK) gdy SignalRGB i klawisz są aktywne.

Dział zatytułowany „Jak zapobiec migotaniu LED-ów wskaźników (CAPSLOCK, NUMLOCK, SCROLL-LOCK) gdy SignalRGB i klawisz są aktywne.”

Jest to nieco skomplikowane, ponieważ wymaga wcześniejszej wiedzy o wartościach indeksów dla twoich wskaźników (CAPS, NUM, SCROLL). (Zazwyczaj można to znaleźć w podtypie urządzenia ansi/iso lub bezpośrednio w <keyboard_name.c> — szukaj g_led_config i wizualnie mapuj indeks do klawisza, który reprezentuje, lub gdy wtyczka SignalRGB działa, możesz stamtąd pobrać ID i ponownie skompilować z tą poprawką!)

Po znalezieniu powyższych wartości wymagana jest mała poprawka w signalrgb.c lub via.c, w zależności od buildu oprogramowania układowego. Zastąp CAPSLOCK_LED_INDEX, NUM_LOCK_LED_INDEX lub SCROLL_LOCK_LED_INDEX wartościami indeksów dla swojej klawiatury.

Więc jeśli indeks CAPS_LOCK wynosi 61, ta linia:

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

Staje się tą linią:

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

Pełny przykład kodu poniżej (Zastępuje całkowicie tę konkretną funkcję: “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);
}
}
}

Dołącz do Discord i poproś o pomoc na kanale qmk custom-builds, jeśli masz problemy z powyższymi instrukcjami!