Lewati ke konten

Building Firmware From Source

Jika Anda ingin membuat perubahan pada keymap Keyboard atau menambahkan dukungan untuk keyboard baru ke Protokol QMK SignalRGB, Anda perlu membangunnya dari sumber.

Langkah-langkah untuk membangun dari sumber:

  1. Unduh QMK MSYS dari sini dan instal.

Buka QMK MSYS dan lakukan git clone dari fork / sumber QMK yang Anda butuhkan. (Ini bisa berupa QMK Mainline _atau SonixQMK).

Anda kemudian perlu menambahkan submodule Protokol SignalRGB ke sumber fork yang Anda bangun:

// 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. Tempel dua perintah di atas ke jendela terminal (QMK_MSYS, bash, dll).
  2. Anda perlu menambahkan keymap.json dengan konten berikut di direktori merek keyboard spesifik Anda:
{
"modules": [
"signalrgb"
]
}

CATATAN: GANTI KEYBOARD BRAND DENGAN MEREK KEYBOARD ANDA, MODEL DENGAN MODEL KEYBOARD, DAN GANTI KM DENGAN TIPE KEYMAP (default / via / keychron / dll).

TIPE KEYMAP:

  • default: Ini adalah keymap yang akan digunakan jika Anda tidak mengkompilasi untuk VIA
  • via: Ini adalah keymap yang digunakan jika Anda mengkompilasi untuk VIA (Anda harus mencoba ini terlebih dahulu - Anda dapat menemukan keymap via Anda di sini)

Sekarang setelah Anda mengkompilasi firmware, Anda perlu mem-flash-nya ke keyboard Anda.

  • Anda perlu mencari instruksi flashing untuk keyboard Anda secara online, karena instruksi flashing berbeda antara keyboard.
  1. Setelah mem-flash keyboard Anda, Anda perlu memodifikasi plugin keyboard di bawah ini agar SignalRGB berfungsi dengan keyboard Anda.

Folder dengan contoh plugin QMK

  • Setelah mengunduh plugin keyboard di atas, buka di editor teks.
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. Setelah membuka plugin keyboard, Anda akan disajikan dengan layar yang mirip dengan yang di atas.
  • Anda perlu mengisi beberapa field ini, dimulai dengan field Name.
  • Field name perlu diisi dengan nama keyboard yang Anda kembangkan firmware-nya.
export function Name() { return "Massdrop CTRL QMK Keyboard"; }
  1. Selanjutnya, kita perlu mengisi VendorId untuk keyboard.
  • Untuk menemukan VendorId keyboard, buka SignalRGB.
  • Kemudian klik roda gigi pengaturan di sudut kiri bawah.

Kemudian, klik Device Information.

Kemudian temukan keyboard Anda dan catat VendorID dan ProductID-nya.

Sekarang isi field VendorId dan ProductId dengan nilai-nilai ini.

export function Name() { return "Massdrop CTRL QMK Keyboard"; }
export function VendorId() { return 0x04d8; }
export function ProductId() { return 0xEED2; }
  1. Field berikutnya yang perlu diisi adalah field Publisher. Di field publisher, Anda dapat memasukkan nama, username, atau handle Anda.
export function Name() { return "Massdrop CTRL QMK Keyboard"; }
export function VendorId() { return 0x04d8; }
export function ProductId() { return 0xEED2; }
export function Publisher() { return "WhirlwindFX"; }
  1. Sekarang, kami selesai mengisi field, dan beralih ke array.

Ada 3 array yang perlu dimodifikasi: vKeys, vKeynames, dan vKeyPositions

  • Array vKeys memetakan setiap tombol keyboard ke posisinya dalam RGBData yang dikirim ke keyboard.
  • Array vKeyNames memberi tahu kami tombol mana yang sesuai dengan setiap vKey dan vKeyPosition.
  • Array vKeyPositions memberi tahu SignalRGB di mana setiap tombol pada keyboard berada dari segi posisi.
  • Pertama, ubah array vKeyNames untuk mencerminkan keyboard Anda.
  • Ini berarti Anda perlu mengatur ulang vKeyNames agar sesuai dengan keyboard Anda.
    • Dalam kasus kami, kami harus menghapus tombol dan mengatur ulang yang tersisa karena board kami adalah board TKL.

Kemudian perbarui array vKeyPositions dengan cara yang sama seperti array vKeyNames diperbarui.

Akhirnya, perbarui array vKeys agar sesuai dengan array vKeyNames dan vKeysPositions.

  1. Sekarang, simpan file plugin Anda ke %userprofile%/Documents/WhirlwindFX/plugins, kemudian restart Signal.
  • Keyboard Anda seharusnya mulai menyala dan bereaksi dengan SignalRGB.

Jika Keyboard Tidak Menyala atau Tidak Bereaksi dengan Benar terhadap SignalRGB:

Section titled “Jika Keyboard Tidak Menyala atau Tidak Bereaksi dengan Benar terhadap SignalRGB:”
  1. Pergi ke halaman Devices di SignalRGB.

  1. Selanjutnya, pergi ke keyboard Anda, kemudian klik pada roda gigi pengaturan.

  1. Kemudian, klik toggle Show Console.

  • Seharusnya ada Device Total LED Count di konsol. Bandingkan Device Total LED Count tersebut dengan jumlah LED yang telah Anda tetapkan.
    • Dalam kasus kami, ada 119 Total LED.

Jika Jumlah LED Cocok dengan Jumlah vKeys yang Anda Miliki:

Section titled “Jika Jumlah LED Cocok dengan Jumlah vKeys yang Anda Miliki:”
  • Pastikan bahwa field size plugin Anda lebih besar 1 di setiap arah dari Koordinat LED tertinggi Anda:
    • Dalam kasus kami, LED paling jauh ada di posisi [17,6], oleh karena itu field Size kami harus [18,7].
export function Size() { return [18, 7]; }

Jika Jumlah LED Tidak Cocok dengan Jumlah Vkeys yang Anda Miliki:

Section titled “Jika Jumlah LED Tidak Cocok dengan Jumlah Vkeys yang Anda Miliki:”
  • Anda perlu menambahkan vKeys, vKeyPositions, dan vKeyNames agar sesuai dengan jumlah Total LED.
    • Dalam kasus kami, perangkat memiliki 119 LED, jadi kami perlu menambahkan 32 LED untuk underglow keyboard.

  • Jika jumlah vKeys cocok dengan jumlah Total LED dan perangkat berukuran dengan benar, tetapi LED dipetakan dengan tidak benar:
  • Bergabunglah dengan discord dan minta bantuan di channel QMK.

Cara Memperbaiki LED Indikator Anda (CAPSLOCK, NUMLOCK, SCROLL-LOCK) yang Berkedip Ketika SignalRGB dan Tombol Aktif.

Section titled “Cara Memperbaiki LED Indikator Anda (CAPSLOCK, NUMLOCK, SCROLL-LOCK) yang Berkedip Ketika SignalRGB dan Tombol Aktif.”

Ini sedikit rumit karena memerlukan pengetahuan awal tentang nilai Index untuk indikator Anda (CAPS, NUM, SCROLL). (Ini biasanya dapat ditemukan dalam subtype perangkat ansi/iso atau langsung di <keyboard_name.c> cari g_led_config dan petakan index secara visual ke tombol yang diwakilinya, atau setelah plugin SignalRGB Anda berfungsi Anda dapat mendapatkan ID dari sana dan mengkompilasi ulang dengan modifikasi ini!)

Setelah mengetahui nilai di atas, diperlukan sedikit modifikasi pada signalrgb.c atau via.c tergantung pada build firmware Anda. Ganti CAPSLOCK_LED_INDEX_, NUM___LOCK_LED_INDEX, atau SCROLL_LOCK_LED_INDEX dengan nilai index untuk keyboard Anda.

Jadi jika Index CAPS_LOCK adalah 61 baris ini:

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

Menjadi baris ini:

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

Contoh kode lengkap berikut ini (Ini menggantikan fungsi spesifik ini sepenuhnya “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);
}
}
}

** Bergabunglah dengan discord dan minta bantuan di channel qmk-custom-builds jika Anda memiliki masalah dengan petunjuk di atas! **