Membina Firmware dari Kod Sumber
Jika Anda ingin membuat perubahan pada pemetaan kekunci papan kekunci atau menambah sokongan untuk papan kekunci baharu dalam protokol QMK SignalRGB, Anda perlu membina firmware dari kod sumber.
Langkah-langkah untuk membina dari kod sumber:
- Muat turun dan pasang QMK MSYS dari sini.

Buka QMK MSYS dan lakukan git clone fork/kod sumber QMK yang Anda perlukan. (Ini boleh jadi QMK Mainline _atau SonixQMK.)
Anda kemudian perlu menambah submodul protokol SignalRGB ke kod sumber fork yang akan Anda kompil:
// cd ke fork sumber yang akan Anda kompil dalam terminal (QMK_MSYS, bash dll.)git submodule add https://github.com/SRGBmods/QMK_Community_Module modules/signalrgbgit submodule update --init --recursive- Tampalkan dua arahan di atas ke dalam tetingkap terminal (QMK_MSYS, bash dll.).
- Anda perlu mencipta keymap.json dengan kandungan berikut dalam direktori jenama papan kekunci tertentu:
{ "modules": [ "signalrgb" ]}NOTA: GANTIKAN “KEYBOARD BRAND” DENGAN JENAMA PAPAN KEKUNCI ANDA, “MODEL” DENGAN MODEL PAPAN KEKUNCI DAN “KM” DENGAN JENIS KEYMAP (default / via / keychron / dll.).
JENIS KEYMAP:
- default: Ini ialah keymap yang Anda gunakan apabila tidak mengkompil untuk VIA.
- via: Ini ialah keymap yang Anda gunakan apabila mengkompil untuk VIA. (Cuba ini dahulu — keymap VIA Anda boleh didapati di sini)

- Jika firmware tidak dapat dikompil, sertai Discord dan minta bantuan dalam saluran QMK.
Selepas mengkompil firmware, Anda perlu memflashnya ke papan kekunci Anda.
- Anda perlu mencari arahan flash dalam talian untuk papan kekunci Anda kerana arahan berbeza antara papan kekunci.
- Selepas memflash papan kekunci, Anda perlu menyesuaikan plugin papan kekunci di bawah supaya SignalRGB berfungsi dengan papan kekunci Anda.
Folder dengan contoh plugin QMK
- Selepas memuat turun plugin papan kekunci di atas, buka dalam 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;}/* globalshutdownColor:readonlyLightingMode:readonlyforcedColor: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"}, ];}- Selepas membuka plugin papan kekunci, Anda akan disambut dengan skrin yang serupa dengan di atas.
- Anda perlu mengisi beberapa medan ini, bermula dengan medan Name.
- Medan Name perlu diisi dengan nama papan kekunci yang Anda bangunkan firmware.
export function Name() { return "Massdrop CTRL QMK Keyboard"; }- Seterusnya, kita perlu mengisi VendorId untuk papan kekunci.
- Untuk mencari VendorId untuk papan kekunci, buka SignalRGB.
- Kemudian klik pada gear tetapan di sudut kiri bawah.

Kemudian klik pada “Maklumat Peranti”.

Kemudian cari papan kekunci Anda dan catat VendorID dan ProductID.


Kini isikan 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; }- Medan seterusnya yang perlu diisi ialah medan Publisher. Dalam medan Publisher, Anda boleh memasukkan nama, nama pengguna, 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"; }- Kini kita selesai mengisi medan dan beralih kepada array.
Terdapat 3 array yang perlu diubah: vKeys, vKeynames, dan vKeyPositions.

- Array vKeys memetakan setiap kekunci papan kekunci kepada kedudukannya dalam data RGB yang dihantar ke papan kekunci.
- Array vKeyNames memberitahu kami kekunci mana yang sepadan dengan setiap vKey dan vKeyPosition.
- Array vKeyPositions memberitahu SignalRGB di mana setiap kekunci berada pada papan kekunci dari segi kedudukan.
- Pertama, ubah array vKeyNames supaya mencerminkan papan kekunci Anda.
- Ini bermakna Anda perlu mengatur semula vKeyNames supaya sepadan dengan papan kekunci Anda.
- Dalam kes kami, kami perlu membuang kekunci dan menyusun semula kekunci yang tinggal kerana PCB kami ialah PCB TKL.

Kemudian kemas kini array vKeyPositions dengan cara yang sama seperti array vKeyNames dikemas kini.

Akhirnya, kemas kini array vKeys supaya sepadan dengan array vKeyNames dan vKeysPositions.

- Kini simpan fail plugin Anda dalam %userprofile%/Documents/WhirlwindFX/plugins dan mulakan semula Signal.
- Papan kekunci Anda sepatutnya kini menyala dan bertindak balas kepada SignalRGB.
Jika Papan Kekunci Tidak Menyala atau Tidak Bertindak Balas dengan Betul kepada SignalRGB:
Section titled “Jika Papan Kekunci Tidak Menyala atau Tidak Bertindak Balas dengan Betul kepada SignalRGB:”- Pergi ke halaman Peranti dalam SignalRGB.

- Kemudian navigasi ke papan kekunci Anda dan klik pada gear tetapan.

- Kemudian klik pada suis “Tunjukkan Konsol”.

- Konsol sepatutnya menunjukkan jumlah keseluruhan LED peranti. Bandingkan jumlah ini dengan bilangan LED yang telah Anda tugaskan.
- Dalam kes kami, terdapat 119 LED secara keseluruhan.
Jika Bilangan LED Sepadan dengan Bilangan vKeys:
Section titled “Jika Bilangan LED Sepadan dengan Bilangan vKeys:”- Pastikan medan Size plugin Anda lebih besar 1 dalam setiap arah berbanding koordinat LED tertinggi Anda:
- Dalam kes kami, LED paling jauh berada di kedudukan [17,6], jadi medan Size kami perlu [18,7].
export function Size() { return [18, 7]; }Jika Bilangan LED Tidak Sepadan dengan Bilangan vKeys:
Section titled “Jika Bilangan LED Tidak Sepadan dengan Bilangan vKeys:”- Anda perlu menambah vKeys, vKeyPositions, dan vKeyNames untuk menyamakan jumlah LED keseluruhan.
- Dalam kes kami, peranti mempunyai 119 LED, jadi kami perlu menambah 32 LED untuk underglow papan kekunci.



- Jika bilangan vKeys sepadan dengan jumlah LED keseluruhan dan peranti berdimensi betul, tetapi LED dipetakan dengan salah:
- Sertai Discord dan minta bantuan dalam saluran QMK.
Cara Membetulkan Kelipan LED Penunjuk (CAPSLOCK, NUMLOCK, SCROLL-LOCK) apabila SignalRGB dan Kekunci Aktif.
Section titled “Cara Membetulkan Kelipan LED Penunjuk (CAPSLOCK, NUMLOCK, SCROLL-LOCK) apabila SignalRGB dan Kekunci Aktif.”Ini agak rumit kerana memerlukan pengetahuan awal tentang nilai indeks penunjuk Anda (CAPS, NUM, SCROLL). (Ini biasanya terdapat dalam subkategori peranti ansi/iso atau terus dalam <keyboard_name.c> — cari g_led_config dan petakan indeks secara visual kepada kekunci yang sepadan. Sebagai alternatif, sebaik sahaja plugin SignalRGB Anda berfungsi, Anda boleh mendapatkan ID dari sana dan mengkompil semula dengan perubahan ini!)

Setelah Anda mengetahui nilai di atas, perubahan kecil pada signalrgb.c atau via.c diperlukan, bergantung pada binaan firmware Anda. Gantikan CAPSLOCK_LED_INDEX_, NUM___LOCK_LED_INDEX, atau SCROLL_LOCK_LED_INDEX dengan nilai indeks untuk papan kekunci Anda.
Jika indeks CAPS_LOCK ialah 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 kod lengkap (Ini menggantikan fungsi “led_streaming” tertentu ini sepenuhnya):
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); } }}** Sertai Discord dan minta bantuan dalam saluran QMK-Custom-Builds jika Anda menghadapi masalah dengan arahan di atas! **